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

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

猜你喜欢

转载自blog.csdn.net/sy243772901/article/details/83313269