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