您好 ,我使用startware 的定时器例程,可以用串口收到数据。更改高32位的值,改变不了定时器的周期。周期一直都是低32位的FFFFFFFF定时的,高位的改变不起作用。对原始startware程序除了TMR_PERIOD_MSB32改变外,其他地方均没有变化。请问这是什么原因
#define STR_LEN (13)
#define TMR_PERIOD_LSB32 (0xFFFFFFFF)
#define TMR_PERIOD_MSB32 (0x00000001)
Tony Tang:
timer有两种模式:
user4637713:
回复 Tony Tang:
您好,starterware中的定时器是64位的,为查到底层了,里面的配置也确实为00
(
The timer is in 64-bit GP timer mode.
)
user4637713:
回复 Tony Tang:
好的谢谢唐工
user5849328:
回复 Tony Tang:
唐工好,64位定时器调试时发现高位能起作用,但是存在多次中断,例如设置25秒时会出现6.2秒和18.8秒循环出现中断的现象。查看了你发的帖子,产品线的意思是TI提供的StarterWare库不支持64位定时器的操作?具体是什么意思呢?我现在需要设定大量程高精度,可以实现吗?
Tony Tang:
回复 user5849328:
他是说Starterware软件没有支持与维护了,不是说芯片或starterware是否支持64bit timer的问题。还在进一步沟通中,我发现LSB改一改,有的值就没问题。
user5849328例如设置25秒时会出现6.2秒和18.8秒循环出现中断的现象。
你是说设成25S时,在中间会出现中断?
user5849328:
回复 Tony Tang:
是的,设置成25秒时会出现中断6.2+18.8正好是25秒,再设置更高的值出现中断更多,每18.8秒一次,例如设置40秒,会出现三次中断,2.4秒、18.8秒、18.8秒,三次中断。
Tony Tang:
回复 user5849328:
号外。找到问题点了。
把对TGCR的配置改成下面就没有问题了。
static void TimerSetUp64Bit(void){ /* Configuration of Timer */// TimerConfigure(SOC_TMR_2_REGS, TMR_CFG_64BIT_CLK_INT); TimerConfigure(SOC_TMR_2_REGS, 3);
/* Set the 64 bit timer period */ TimerPeriodSet(SOC_TMR_2_REGS, TMR_TIMER12, TMR_PERIOD_LSB32); TimerPeriodSet(SOC_TMR_2_REGS, TMR_TIMER34, TMR_PERIOD_MSB32);}
也就是new timer plus feature好像有点问题,那就先disable new timer feature吧。