TMS320F28335外部中斷總結(jié)
TMS320F28335外部中斷總結(jié)
作者:Free文章來源:Free點擊數(shù):93更新時間:201*-8-26
在這里我們要十分清楚DSP的中斷系統(tǒng)。C28XX一共有16個中斷源,其中有2個不可屏蔽的中斷RESET和NMI、定時器1和定時器2分別使用中斷13
和14。這樣還有12個中斷都直接連接到外設(shè)中斷擴展模塊PIE上。說的簡單一點就是PIE通過12根線與28335核的12個中斷線相連。而PIE的另外
一側(cè)有12*8根線分別連接到外設(shè),如AD、SPI、EXINT等等。這樣PIE共管理12*8=96個外部中斷。這12組大中斷由28335核的中斷寄存器IER來控
制,即IER確定每個中斷到底屬于哪一組大中斷(如IER|=M_INT12;說明我們要用第12組的中斷,但是第12組里面的什么中斷CPU并不知道需
要再由PIEIER確定)。接下來再由PIE模塊中的寄存器PIEIER中的低8確定該中斷是這一組的第幾個中斷,這些配置都要告訴CPU(我們不難想
象到PIEIER共有12總即從PIEIER1-PIEIER12)。另外,PIE模塊還有中斷標(biāo)志寄存器PIEIFR,同樣它的低8位是來自外部中斷的8個標(biāo)志位,同
樣CPU的IFR寄存器是中斷組的標(biāo)志寄存器。由此看來,CPU的所有中斷寄存器控制12組的中斷,PIE的所有中斷寄存器控制每組內(nèi)8個的中斷。
除此之外,我們用到哪一個外部中斷,相應(yīng)的還有外部中斷的寄存器,需要注意的就是外部中斷的標(biāo)志要自己通過軟件來清零。而PIE和CPU的
中斷標(biāo)志寄存器由硬件來清零。
EALLOW;//ThisisneededtowritetoEALLOWprotectedregisters
PieVectTable.XINT2=&ISRExint;//告訴中斷入口地址
EDIS;//ThisisneededtodisablewritetoEALLOWprotectedregisters
PieCtrlRegs.PIECTRL.bit.ENPIE=1;//EnablethePIEblock使能PIE
PieCtrlRegs.PIEIER1.bit.INTx5=1;//使能第一組中的中斷5
IER|=M_INT1;//EnableCPU第一組中斷
EINT;//EnableGlobalinterruptINTM
ERTM;//EnableGlobalrealtimeinterruptDBGM
也就是說,12組中的每個中斷都要完成上面的相同配置,剩下的才是去配置自己的中斷。如我們提到的EXINT,即外面來個低電平我們就進入
中斷,完成我們的程序。在這里要介紹一下,DSP的GPIO口都可以配置為外部中斷口,其配置方法如下:
GpioCtrlRegs.GPBMUX2.bit.GPIO54=0;//選擇他們是GPIO口
GpioCtrlRegs.GPBMUX2.bit.GPIO55=0;
GpioCtrlRegs.GPBMUX2.bit.GPIO56=0;
GpioCtrlRegs.GPBMUX2.bit.GPIO57=0;
GpioCtrlRegs.GPBDIR.bit.GPIO54=0;//選擇他們都是輸入口
GpioCtrlRegs.GPBDIR.bit.GPIO55=0;
GpioCtrlRegs.GPBDIR.bit.GPIO56=0;
GpioCtrlRegs.GPBDIR.bit.GPIO57=0;
GpioCtrlRegs.GPBQSEL2.bit.GPIO54=0;//GPIO時鐘和系統(tǒng)時鐘一樣且支持GPIO
GpioCtrlRegs.GPBQSEL2.bit.GPIO55=0;
GpioCtrlRegs.GPBQSEL2.bit.GPIO56=0;
GpioCtrlRegs.GPBQSEL2.bit.GPIO57=0;
GpioIntRegs.GPIOXINT3SEL.bit.GPIOSEL=54;//中斷3選擇GPIO
GpioIntRegs.GPIOXINT4SEL.bit.GPIOSEL=55;
GpioIntRegs.GPIOXINT5SEL.bit.GPIOSEL=56;
GpioIntRegs.GPIOXINT6SEL.bit.GPIOSEL=57;XIntruptRegs.XINT3CR.bit.POLARITY=0;//觸發(fā)模式為下降沿觸發(fā)
XIntruptRegs.XINT4CR.bit.POLARITY=0;
XIntruptRegs.XINT5CR.bit.POLARITY=0;
XIntruptRegs.XINT6CR.bit.POLARITY=0;
XIntruptRegs.XINT3CR.bit.ENABLE=1;//使能中斷
XIntruptRegs.XINT4CR.bit.ENABLE=1;
XIntruptRegs.XINT5CR.bit.ENABLE=1;
XIntruptRegs.XINT6CR.bit.ENABLE=1;
注意一點就是外部中斷1和2只能對GPIO0GPIO31配置;外部中斷3和4、5、6、7只對GPIO32GPIO63配置。
擴展閱讀:TMS320F28335外部中斷總結(jié)
TMS320F28335外部中斷總結(jié)
作者:Free文章來源:Free點擊數(shù):93更新時間:201*-8-26
在這里我們要十分清楚DSP的中斷系統(tǒng)。C28XX一共有16個中斷源,其中有2個不可屏蔽的中斷RESET和NMI、定時器1和定時器2分別使用中斷13
和14。這樣還有12個中斷都直接連接到外設(shè)中斷擴展模塊PIE上。說的簡單一點就是PIE通過12根線與28335核的12個中斷線相連。而PIE的另外
一側(cè)有12*8根線分別連接到外設(shè),如AD、SPI、EXINT等等。這樣PIE共管理12*8=96個外部中斷。這12組大中斷由28335核的中斷寄存器IER來控
制,即IER確定每個中斷到底屬于哪一組大中斷(如IER|=M_INT12;說明我們要用第12組的中斷,但是第12組里面的什么中斷CPU并不知道需
要再由PIEIER確定)。接下來再由PIE模塊中的寄存器PIEIER中的低8確定該中斷是這一組的第幾個中斷,這些配置都要告訴CPU(我們不難想
象到PIEIER共有12總即從PIEIER1-PIEIER12)。另外,PIE模塊還有中斷標(biāo)志寄存器PIEIFR,同樣它的低8位是來自外部中斷的8個標(biāo)志位,同
樣CPU的IFR寄存器是中斷組的標(biāo)志寄存器。由此看來,CPU的所有中斷寄存器控制12組的中斷,PIE的所有中斷寄存器控制每組內(nèi)8個的中斷。
除此之外,我們用到哪一個外部中斷,相應(yīng)的還有外部中斷的寄存器,需要注意的就是外部中斷的標(biāo)志要自己通過軟件來清零。而PIE和CPU的
中斷標(biāo)志寄存器由硬件來清零。
EALLOW;//ThisisneededtowritetoEALLOWprotectedregisters
PieVectTable.XINT2=&ISRExint;//告訴中斷入口地址
EDIS;//ThisisneededtodisablewritetoEALLOWprotectedregisters
PieCtrlRegs.PIECTRL.bit.ENPIE=1;//EnablethePIEblock使能PIE
PieCtrlRegs.PIEIER1.bit.INTx5=1;//使能第一組中的中斷5
IER|=M_INT1;//EnableCPU第一組中斷
EINT;//EnableGlobalinterruptINTM
ERTM;//EnableGlobalrealtimeinterruptDBGM
也就是說,12組中的每個中斷都要完成上面的相同配置,剩下的才是去配置自己的中斷。如我們提到的EXINT,即外面來個低電平我們就進入
中斷,完成我們的程序。在這里要介紹一下,DSP的GPIO口都可以配置為外部中斷口,其配置方法如下:
GpioCtrlRegs.GPBMUX2.bit.GPIO54=0;//選擇他們是GPIO口
GpioCtrlRegs.GPBMUX2.bit.GPIO55=0;
GpioCtrlRegs.GPBMUX2.bit.GPIO56=0;
GpioCtrlRegs.GPBMUX2.bit.GPIO57=0;
GpioCtrlRegs.GPBDIR.bit.GPIO54=0;//選擇他們都是輸入口
GpioCtrlRegs.GPBDIR.bit.GPIO55=0;
GpioCtrlRegs.GPBDIR.bit.GPIO56=0;
GpioCtrlRegs.GPBDIR.bit.GPIO57=0;
GpioCtrlRegs.GPBQSEL2.bit.GPIO54=0;//GPIO時鐘和系統(tǒng)時鐘一樣且支持GPIO
GpioCtrlRegs.GPBQSEL2.bit.GPIO55=0;
GpioCtrlRegs.GPBQSEL2.bit.GPIO56=0;
GpioCtrlRegs.GPBQSEL2.bit.GPIO57=0;
GpioIntRegs.GPIOXINT3SEL.bit.GPIOSEL=54;//中斷3選擇GPIO
GpioIntRegs.GPIOXINT4SEL.bit.GPIOSEL=55;
GpioIntRegs.GPIOXINT5SEL.bit.GPIOSEL=56;
GpioIntRegs.GPIOXINT6SEL.bit.GPIOSEL=57;XIntruptRegs.XINT3CR.bit.POLARITY=0;//觸發(fā)模式為下降沿觸發(fā)
XIntruptRegs.XINT4CR.bit.POLARITY=0;
XIntruptRegs.XINT5CR.bit.POLARITY=0;
XIntruptRegs.XINT6CR.bit.POLARITY=0;
XIntruptRegs.XINT3CR.bit.ENABLE=1;//使能中斷
XIntruptRegs.XINT4CR.bit.ENABLE=1;
XIntruptRegs.XINT5CR.bit.ENABLE=1;
XIntruptRegs.XINT6CR.bit.ENABLE=1;
注意一點就是外部中斷1和2只能對GPIO0GPIO31配置;外部中斷3和4、5、6、7只對GPIO32GPIO63配置。簡簡單單DSP”系列學(xué)習(xí)活動第四期中斷結(jié)構(gòu)學(xué)習(xí)
1、外圍幀寄存器2812將外圍幀寄存器分為3個空間,分別是:外圍幀0:直接映射到
CPU存儲器總線外圍幀1:映射到32位外圍總線外圍幀2:映射到16位外圍總線,只允許16操作這里所說的外圍幀寄存器就是外設(shè)寄存器,如ADC寄存器。映射就是分配地址,外圍一個地址,CPU一個地址,外圍地址映射到CPU地址上。(1)有的寄存器受保護,對其進行操作的時候好,要屏蔽保護(EALLOW),操作完在
開啟保護(EDIS).
(2)外圍中斷擴展PIE外設(shè)寄存器中的中斷標(biāo)志位必須由軟件清0,才能允許下一次中
斷進入,而且每次中斷后要把PIEACKx清0,只有PIEACKx=0,才可以把中斷送到CPU級中斷分為3級:a、外設(shè)級b、PIE級c、CPU級下面分別介紹這個不同的中斷級以及這3級的聯(lián)系a、外設(shè)級一旦外設(shè)產(chǎn)生了中斷,對應(yīng)的外設(shè)中斷標(biāo)志寄存器中的中斷標(biāo)志位IF就會置位,如果此時對應(yīng)的中斷使能位設(shè)為1,那么外設(shè)中斷信號可以送到PIE控制器,如果外設(shè)的中斷被禁止輸入進來,那么外設(shè)中斷標(biāo)志位保持為1,直到軟件清0。外設(shè)級和PIE級的聯(lián)系就在外設(shè)中斷使能位那了,實際外設(shè)的中斷使能位使能的就是允許外設(shè)中斷進入PIE級,相當(dāng)于PIE級的中斷源,就像外設(shè)的中斷源一樣,有了中斷事件,外設(shè)中斷標(biāo)志位就會置位,這里也是外設(shè)級就是PIE級得中斷事件,有了外設(shè)級的中斷標(biāo)志位置位,中斷使能位使能,那么PIE級的中斷標(biāo)志位才會置1.注意的是外設(shè)中斷標(biāo)志寄存器中的中斷標(biāo)志位必須由軟件清0,才能允許下一次中斷進入。b、PIE級PIE級有兩中寄存器,一種是中斷標(biāo)志寄存器PIEIFRx,上面已經(jīng)說過他跟外設(shè)級的聯(lián)系,另一個是中斷使能寄存器PIEIERx,這個跟外設(shè)級的中斷使能寄存器功能差不多,實現(xiàn)的是和CPU級的聯(lián)系.PIE級還有兩個寄存器,一個是控制寄存器PIECTRL,這個是控制整個PIE級的,還有一個應(yīng)答寄存器PIEACK,在PIEIFRx置位,PIEIERx使能還要PIEACKx清0才能把中斷送到CPU級。這里注意的是PIEIFRx由硬件清0,但是PIEACKx要由軟件清0.c、CPU級CPU級是最終控制中斷響應(yīng)的,也是有兩種寄存器,一個是中斷標(biāo)志寄存器IFR,另一個是中斷使能寄存器IER。IFR是這三級中斷的最終的中斷標(biāo)志位,IER是這三級中斷的最終中斷使能位,只有這三級中斷標(biāo)志位同時置位,三級中斷同時使能,這里還有一個CPU級的中斷屏蔽位INTM,在以上條件滿足的前提下,中斷屏蔽位INTM=0,CPU才能響應(yīng)中斷,找到中斷向量,跳轉(zhuǎn)到中斷函數(shù),執(zhí)行中斷操作,CPU級的中斷標(biāo)志位由硬件清0,在中斷函數(shù)中不用管。這就是它的中斷過程。3、96個中斷介紹2812分為12組中斷,每組中斷有8個中斷源,以INTx.y表示,其中x是組(x=1~12),y(y=1~8)是組中的位.在配置中斷的時候,外設(shè)級的中斷使能位要使能;PIECTRL寄存器使能PIE;要知道INTx.y中的xy是多少,找到PIEIERx(x=1~12)的x是多少,使能PIEIERx;PIEACKx(x=1~12)的x是多少給其清0;IERx(x=1~12)的x是多少,使能IERx;中斷屏蔽位INTM=0;中斷函數(shù)中要處理的:外設(shè)中斷標(biāo)志位軟件清0PIEACKx(x=1~12)軟件清0;4、C代碼分析以定時器0的C代碼分析timer0的中斷向量INT1.7(x=1,y=7),用到的PIE級的中斷使能寄存器是PIEIER1,CPU級的IER1.在2812的庫函數(shù)中有一個定義中斷入口地址的函數(shù),用戶的中斷函數(shù)內(nèi)容可以在這里面寫,就不容另外賦中斷地址了。中斷函數(shù)入口地址interruptvoidTINT0_ISR(void)
。在DSP復(fù)位后,進入中函數(shù)前,看門狗開著的,所以在進入中函數(shù)后第一件事情是關(guān)看門狗,在這個函數(shù)里面InitSysCtrl();中斷是開著的需要關(guān)閉(DINT;),PIE寄存器(InitPieCtrl();//初始化pie寄存器)(IER=0x0000;//禁止所有的中斷IFR=0x0000;)、中斷向量表是沒有初始化的,所以要初始化(InitPieVectTable();//初始化pie中斷向量表)。InitSysCtrl();//初始化cpuDINT;//關(guān)中斷
InitPieCtrl();//初始化pie寄存器IER=0x0000;//禁止所有的中斷IFR=0x0000;
InitPieVectTable();//初始化pie中斷向量表EALLOW;
//ThisisneededtowritetoEALLOWprotectedregisters
PieVectTable.TINT0=&cpu_timer0_isr;//指定中斷服務(wù)子程序,這個地方要是用到了DSP的庫函數(shù)DSP281X_DefaultIsr()函數(shù)就不需要了。EDIS;
InitCpuTimers();//初始化定時器0
ConfigCpuTimer(&CpuTimer0,150,9.75);//配置你要定時的時間StartCpuTimer0();//定時器開始計數(shù)
PieCtrlRegs.PIEIER1.bit.INTx7=1;//使能PIE級中斷PIEIERx中的x=1,即使能的12組中的第1組第七個
IER|=M_INT1;//使能CPU級的中斷第1組EINT;//使能INTMERTM;
//使能仿真時DBGM5、在中斷函數(shù)中要做的interruptvoidTINT0_ISR(void)//CPU-Timer0{
PieCtrlRegs.PIEACK.all=PIEACK_GROUP1;//PIEACK清0CpuTimer0Regs.TCR.bit.TIF=1;//外設(shè)中斷標(biāo)志位清CpuTimer0Regs.TCR.bit.TRB=1;//重新裝載}
友情提示:本文中關(guān)于《TMS320F28335外部中斷總結(jié)》給出的范例僅供您參考拓展思維使用,TMS320F28335外部中斷總結(jié):該篇文章建議您自主創(chuàng)作。
來源:網(wǎng)絡(luò)整理 免責(zé)聲明:本文僅限學(xué)習(xí)分享,如產(chǎn)生版權(quán)問題,請聯(lián)系我們及時刪除。