//C28335一共96中断,可以使用的有58个中断,其余保留
//C28335的中断请求可以分成:
//可屏蔽中断:通过判断优先级选择是否处理
//不可屏蔽中断:强制停止CPU进程,进入中断程序,比如复位和NMI。
//片内中断源:PWM、CAP、QEP、Timer等
//片外中断源:外部中断输入引脚XINT1、XINT2引入的信号
//PIE作为中断管理模块:主要是用来在有限中断通道的情况下,管理多个中断源触发
//PIE模块处理INT1~INT12组中断源,每组中断源下包含8路中断通道(INT1.x(x = 1、2、…、8));
//定时器1、2的中断源分别为INT13、INT14
//中断优先级
//INT1>INT2>…>INT12;
//INT1.1>INT1.2>…>INT1.8;
//初始化系统函数
InitSysCtrl();
//禁止cpu中断
DINT;
//初始化PIE控制
InitPieCtrl();
//禁止中断并清除中断标志位
IER = 0; //全局中断使能
IFR = 0; //全局标志位
//初始化PIE向量表
InitPieVectTable();
//将外部中断的中断服务函数映射到中断向量表
EALLOW;
PieVectTable.XINT3 = &xint3_isr;
PieVectTable.XINT4 = &xint4_isr;
EDIS;
//清除计数值
Xint3Count = 0;
Xint4Count = 0;
LoopCount = 0;
//使能CPU级中断
IER |= M_INT12;
//使能PIE块
PieCtrlRegs.PIECTRL.bit.ENPIE = 1;
//使能PIE 12组 INT1 、 INT2
PieCtrlRegs.PIEIER12.bit.INTx1 = 1;
PieCtrlRegs.PIEIER12.bit.INTx2 = 1;
//开启中断
EINT;
//关寄存器写保护
EALLOW;
GpioIntRegs.GPIOXINT3SEL.bit.GPIOSEL = 0x1c;
GpioIntRegs.GPIOXINT4SEL.bit.GPIOSEL = 0x1d;
//开寄存器写保护
EDIS;
//配置 XINT1
//Falling edge interrupt 下降沿中断
XIntruptRegs.XINT3CR.bit.POLARITY = 0;
//Rising edge interrupt 上升沿中断
XIntruptRegs.XINT4CR.bit.POLARITY = 1;
//使能外部中断
XIntruptRegs.XINT3CR.bit.ENABLE = 1;
XIntruptRegs.XINT4CR.bit.ENABLE = 1;
//主循环
interrupt void xint3_isr(void){
//中断次数计数器
Xint3Count++;
//中断内容
GpioDataRegs.GPATOGGLE.bit.GPIO0 = 1;
//确认中断结束
PieCtrlRegs.PIEACK.all = PIEACK_GROUP12;
}
interrupt void xint4_isr(void){
//中断次数计数器
Xint4Count++;
//中断内容
GpioDataRegs.GPATOGGLE.bit.GPIO0 = 1;
//确认中断结束
PieCtrlRegs.PIEACK.all = PIEACK_GROUP12;
}