项目场景:
使用TMS320C6748的startware的定时器例程(64位模式),设置低32位(LSB)与高32位(MSB)定时周期并触发中断。
问题描述:
设置64位模式的定时器一个计数周期内会进入两次中断,例如设置定时器时钟228MHz,LSB = 0x0D970100(1s),MSB = 1,会在1s先进入一次中断,然后18.84s再进入一次中断。
原因分析:
低32位(LSB)与高32位(MSB)各触发中断一次,当LSB定时计数器累加到0x0D970100(1s)触发中断一次,LSB+MSB定时计数器累加到0xFFFFFFFF+0x0D970100触发中断一次
定时器全局控制寄存器 (TGCR)中PLUSEN位置0,即使能向下兼容能力。定时器新特性不可用,而TI未对定时器的64位模式进行说明。
定时器的新特性有:
- 外部时钟/时间输入
- 周期重载
- 外部事件捕获模式
- 定时器计数寄存器读取复位模式
- 定时器计数寄存器读取复位模式
- 用于中断 /DMA 产生控制和状态的寄存器
解决方案:
设置 (TGCR)中PLUSEN位置:0,即修改宏定义TMR_CFG_64BIT_CLK_INT为:0x00000003u,另外修改TimerConfigure()底层函数如下图所示。