|
// watchdog.cpp : Defines the entry point for the console application.
//----------------------------------------------------------------------
// #################看门狗中断程序##############
//----------------------------------------------------------------------
#include "DSP281x_Device.h"
#include "DSP281x_Examples.h"
interrupt void wakeint_isr(void);
void KickDog(woid);
#define BIT1 0x0002
//全局变量-------------------------------------------------------------
Uint32 WakeCount;
Uint32 LoopCount;
void main(woid)
{
InitSysCtrl(); //初始化系统控制寄存器、PLL、看门狗和时钟
DINT; //关闭全局中断响应
InitPieCtrl();
IER = 0x0000; //关闭中断开关
IFR = 0x0000; //清除中断标志位
InitPieVectTable(); //初始化中断向量表
EALLOW; //保护中断向量
PieVectTable.WAKEINT = &wakeint_isr; //看门狗中断向量指向中断服务子程序
EDIS; //操作完成
WakeCount =0;
LoopCount = 0;
EALLOW;
SysCtrlRegs.SCSR = BIT1; //选择看门狗中断,禁止看门狗复位
EDIS;
PieCtrlRegs.PIECRTL.bit.ENPIE = 1; //允许PIE1组中中断
PieCtrlRegs.PIEIER1.bit.INTx8 = 1; //打开第一组的watchdog中断
IER |= M_INT1; //允许CPU响应1组中断
EINT; //允许全局中断
KickDog(); //定时清零(喂狗)
EALLOW;
SysCtrlRegs.WDCR = 0x0028; //使能看门狗,WDCLK=OSCCLK/512/1
EDIS;
for(;;)
{
LoopCount++;
}
interrupt void wakeint_isr(void)
{
WakeCount++;
PieCtrlRegs.PIEACK.all =PIEACK_GROUP1; //写1继续响应中断
}
voidKick Dog(void)
{
EALLOW;
SysCtrlRegs.WDKEY = 0x0055; //看门狗计数器清零
SysCtrlRegs.WDKEY = 0x00AA;
EDIS;
}
}
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-4-20 08:30
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社