F28335外部中斷配置過程(完整) 原始碼+註釋
阿新 • • 發佈:2018-11-11
對外部中斷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組。
}