程序运行过程周期性的复位WDCNTR。向WDKEY 写“0x55+0xAA”
时间: 2023-12-28 20:04:01 浏览: 117
WDCNTR是看门狗定时器的控制寄存器,用于控制看门狗定时器的计数和启停。如果看门狗定时器的计数达到设定的阈值,系统会自动复位。为了防止系统因为程序出错而卡死,通常会在程序中定期喂狗,使看门狗定时器的计数得以继续,以避免系统复位。
向WDKEY写"0x55+0xAA"是一种特殊的操作,它可以用来启动看门狗定时器并清零计数器。具体来说,向WDKEY写入0x55,然后立即向WDKEY写入0xAA,就可以启动看门狗定时器,并清零计数器。这个操作必须在一定时间内完成,否则看门狗会认为系统出现问题而强制复位。
因此,在程序运行过程中,周期性地向WDKEY写入0x55+0xAA,可以避免系统因为程序出错而卡死,保证系统的可靠性和稳定性。
相关问题
请你基于DSP28335写出一套看门狗程序,并解释配置看门狗 怎么设置喂狗时间 程序跑飞的复位时间
好的,以下是基于DSP28335的看门狗程序:
```c
#include "F2837xD_Device.h"
// 定义看门狗喂狗时间,单位为微秒
#define WDT_FEED_TIME 1000000
void InitWatchdog(void)
{
// 先禁止看门狗
DisableDog();
// 配置看门狗喂狗时间,这里配置为 1 秒
EALLOW;
WdRegs.WDCR.all = 0x28;
WdRegs.WDKEY.all = 0x55;
WdRegs.WDKEY.all = 0xAA;
EDIS;
// 使能看门狗
EnableDog();
}
void FeedWatchdog(void)
{
// 喂狗
EALLOW;
WdRegs.WDKEY.all = 0x55;
WdRegs.WDKEY.all = 0xAA;
EDIS;
}
void main(void)
{
// 初始化看门狗
InitWatchdog();
while (1)
{
// 喂狗
FeedWatchdog();
// 这里写程序的主要逻辑
// 如果程序跑飞,看门狗会在 WDT_FEED_TIME 后复位系统
// 所以需要在程序中定时喂狗,保证看门狗不会复位系统
DELAY_US(WDT_FEED_TIME);
}
}
```
上述程序中,我们使用了 DSP28335 的看门狗模块,通过配置看门狗的喂狗时间来实现看门狗的功能。具体来说,程序中的 `InitWatchdog` 函数用来初始化看门狗,包括禁止看门狗、配置喂狗时间和使能看门狗;`FeedWatchdog` 函数用来喂狗;`main` 函数中,我们在程序的主逻辑中加入了定时喂狗的代码,保证看门狗不会复位系统。如果程序跑飞,看门狗会在 `WDT_FEED_TIME` 后复位系统。
至于配置看门狗的喂狗时间,我们可以通过修改 `WdRegs.WDCR.all` 的值来实现。该寄存器的位定义如下:
| 位 | 描述 |
| ------ | ----------------------------------- |
| 0-12 | 看门狗喂狗时间,单位为时钟周期 |
| 13 | 禁止看门狗复位 |
| 14 | 看门狗复位系统时是否清除 RAM |
| 15 | 看门狗复位系统时是否清除 Watchdog |
| 16-31 | 保留 |
其中,位 0-12 用来配置看门狗喂狗时间,单位为时钟周期。时钟周期可以通过 `SysCtrlRegs.LOSPCP.all` 的值来计算,具体公式为:
$$\text{时钟周期}=\frac{1}{\text{LSPCLK}}=\frac{1}{\text{SYSCLK}/(\text{LOSCLKDIV}+1)}$$
其中,`SYSCLK` 为系统时钟频率,`LOSCLKDIV` 为 LSPCLK 的分频系数,默认为 2。例如,如果 `SYSCLK` 为 150 MHz,`LOSCLKDIV` 为 2,则时钟周期为 13.33 ns。因此,如果要设置喂狗时间为 1 秒,需要将 `WdRegs.WDCR.all` 的值设置为 75000000(即 1 秒 / 13.33 ns)。
至于程序跑飞的复位时间,则由看门狗喂狗时间和程序中喂狗的时间共同决定。例如,在上述程序中,如果看门狗喂狗时间为 1 秒,程序中每隔 1 秒喂狗一次,那么如果程序跑飞,看门狗就会在 1 秒后复位系统。
dsp28335 wdkey寄存器使用
DSP28335是德州仪器(Texas Instruments)推出的一款32位定点数字信号处理器(DSP),广泛应用于工业控制、电机控制等领域。WDKEY寄存器是该处理器的一个看门狗定时器(Watchdog)相关寄存器,用于防止系统由于软件错误而进入死循环或者不可预知的状态。
在DSP28335中,看门狗定时器是一个独立的硬件单元,用于检测程序运行是否正常。如果程序运行正常,需要定时“喂狗”(即向WDKEY寄存器写入特定的值),以防止看门狗复位系统。如果程序运行出错或者因为某些原因未能及时喂狗,看门狗定时器会超时并复位系统,从而避免系统长时间运行在错误状态。
WDKEY寄存器用于向看门狗定时器写入特定的值(通常是0x55),以“喂狗”操作。具体使用方法如下:
1. 向WDKEY寄存器写入0x55,即WDKEY = 0x55; 这个操作是告诉看门狗定时器,系统正在正常运行,不需要复位。
2. 程序中的喂狗操作需要在关键位置多次执行,例如在一个循环的开始或在一个重要的程序分支中。
需要注意的是,如果看门狗定时器没有被正确喂狗,那么一旦超时,它将强制复位整个系统,这可能会造成数据丢失或其他严重后果。
阅读全文