- 相關(guān)推薦
TMS320F24x的實(shí)時(shí)多中斷任務(wù)處理
摘要:TMS320F240是TI公司定點(diǎn)DSP芯片F(xiàn)24x系列中具有代表性的一種。在分析其多中斷源共享DSP內(nèi)核同一中斷級(jí)原理的基礎(chǔ)上,探討該系列芯片在實(shí)時(shí)多中斷任務(wù)處理的軟件編程過(guò)程中的實(shí)現(xiàn)方法,并給出具體的應(yīng)用實(shí)例。關(guān)鍵詞:TMS320F240 實(shí)時(shí)多中斷任務(wù) ISR GISR SISR
引言
TMS320F240內(nèi)部集成了完善的外圍設(shè)備,包括2個(gè)10位的A/D轉(zhuǎn)換器和1個(gè)串口通信接口模塊(SCI),以及其獨(dú)有的、可提供3個(gè)16位的定時(shí)器,3個(gè)單比較單元和3個(gè)全比較單元的事件管理器(event manager)單元。F240芯片采用多個(gè)中斷源共享DSP內(nèi)核同一中斷級(jí)的中斷結(jié)構(gòu),與常用的數(shù)學(xué)控制芯片相比,它提供了更多的中斷源,可以滿足對(duì)復(fù)雜控制對(duì)象的實(shí)時(shí)多中斷任務(wù)處理要求,使得用戶能更加方便、靈活地編寫中斷處理程序。
(范文先生網(wǎng)www.gymyzhishaji.com收集整理)
1 TMS320F240中斷系統(tǒng)的特點(diǎn)及中斷響應(yīng)過(guò)程
1.1 TMS320F240的中斷系統(tǒng)的特點(diǎn)
TMS320F240芯片中斷系統(tǒng)的基本特點(diǎn)是:通過(guò)賦予每個(gè)中斷源以不同的優(yōu)先級(jí),使多個(gè)中斷源可以共享DSP內(nèi)核中同一中斷級(jí),從而提供更多的中斷源和更靈活的中斷處理方法。具體而言,在F240器件中,所有的中斷請(qǐng)求都是送至DSP內(nèi)核進(jìn)行處理的。對(duì)可屏蔽中斷,DSP內(nèi)核只提供了6個(gè)可屏蔽的中斷級(jí)(INT1~I(xiàn)NT6)。而F240的可屏蔽中斷源大大超過(guò)了6個(gè)(例如:僅F240器件的3個(gè)通用定時(shí)器就有12個(gè)可屏蔽中斷源,用戶可使用的中斷源則多達(dá)36個(gè))。所以,在F240中,這6個(gè)中斷級(jí)中的每一個(gè)都會(huì)被多個(gè)中斷源共享,即F240在實(shí)現(xiàn)多中斷任務(wù)時(shí),基本上都會(huì)出現(xiàn)多中斷源共享DSP內(nèi)核同一中斷的情況。當(dāng)多于一個(gè)的硬件中斷被觸發(fā)掛起時(shí),F(xiàn)240將根據(jù)優(yōu)先級(jí)別的高低順序執(zhí)行相應(yīng)的中斷服務(wù)子程序。F240器件可以識(shí)別下列4種類型的中斷源:
①?gòu)?fù)位中斷;
②由6個(gè)外部引腳(XINT1、XINT2、XINT3、PDPINT、RS以及NMI引腳)產(chǎn)生的外部中斷;
③由片內(nèi)外設(shè)模塊,包括事件管理模塊(EV)、A/D轉(zhuǎn)換模塊(ADC)、串行通信模塊(SCI)等產(chǎn)生的外設(shè)中斷;
④由INTR指令、NMI指令或TRAP指令等引起的軟件中斷等。
其中,除了軟件中斷、兩個(gè)外部硬件中斷RS和NMI是不可屏蔽中斷之外,其余的都是可屏蔽中斷。相對(duì)于可屏蔽中斷而言,不可屏蔽中斷涉及的寄存器較少,處理方法較為簡(jiǎn)便。文中主要對(duì)可屏蔽中斷的多中斷任務(wù)處理進(jìn)行詳細(xì)分析。
1.2 TMS320F240多級(jí)中斷寄存器的結(jié)構(gòu)
在TMS320F240的程序空間中,中斷向量占據(jù)了0000h~0003fh的地址空間。中斷向量地址被分為兩個(gè)地址單元,從而雙字的轉(zhuǎn)移指令可存放在這些單元中。為了處理多中斷源共享DSP內(nèi)核同一中斷級(jí)的問(wèn)題,DSP內(nèi)部提供了多級(jí)中斷控制寄存器以滿足需要。
(1)CPU總中斷級(jí)寄存器
①中斷屏蔽寄存器(IMR)。它包含用于使能或禁止每一中斷級(jí)(INT1~I(xiàn)NT6)的屏蔽位,地址為0004h,各位情況如圖1所示。它用來(lái)屏蔽外部和內(nèi)部硬件中斷(NMI和RS除外)。當(dāng)要屏蔽某硬件中斷時(shí),就把相應(yīng)位清0;當(dāng)要開(kāi)放某硬件中斷時(shí),就把相應(yīng)位置1,并且它的每一位不受硬件復(fù)位的影響。在圖1中,0表示一般情況下讀的數(shù)為0,R表示讀,W表示寫,-0表示復(fù)位后這位為0。
②中斷標(biāo)志寄存器(IFR)。它包含用以指示INT1~I(xiàn)NT6中斷級(jí)中,已經(jīng)發(fā)送至CPU的可屏蔽中斷請(qǐng)求的標(biāo)志位,地址為0006h,各位情況如圖2所示。當(dāng)有一個(gè)可屏蔽中斷到達(dá)CPU時(shí),IFR的相應(yīng)標(biāo)志位就置1,表明相應(yīng)中斷(INT1~I(xiàn)NT6)正在被掛起或正在等待響應(yīng)。將1寫入到相應(yīng)的標(biāo)志位,可清除相應(yīng)位,并清除其中斷請(qǐng)求。在圖2中,0表示一般情況下讀的數(shù)為0,R表示讀,W1C表示寫1時(shí)把這位清為0,-0表示復(fù)位后這位為0。
(2)外設(shè)備中斷源分級(jí)控制寄存器
由外設(shè)產(chǎn)生的每一個(gè)特定中斷源,DSP都提供兩個(gè)相應(yīng)的分級(jí)控制寄存器,包括一個(gè)子標(biāo)志位中斷控制寄存器和一個(gè)子屏蔽位中斷控制寄存器。
對(duì)于由事件管理器產(chǎn)生的中斷事件,每個(gè)中斷源都有相應(yīng)的中斷控制寄存器,如圖3所示。
①三組事件中斷子屏蔽寄存器(EVIMRA/EVIMRB/EVIMRC),用以屏蔽對(duì)應(yīng)的事件管理器中斷。EVIMRi(i=A,B,C)各位的意義基本與IMR一致。
②三組事件中斷子標(biāo)志寄存器(EVIFRA/EVIFRB/EVIFRC),用以指示對(duì)應(yīng)的事件管理器中斷。EVIFRi(i=A,B,C)各位的意義基本與IFR一致。
對(duì)于系統(tǒng)模塊中斷,其各個(gè)中斷事件的中斷屏蔽位和中斷標(biāo)志位由各個(gè)專用的分級(jí)模塊寄存器提供。如SCI中斷,其掃收中斷RXINT的屏蔽與使能由SCI模塊內(nèi)的控制寄存器SCICLT2的中斷位RX/BKEN設(shè)置。當(dāng)接收中斷產(chǎn)生后,SCI的接收狀態(tài)寄存器SCIRXST的RXRDY位置1,以表示接收中斷產(chǎn)生。
圖4 可屏蔽中斷的多中斷任務(wù)響應(yīng)處理示意圖
另外,值得注意的是,DSP內(nèi)核的ST0狀態(tài)寄存器中還有一個(gè)中斷總屏蔽位-INTM。INTM為0時(shí),開(kāi)中斷,允許沒(méi)有被屏蔽的中斷使能;INTM為1時(shí),則禁止所有可屏蔽中斷。
1.3 TMS320F240的中斷響應(yīng)過(guò)程
(1)TMS320F240中斷響應(yīng)過(guò)程
當(dāng)有中斷事件發(fā)生時(shí),F(xiàn)240器件分三個(gè)階段進(jìn)行中斷處理。
①接收中斷請(qǐng)求。由軟件中斷(來(lái)自程序代碼)或硬件中斷(來(lái)自引腳或片內(nèi)外設(shè))提出中斷請(qǐng)求,將主程序掛起。
②響應(yīng)中斷。如果中斷是可屏蔽的,當(dāng)這些可屏蔽中斷的應(yīng)用條件滿足時(shí),F(xiàn)240器件響應(yīng)中斷;對(duì)于不可屏蔽的硬件中斷和軟件中斷,F(xiàn)240器件將立即作出響應(yīng)。
③執(zhí)行中斷服務(wù)子程序。一時(shí)中斷被響應(yīng),F(xiàn)240器件便轉(zhuǎn)移到其相應(yīng)的中斷子程序ISR(Interrupt Service Routine)。F240按用戶放置在預(yù)定地址(向量存儲(chǔ)單元)處的轉(zhuǎn)移指令,執(zhí)行用戶寫好的中斷服務(wù)程序。
在完成對(duì)多中斷任務(wù)的實(shí)時(shí)處理時(shí),對(duì)不同級(jí)別的中斷源響應(yīng),直接進(jìn)入相應(yīng)的ISR進(jìn)行處理即可。對(duì)共享DSP內(nèi)核中同一中斷優(yōu)先級(jí)的多中斷源,DSP則利用內(nèi)部的多級(jí)中斷控制寄存器,對(duì)每一個(gè)中斷源發(fā)出的中斷請(qǐng)求都用多個(gè)中斷標(biāo)志進(jìn)行標(biāo)識(shí)。圖4是一個(gè)多中斷源共享INT3級(jí)中斷的多中斷任務(wù)請(qǐng)求響應(yīng)處理過(guò)程示意圖。當(dāng)接收到一個(gè)中斷信號(hào)(TPINT2/TOFINT3)時(shí),相應(yīng)的中斷源子標(biāo)志寄存器(EVIFRB)中的標(biāo)志位被置位,用以指示中斷已被請(qǐng)求。如果中斷源子屏蔽寄存器(EVIMRB)中的屏蔽位也被設(shè)置為開(kāi)中斷,則該信號(hào)被送至仲裁邏輯器,仲裁邏輯可能同時(shí)從一個(gè)或多個(gè)中斷控制寄存器接收到類似的多中斷任務(wù)信號(hào)。仲裁邏輯通過(guò)比較這些競(jìng)爭(zhēng)中斷請(qǐng)求的優(yōu)先級(jí),將具有最高優(yōu)先級(jí)的中斷送至CPU。CPU的總中斷級(jí)標(biāo)志寄存器IFR中與所接收的中斷優(yōu)先級(jí)相對(duì)應(yīng)的中斷標(biāo)志位將被置位,指示中斷被掛起。如果總中斷級(jí)屏蔽寄存器IMR中相應(yīng)的屏蔽位為1,并且DSP中斷總屏蔽位INTM為0,則CPU響應(yīng)該中斷并執(zhí)行相應(yīng)的中斷服務(wù)子程序。
(2)中斷向量偏移地址
為了更好地處理多中斷源復(fù)用的問(wèn)題,DSP采用了向量偏移地址的方法。因?yàn)椴捎弥袛鄻?biāo)志分辨的方法需要進(jìn)行多次條件判斷才能把涉及到的具體中斷源分辨出來(lái);而采用中斷向量偏移地址的方法,只需兩條指令即可完成分辨任務(wù),減少了程序存儲(chǔ)器的存儲(chǔ)開(kāi)銷,節(jié)約了CPU的時(shí)鐘開(kāi)銷。
DSP控制器為事件管理模塊的每一個(gè)中斷都分配了一個(gè)不同的中斷向量偏移地址。當(dāng)某個(gè)事件管理模塊發(fā)出了請(qǐng)求信號(hào),分自動(dòng)地將該中斷的向量偏地址寫入到對(duì)應(yīng)的事件管理中斷向量寄存器(EVIVRA/EVIVRB/EVIVRC)中。而對(duì)于由系統(tǒng)外設(shè)模塊產(chǎn)生的中斷,DSP控制器將分配的中斷向量偏移地址寫入到系統(tǒng)中斷向量寄存器(SYSIVR)中。用戶可以通過(guò)讀取該寄存器來(lái)取得外設(shè)中斷的中斷向量偏移地址。所以在編程開(kāi)發(fā)時(shí),先要編好一個(gè)中斷向量表,對(duì)于沒(méi)有用到的中斷也應(yīng)該編上,并讓它返回到一個(gè)空位置,以免發(fā)生意外情況。這里,給出事件管理器B組的INT3級(jí)中斷向量寄存器的結(jié)構(gòu)示意圖,如表1所列。關(guān)于每一個(gè)中斷級(jí)的中斷向量寄存器(IVR)單元和每一中斷事件的偏移量的詳細(xì)信息,見(jiàn)F240的數(shù)據(jù)手冊(cè)。
表1 TMS320F240 INT3級(jí)中斷控制向量表
事件管理器中斷組B EVIVRB(7433H) 002AH 可 EV.GPT2 定時(shí)器2周期中斷 TCINT2 002CH 可 EV.GPT2 定時(shí)器2比較中斷 TUFINT2 002DH 可 EV.GPT2 定時(shí)器2下溢中斷 TOFINT2 002EH 可 EV.GPT2 定時(shí)器2上溢中斷 TPINT3 002FH 可 EV.GPT3 定時(shí)器3周期中斷 TCINT3 0030H 可 EV.GPT3 定時(shí)器3比較中斷 TUFINT3 0031H 可 EV.GPT3 定時(shí)器3下溢中斷 TOFINT3 0032H 可 EV.GPT3 定時(shí)器3上溢中斷
2 TMS320F240實(shí)時(shí)多中斷任務(wù)處理的軟件實(shí)現(xiàn)
由于F240器件采用了多個(gè)中斷源共享內(nèi)核同一中斷級(jí)的中斷方式,不僅提供了更多的中斷源,而且使得用戶能方便地處理各種中斷源的中斷請(qǐng)求。
如圖5所示,當(dāng)系統(tǒng)有多中斷任務(wù)產(chǎn)生時(shí),一旦有中斷任務(wù)被響應(yīng),則CPU終止當(dāng)前正在執(zhí)行的程序代碼,轉(zhuǎn)移至中斷服務(wù)子程序并執(zhí)行。中斷服務(wù)子程序主要分兩個(gè)步驟完成。
①轉(zhuǎn)移至通用中斷服務(wù)子程序(GISR-G功Interrupt Service Routine)。當(dāng)中斷級(jí)中的某一個(gè)中斷被響應(yīng)時(shí),CPU將轉(zhuǎn)移至相應(yīng)的向量地址,并根據(jù)該地址轉(zhuǎn)移至GISR。例如,若INT3中的一個(gè)中斷被響應(yīng),則程序計(jì)數(shù)器(PC)值被存入棧頂,然后PC機(jī)中裝入程序寄存器地址0006h。地址0006h和0007h中包含一條轉(zhuǎn)移指令。該指令使CPU轉(zhuǎn)移至GISR。
②轉(zhuǎn)移至特定中斷服務(wù)子程序(SISR-Special Interrupt Service Routine)。當(dāng)一個(gè)外設(shè)中斷請(qǐng)求被響應(yīng)時(shí),外設(shè)產(chǎn)生一個(gè)相應(yīng)于該特定中斷事件的向量地址偏移量。該偏移量通常被鎖存在系統(tǒng)中斷向量寄存器(SYSIVR)或事件管理中斷向量寄存器(EVIVRA/EVIVRB/EVIVRC)中。GISR必須讀取存儲(chǔ)在IVR中的值,確定具體的子中斷源,并據(jù)此產(chǎn)生轉(zhuǎn)移至SISR的轉(zhuǎn)移目標(biāo)地址,然后進(jìn)行特定的中斷處理。
在對(duì)SISR進(jìn)行處理完畢之后,ISR以一條返回指令RET結(jié)束。該指令將把返回地址從堆棧彈出。然后,CPU繼續(xù)執(zhí)行被中斷的代碼序列。
如果對(duì)于某一中斷級(jí),并沒(méi)有多中斷源共享的情況,則直接在GISR中進(jìn)行中斷處理即可。此時(shí),沒(méi)有必要進(jìn)入SISR進(jìn)行子中斷源的判斷。另外,進(jìn)入中斷后,INTM位自動(dòng)置1,以防止其它的可屏蔽中斷。若想允許中斷嵌套,則要在ISR中清除INTM位(CLRC INTM),在全局上重新使能可屏蔽中斷,使得新的ISR得以嵌套。
圖6 中斷服務(wù)程序結(jié)構(gòu)框圖
下面結(jié)合一個(gè)具體的機(jī)器人DSP控制程序,給出DSP實(shí)時(shí)多中斷任務(wù)處理的實(shí)例。在本機(jī)器人DSP控制程序中,一共要完成四個(gè)中斷實(shí)時(shí)處理任務(wù),并且涉及到了多個(gè)中斷源共享DSP內(nèi)核同一中斷級(jí)的中斷方式。中斷服務(wù)程序結(jié)構(gòu)框圖如圖6所示。串行中斷SCI占用了INT1第一級(jí)中斷,完成DSP與上位機(jī)的通信任務(wù)。定時(shí)器T1中斷占用了INT2第二級(jí)中斷,完成傳感器的位置信息采集和PID控制任務(wù)。而定時(shí)器T2中斷和定時(shí)器T3中斷則共用了INT3第三級(jí)中斷,完成產(chǎn)生兩路PWM波形的任務(wù)。定時(shí)器T2和定時(shí)器T3各自周期中斷的向量偏移地址分別為002BH和002FH。當(dāng)有INT3級(jí)中斷申請(qǐng)時(shí),在對(duì)應(yīng)的中斷服務(wù)程序(ISR)中判斷中斷的向量偏移地址,以此來(lái)確定具體是產(chǎn)生了定時(shí)器T2中斷還是定時(shí)器T3中斷,再轉(zhuǎn)入定時(shí)器T2/T3相應(yīng)的子中斷服務(wù)程序。在中斷服務(wù)程序中,需要根據(jù)在中斷程序中對(duì)各種寄存器的使用情況,編寫中斷保護(hù)和中斷恢復(fù)代碼,即在進(jìn)入ISR時(shí),要對(duì)這些寄存器變量進(jìn)行堆棧保護(hù);在ISR完成時(shí),要對(duì)這些寄存器變量進(jìn)行堆;謴(fù)。另外,在編寫中斷服務(wù)程序時(shí),要注意對(duì)各寄存器的中斷標(biāo)志位和中斷屏蔽位進(jìn)行適當(dāng)?shù)奶幚恚瑸檫M(jìn)入下一次中斷做準(zhǔn)備。以下即為給出的機(jī)器人中斷服務(wù)程序的核心代碼,主要對(duì)兩個(gè)定時(shí)器中斷源共享INT3中斷級(jí)的中斷處理進(jìn)行詳盡地闡述。對(duì)于INT1和INT2這兩個(gè)中斷任務(wù),由于無(wú)多中斷源共享的問(wèn)題,在進(jìn)行中斷處理時(shí)比較簡(jiǎn)單,直接進(jìn)入相應(yīng)的ISR即可。相應(yīng)的中斷處理程序請(qǐng)見(jiàn)網(wǎng)絡(luò)補(bǔ)充版。
結(jié)語(yǔ)
在利用DSP進(jìn)行數(shù)字化控制的過(guò)程中,必然要使用到較多的中斷才能圓滿完成對(duì)復(fù)雜控制系統(tǒng)的控制任務(wù)。F240作為DSP TMS320F24x系列的典型代表,掌握F240的中斷處理方法,對(duì)TMS320F24x系列的TMS320F241/F243/C242以及TMS320LF2406/LF2407等芯片同樣具有參考意義。因此,這種處理方法還具有一定的通用性。筆者將該處理方法應(yīng)用到基于TMS320F240的主從遙控作業(yè)機(jī)器人控制系統(tǒng)的軟件開(kāi)發(fā)中。經(jīng)實(shí)踐證明,這能夠滿足機(jī)器人的實(shí)時(shí)多中斷任務(wù)處理的要求,并取得了良好的實(shí)際效果。
【TMS320F24x的實(shí)時(shí)多中斷任務(wù)處理】相關(guān)文章:
嵌入式實(shí)時(shí)系統(tǒng)中斷管理技術(shù)研究08-06
DMA在實(shí)時(shí)圖像處理中的應(yīng)用08-06
微型搶占式多任務(wù)實(shí)時(shí)內(nèi)核設(shè)計(jì)08-06
一種“假中斷”現(xiàn)象及處理方法08-06
利用實(shí)時(shí)內(nèi)核開(kāi)發(fā)嵌入式多任務(wù)程序08-06
通過(guò)任務(wù)分割提高嵌入式系統(tǒng)的實(shí)時(shí)性08-06
連續(xù)實(shí)時(shí)信號(hào)處理器的性能分析08-06