TMS320F28335 的外部中斷總結:
在這里我們要十分清楚DSP的中斷系統。C28XX一共有16個中斷源,其中有2個不可屏蔽的中斷RESET和NMI、定時器1和定時器2分別使用中斷13和14。這樣還有12個中斷都直接連接到外設中斷擴展模塊PIE上。說的簡單一點就是PIE通過12根線與28335核的12個中斷線相連。而PIE的另外一側有12*8根線分別連接到外設,如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模塊還有中斷標志寄存器PIEIFR,同樣它的低8位是來自外部中斷的8個標志位,同樣CPU的IFR寄存器是中斷組的標志寄存器。由此看來,CPU的所有中斷寄存器控制12組的中斷,PIE的所有中斷寄存器控制每組內8個的中斷。除此之外,我們用到哪一個外部中斷,相應的還有外部中斷的寄存器,需要注意的就是外部中斷的標志要自己通過軟件來清零。而PIE和CPU的中斷標志寄存器由硬件來清零。
EALLOW; // This is needed to write to EALLOW protected registers
PieVectTable.XINT2 = &ISRExint; //告訴中斷入口地址
EDIS; // This is needed to disable write to EALLOW protected registers
PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block使能PIE
PieCtrlRegs.PIEIER1.bit.INTx5= 1; //使能第一組中的中斷5
IER |= M_INT1; // Enable CPU 第一組中斷
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
也就是說,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時鐘和系統時鐘一樣且支持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;//觸發模式為下降沿觸發
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只能對GPIO0—GPIO31配置;外部中斷3和4、5、6、7只對GPIO32—GPIO63配置。
評論
查看更多