2808外部中断

#include "DSP280x_Device.h"
#include "DSP280x_Examples.h"
void delay(void)
{
 int i,j;
 for(i=0;i<2550;i++)
  for(j=0;j<100;j++);
}
//外部中断服务程序
interrupt void xint1(void)
{
 PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;//清除中断标志位响应其它中断
 if(!GpioDataRegs.GPADAT.bit.GPIO26)
 {
  delay();
  if(!GpioDataRegs.GPADAT.bit.GPIO26)
  {
   GpioDataRegs.GPATOGGLE.all=0xffff; //将GPIO的状态反转
  }
 } 
 
}
//外部中断初始化程序
void init_xint1(void)
{
 InitSysCtrl();//初始化时钟等系统资源
 DINT;//关闭CPU中断
 InitPieCtrl();//初始化中断向量表
 IER=0x0000;//清除CPU中断
 IFR=0x0000;//清除CPU中断标志位
 InitPieVectTable();//初始化中断向量表
 EALLOW; //寄存器保护
    PieVectTable.XINT1 = &xint1;//设置外部中断1的中断向量地址
    EDIS; // 取消寄存器保护
 PieCtrlRegs.PIECTRL.bit.ENPIE = 1;          // 启动PIE模块
    PieCtrlRegs.PIEIER1.bit.INTx4 = 1;          // 启动PIE模块1
   IER |= M_INT1;                              // 开CPU中断1区
   EINT;          //启动全局中断
 EALLOW;//寄存器保护
 GpioCtrlRegs.GPAMUX2.bit.GPIO26 = 0;   //设定GPIO 
 GpioCtrlRegs.GPADIR.bit.GPIO26 = 0;   //将GPIO1设定为输入
 GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 26;   // 0代表将外部中断的输入设定为GPIO0
 XIntruptRegs.XINT1CR.bit.POLARITY = 0;      // 外部中断1采用下降沿中断
 XIntruptRegs.XINT1CR.bit.ENABLE = 1;        // 启动外部中断
}
//显示用GPIO初始化
void init_gpio(void)
{
 EALLOW;  //寄存器保护
 GpioCtrlRegs.GPAMUX1.all=0x0000;  //设定为GPIO
 GpioCtrlRegs.GPADIR.all=0xffff;   //设定GPIO为输出
 EDIS;  //取消寄存器保护
}
void main(void)
{
 init_xint1();
 init_gpio();
 GpioDataRegs.GPASET.all=0xffff;  //将GPIO置位
 while(1);  //等待中断 
}

posted @ 2013-01-16 21:23  luxiaolai  阅读(367)  评论(0编辑  收藏  举报