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在内测是时候是否出现过这样的问题。