DSP28335 看门狗初始化函数

DSP28335 看门狗初始化函数
//###########################################################################
// 看门狗初始化程序,入口参数为系统定时复位时间
//在需要复位看门狗计数器的地方调用程序ServiceDog()
//此程序在文件DSP2833x_SysCtrl.c中
//###########################################################################
//详细说明在
//《TMS320x2833x, 2823x System Control and Interrupts Reference Guide (Rev. A)》
//57到59页
//看门狗时钟发生器:WDCLK = CLKOUT/512,当HALT时停止。
//CLKOUT为外部时钟,频率30MHz。
//###########################################################################

#include "DSP2833x_Device.h"     // Headerfile Include File
#include "DSP2833x_Examples.h"   // Examples Include File
void InitWatchDog(void)
{
    EALLOW;	// 允许访问受保护的寄存器
    SysCtrlRegs.SCSR = 1;//选择看门狗中断允许
    EDIS;      
    // 使能看门狗
    EALLOW;
	SysCtrlRegs.WDCR &=0x3F;
    SysCtrlRegs.WDCR |= 0x0028; //4.4毫秒复位一次,WDCLK=OSCCLK/512/1
    //SysCtrlRegs.WDCR |= 0x0029; //4.4毫秒复位一次,WDCLK=OSCCLK/512/1
    //SysCtrlRegs.WDCR |= 0x002A; //8.7毫秒复位一次,WDCLK=OSCCLK/512/1
    //SysCtrlRegs.WDCR |= 0x002B; //17.5毫秒复位一次,WDCLK=OSCCLK/512/1
    //SysCtrlRegs.WDCR |= 0x002C; //35毫秒复位一次,WDCLK=OSCCLK/512/1
    //SysCtrlRegs.WDCR |= 0x002D; //69.9毫秒复位一次,WDCLK=OSCCLK/512/1
    //SysCtrlRegs.WDCR |= 0x002E; //139.8毫秒复位一次,WDCLK=OSCCLK/512/1
    //SysCtrlRegs.WDCR |= 0x002F; //279.6毫秒复位一次,WDCLK=OSCCLK/512/1  
    EDIS;
}
DSP28335是德州仪器公司(TI)生产的一款数字信号处理器,其内置看门狗模块可以用于系统的故障监测和保护。 以下是一个DSP28335看门狗程序及注释,您可以参考并验证该程序。 ```c #include "DSP2833x_Device.h" // DSP28335设备头文件 // 看门狗初始化函数 void InitWatchdog(void) { EALLOW; SysCtrlRegs.WDCR= 0x0028; // 看门狗控制寄存器: 0x0028 开启看门狗,不允许中断,计数器重载值为 0x7FFF EDIS; } // 喂狗函数 void ServiceDog(void) { EALLOW; SysCtrlRegs.WDKEY = 0x0055; // 喂狗操作:写入 0x0055 SysCtrlRegs.WDKEY = 0x00AA; // 再次写入 0x00AA EDIS; } // 主函数 void main(void) { InitWatchdog(); // 初始化看门狗 while(1) { ServiceDog(); // 喂狗 // TODO: 添加需要执行的代码 } } ``` 注释: 1. 在 `InitWatchdog` 函数中,使用 `SysCtrlRegs.WDCR` 寄存器初始化看门狗模块。具体地,`WDCR` 的最高位为 1 表示开启看门狗,第 5 位为 0 表示不允许中断,计数器重载值为 0x7FFF,即当计数器的值达到 0x7FFF 时就会触发看门狗中断。 2. `ServiceDog` 函数用于喂狗,每次执行该函数都会重置看门狗计数器,避免计数器到达重载值而触发看门狗中断。具体地,写入 0x0055 和 0x00AA 两个值表示喂狗操作,如果写入其他值,则会触发看门狗中断。 3. 在 `main` 函数中,先调用 `InitWatchdog` 函数看门狗进行初始化,然后进入一个无限循环,每次循环都调用 `ServiceDog` 函数喂狗。在循环体中,可以添加需要执行的代码。 要验证该程序的正确性,可以通过以下两种方法: 1. 在程序中加入故障模拟代码,例如故意让程序陷入死循环或者让某个变量溢出等,观察是否会触发看门狗中断。如果中断触发了,说明看门狗模块正常工作。 2. 使用示波器观察看门狗输出引脚的电平变化,如果看门狗正常工作,该引脚的电平会周期性地变化。 希望能对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

工藤新一_柯南

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值