示例:配置一个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);