//#####################################################################
//文件: Example_281xCpuTimer.c
//说明: 定时器应用实例
//#####################################################################
#include "DSP281x_Device.h"
#include "DSP281x_Examples.h"
//定时器中断服务程序声明
interrupt void cpu_timer0_isr(void);
//主程序
void main(void)
{
//Step 1. 初始化系统控制
InitSysCtrl(); //初始化系统控制寄存器、PLL、看门狗和时种
//Step 2. 初始化 GPIO
//InitGpio(); //本例中没有使用,跳过
//Step 3. 清除所有中断,初始化PIE中断向量表
DINT; //关CPU中断
InitPieCtrl();
//初始化PIE控制寄存器组到默认状态,这个子程序在DSP281x_PieCtrl.c
IER = 0x0000; //禁止所有CPU中断
IFR = 0x0000; //清除所有CPU中断标志位
InitPieVectTable();
//初始化PIE中断向量表,这个子程序在DSP281x_PieVect.c
EALLOW; //关保护
PieVectTable.TINT0 = &cpu_timer0_isr; //中断向量指向中断服务程序
EDIS; //开保护
//Step 4. 初始化所有片内外设
//InitPeripherals(); //没有使用,跳过,在DSP281x_InitPeripherals.c
InitCpuTimers(); //初始化定时器寄存器组
ConfigCpuTimer(&CpuTimer0, 100, 1000000);
//配置CPU-Timer 0 中断周期为1s,100MHz CPU频率,可以根据频率改变实参
StartCpuTimer0(); //启动定时器 0
//Step 5. 用户代码,打开中断
IER |= M_INT1; //使能第一组PIE中断
PieCtrlRegs.PIEIER1.bit.INTx7 = 1; //使能第一组的中断7
EINT; //使能全局中断
ERTM; //使能DEBUG中断
//Step 6. 空循环,等待中断
for(;;);
}
//中断服务子程序
interrupt void cpu_timer0_isr(void)
{
CpuTimer0.InterruptCount++;
//用户可以在此处添加自己的代码,以完成某些特定的功能
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
//响应这个中断,以便CPU继续接收第1组中断
}