DSP

TMS320F28335---外部按键中断

2019-07-13 10:38发布

外部中断——按键,使LED亮灭。使用矩阵键盘,并用按键延时提高抗干扰能力。 #include "DSP2833x_Project.h" /**************函数声明**************/ void Gpio_setup(void); interrupt void xint1_isr(void); /**************函数声明**************/ // 本例中用到的全局变量; volatile Uint32 Xint1Count; //发生外部中断1的次数; /***************主函数**************/ int main(void) { InitSysCtrl(); //初始化系统控制 Gpio_setup(); //子函数,gpio口设置 DINT; //关闭中断 InitPieCtrl(); //初始化中断控制 IER = 0x0000; IFR = 0x0000; InitPieVectTable();//初始化中断矢量表 EALLOW; // 修改被保护的寄存器,修改前应添加EALLOW语句 PieVectTable.XINT1 = &xint1_isr; //将xint1_isr这一中断子函数指向PieVectTable.XINT1的地址 EDIS; // EDIS的意思是不允许修改被保护的寄存器 Xint1Count = 0; // 计数外部中断1(XINT1) PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // 使能外设中断扩展PIE模块 PieCtrlRegs.PIEIER1.bit.INTx4 = 1; // 使能PIE组1的INT4 IER |= M_INT1; EINT; ERTM; EALLOW; GpioDataRegs.GPBSET.bit.GPIO60 = 1; // 输出高电平 GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 0; // 选择为通用I/O口 GpioCtrlRegs.GPBDIR.bit.GPIO60 = 1; // 方向定义为输出 EDIS; EALLOW; GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 0; // 选择为通用I/O口 GpioCtrlRegs.GPADIR.bit.GPIO12 = 0; // 方向定义为输入 GpioCtrlRegs.GPAQSEL1.bit.GPIO12 = 0; // 外部中断1(XINT1)与系统时钟SYSCLKOUT同步 EDIS; EALLOW; GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 0x0C; // XINT1是GPIO12 EDIS; XIntruptRegs.XINT1CR.bit.POLARITY = 0; // 下降沿触发中断 XIntruptRegs.XINT1CR.bit.ENABLE = 1; // 使能XINT1 for(;;); } void Gpio_setup(void) { EALLOW; //////以下IO口设置为输出,作为列扫描///////// //初始化行3的GPIO50 GpioCtrlRegs.GPBPUD.bit.GPIO50 = 0; // Enable pullup on GPIO50 GpioDataRegs.GPBCLEAR.bit.GPIO50 = 1; // Load output latch GpioCtrlRegs.GPBMUX2.bit.GPIO50 = 0; // GPIO50 = GPIO GpioCtrlRegs.GPBDIR.bit.GPIO50 = 1; // GPIO50 = output EDIS; } interrupt void xint1_isr(void) { DELAY_US(5000); //键盘消抖动 while(GpioDataRegs.GPADAT.bit.GPIO12==0); GpioDataRegs.GPBTOGGLE.bit.GPIO60 = 1; // GPIO60-GPIO61输出电平取反 Xint1Count++; // 应答寄存器的位1清0,以响应同组内其他中断; PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; }