1. 程式人生 > >F28335外部中斷配置過程(完整) 原始碼+註釋

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組。 }