Software Watchdog Timer resets MPC875 CPU too fast
我在MPC875 CPU上使用软件看门狗定时器时遇到问题:
计时器非常快速地触发复位信号:
打开定时器并接收重置信号,我得到的时间不到一半!
虽然我在启用预定标的情况下将倒计时值(SWTC)设置为最大值。
我是这样做的(JTAG脚本):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | 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位)后,它会在最后一次计数器复位(最新的
系统时钟和锁相环应该正确配置,因为我们在已经建立和运行的应用程序(在VxWorks之上)获得相同的配置,但关闭了看门狗定时器。
我还试图清除SYPCR寄存器中的SWF位以防止定时器计数,同时JTAG停止cpu(通过断言FRZ信号):然后它才工作,直到我退出中断/步进模式,当我运行一个应用程序时,复位发生在一个很短的时间。
根据参考手册,定时器的工作方式如下:
有一个递减计数器,当它达到零时,电路断言HRESET信号或引发系统复位中断。计数器是两个字节长,可选择预分频2048.它以系统时钟的速率除以2048递减。因此预分频器启用的预期超时和最大计数器值
根据图表,SWT仅依赖于核心时钟和SYPCR寄存器,这里是寄存器描述:
我设置值0xFFFFFF87(实际上尝试了不同的选项),这意味着:
- SWTC:0xFFFF(定时器计数,在将魔术序列写入SWSR寄存器时,最大值被加载到内部递减计数器(见图表))。
- BMT:0XFF(总线监控定时器计数,最大值)
- BME:1(总线监视器使能,并且无法关闭该位,因为无论配置的值如何,它始终使用JTAG启用)。
- SWF:0(即使JTAG置位FRZ信号,定时器也会计数)。
- SWE:1(启用看门狗)。
- SWRI:1(配置为断言HRESET,切换到NMI没有帮助)。
- SWP:1(SWTC预分频为2048)。
有什么建议?
你确定你的配方吗? 看起来很奇怪。 我希望1 /(80MHz / 2048/65536)= 1.5秒之类的值是看门狗最大周期的正确值。