其它中断嵌套也可以参考
抱歉工程样例无法上传。把代码段贴一下:
#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); }}