1. 我们使用了am3358-1Ghz的CPU,跑的是vxworks系统,使用定时器2作为主时钟产生定时器计数溢出中断,定时器采用自动加载的模式,每次应该是计数器(TCRR: timer counter register)计满后自动加载预加载寄存器里的值(TLDR: timer loader register),实际测试发现,当定时器设置定时时间为1ms时,TCRR经常会出现自动加载的初始值不等于TLDR的值,而是为一个随机值(该值介于0 ~ TLDR的值之间),这样会导致定时器定时不准,需要更长的时间(最长约171s)才能计满溢出产生中断。当定时器设置定时时间为10ms时,也出现这样的问题,但故障概率大大降低,当定时时间为100ms时,基本上比较难出现故障。
我们查询了vxworks里的定时器驱动代码,也咨询了风河公司的工程师,确认了驱动是将定时器配置为自动加载的模式(定时器控制寄存器TCLR的AR位为1),同时驱动没有再对定时器的计数寄存器进行赋值操作,因此定时器计数寄存器的值应该是在溢出中断后按照自动加载的模式由cpu自行加载为TLDR的值,现在这个加载的初值在故障时时一个随机值,导致时间基准不准,长时间不能进入定时器溢出中断,心跳会出现暂停,这样任务不能得到调度,从而出现卡死的故障。该故障会自动恢复,恢复了之后一切正常,正常后又出现故障,如此反复。
我们现在怀疑这是一个硬件问题, 因此,麻烦TI的工程师帮忙确认一下,TI的定时器2在内测是时候是否出现过这样的问题。
Yaoming Qin:
我暂时没有看到有这样的bug报告,请问您是否可以用starterware试试,这样可以更简单的重现调试问题
winds2001:
回复 Yaoming Qin:
目前正在用startware,请问ccs5.4里面如何生成.bin文件???
手册里有公式 定时器定时时间=(0xffffffff-TLDR+1)*晶振周期 * PS ,ps驱动里默认设置为1了,PS的取值范围为1~256, 现在驱动里面默认PS=1,我同事说是否是因为PS的值取得是极限值,是否要调整为中间值来测试?有用么?
我可以用linux环境下的uboot。bin直接改名为MLO,然后放到sd卡上加载启动,然后 将demo.bin通过串口加载运行吧?