【发布时间】:2013-01-11 06:51:15
【问题描述】:
我在 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 只依赖于 Core Clock 和 SYPCR 寄存器,这里是寄存器描述:
我将值设置为0xFFFFFF87(实际上尝试了不同的选项),这意味着:
- SWTC: 0xFFFF(定时器计数,在将魔术序列写入 SWSR 寄存器时,最大值被加载到内部递减计数器(见图)。
- BMT: 0XFF(总线监控定时器计数,最大值)
- BME:1(总线监视器已启用,并且没有必要关闭该位,因为无论配置值如何,它始终使用 JTAG 启用)。
- SWF:0(即使 JTAG 置位 FRZ 信号,定时器也会计数)。
- SWE:1(已启用看门狗)。
- SWRI:1(配置为断言 HRESET,切换到 NMI 没有帮助)。
- SWP:1(SWTC 预分频系数为 2048)。
有什么建议吗?
【问题讨论】:
-
"..非常快:我不到半秒..." 这很矛盾,半秒在嵌入式系统中并不快,它非常慢。对我来说,这听起来像是典型的看门狗超时。我不知道你的 CPU 但肯定可以配置看门狗时间吗?
-
伦丁,感谢您的关注。我编辑了帖子并添加了预期值的描述。对于这个特定的 cpu,超时真的太快了。
-
看来第一步是验证您的系统时钟和 PLL 是否正常。你用示波器测量过时钟吗?
-
不,在不久的将来(远程设置),我没有,也没有这种能力。但是有一个基于 VxWorks 的工作应用程序在此板上运行,具有这种系统时钟配置。有一堆计时器、时钟、串行控制台和其他基于时间的东西——如果时钟有问题,它们根本就无法工作,但其他一切都很好,所以我想时钟配置正确。有理由怀疑吗?
-
您能否概述一下工作设置和失败设置之间的区别?这可能有助于缩小范围。根据我在这里收集到的信息,您正试图使用此脚本通过 JTAG 将处理器从复位状态中拉出来,但在您走得太远之前它会复位?
标签: assembly embedded hardware powerpc watchdog