//#####################################################################
//文件: 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組中斷
}