📄 10.2.c
字号:
#include "DSP28_Device.h"
interrupt void eva_timer1_isr(void);
// 定义一个无符号32位的全局变量,保存各定时器的中断次数
Uint32 EvaTimer1InterruptCount;
void main(void)
{
InitSysCtrl();
DINT; // #define DINT asm(" setc INTM")
IER = 0x0000;
IFR = 0x0000;
InitPieCtrl();
InitPieVectTable();
EvaTimer1InterruptCount = 0; // 初始化计数值为0
// 初始化 EVA Timer 1
EvaRegs.GPTCONA.all = 0; // 设置 Timer 1 Registers (EV A)
EvaRegs.T1PR = 0x0200; // 设置EV Timer1的周期寄存器值为0x200
EvaRegs.T1CMPR = 0x0000; // 设置比较寄存器值为0x0000
EvaRegs.EVAIMRA.bit.T1PINT = 1; // 使能GP Timer1的周期中断位
EvaRegs.EVAIFRA.bit.T1PINT = 1; // 清零 GP Timer1的周期中断标志位
EvaRegs.T1CNT = 0x0000; // GP timer 1 的计数器清零
EvaRegs.T1CON.all = 0x1742; // 连续增计数,128分频 ,使能比较
// 在定时器1周期中断时启动EVA模数转换
EvaRegs.GPTCONA.bit.T1TOADC = 2;
EALLOW; // 使能EALLOW保护寄存器的写操作
PieVectTable.T1PINT = &eva_timer1_isr;
EDIS; // 禁止EALLOW保护寄存器的写操作
PieCtrlRegs.PIEIER2.all = M_INT4;
// 使能 PIE第2组的中断4,定时器1的周期中断
IER |= M_INT2 ; // #define M_INT2 0x0002使能T1PINT的CPU INT2
EINT; // #define DINT asm(" clrc INTM")
ERTM; // 使能全局实时中断DBGM
for(;;); // 此处为主程序的死循环,等待定时器1的周期中断
}
interrupt void eva_timer1_isr(void)
{
EvaTimer1InterruptCount++; // 中断计数器加1
puts("Interrupt seccess!"); // 输出“Interrupt seccess!”
EvaRegs.EVAIMRA.bit.T1PINT = 1; // 使能定时器1的周期中断
EvaRegs.EVAIFRA.all = BIT7; // 清除定时器1的周期中断标志
// 中断应答,使可以接受PIE组2的更多的中断
PieCtrlRegs.PIEACK.all = PIEACK_GROUP2;
// 清零 PIEACK中的第2组中断对应的位,为下一次中断做准备
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -