林志貴, 姚芳琴, 李敏, 劉穎
(天津工業(yè)大學(xué) 電子與信息工程學(xué)院,天津 300387)
數(shù)字信號(hào)控制器的中斷系統(tǒng)分析與實(shí)現(xiàn)方法※
林志貴, 姚芳琴, 李敏, 劉穎
(天津工業(yè)大學(xué) 電子與信息工程學(xué)院,天津 300387)
數(shù)字信號(hào)控制器(DSC)具有數(shù)字信號(hào)處理能力和MCU控制接口,其中斷系統(tǒng)功能非常豐富,這為應(yīng)用帶來方便,同時(shí)也帶來設(shè)置的復(fù)雜性。本文以MC56F8257為例,詳細(xì)分析DSC中斷系統(tǒng)及其設(shè)置方法;以MC56F8257中的QSCI模塊中斷及CAN模塊中斷為例,從不帶中斷優(yōu)先級(jí)、帶中斷優(yōu)先級(jí)和優(yōu)先級(jí)嵌套三個(gè)方面,分析DSC中斷設(shè)置過程及響應(yīng)結(jié)果。分析結(jié)果進(jìn)一步驗(yàn)證DSC中斷具有優(yōu)先級(jí)及屏蔽等特點(diǎn),為推廣DSC芯片的應(yīng)用提供指導(dǎo)。
數(shù)字信號(hào)控制器;中斷系統(tǒng);優(yōu)先級(jí);MC56F8257
數(shù)字信號(hào)控制器(Digital Signal Controller, DSC)是將DSP內(nèi)核與MCU接口相結(jié)合的微處理器芯片。當(dāng)多個(gè)中斷源發(fā)出中斷請(qǐng)求時(shí),CPU需要選擇接收哪一個(gè)中斷源,這就帶來中斷源選擇問題[5]。
解決這個(gè)問題的方法有屏蔽選擇法、優(yōu)先級(jí)選擇法和優(yōu)先屏蔽選擇法三種。優(yōu)先屏蔽選擇法同時(shí)具有其他兩種方法的功能,既可屏蔽所有中斷源,又可屏蔽某些模塊中斷源,也可以對(duì)非屏蔽的中斷源進(jìn)行優(yōu)先級(jí)設(shè)置。這種方法既能避免優(yōu)先級(jí)選擇法不能解決某些中斷源的干擾問題,又能有效避免屏蔽選擇法造成的被屏蔽中斷永遠(yuǎn)不能被處理的缺點(diǎn)[8]。該種方法目前逐步被DSC芯片商采用,如MC56F8257芯片就采用這種方法。
MC56F8257共有67個(gè)中斷源、5個(gè)中斷優(yōu)先級(jí)。中斷的請(qǐng)求是通過中斷控制器模塊控制的。中斷控制器模塊由中斷源、優(yōu)先級(jí)設(shè)置和控制部分組成,其框圖如圖1所示,主要用于配置中斷優(yōu)先級(jí)、解析中斷請(qǐng)求,并且將中斷向量交給CPU執(zhí)行。
圖1 中斷控制器框圖
從圖1可以看出,在中斷請(qǐng)求處理過程中,當(dāng)有多個(gè)中斷源發(fā)出請(qǐng)求(INT1…INTn)時(shí),首先優(yōu)先級(jí)別譯碼模塊根據(jù)用戶設(shè)置的優(yōu)先級(jí)進(jìn)行譯碼,譯碼后進(jìn)入相應(yīng)的優(yōu)先級(jí)編碼器進(jìn)行編碼,最后通過控制模塊進(jìn)行優(yōu)先級(jí)的配置。控制模塊根據(jù)DSP56800E核中的狀態(tài)寄存器SR中的屏蔽等設(shè)置位,對(duì)編碼后的中斷源進(jìn)行處理,處理后的結(jié)果反映在控制寄存器INTC_CTRL中的INT、VAB和IPIC位。
INT是中斷位,該位反映內(nèi)核中斷的狀態(tài)。當(dāng)該位值為1時(shí),有中斷送入內(nèi)核;否則,無中斷送入內(nèi)核。IPIC是中斷優(yōu)先級(jí)位,該位表示送入內(nèi)核的中斷源的優(yōu)先級(jí),也表示當(dāng)前內(nèi)核所接收的中斷的最高優(yōu)先級(jí)。VAB是中斷向量信號(hào),也是對(duì)應(yīng)中斷在中斷向量表中的地址的[7:1]位[9]。
MC56F8257內(nèi)核為16位增強(qiáng)型DSP56800E,該內(nèi)核處理中斷請(qǐng)求有兩種模式:標(biāo)準(zhǔn)和快速中斷處理模式[10]。MC56F8257標(biāo)準(zhǔn)中斷處理模式具體流程如圖2所示,該模式通過JSR指令,轉(zhuǎn)向中斷服務(wù)程序,占用一定數(shù)量的軟件開銷,但所有級(jí)別中斷都支持該模式。一般中斷處理的控制流程圖如圖2所示。
圖2 一般中斷處理的控制流程圖
圖3 快速中斷處理的控制流程圖
快速中斷處理不需要執(zhí)行JSR指令,如圖3所示,而是通過快速中斷向量地址寄存器獲得中斷服務(wù)程序首地址,節(jié)省了軟件資源,但它只能用于中斷優(yōu)先級(jí)為2級(jí)的中斷。具體采用何種模式,應(yīng)根據(jù)實(shí)際應(yīng)用需要進(jìn)行設(shè)置。
2.1 中斷的關(guān)閉與開放
開放MC56F8257中某個(gè)模塊中斷,通常需要開放總中斷及模塊中斷來實(shí)現(xiàn)。這兩部分缺一不可,并且開放總中斷在前,開放模塊中斷在后。同理,關(guān)閉MC56F8257中某個(gè)模塊中斷,需要關(guān)閉總中斷及模塊中斷來實(shí)現(xiàn),先關(guān)閉模塊中斷,再關(guān)閉總中斷;如果允許中斷嵌套情況,無需關(guān)閉總中斷。
老開放MC56F8257總中斷,則清中斷控制寄存器(INTC_CTRL)的INT_DIS位;關(guān)閉總中斷,則置位該位。具體代碼如下:
#define EnableInterrupt()
INTC_CTRL&=~I(xiàn)NTC_CTRL_INT_DIS_MASK
#define DisableInterrupt()
INTC_CTRL|=INTC_CTRL_INT_DIS_MASK
開放或關(guān)閉模塊中斷,需設(shè)置模塊內(nèi)部的控制寄存器的相應(yīng)位。如開放QSCI模塊的接收中斷0,則需置位QSCI控制寄存器1(QSCIx_CTRL1)中的RFIE位;關(guān)閉該中斷,清RFIE位即可。具體代碼如下:
#define EnableQSCIReInt(0)
QSCI_C1(0)|=(QSCI1_CTRL1_RFIE_MASK)
#define DisableQSCIReInt(0)
QSCI_C1(0)&=~(QSCI1_CTRL1_RFIE_MASK)
2.2 中斷優(yōu)先級(jí)的設(shè)置
DSP56800E內(nèi)核支持5級(jí)中斷:LP、0、1、2和3,其優(yōu)先級(jí)別依次升高[11]。最低優(yōu)先級(jí)LP只能由系統(tǒng)SWILP指令產(chǎn)生;0~2優(yōu)先級(jí)用戶可以編程設(shè)置,主要用于外設(shè)和外部中斷請(qǐng)求;級(jí)別3是最高優(yōu)先級(jí)且不可屏蔽。
具體設(shè)置某個(gè)中斷源的中斷優(yōu)先級(jí),可通過設(shè)置中斷優(yōu)先級(jí)寄存器(INTC_IPR0~I(xiàn)NTC_IPR7)中的相應(yīng)位來實(shí)現(xiàn)[9]。如設(shè)置QSCI中斷優(yōu)先級(jí),通過設(shè)置中斷優(yōu)先級(jí)寄存器(INTC_IPR2)中的QSCI0_RCV位實(shí)現(xiàn),該位具體含義見表1。
表1 QSCI的中斷優(yōu)先級(jí)設(shè)置
從表1中可以看出,QSCI中斷可配置三個(gè)不同級(jí)別,即優(yōu)先級(jí)0、1和2。如果用戶不配置QSCI中斷的優(yōu)先級(jí),則系統(tǒng)復(fù)位時(shí),自動(dòng)分配其優(yōu)先級(jí)為0;但是復(fù)位后,緊接著初始化QSCI模塊,其優(yōu)先級(jí)由0變?yōu)?。
2.3 設(shè)置中斷屏蔽
通過設(shè)置DSP56800E內(nèi)核中的狀態(tài)寄存器SR的I0、I1位,實(shí)現(xiàn)屏蔽不同級(jí)別優(yōu)先級(jí)中斷,具體設(shè)置如表2所列。
表2 中斷屏蔽位的設(shè)置
2.4 中斷向量表的定義
MC56F8257有67個(gè)中斷源,其向量號(hào)從0~66[9]。每個(gè)中斷源的中斷服務(wù)程序首地址放入中斷向量表中,當(dāng)有中斷請(qǐng)求時(shí),CPU通過中斷向量號(hào)在中斷向量表中找到其中斷服務(wù)程序的首地址,根據(jù)這個(gè)首地址找到中斷服務(wù)程序,進(jìn)行中斷處理。
中斷向量表在FLASH中的位置由向量基地址寄存器(VBA)決定。向量基地址寄存器VBA[12:0]為21位中斷向量表首地址的高13位,低8位自動(dòng)補(bǔ)0。具體到某個(gè)模塊中斷服務(wù)程序首地址在中斷向量表中的位置,由向量基地址寄存器(VBA)及控制寄存器(INTC_CTRL)的VAB位決定;向量基地址寄存器VBA[12:0]為其在中斷向量表地址[20:0]的高13位[20:8],控制寄存器(INTC_CTRL)的VAB位為其地址的[7:1],低位補(bǔ)0。
系統(tǒng)復(fù)位后,VBA的復(fù)位值為0x0000,系統(tǒng)進(jìn)入復(fù)位中斷(向量號(hào)為0),相應(yīng)的起始地址在0x00 0000處,這個(gè)過程系統(tǒng)自動(dòng)完成。如果開放某個(gè)模塊中斷,則需要將該模塊中斷服務(wù)程序的首地址加載到中斷向量表中的相應(yīng)位置。具體過程如下:首先建立中斷向量表,沒有開放的模塊中斷,在表中對(duì)應(yīng)位置放入空函數(shù)的首地址(通過JSR isrDummy實(shí)現(xiàn)),開放的模塊中斷,在表中對(duì)應(yīng)位置放入中斷服務(wù)程序的首地址,通常中斷服務(wù)程序由函數(shù)實(shí)現(xiàn),在這里通過放入具體函數(shù)首地址實(shí)現(xiàn)。如開放QSCI0的接收中斷(向量號(hào)為32),則其中斷服務(wù)函數(shù)為isrSCI0_Recv,即可通過在向量表中加入JSR isrSCI0_Recv代碼實(shí)現(xiàn)。具體如下:
volatile asm void _vect(void);
#pragma define_section interrupt_vectors
"interrupt_vectors.text" RX
#pragma section interrupt_vectors begin
volatile asm void _vect(void) {
JSR init_MC56F824x_5x_ISR_HW_RESET
/* Interrupt no. 0 (Used) - ivINT_Reset*/
JSR isrDummy
/* Interrupt no. 1 (Used) - ivINT_COPReset*/
JSR isrDummy
/* Interrupt no. 2 (Unused) - ivINT_Illegal_Instruction*/
?
JSR isrSCI0_Recv
/* Interrupt no. 32 (Used) - ivINT_QSCI0_RxFull*/
?
JSR isrDummy
/* Interrupt no. 65 (Unused) - ivINT_GPIO_A*/
JSR isrDummy
/* Interrupt no. 66 (Unused) - ivINT_LP*/
}
#pragma section interrupt_vectors end
其中,isrDummy的函數(shù)形式如下:
void isrDummy(void){
}
MC56F8257中斷設(shè)置主要包括關(guān)閉總中斷、設(shè)置中斷屏蔽和開放總中斷三個(gè)過程。中斷的設(shè)置過程在主函數(shù)和中斷服務(wù)程序中都要得到體現(xiàn),但二者在設(shè)置過程中有所差異。
主函數(shù)中的中斷設(shè)置除了包括上述三個(gè)過程外,還包括開放模塊中斷及設(shè)置中斷優(yōu)先級(jí),具體流程如下:一是關(guān)閉總中斷,目的是實(shí)現(xiàn)后續(xù)各個(gè)模塊中斷設(shè)置過程中不被外界干擾。二是開放模塊中斷,如果需要某個(gè)模塊中斷,可以使能該模塊中斷。三是設(shè)置各模塊中斷優(yōu)先級(jí),主要應(yīng)用于多個(gè)中斷請(qǐng)求的情況。在這種情況下,根據(jù)應(yīng)用環(huán)境決定各個(gè)模塊中斷優(yōu)先順序,設(shè)置中斷優(yōu)先級(jí),如果不設(shè)置優(yōu)先級(jí),則系統(tǒng)會(huì)自動(dòng)產(chǎn)生默認(rèn)的優(yōu)先級(jí)。四是設(shè)置中斷屏蔽,通過屏蔽一定級(jí)別的中斷,使系統(tǒng)避免受其干擾。五是開放總中斷,在上述設(shè)置步驟完成后,通過開放總中斷,使其設(shè)置有效。
中斷服務(wù)程序中的中斷設(shè)置包括關(guān)閉總中斷、設(shè)置中斷屏蔽和開放總中斷三個(gè)過程。關(guān)閉總中斷和開放總中斷過程同主函數(shù),設(shè)置中斷屏蔽過程與主函數(shù)類似,但需要注意的是,主函數(shù)與中斷服務(wù)程序中的中斷屏蔽設(shè)置應(yīng)保證所需的中斷不被屏蔽。
4.1 測(cè)試條件與環(huán)境
現(xiàn)以MC56F8257中的QSCI模塊中斷及CAN模塊中斷為例,說明上述中斷設(shè)置方法及實(shí)施過程,并對(duì)其過程進(jìn)行分析。選用QSCI模塊的QSCI0傳輸數(shù)據(jù),波特率設(shè)為9 600 bps。CAN模塊接收數(shù)據(jù),CAN通信頻率為800 kHz。程序編譯調(diào)試環(huán)境為CodeWarrior 10.4,測(cè)試環(huán)境為串口調(diào)試工具SSCOM V2.0。
4.2 測(cè)試結(jié)果與分析
從不帶中斷優(yōu)先級(jí)、帶中斷優(yōu)先級(jí)和優(yōu)先級(jí)嵌套三個(gè)方面,測(cè)試分析MC56F8257中斷設(shè)置及實(shí)施過程。
(1) 不帶中斷優(yōu)先級(jí)
開放QSCI0接收中斷,不設(shè)置其中斷優(yōu)先級(jí),采用系統(tǒng)默認(rèn)優(yōu)先級(jí)2,不屏蔽該級(jí)別中斷,其主函數(shù)和中斷服務(wù)程序中的中斷代碼略——編者注。
運(yùn)行程序,從串口調(diào)試工具SSCOM V2.0發(fā)送字符“a”給MC56F8257,MC56F8257的QSCI0中斷接收,并將接收的數(shù)據(jù)發(fā)送給PC機(jī),最終接收到字符“a”。
如果屏蔽QSCI0接收中斷的默認(rèn)優(yōu)先級(jí)為2,其主函數(shù)和QSCI接收中斷服務(wù)程序中的中斷代碼有所不同,相關(guān)代碼略——編者注。
測(cè)試條件同上,其結(jié)果為接收不到字符“a”。
(2) 帶中斷優(yōu)先級(jí)
開放QSCI0接收中斷,設(shè)置其中斷優(yōu)先級(jí),不屏蔽該級(jí)別中斷,其主函數(shù)和中斷服務(wù)程序中的中斷代碼略——編者注。
測(cè)試結(jié)果同樣也能接收到字符“a”。
如果屏蔽QSCI0接收中斷的優(yōu)先級(jí)0,其主函數(shù)和QSCI接收中斷服務(wù)程序中的中斷代碼有所不同,具體相關(guān)代碼略——編者注。
其測(cè)試結(jié)果同樣是接收不到字符“a”。
(3) 優(yōu)先級(jí)嵌套
同時(shí)開放QSCI0接收中斷和CAN模塊接收中斷,并且前者優(yōu)先級(jí)高于后者,其主函數(shù)和中斷服務(wù)程序中的中斷代碼略——編者注。
運(yùn)行程序,當(dāng)僅有CAN接收中斷請(qǐng)求時(shí),CAN接收中斷服務(wù)程序接收字符串“CANMessage”,并通過QSCI0將該字符發(fā)送給串口調(diào)試工具。如果在這個(gè)過程中,又有QSCI0接收中斷請(qǐng)求,則CPU暫停CAN接收中斷服務(wù)程序的執(zhí)行,轉(zhuǎn)向QSCI0接收中斷服務(wù)程序處理,從串口調(diào)試工具窗口接收字符“a”,并發(fā)送給串口調(diào)試工具窗口。將QSCI0接收中斷服務(wù)程序執(zhí)行完成后,返回CAN接收中斷服務(wù)程序繼續(xù)執(zhí)行。
如果開放QSCI0接收中斷和CAN模塊接收中斷,并且前者優(yōu)先級(jí)低于后者,其主函數(shù)和中斷服務(wù)程序中的中斷代碼略——編者注。
運(yùn)行程序,當(dāng)僅有CAN接收中斷請(qǐng)求時(shí),CAN接收中斷服務(wù)程序接收字符串“CANMessage”,并通過QSCI0將該字符發(fā)送給串口調(diào)試工具。如果在這個(gè)過程中,又有QSCI0接收中斷請(qǐng)求,則CPU不會(huì)響應(yīng)其請(qǐng)求,繼續(xù)執(zhí)行CAN接收中斷服務(wù)程序,繼續(xù)發(fā)送字符串“CANMessage” 給串口調(diào)試工具。
本文以MC56F8257為例,分析DSC中斷系統(tǒng),該系統(tǒng)具有處理多達(dá)67個(gè)中斷源的能力,并能夠給這些中斷源賦予不同的優(yōu)先級(jí),實(shí)現(xiàn)中斷嵌套,并提供標(biāo)準(zhǔn)和快速中斷處理兩種模式,這些特點(diǎn)可使該系統(tǒng)被廣泛應(yīng)用。
上述特點(diǎn)也帶來中斷設(shè)置的靈活性,但是如果設(shè)置不當(dāng),會(huì)出現(xiàn)錯(cuò)誤。本文在分析中斷系統(tǒng)的同時(shí)給出其中斷設(shè)置方法及過程,并詳細(xì)分析中斷優(yōu)先級(jí)設(shè)置過程及注意事項(xiàng)。
最后,以MC56F8257中的QSCI模塊中斷及CAN模塊中斷為例,從不帶中斷優(yōu)先級(jí)、帶中斷優(yōu)先級(jí)和優(yōu)先級(jí)嵌套三個(gè)方面,分析中斷設(shè)置過程及響應(yīng)結(jié)果,結(jié)果進(jìn)一步驗(yàn)證了MC56F8257中斷處理具有屏蔽及優(yōu)先級(jí)可配置等特點(diǎn)。
[1] 林志貴,王宜懷. 數(shù)字信號(hào)控制器原理與實(shí)踐——MC56F8257[M]. 北京:北京航空航天大學(xué)出版社,2014.
[2] 林志貴. 微型計(jì)算機(jī)原理及接口技術(shù)[M].北京:機(jī)械工業(yè)出版社,2010.
[3] Zhao Yongxin, Huang Yanhong, He Jifeng, et al. Formal Model of Interrupt Program from a Probabilistic Perspective[C]// 2011 16th IEEE International Conference on Engineering of Complex Computer Systems, Las Vegas, NV, United states, 2011:87-94.
[4] 李敏. 計(jì)算機(jī)中斷系統(tǒng)淺談[J]. 福建電腦,2011(8):74-75.
[5] 田永紅. 利用中斷屏蔽技術(shù)修改中斷優(yōu)先級(jí)[J].企業(yè)技術(shù)開發(fā),2011,30(22):15-16.
[6] Strnadel, Josef. On design of priority-driven load-adaptive monitoring-based hardware for managing interrupts in embedded event-triggered real-time systems[C]// 2013 IEEE 16th International Symposium on Design and Diagnostics of Electronic Circuits & Systems (DDECS), Karlovy Vary, Czech Republic, 2013: 9-24.
[7] Wei Chipin, Li Zhaolin,Zheng Qingwei,et al. Design of a configurable multichannel interrupt controller[C]// 2010 Second Pacific-Asia Conference on Circuits Communications and Systems (PACCS 2010), Beijing, 2010 :30-327.
[8] Geng Rui,Hong Yi,Huang Guanghong.Testing Method for Interrupt Handling Mechanism of C Compiling System[J]. Microcomputer Information,2011(5): 4-182.
[9] Freescale. MC56F825x/4x Reference Manual, Rev.3.04,2011.
[10] 王宜懷,朱仕浪,郭蕓. 嵌入式技術(shù)基礎(chǔ)與實(shí)踐——ARM Cortex-M0+ Kinetis L系列微控制器[M]. 3版.北京:清華大學(xué)出版社,2013.
[11] Freescale. DSP56800E and DSP56800EX Core Reference Manual, Rev.3.09,2011.
林志貴(副教授),主要研究方向?yàn)榍度胧较到y(tǒng)、無線傳感器網(wǎng)絡(luò)。
Analysis and Implementation of Interrupt System inDigital Signal Controller
Lin Zhigui, Yao Fangqin, Li Min, Liu Ying
(School of Electronics and Information Engineering, Tianjin Polytechnic University, Tianjin 300387, China)
Digital Signal Controller (DSC) has the ability of digital signal processing and MCU control interface. The interrupt system has many functions, which brings more conveniences for applications and the complexity of settings. Taking MC56F8257 as an example, this paper analyzes interrupt system of DSC and its setting methods in detail. Taking the QSCI module interrupt and CAN module interrupt of MC56F8257 as an example, the interrupt setting process and its responding results of DSC are analyzed from three aspects including without interrupt priority, with interrupt priority and interrupt nesting. The results prove that the DSC interrupt has priority and mask characteristics, which provides guidance to promote the use of DSC chips.
digital signal controller; interrupt system; priority; MC56F8257
TP33
A
2014-03-04)