专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

TMS320F2812外设例程系列之Watchdog

作者:佚名   来源:不详   点击数:  更新时间:2014年08月17日   【字体:

 

 
//#####################################################################
//文件:  Example_281xWatchdog.c
//说明:  DSP281x看门狗中断测试程序
//#####################################################################
#include "DSP281x_Device.h"     
#include "DSP281x_Examples.h"   
interrupt void wakeint_isr(void);     //中断服务程序wakeint_isr的声明
Uint32 WakeCount;
Uint32 LoopCount;
//主程序
void main(void)
{
    //Step 1. 初始化系统控制,该函数在DSP281x_SysCtrl.c 文件中
    InitSysCtrl();                 //初始化PLL、看门狗,使能外设时钟
    //Step 2.初始化GPIO
    //该函数在DSP281x_Gpio.c文件中,显示如何设置GPIO到其默认状态
    //InitGpio();                 //本例未使用,跳过  
    //Step 3.禁止所有中断,初始化PIE中断向量表
    DINT;                         //关全局中断
    //初始化PIE控制寄存器到它们的默认状态,即禁止所有的PIE中断,清除所有的PIE中断
    //标志,这个函数在DSP281x_PieCtrl.c文件中
    InitPieCtrl();
    IER = 0x0000;                 //禁止CPU中断
    IFR = 0x0000;                 //清除CPU中断标志
    //初始化PIE中断向量表,使中断向量指向中断服务程序(ISR)。为了调试方便,即使本例
    //不使用的中断也初始化。ISR在DSP281x_DefaultIsr.c文件中
    InitPieVectTable();
    //本例中使用到的中断程序入口地址重载到相应中断向量
    EALLOW;                 //允许访问受保护寄存器
    PieVectTable.WAKEINT = &wakeint_isr;
    EDIS;                       //禁止访问受保护寄存器
    //Step 4.初始化器件所有的片内外设,该函数在DSP281x_InitPeripherals.c文件中
    //InitPeripherals();           //本例不需要,跳过
    //Step 5. 用户代码,使能中断
    WakeCount = 0;               //计中断次数清零
    LoopCount = 0;               //计通过循环的次数清零
    //看门狗复位(WDRST)输出信号无效且看门狗中断(WDINT)输出信号有效 
    EALLOW;
    SysCtrlRegs.SCSR = BIT1;     //清除WDOVERRIDE位
    EDIS;
    PieCtrlRegs.PIECRTL.bit.ENPIE = 1;   //使能PIE块
    PieCtrlRegs.PIEIER1.bit.INTx8 = 1;     //使能PIE级中断INT1.8
    IER |= M_INT1;                 //使能CPU级中断 INT1
    EINT;                         //使能全局中断
    KickDog( );                     //喂狗,清除看门狗计数器
    EALLOW;
    SysCtrlRegs.WDCR = 0x0028; //使能看门狗
    EDIS;
    //Step 6. 空循环
    for(;;)
    {
       LoopCount++;
       //不注释掉KickDog(喂狗)就一直在这儿循环,注释掉KickDog(喂狗)引起WAKEINT中断
       //KickDog();
    }
}
//Step 7. 加上局部中断服务程序(ISR),如果局部ISR已经使用,按照Step 5中断向量,
//再分配中断向量地址
interrupt void wakeint_isr(void)
{
WakeCount++;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;  
  //应答这个中断,以便再接收PIE组1的中断
}
 
关闭窗口