外部中断使用ICU的边沿检测(ICU_MODE_SIGNAL_EDGE_DETECT
)模式实现,可使用GPIO或TCPWM作为外部资源。
MCAL 配置
使用GPIO实现
port配置:配置为GPIO数字输入模式即可。
Icu配置:
使用TCPWM实现
port配置:
Icu配置:
配置中断
对于有Os的系统是在Os中配置,本篇不介绍。
对于没有Os的系统,可使用Cypress官方提供的SDL库实现,以下是实现代码:
#define MCAL_PROJECT_CB_BUTTON_ICU_IRQ_NUMBER 277
#define MCAL_PROJECT_CB_BUTTON_ICU_IRQ_HANDLER Icu_Isr_Vector_277_Cat2
//开中断
Cy_SysInt_SetSystemIrqVector((cy_en_intr_t)MCAL_PROJECT_CB_BUTTON_ICU_IRQ_NUMBER, MCAL_PROJECT_CB_BUTTON_ICU_IRQ_HANDLER);
Cy_SysInt_InitIRQ( &(cy_stc_sysint_irq_t) { .sysIntSrc = (cy_en_intr_t)MCAL_PROJECT_CB_BUTTON_ICU_IRQ_NUMBER, .intIdx = CPUIntIdx3_IRQ
代码
初始化:
//边沿检测模式
Icu_EnableEdgeDetection(IcuConf_IcuChannel_IcuChannel_0);
Icu_EnableNotification(IcuConf_IcuChannel_IcuChannel_0);//必须使能才能触发边沿检测回调IcuSignalNotification
定义边沿检测回调通知:
void IcuSignalNotification_0()
{
// 中断处理
}
如此,每检测到一个边沿都将触发一次中断。