问题说明
在调试iMXRT1176时,Debug时定时器工作一切正常,只要暂停调试,在运行后GPT定时器要等很久才会触发中断,之后又工作正常。再暂停又不正常,以此类推。。。
原因分析
经常调试驱动的朋友可能这时已经猜到造成当前问题的原因了,是因为在Debug暂停后定时器计数还在增加,超过了设定的值,所以后面还会触发一次中断,之后不再触发中断,之所以过很长时间又触发中断是因为计数溢出,又回到了设定的计数值,所以又可以正常触发中断。
解决方案
查阅芯片的参考手册,GPT模块有寄存器设置,可以在Debug模式下关闭GPT模块计数的运行,即Debug暂停,GPT计数暂停,Debug恢复运行,GPT计数继续运行。
以GPT1为例代码实现:
#define GPT0_BASEADDR ((uint32)(0x400EC000UL))
#define GPT_CR_DBGEN_BIT 2
uint32 * GPT0_BASEADDR_PTR = (uint32 *)GPT0_BASEADDR;
Gpt_Init(&Gpt_Config_VS_0);
/* Close GPT cnt in debug mode. */
*GPT0_BASEADDR_PTR &= ~(1 << GPT_CR_DBGEN_BIT);
这样GPT定时器Debug模式下关闭GPT模块计数的运行。