DSP

F28335外部中断配置过程(完整) 源代码+注释

2019-07-13 11:50发布

class="markdown_views prism-atom-one-light"> 对外部中断1完整的配置一次,以供参考
函数的功能是,
在外部信号持续输入的情况下,且下降沿触发外部中断。
每隔一段时间,GPIO0和GPIO1的LED等闪烁。
在一段时间后,系统停止,LED灯停止闪烁。 #include "DSP2833x_Device.h" #include "DSP2833x_Examples.h" interrupt void xint1_isr(void); //声明外部中断函数 volatile Uint32 Xint1Count; //全局定义中断计数值 Uint32 LoopCount; void main(void) { InitSysCtrl(); //初始化 DINT; InitPieCtrl(); IER = 0x0000; IFR = 0x0000; InitPieVectTable(); EALLOW; //打开寄存器保护 PieVectTable.XINT1 = &xint1_isr; //将外部中断1的入口地址赋给 xint1_isr EDIS; //关闭寄存器保护 Xint1Count = 0; //为两个计数器赋初值 LoopCount = 0; EALLOW; GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; //打开GPIO0 选择I/O功能 GpioCtrlRegs.GPADIR.bit.GPIO0 = 1; //I/O方向输出 GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0; //打开GPIO1 选择I/O功能 GpioCtrlRegs.GPADIR.bit.GPIO1 = 1; //I/O方向输出 EDIS; PieCtrlRegs.PIECTRL.bit.ENPIE = 1; //使能中断管理PIE模块 PieCtrlRegs.PIEIER1.bit.INTx4 = 1; //打开外部中断1,即INT1.4 IER |= M_INT1; //使能第一组中断,即INT1 EINT; //关闭全局中断 EALLOW; GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 15; // 打开GPIO15中断功能 EDIS; XIntruptRegs.XINT1CR.bit.ENABLE = 1; // 使能外部中断1控制寄存器 XIntruptRegs.XINT1CR.bit.POLARITY = 1; // 选择外部中断1下降沿触发 for(;;) { if(LoopCount == 40) { asm(" ESTOP0"); // 系统停止 } } interrupt void xint1_isr(void) { Xint1Count++; if (Xint1Count==100) { LoopCount++; Xint1Count=0; } GpioDataRegs.GPATOGGLE.bit.GPIO0 = 1; //GPIO0翻转 GpioDataRegs.GPATOGGLE.bit.GPIO1 = 1; PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; //相应标志位响应INT1组,因为每次中断后响应标志位都会清零,所以放在中断函数内每次进入都选择以此INT1组。 }