请举例给出一个dsp28335的看门狗程序,在程序中执行任务并定时喂狗
时间: 2024-03-15 12:44:35 浏览: 112
看门狗程序
5星 · 资源好评率100%
好的,以下是一个dsp28335的看门狗程序,程序中执行任务并定时喂狗:
```c
#include "DSP2833x_Device.h"
Uint16 WdCounter;
interrupt void WDOG_ISR(void)
{
WdCounter++;
if(WdCounter >= 5000) // 5000个WDOG时钟周期(约为1s)未喂狗,触发看门狗复位
{
EALLOW;
SysCtrlRegs.WDCR = 0x28; // 触发看门狗复位
EDIS;
}
else
{
EALLOW;
WdRegs.WDKEY = 0x55;
WdRegs.WDKEY = 0xAA;
EDIS;
}
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // 清除WDOG中断标志
}
void InitWDOG()
{
EALLOW;
SysCtrlRegs.WDCR = 0x0028; // 看门狗使能、分频系数为64、看门狗复位使能
EDIS;
}
void main()
{
InitWDOG();
WdCounter = 0;
EALLOW;
PieVectTable.WAKEINT = &WDOG_ISR; // 分配WDOG中断向量
PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // 使能PIE
PieCtrlRegs.PIEIER1.bit.INTx4 = 1; // 使能WDOG中断
IER |= M_INT1; // 使能INT1总中断
EINT; // 使能全局中断
EDIS;
while(1)
{
// 执行任务
EALLOW;
WdRegs.WDKEY = 0x55;
WdRegs.WDKEY = 0xAA;
EDIS;
}
}
```
以上程序中,首先通过`InitWDOG()`函数初始化看门狗,然后在`main()`函数中循环执行任务并定时喂狗。每当定时器中断触发时,程序会累加一个计数器,若计数器达到一定次数(这里设置为5000,约为1s),则触发看门狗复位;否则程序会继续喂狗。同时,为了使用看门狗中断,程序需要在中断向量表中分配一个向量,并在`PieCtrlRegs`和`IER`中使能WDOG中断。
阅读全文