对外部中断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组。
}