DSP看门狗示例

代码示例

28335示例

#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;
}

28035示例看门狗中断

#include "DSP28x_Project.h"       // Device Header file and Examples Include File

int flg_ServiceDog = 0;           // 喂狗标志,这里选择不喂狗
long int loop_cnt = 0;            // 主循环次数
long int wake_cnt = 0;            // 看门狗中断次数


// 看门狗中断服务子函数
__interrupt void wakeint_isr(void)
{
    wake_cnt++;
    // 允许ACK位,准备迎接下一个看门狗中断;看门狗属于 PIE group 1
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}


/**
 * main.c
 */
int main(void)
{
    InitSysCtrl();       // 系统控制初始化,关闭看门狗,使能外设时钟等
    DINT;                // 关闭CPU级总中断
    InitPieCtrl();       // 初始化外设中断扩展配置
    IER = 0x0000;        // 清除CPU级中断使能位,标志位
    IFR = 0x0000;
    InitPieVectTable();  // 初始化中断外设向量表,并使能PIE控制器

    //********************* code start here ****************************//
    EALLOW;
    PieVectTable.WAKEINT = &wakeint_isr;    // 加载看门狗中断服务子程序入口地址到中断向量表
    EDIS;

    EALLOW;
    SysCtrlRegs.SCSR = 0X0002;              // 设置看门狗工作模式,中断模式: 0x0002 ,复位模式: 0x0000
    EDIS;
	 //WDCNTR: 看门狗计数寄存器。8位计数器,(当外接10MHz晶振时,最大喂狗时间: 512 / 10 e 6 ∗ 255 ≈ 13 m s ) 512 / 10e^{6} * 255 \approx 13ms) 512/10e6∗255≈13ms)​​
    PieCtrlRegs.PIEIER1.bit.INTx8 = 1;      // 使能看门狗外设中断,看门狗中断是group1 第8位
    IER |= 0x0001;      // 使能CPU级 group 1
    
    EINT;               // 前面关了,这里开启CPU总中断
    
    ServiceDog();       // 喂狗,清零看门狗计数器 
    EALLOW;
    SysCtrlRegs.WDCR = 0x0028;     // WDCR: 看门狗控制寄存器,。WDDIS看门狗屏蔽位,WDPS看门狗时钟预分配位。写入0x0068,关闭看门狗;
    							   //写入0x0028 开启看门狗,复位后自动使能看门狗(所以在初始化之前,通常先要关闭看门狗,等一切配置好以后,才开启看门狗)
    EDIS;

    while(1)
    {
        loop_cnt++;
        if(flg_ServiceDog)  // flg_ServiceDog = 0 ,不喂狗
        {
            ServiceDog();   // 喂狗,该函数在官方提供,其实就是向WDKEY写0x0055 + 0x00AA
        }
    }
    //********************* code end here ******************************//
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值