使能看门狗或屏蔽看门狗模块?看门狗时钟倍率?WDCR
时间: 2023-09-05 21:07:31 浏览: 106
我了解您的问题。看门狗是一种硬件计时器,用于防止系统在运行期间出现故障而导致死机。如果系统出现故障,看门狗计时器将在设定的时间内未收到清除信号时,会自动重启系统。在某些情况下,您可以通过使能或禁用看门狗模块来控制看门狗的行为。
在一些嵌入式系统中,看门狗时钟倍率可以设置。看门狗时钟倍率指的是看门狗计时器时钟频率与系统时钟频率的比值。通过设置看门狗时钟倍率,可以调整看门狗计时器超时时间。
WDCR是看门狗控制寄存器,用于控制看门狗的行为。WDCR包含了使能看门狗、设置看门狗时钟倍率、清除看门狗计数器等控制位。通过修改WDCR的值,可以控制看门狗的行为。
相关问题
请你基于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 秒后复位系统。
F28335看门狗的喂狗周期
F28335看门狗的喂狗周期可以通过设置WDCR寄存器来实现。WDCR寄存器的位字段包括WDCHK、WDDIS、WDFLAG和WDPS。其中,WDCHK是一个8位的校验和值,用于防止误写寄存器;WDDIS用于禁用看门狗;WDFLAG用于指示看门狗定时器已经到达了喂狗周期;WDPS用于设置看门狗定时器的分频系数,从而设置喂狗周期。
具体来说,喂狗周期可以通过以下公式计算:
喂狗周期 = 2^(WDPS + 1) / (系统时钟频率)
其中,系统时钟频率可以通过设置PLL和SYSCLKDIV寄存器来调整。一般来说,喂狗周期应该设置为系统运行稳定的最大时间,以确保系统不会因为某些异常情况而崩溃。
阅读全文