关于汇编:软件看门狗定时器过快地复位MPC875 CPU

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位)后,它会在最后一次计数器复位(最新的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 /(80MHz / 2048/65536)= 1.5秒之类的值是看门狗最大周期的正确值。