一、C28335一共96中断,可以使用的有58个中断,其余38个保留(Reserved)INTX.Y X=1..12 路 Y=1..8 通道, 总共中断 12*8 =96
The various interrupt sources are multiplexed
External Interrupts
Multiplexing of Interrupts Using the PIE Block
PIE Peripheral Interrupts
二、C28335的中断请求可以分成:
(1)可屏蔽中断:通过判断优先级选择是否处理
(2)不可屏蔽中断:强制停止CPU进程,进入中断程序,比如复位和NMI。
(3)片内中断源:PWM、CAP、QEP、Timer等
(4)片外中断源:外部中断输入引脚XINT1、XINT2引入的信号
三、PIE(Peripheral Interrupts Enable)配置与控制寄存器:
四、外部中断寄存器:
五、中断管理模块的功能:
(1) PIE作为中断管理模块:主要是用来在有限中断通道的情况下,管理多个中断源触发
(2) PIE模块处理INT1~INT12组中断源,每组中断源下包含8路中断通道(INT1.x(x = 1、2、…、8));
(3) 定时器1、2的中断源分别为INT13、INT14
(4) 中断优先级 //INT1>INT2>…>INT12; //INT1.1>INT1.2>…>INT1.8;
(5) 初始化系统函数
(7) 初始化PIE控制
(8) 禁止中断并清除中断标志位
IER = 0; //全局中断使能 IFR = 0; //全局标志位 |
(9) 初始化PIE向量表
(10)将外部中断的中断服务函数映射到中断向量表
EALLOW; PieVectTable.XINT3 = &xint3_isr; PieVectTable.XINT4 = &xint4_isr; EDIS; |
(11) 清除计数值
Xint3Count = 0; Xint4Count = 0; LoopCount = 0; |
(12) 使能CPU级中断
(13) 使能PIE块
PieCtrlRegs.PIECTRL.bit.ENPIE = 1; |
(14) 使能PIE 12组 INT1 、 INT2
PieCtrlRegs.PIEIER12.bit.INTx1 = 1; PieCtrlRegs.PIEIER12.bit.INTx2 = 1; |
(15) 开启中断
(16) 关寄存器写保护
EALLOW; GpioIntRegs.GPIOXINT3SEL.bit.GPIOSEL = 0x1c; GpioIntRegs.GPIOXINT4SEL.bit.GPIOSEL = 0x1d; |
(17) 开寄存器写保护
(18) 配置 XINT1
//Falling edge interrupt 下降沿中断 XIntruptRegs.XINT3CR.bit.POLARITY = 0; //Rising edge interrupt 上升沿中断 XIntruptRegs.XINT4CR.bit.POLARITY = 1; |
(19) 使能外部中断
XIntruptRegs.XINT3CR.bit.ENABLE = 1; XIntruptRegs.XINT4CR.bit.ENABLE = 1; |
(20)中断主循环//主循环 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; } |