在RZT2M中实现 GPT中断嵌套的样例

其它中断嵌套也可以参考

  • 抱歉工程样例无法上传。把代码段贴一下:

    #include "hal_data.h"

    void R_BSP_WarmStart(bsp_warm_start_event_t event) BSP_PLACE_IN_SECTION(".warm_start");

    // extern bsp_leds_t g_bsp_leds;

    void DI_RZT2(void)
    {
    __asm volatile ("cpsid i");
    __asm volatile ("isb");
    }

    void EI_RZT2(void)
    {
    __asm volatile ("cpsie i");
    __asm volatile ("isb");
    }
    void R_GPT1_Create(void)
    {
    R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_LPC_RESET);
    R_BSP_MODULE_START(FSP_IP_GPT, 1);
    R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_LPC_RESET);
    R_GPT1->GTCR_b.CST = 0;

    //R_GPT2->GTINTAD_b.GTINTPR = 1;
    R_GPT1->GTCR_b.TPCS = 0; // Core Clock/1 = 400M
    R_GPT1->GTCNT = 0;
    R_GPT1->GTPR = 25000; // 62.5

    R_GPT1->GTINTAD_b.GTINTPR = 1;

    R_BSP_IrqDisable(VECTOR_NUMBER_GPT1_OVF);
    R_BSP_IrqCfg(VECTOR_NUMBER_GPT1_OVF, 2, (NULL));
    R_BSP_IrqEnable(VECTOR_NUMBER_GPT1_OVF);

    R_GPT1->GTCR_b.CST = 1;
    }

    void R_GPT5_Create(void)
    {
    R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_LPC_RESET);
    R_BSP_MODULE_START(FSP_IP_GPT, 5);
    R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_LPC_RESET);
    R_GPT5->GTCR_b.CST = 0;

    //R_GPT5->GTINTAD_b.GTINTPR = 1;
    R_GPT5->GTCR_b.TPCS = 0; // Core Clock/1 = 400M
    R_GPT5->GTCNT = 0;
    R_GPT5->GTPR = 25000; // 62.5

    R_GPT5->GTINTAD_b.GTINTPR = 1;

    R_BSP_IrqDisable(VECTOR_NUMBER_GPT5_OVF);
    R_BSP_IrqCfg(VECTOR_NUMBER_GPT5_OVF, 3, (NULL));
    R_BSP_IrqEnable(VECTOR_NUMBER_GPT5_OVF);

    R_GPT5->GTCR_b.CST = 1;

    }


    void gpt5_ovf_isr(void)
    {
    EI_RZT2();
    // 16K 62.5us Ö´ÐÐÒ»´Î
    static uint16_t gpt5_ovf_cnt = 0;

    while(1)
    {
    gpt5_ovf_cnt++;
    R_BSP_SoftwareDelay(5, BSP_DELAY_UNITS_MILLISECONDS);
    }

    DI_RZT2();
    }


    void gpt1_ovf_isr(void)
    {
    //EI_RZT2();
    static uint16_t gpt1_ovf_cnt = 16000;

    if (++gpt1_ovf_cnt >= 16000)
    {
    // gpt1_ovf_cnt = 0;
    // gpt1_test_cnt++;
    // Led4_Set(gpt1_test_cnt&0x01);
    R_BSP_SoftwareDelay(5, BSP_DELAY_UNITS_MICROSECONDS);
    }
    //DI_RZT2();
    }

    /*******************************************************************************************************************//**
    * @brief Blinky example application
    *
    * Blinks all leds at a rate of 1 second using the software delay function provided by the BSP.
    *
    **********************************************************************************************************************/
    void hal_entry (void)
    {
    /* Define the units to be used with the software delay function */
    const bsp_delay_units_t bsp_delay_units = BSP_DELAY_UNITS_MILLISECONDS;

    /* Set the blink frequency (must be <= bsp_delay_units */
    const uint32_t freq_in_hz = 2;

    /* Calculate the delay in terms of bsp_delay_units */
    const uint32_t delay = bsp_delay_units / freq_in_hz;

    DI_RZT2();
    R_GPT5_Create();
    R_GPT1_Create();
    EI_RZT2();

    while (1)
    {
    /* This code uses BSP IO functions to show how it is used.*/
    // R_BSP_PinAccessEnable();

    /* Protect PFS registers */
    // R_BSP_PinAccessDisable();


    R_BSP_SoftwareDelay(delay, bsp_delay_units);
    }
    }

    /*******************************************************************************************************************//**
    * This function is called at various points during the startup process. This implementation uses the event that is
    * called right before main() to set up the pins.
    *
    * @param[in] event Where at in the start up process the code is currently at
    **********************************************************************************************************************/
    void R_BSP_WarmStart (bsp_warm_start_event_t event)
    {
    if (BSP_WARM_START_POST_C == event)
    {
    /* C runtime environment and system clocks are setup. */

    /* Configure pins. */
    R_IOPORT_Open(&g_ioport_ctrl, &g_bsp_pin_cfg);
    }
    }