ICU脉冲计数可使用GPIOTCPWM作为外部资源。

脉冲计数模式没有中断回调,但是也必须要开启硬件Capture中断才能实现计数。

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_IRQn, .isEnabled = true } );
NVIC_EnableIRQ(CPUIntIdx3_IRQn);

代码

初始化:

//初始化ICU模块
Icu_Init(&IcuConf_IcuConfigSet_IcuConfigSet_0);

//脉冲计数模式,计数模式无需调用Icu_EnableNotification,因为该模式下没有中断回调
Icu_EnableEdgeCount(IcuConf_IcuChannel_IcuChannel_0);

循环读取计数值:

uint16_t edgeNumbers = Icu_GetEdgeNumbers(IcuConf_IcuChannel_IcuChannel_0);