我在MPC875 cpu上使用软件看门狗定时器时遇到问题:
计时器非常快速地触发重置信号: 打开定时器并接收重置信号,我得到的时间不到一半! 虽然我在启用预分频时将倒计时值(SWTC)设置为最大值。
我是这样做的(JTAG脚本):
CF TAR 875
CF GRP 400F
INN
SR PLPRCRK 0x55CCAA33
SR PLPRCR 0x1A4D5000 ; Configure Phase-Lock Loop
SR SCCRK 0x55CCAA33
SR SCCR 0xF47F0002 ; Configure System Clock
SR SYPCR 0xFFFFFF87 ; Enable the Software Watchdog Timer
SR SWSR 0x556c ; Reset the timer
SR SWSR 0xaa39
SR SWSR 0x556c
SR SWSR 0xaa39
SR SWSR 0x556c
SR SWSR 0xaa39
SR SWSR 0x556c
SR SWSR 0xaa39
SR SWSR 0x556c
SR SWSR 0xaa39
SR SWSR 0x556c
SR SWSR 0xaa39
SR SWSR 0x556c
SR SWSR 0xaa39 ; The HRESET issued after few moments from this point
启用预分频(SYPCR中的SWP位)后,它会在最后一次计数器复位(最新的SR SWSR
命令)后大约半秒内置位HRESET信号。如果我禁用预分频器,甚至在第一次修改SWSR寄存器之前(非常短的时间),HRESET信号就会被置位。因此,似乎Timer在某种程度上响应了设置的变化,但它的时间是错误的。
系统时钟和锁相环应该配置正确,因为我们在已经建立并运行的应用程序(在VxWorks之上)获得了相同的配置,但关闭了看门狗定时器。
此外,我试图清除SYPCR寄存器中的SWF位以防止定时器计数,同时JTAG停止cpu(通过置位FRZ信号):然后它只能工作,直到我退出中断/步进模式,当我运行应用程序时重置发生在很短的时间内。
根据参考手册,定时器的工作方式如下:
有一个递减计数器,当它达到零时,电路断言HRESET信号或引发系统复位中断。计数器是两个字节长,可选择预分频2048.它以系统时钟速率除以2048递减。因此预分频器启用时的预期超时和最大计数器值为1 / (80MHz / 2048) * (65535 * 2048)
,约为3435秒。预分频器禁用时应该约为1.7秒。实际值要小得多:预分频计数器约为0.5秒,预分频器关闭时实际值更小(甚至无法测量)。
根据图表,SWT仅依赖于核心时钟和SYPCR寄存器,这里是寄存器描述:
我设置值0xFFFFFF87(实际尝试了不同的选项),这意味着:
有什么建议吗?
答案 0 :(得分:1)
你确定你的配方吗?看起来很奇怪。我希望1 /(80MHz / 2048/65536)= 1.5秒的值是看门狗最大周期的正确值。