示例:配置一个32bit定时器,频率1MHz,使能定时器溢出中断。
MCAL配置
GPT配置
GptChannelConfiguration下添加,如下配置:
如果不需要定时器溢出中断,则不勾选GptNotification。
其中GptChannelClkSrcRef 属性在GptClockReferencePoint中配置:
GptClockReference关联的是MCU中配置的GPT时钟。
代码
初始化
Gpt_Init(&GptConf_GptChannelConfigSet_GptChannelConfigSet_0);
Gpt_StartTimer(GptConf_GptChannelConfiguration_Timer_32bit_1MHz, 1000 - 1); // Start timer with 1 ms interval
Gpt_EnableNotification(GptConf_GptChannelConfiguration_Timer_32bit_1MHz);
使能中断
使用SDL库函数配置:
#define MCAL_PROJECT_TIMER_32BIT_1MHZ_GPT_IRQ_NUMBER 350
#define MCAL_PROJECT_TIMER_32BIT_1MHZ_GPT_IRQ_HANDLER GPT_Isr_Vector_350_Cat2
Cy_SysInt_SetSystemIrqVector((cy_en_intr_t)MCAL_PROJECT_TIMER_32BIT_1MHZ_GPT_IRQ_NUMBER, MCAL_PROJECT_TIMER_32BIT_1MHZ_GPT_IRQ_HANDLER);
Cy_SysInt_InitIRQ( &(cy_stc_sysint_irq_t) { .sysIntSrc = (cy_en_intr_t)MCAL_PROJECT_TIMER_32BIT_1MHZ_GPT_IRQ_NUMBER, .intIdx = CPUIntIdx2_IRQn, .isEnabled = true } );
NVIC_EnableIRQ(CPUIntIdx2_IRQn);
如果使用了NeuSAR,则使用其配置工具来配置。
定义回调函数
void Timer_32bit_1MHz_Notification(void)
{
__ASM("nop");
}
读取计数值
UINT32 u32CurrTimerValue = 0u;
u32CurrTimerValue = Gpt_GetTimeElapsed(GptConf_GptChannelConfiguration_Timer_32bit_1MHz);