软件看门狗定时器过快地复位MPC875 CPU

时间:2013-01-11 06:51:15

标签: assembly embedded hardware powerpc watchdog

我在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信号):然后它只能工作,直到我退出中断/步进模式,当我运行应用程序时重置发生在很短的时间内。

根据参考手册,定时器的工作方式如下:

MPC885 Software Watchdog Timer diargram

有一个递减计数器,当它达到零时,电路断言HRESET信号或引发系统复位中断。计数器是两个字节长,可选择预分频2048.它以系统时钟速率除以2048递减。因此预分频器启用时的预期超时和最大计数器值为1 / (80MHz / 2048) * (65535 * 2048),约为3435秒。预分频器禁用时应该约为1.7秒。实际值要小得多:预分频计数器约为0.5秒,预分频器关闭时实际值更小(甚至无法测量)。

根据图表,SWT仅依赖于核心时钟和SYPCR寄存器,这里是寄存器描述:

MPC885 System Protection Control Register - diagram MPC885 System Protection Control Register - fields descriptions

我设置值0xFFFFFF87(实际尝试了不同的选项),这意味着:

  • SWTC:0xFFFF(定时器计数,在将魔术序列写入SWSR寄存器时,最大值被加载到内部递减计数器(见图表))。
  • BMT:0XFF(总线监控定时器计数,最大值)
  • BME:1(总线监视器已启用,并且无法关闭该位,因为无论配置的值如何,它始终使用JTAG启用。)
  • SWF:0(即使JTAG断言FRZ信号,定时器也会计数)。
  • SWE:1(看门狗已启用)。
  • SWRI:1(配置为断言HRESET,切换到NMI没有帮助)。
  • SWP:1(SWTC预分频为2048)。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

你确定你的配方吗?看起来很奇怪。我希望1 /(80MHz / 2048/65536)= 1.5秒的值是看门狗最大周期的正确值。