一、概述
處理器的外部中斷主要用于捕抓外部輸入的高低電平。本篇文章將介紹DSP28335的外部中斷的使用。
二、DSP28335外部中斷介紹
(資料圖片僅供參考)
DSP28335處理器共支持7個外部中斷XINT1XINT7,其中XINT1XINT2只能對GPIO0GPIO31配置;XINT3XINT7只對GPIO32~GPIO63配置。每一個外部中斷可以被選擇為正邊沿或負邊沿觸發(fā)。DSP28335的中斷系統(tǒng)框圖為:
圖1 DSP中斷系統(tǒng)
DSP28335中斷分為三級,分別為:外設(shè)級、PIE級、CPU級。如下圖所示:
圖2 DSP28335的三級中斷機制
DSP28335的三級中斷機制可以這樣理解(以外部中斷為例):外設(shè)級為像外部引腳輸入高低電平時,同時外設(shè)級的中斷使能了,這時候外設(shè)級會產(chǎn)生一個中斷標志位,PIE級檢測到該中斷標志位,同時PIE自己的中斷使能了,這時候PIE會產(chǎn)生一個中斷標志位,PIE的中斷標志位給CPU,當CPU的中斷使能位打開了,就會響應這個中斷。總的概況:一個外部中斷要得到CPU響應,要越過外設(shè)級中斷使能、PIE中斷使能、CPU中斷使能。
圖3 DSP28335中斷過程
從圖3可以看出,只有一道一道開關(guān)閉合,才能把中斷送到CPU,讓CPU去響應中斷。
三、外部中斷涉及相關(guān)寄存器
1. 外部中斷控制寄存器---XINTnCR【外設(shè)級】
圖4 外部中斷控制寄存器---XINTnCR
外部中斷控制寄存器用于控制上升沿觸發(fā)還是下降沿觸發(fā),中斷使能。
2. PIE這一級的寄存器【PIE級】
(1)PIE中斷使能寄存器----PIEIERx[x=1~12]
圖5 PIE中斷使能寄存器
(2)PIE中斷標志寄存器----PIEIFRx[x=1~12]
圖6 PIE中斷標志寄存器
(3)PIE中斷應答寄存器----PIACK
圖6 PIE中斷應答寄存器
3.CPU這一級寄存器【CPU級】
(1)CPU中斷標志寄存器---IFR
圖7 CPU中斷標志寄存器
(2)CPU中斷使能寄存器---IER
圖8 CPU中斷使能寄存器
四、DSP28335外部中斷實現(xiàn)
DSP28335外部中斷實現(xiàn)主要有以下步驟:
(1)失能CPU級中斷,并初始化PIE控制器和PIE中斷向量表;
(2)使能IO口時鐘,配置IO口為輸入;
(3)設(shè)置IO口與中斷線的映射關(guān)系;
圖9 中斷映射表
本次使用的是GPIO17,映射到XINT1,即INT1.4
(4)指定中斷向量表中斷服務(wù)函數(shù)地址;
(5)使能外設(shè)對應的PIE中斷**[PIE級使能];**
(6)設(shè)置外部中斷觸發(fā)方式并使能中斷**[外設(shè)級使能];**
(7)使能CPU級中斷及全局中斷**[CPU級使能];**
(8)編寫外部中斷服務(wù)函數(shù)。
編程實現(xiàn):
//外部中斷配置步驟//1。失能CPU級中斷,并初始化PIE控制器寄存器和PIE中斷向量表//2.使能IO時鐘,配置IO口為輸入//3.設(shè)置IO口與中斷線的映射關(guān)系//4.指定中斷向量表中斷服務(wù)函數(shù)地址//5.使能外設(shè)對應的PIE中斷//6.設(shè)置外部中斷觸發(fā)中斷觸發(fā)方式并使能中斷//7.使能CPU級中斷及全局中斷void EXTI_Init(void){
// 步驟 1. 失能CPU級中斷,并初始化PIE控制器寄存器和PIE中斷向量表
DINT; // 禁止CPU全局中斷 InitPieCtrl(); IER = 0x0000; // 禁止CPU中斷和清除所有CPU中斷標志 IFR = 0x0000; InitPieVectTable(); //初始化PIE中斷向量表,并使其指向中斷服務(wù)子程序(ISR)
//步驟 2.使能IO時鐘,配置IO口為輸入EALLOW;//關(guān)閉寫保護
SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1; //開啟GPIO時鐘 GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 0; //配置為通用IO口 GpioCtrlRegs.GPADIR.bit.GPIO17 = 0; //配置為輸入 GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0; //配置為上拉 EDIS;//打開寫保護 //步驟3:設(shè)置IO口與中斷線的映射關(guān)系 EALLOW; GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 17;//XINT1 對應 GPIO17腳(GPIO0-31配置XINT1、2;GPIO32-63配置XINT3~7) EDIS;
//步驟 4. 指定中斷向量表中斷服務(wù)函數(shù)地址EALLOW;PieVectTable.XINT1 = &EXTI_IRQ;EDIS;
//步驟 5.使能外設(shè)對應的PIE中斷PieCtrlRegs.PIEIER1.bit.INTx4 = 1;//使能PIE 1 組 4通道 (這里需要查詢PIE的中斷矢量表 來確定使能的位)
//6.設(shè)置外部中斷觸發(fā)中斷觸發(fā)方式并使能中斷XIntruptRegs.XINT1CR.bit.POLARITY = 0;//下降沿觸發(fā)有效XIntruptRegs.XINT1CR.bit.ENABLE = 1;//使能外部中斷
//步驟 7. 使能CPU級中斷及全局中斷IER |= M_INT1;//使能INT1中斷通道 (對應的變量值在 DSP2833x_Device.h中已進行宏定義。要用|或符號賦值,防止改變其他位)
EINT;//打開全局中斷 ERTM;//當使用仿真器調(diào)試時 開啟DEBUG中斷
}
int CNT=0;//步驟 8. 編寫中斷函數(shù),在中斷函數(shù)結(jié)束前寫1清零PIEACK對應位interrupt void EXTI_IRQ(void){GpioDataRegs.GPCTOGGLE.bit.GPIO75 = 1;CNT = CNT+1;// DELAY_US(5000);//延時
PieCtrlRegs.PIEACK.bit.ACK1 = 1;//寫1清零PIEACK對應位
}
主函數(shù)為:
void main(void){
InitSysCtrl();GIOP_Init();EXTI_Init();while(1){
// GpioDataRegs.GPCSET.bit.GPIO75 = 1;}
}
通過上面的程序就能使用按鍵使得一個LED燈翻轉(zhuǎn)。
*五、總結(jié)
本篇文章介紹了DSP28335的外部中斷的使用,使用一個按鍵作為外部輸入,觸發(fā)LED燈進行翻轉(zhuǎn)。
關(guān)鍵詞:
版權(quán)與免責聲明:
1 本網(wǎng)注明“來源:×××”(非商業(yè)周刊網(wǎng))的作品,均轉(zhuǎn)載自其它媒體,轉(zhuǎn)載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點和對其真實性負責,本網(wǎng)不承擔此類稿件侵權(quán)行為的連帶責任。
2 在本網(wǎng)的新聞頁面或BBS上進行跟帖或發(fā)表言論者,文責自負。
3 相關(guān)信息并未經(jīng)過本網(wǎng)站證實,不對您構(gòu)成任何投資建議,據(jù)此操作,風險自擔。
4 如涉及作品內(nèi)容、版權(quán)等其它問題,請在30日內(nèi)同本網(wǎng)聯(lián)系。