DSP 第三章程序控制_第1頁(yè)
DSP 第三章程序控制_第2頁(yè)
DSP 第三章程序控制_第3頁(yè)
DSP 第三章程序控制_第4頁(yè)
DSP 第三章程序控制_第5頁(yè)
已閱讀5頁(yè),還剩55頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第3章 程序控制和中斷管理 是指CPU對(duì)程序運(yùn)行的控制通常程序是順序執(zhí)行的,即在程序存儲(chǔ)器地址上取指并執(zhí)行。但有時(shí)程序需要轉(zhuǎn)移到不連續(xù)的地址,然后再連續(xù)執(zhí)行新地址處的指令。TMS320C2000中影響程序控制操作的指令有:分支轉(zhuǎn)移調(diào)用與返回重復(fù)指令中斷復(fù)位14.1 程序地址的產(chǎn)生 在執(zhí)行當(dāng)前指令的同時(shí),程序流要求處理器生成下一條指令的程序地址。 它是順序或非順序的。程序地址產(chǎn)生邏輯使用以下硬件:(1)程序計(jì)數(shù)器(PC): C2000為16位PC。(2)程序地址存放器(PAR):驅(qū)動(dòng)程序地址總線(PAB),提供程序的讀、寫地址。(3)堆棧:16位寬、8級(jí)硬件堆棧最多可保存8個(gè)返回地址。(4)微堆

2、棧(MSTACK):16位,1級(jí)深的堆棧,用于保存一個(gè)返回地址。(5)重復(fù)計(jì)數(shù)器(RPTC):16位,與重復(fù)指令(RPT)一起,用來確定RPT后面的一條指令重復(fù)執(zhí)行次數(shù)。2一、程序計(jì)數(shù)器(PC) 程序計(jì)數(shù)器(PC)存放將被執(zhí)行的下一條指令的地址。 影響PC加載方式的程序控制操作:(1)復(fù)位 (2)順序執(zhí)行 (3)分支轉(zhuǎn)移 (4)由累加器轉(zhuǎn)移 (5)子程序調(diào)用與返回 (6)從累加器調(diào)用與返回 (7)軟件或硬件中斷 加載到PC的地址:PC = 0000h (復(fù)位向量地址)3一、程序計(jì)數(shù)器(PC) 程序計(jì)數(shù)器(PC)存放將被執(zhí)行的下一條指令的地址。PC的加載方式:(1)復(fù)位 (2)順序執(zhí)行 (3)分

3、支轉(zhuǎn)移 (4)由累加器轉(zhuǎn)移 (5)子程序調(diào)用與返回 (6)從累加器調(diào)用與返回 (7)軟件或硬件中斷 加載到PC的地址: PC = PC + 1例: PC 目標(biāo)代碼 指令0108 be42 CLRC OVM0109 bd00 LDP #0010a 4一、程序計(jì)數(shù)器(PC) 程序計(jì)數(shù)器(PC)存放將被執(zhí)行的下一條指令的地址。PC的加載方式:(1)復(fù)位 (2)順序執(zhí)行 (3)分支轉(zhuǎn)移 (4)由累加器轉(zhuǎn)移 (5)子程序調(diào)用與返回 (6)從累加器調(diào)用與返回 (7)軟件或硬件中斷 加載到PC的地址:PC = 轉(zhuǎn)移指令之后16位立即數(shù)例: B pma 5一、程序計(jì)數(shù)器(PC) 程序計(jì)數(shù)器(PC)存放將被執(zhí)行

4、的下一條指令的地址。PC的加載方式:(1)復(fù)位 (2)順序執(zhí)行 (3)分支轉(zhuǎn)移 (4)由累加器轉(zhuǎn)移 (5)子程序調(diào)用與返回 (6)從累加器調(diào)用與返回 (7)軟件或硬件中斷 加載到PC的地址:PC = 累加器的低16位值例: BACC6一、程序計(jì)數(shù)器(PC) 程序計(jì)數(shù)器(PC)存放將被執(zhí)行的下一條指令的地址。PC的加載方式:(1)復(fù)位 (2)順序執(zhí)行 (3)分支轉(zhuǎn)移 (4)由累加器轉(zhuǎn)移 (5)子程序調(diào)用與返回 (6)從累加器調(diào)用與返回 (7)軟件或硬件中斷 調(diào)用:將PC中下一條指令的地址壓入堆棧, 將調(diào)用指令后的16位立即數(shù)裝入PC;返回: 將返回地址從堆棧中彈回PC。例: PC 指令0100

5、CALL 01e0h0102 7一、程序計(jì)數(shù)器(PC) 程序計(jì)數(shù)器(PC)存放將被執(zhí)行的下一條指令的地址。PC的加載方式:(1)復(fù)位 (2)順序執(zhí)行 (3)分支轉(zhuǎn)移 (4)由累加器轉(zhuǎn)移 (5)子程序調(diào)用與返回 (6)從累加器調(diào)用與返回 (7)軟件或硬件中斷 調(diào)用: 將PC中下一條指令的地址壓入堆棧,將累加器中的低16位數(shù)裝入PC; 返回: 將返回地址從堆棧中彈回PC。例: PC 指令0100 CALA 0101 8一、程序計(jì)數(shù)器(PC) 程序計(jì)數(shù)器(PC)存放將被執(zhí)行的下一條指令的地址。PC的加載方式:(1)復(fù)位 (2)順序執(zhí)行 (3)分支轉(zhuǎn)移 (4)由累加器轉(zhuǎn)移 (5)子程序調(diào)用與返回 (6

6、)從累加器調(diào)用與返回 (7)軟件或硬件中斷 將PC壓入堆棧,然后用適當(dāng)?shù)闹袛嘞蛄繂卧刂费b入PC。通常在該單元地址中存放一條轉(zhuǎn)移指令,又將相應(yīng)的中斷效勞子程序地址裝入PC。例: INT2 產(chǎn)生中斷0004ff80B 1000h10000108be42CLRCOVM0109bd00LDP#0010a8b8fMAR*,AR7010bb93fLACL#3Fh響應(yīng)中斷PC=010ah壓入堆棧9一、程序計(jì)數(shù)器(PC) 程序計(jì)數(shù)器(PC)存放將被執(zhí)行的下一條指令的地址。PC的加載方式:(1)復(fù)位 (2)順序執(zhí)行 (3)分支轉(zhuǎn)移 (4)由累加器轉(zhuǎn)移 (5)子程序調(diào)用與返回 (6)從累加器調(diào)用與返回 (7)軟

7、件或硬件中斷 將PC壓入堆棧,然后用適當(dāng)?shù)闹袛嘞蛄繂卧刂费b入PC。通常在該單元地址中存放一條轉(zhuǎn)移指令,又將相應(yīng)的中斷效勞子程序地址裝入PC。例: INT2 產(chǎn)生中斷0004ff80B 1000h10000108be42CLRCOVM0109bd00LDP#0010a8b8fMAR*,AR7010bb93fLACL#3Fh 中斷向量0004h裝入PC10一、程序計(jì)數(shù)器(PC) 程序計(jì)數(shù)器(PC)存放將被執(zhí)行的下一條指令的地址。PC的加載方式:(1)復(fù)位 (2)順序執(zhí)行 (3)分支轉(zhuǎn)移 (4)由累加器轉(zhuǎn)移 (5)子程序調(diào)用與返回 (6)從累加器調(diào)用與返回 (7)軟件或硬件中斷 將PC壓入堆棧,然

8、后用適當(dāng)?shù)闹袛嘞蛄繂卧刂费b入PC。通常在該單元地址中存放一條轉(zhuǎn)移指令,又將相應(yīng)的中斷效勞子程序地址裝入PC。例: INT2 產(chǎn)生中斷0004ff80B 1000h10000108be42CLRCOVM0109bd00LDP#0010a8b8fMAR*,AR7010bb93fLACL#3Fh轉(zhuǎn)移指令1000h裝入PC11二、堆棧硬件堆棧區(qū):16位寬、8級(jí)深。用途: 當(dāng)調(diào)用子程序或發(fā)生中斷時(shí),程序地址產(chǎn)生邏輯利用該堆棧保存一個(gè)16位返回地址。當(dāng)CPU進(jìn)入子程序或中斷效勞程序時(shí),返回地址自動(dòng)裝入該堆棧的棧頂。當(dāng)子程序或中斷效勞程序完成時(shí),返回指令將返回地址從棧頂傳送到程序計(jì)數(shù)器PC。堆棧也可以用來

9、保存數(shù)據(jù)或用于其他目的。 12有兩組訪問堆棧的指令:1)PUSH和POP: PUSH:把累加器(32位)的低半局部(低16位)拷貝到棧頂。POP: 把棧頂?shù)闹悼截惖嚼奂悠鞯牡桶刖植?)PSHD和POPD: 當(dāng)子程序或中斷嵌套超過8級(jí)時(shí),可利用這兩條指令在數(shù)據(jù)存儲(chǔ)區(qū)中建立一個(gè)堆棧。 即把堆棧區(qū)延伸到數(shù)據(jù)存儲(chǔ)區(qū)。PSHD dma ;將數(shù)據(jù)存儲(chǔ)器中的值壓入棧頂。POPD dma ; 將棧項(xiàng)的值彈出到數(shù)據(jù)存儲(chǔ)器。13每當(dāng)一個(gè)數(shù)值壓入棧頂 ,堆棧中每級(jí)的內(nèi)容都下移一級(jí),棧底(第8級(jí))的內(nèi)容則喪失。 PSHD dma 14彈出操作把堆棧中每一級(jí)的值都拷貝到較高的下一級(jí)。 操作與壓入操作相反, POPD d

10、ma 15三、微堆棧(MSTACK)微堆棧共有1級(jí)深、16位寬,與堆棧不同,它的操作是不可見的。 執(zhí)行以下指令時(shí),程序地址產(chǎn)生邏輯,利用微堆棧保存返回地址。塊傳送 BLDD BLPD乘且累加 MAC、MACD 表讀寫 TBLD、TBLW 例:RPT#9BLDD #lk, *+ 源地址 目的地址操作過程: 執(zhí)行 PC+1,然后(PC)(MSTACK) lk(源地址) PC (源地址) (目的地址) PC+1 PC 利用重復(fù)指令,進(jìn)行數(shù)據(jù)塊傳送,直到重復(fù)計(jì)數(shù)器(RPTC)=0;(MSTACK) (PC)16四、流水線操作 TMS320C2000的流水線有4個(gè)獨(dú)立的階段: 取指令 指令譯碼 取操作數(shù)

11、 執(zhí)行指令由于這4個(gè)操作階段是獨(dú)立的,因此,這些操作可以重疊進(jìn)行。在任意的指定周期內(nèi),1 - 4個(gè)不同的指令均被激活,每一條被激活的指令均處于一個(gè)不同的完成階段。對(duì)于單字、單周期指令(無(wú)等待狀態(tài)),4級(jí)流水線的操作示意圖如下:174.2 轉(zhuǎn)移、調(diào)用和返回 轉(zhuǎn)移、調(diào)用和返回將改變指令流的順序,轉(zhuǎn)到新的地址單元去執(zhí)行指令。轉(zhuǎn)移:僅使程序控制轉(zhuǎn)換到新的地址單元。 采用跳轉(zhuǎn)指令調(diào)用: 子程序調(diào)用 中斷效勞程序 要將返回地址保存到硬件堆棧的棧頂。 被調(diào)用的子程序或中斷效勞程序都以返回指令結(jié)束。轉(zhuǎn)移、調(diào)用和返回指令的類型:無(wú)條件轉(zhuǎn)移、調(diào)用和返回 有條件轉(zhuǎn)移、調(diào)用和返回 18一、無(wú)條件指令無(wú)條件轉(zhuǎn)移指令 B

12、 pma ;用指令中給定的地址pma 裝載PC BACC ;用累加器中低16位數(shù)值A(chǔ)CC(015)裝載PC無(wú)條件調(diào)用指令 CALL pma ;將返回地址壓入堆棧,用pma 裝載PC CALA ;將返回地址壓入堆棧,用ACC(015)裝載PC無(wú)條件返回指令 RET ;將棧頂?shù)闹?返回地址)加載到PC19二、有條件指令 有條件指令指僅當(dāng)某些指定的條件滿足時(shí)才執(zhí)行。 條件及符號(hào) 20 條件的組合:在條件指令的操作數(shù)中可以有多個(gè)條件。注意:某些條件只有組合才是有意義的。 對(duì)于每一種組合,必須按如下規(guī)則從組1和組2中選擇條件。 同一類的條件不能組合。21有條件指令 條件轉(zhuǎn)移指令 BCND pma,con

13、d1,cond2, ;條件cond1,cond2都滿足時(shí)轉(zhuǎn)移。例: BCND PGM1,LEQ, OV BANZ pma ;當(dāng)前AR0時(shí),轉(zhuǎn)移。條件調(diào)用指令 CC pma,cond1,cond2, ;條件cond1,cond2都滿足時(shí)調(diào)用。例: CC 00BFh,LEQ, OV條件返回指令 RETCcond1,cond2, ;條件cond1,cond2都滿足時(shí)返回。224.3 重復(fù)指令 重復(fù)指令(RPT)允許緊跟在RPT后的那一條指令重復(fù)執(zhí)行N+1。 N為RRT指令中的一個(gè)操作數(shù)。在執(zhí)行RPT時(shí),計(jì)數(shù)值N被裝入重復(fù)計(jì)數(shù)器(RPTC),然后,被重復(fù)的指令每執(zhí)行一次,RPTC就減1,直至RPTC為

14、0。例:指令執(zhí)行前存放器狀態(tài): ARP = 1;AR1 = 300h執(zhí)行指令: RPT #9 ;下一條指令執(zhí)行10次 BLDD#320h, *+上面的指令執(zhí)行結(jié)果: 將數(shù)據(jù)存儲(chǔ)器: 0320h032Ah單元的內(nèi)容-0300h030Ah中234.4 中斷中斷是由軟件或硬件產(chǎn)生一個(gè)信號(hào),該信號(hào)引起CPU掛起主程序,并轉(zhuǎn)而執(zhí)行一個(gè)子程序,即中斷效勞子程序。一、概述 1)中斷信號(hào)的產(chǎn)生: C2000支持軟件和硬件兩種中斷。 軟件中斷: 由中斷指令I(lǐng)NTR,NMI或TRAP請(qǐng)求。 硬件中斷: 外部中斷由外部中斷引腳上的信號(hào)觸發(fā),如: RS , NMI 內(nèi)部中斷由片內(nèi)外設(shè)的信號(hào)觸發(fā)。242) 中斷優(yōu)先級(jí)硬

15、件中斷可能同時(shí)產(chǎn)生,CPU依據(jù)中斷源的優(yōu)先級(jí)順序而執(zhí)行相應(yīng)的中斷效勞子程序。C240X的硬件中斷分為兩級(jí): CPU中斷(8個(gè))(核心級(jí)) 外設(shè)中斷 (46個(gè)),分別掛在CPU中斷中 6個(gè) 可屏蔽中斷之下。CPU中斷優(yōu)先級(jí)為1-RESET;復(fù)位中斷2-保存3-NMI;不可屏蔽中斷4-INT1 ;可屏蔽中斷5-INT2 ;可屏蔽中斷6-INT3 ;可屏蔽中斷7-INT4 ;可屏蔽中斷8-INT5 ;可屏蔽中斷9-INT6 ;可屏蔽中斷253)可屏蔽中斷與不可屏蔽中斷 可屏蔽中斷:指可以用軟件設(shè)置使它們禁止(屏蔽)或允許(不屏蔽)的中斷,可屏蔽中斷均為硬件中斷。 C240X的可屏蔽中斷為INT1IN

16、T6, 這些中斷源下面掛著外設(shè)和外部引腳,如: ADC、SPI、SCI、事件管理器等。 不可屏蔽中斷:包括: 所有的軟件中斷 兩種外部硬件中斷:( RS , NMI )。對(duì)于不可屏蔽中斷,CPU總是要響應(yīng),并從主程序轉(zhuǎn)移到相應(yīng)中斷效勞程序。 264)中斷矢量 中斷矢量指CPU響應(yīng)中斷后,PC裝載的地址 。MS320C2000器件CPU中斷的中斷矢量表安排在程序存儲(chǔ)器地址為0000h003Fh的64個(gè)單元。每個(gè)CPU中斷分配了兩個(gè)地址單元,用以存放一條兩個(gè)字的轉(zhuǎn)移指令。外設(shè)中斷的中斷矢量放在外設(shè)中斷矢量存放器(PIVR) 中中斷名稱中斷矢量RESET復(fù)位0000h保留位0026hNMI0024h

17、INT10002hINT20004hINT30006hINT40008hINT5000AhINT6000Ch保留位000EhTRAP0022hINT8-INT160010h-0020hINT20-INT310028h-003Fh27285)中斷操作步驟TMS320C2000管理中斷分為3個(gè)主要階段: (1)接受中斷請(qǐng)求: 來自程序代碼的軟件中斷請(qǐng)求、來自引腳或片內(nèi)設(shè)備硬件中斷請(qǐng)求到達(dá)CPU 時(shí),該中斷掛起,或說在等待響應(yīng)。 (2)響應(yīng)中斷: 如果是可屏蔽中斷,則必須滿足一定的條件時(shí)CPU才會(huì)響應(yīng);對(duì)非屏蔽中斷則立即響應(yīng)。 (3)執(zhí)行中斷效勞程序: 一旦中斷被響應(yīng),CPU就根據(jù)放在中斷矢量地址中

18、的轉(zhuǎn)移指令,按照要求轉(zhuǎn)移到相應(yīng)的中斷效勞程序中去執(zhí)行。執(zhí)行結(jié)束后返回。 對(duì)于中斷的管理,TMS320C2000系列中不同型號(hào)的芯片有許多不同之處。以下以LC/LF240X為例。29二、可屏蔽中斷 1結(jié)構(gòu) LF/LC240X器件的CPU提供了6個(gè)可屏蔽中斷,INT1-INT6。 利用這6個(gè)中斷級(jí),通過擴(kuò)展設(shè)計(jì),使得C240X器件能夠管理46個(gè)可屏蔽中斷請(qǐng)求。302中斷管理存放器 CPU中斷存放器 外設(shè)中斷存放器1)CPU中斷存放器: 用于管理CPU中斷INT1-INT6: 中斷標(biāo)志存放器(IFR) 中斷屏蔽存放器(IMR) CPU中斷標(biāo)志存放器(IFR)地址0006h 用于識(shí)別和去除掛起的中斷,

19、當(dāng)INT1-INT6中某一個(gè)中斷向CPU發(fā)出中斷請(qǐng)求時(shí),該存放器中相應(yīng)的位被置1。 讀取IFR可以識(shí)別掛起的中斷,而向相應(yīng)的位寫1去除己掛起的中斷。 CPU響應(yīng)中斷或器件復(fù)位都能將IFR標(biāo)志去除。31CPU中斷屏蔽存放器(IMR)地址0004h向IMR中某位寫1,則屏蔽相應(yīng)的中斷級(jí),寫1則使能該中斷級(jí)。 322)外設(shè)中斷存放器: 用于管理掛在內(nèi)核級(jí)中斷 INT1-INT6 下的46個(gè)外設(shè)中斷。 包括: 一個(gè)外設(shè)中斷矢量存放器 (PIVR)、 三個(gè)外設(shè)中斷請(qǐng)求存放器 (PIRQR0/1/2) 三個(gè)外設(shè)中斷應(yīng)答存放器 (PIACKR0/1/2) 外設(shè)中斷矢量存放器(PIVR)地址701Eh 用于存

20、放最近一次被響應(yīng)的外設(shè)中斷的矢量地址。 (二級(jí)中斷矢量地址)332)外設(shè)中斷存放器: 用于管理掛在內(nèi)核級(jí)中斷 INT1-INT6 下的46個(gè)外設(shè)中斷。 包括: 一個(gè)外設(shè)中斷矢量存放器 (PIVR)、 三個(gè)外設(shè)中斷請(qǐng)求存放器 (PIRQR0/1/2) 三個(gè)外設(shè)中斷應(yīng)答存放器 (PIACKR0/1/2) 外設(shè)中斷請(qǐng)求存放器0/1/2(PIRQR0/1/2)地址7010h7012h 用于存放外設(shè)中斷請(qǐng)求標(biāo)志: 1-說明相應(yīng)的中斷請(qǐng)求被掛起 0-說明相應(yīng)的中斷請(qǐng)求未被掛起。 只能對(duì)其測(cè)試(可讀),不能對(duì)其編程(不可寫) 向某位寫入1將發(fā)出個(gè)中斷請(qǐng)求到器件CPU,寫入0沒影響。342)外設(shè)中斷存放器:

21、用于管理掛在內(nèi)核級(jí)中斷 INT1-INT6 下的46個(gè)外設(shè)中斷。 包括: 一個(gè)外設(shè)中斷矢量存放器 (PIVR)、 三個(gè)外設(shè)中斷請(qǐng)求存放器 (PIRQR0/1/2) 三個(gè)外設(shè)中斷應(yīng)答存放器 (PIACKR0/1/2) 外設(shè)中斷應(yīng)答存放器0/1/2(PIACKR0/1/2)地址:7014h7016h 用于存放外設(shè)中斷應(yīng)答信號(hào)只能對(duì)其測(cè)試(可讀),不能對(duì)其編程(不可寫)向某位寫1,將引起相應(yīng)的外設(shè)中斷應(yīng)答被插入從而將相應(yīng)的外設(shè)中斷請(qǐng)求位清0,但不改變外設(shè)矢量存放器(PIVR)的內(nèi)容。353)外設(shè)中斷控制存放器(2個(gè))用來控制和監(jiān)視兩個(gè)外部引腳XINTl和XINT2的狀態(tài)。 外設(shè)中斷l(xiāng)控制存放器(XI

22、NTlCR)一地址7070h 控制和監(jiān)視外部引腳XINT1的狀態(tài)。 外設(shè)中斷2控制存放器(XINT2CR)一地址7071h 控制和監(jiān)視外部引腳XINT2的狀態(tài)。 D15 XINT1 flag XINTl標(biāo)志位: 該位指示在XINTl引腳上是否檢測(cè)到個(gè)眺變 0 未檢測(cè)到引腳跳變 1 檢測(cè)到引腳跳變363)外設(shè)中斷控制存放器(2個(gè))用來控制和監(jiān)視兩個(gè)外部引腳XINTl和XINT2的狀態(tài)。 外設(shè)中斷l(xiāng)控制存放器(XINTlCR)一地址7070h 控制和監(jiān)視外部引腳XINT1的狀態(tài)。 外設(shè)中斷2控制存放器(XINT2CR)一地址7071h 控制和監(jiān)視外部引腳XINT2的狀態(tài)。 D2 XINT1 pol

23、arity XINT1極性, 選擇在XINT1引腳產(chǎn)生中斷的信號(hào)極性。 0 在下降沿(由高到低跳變)產(chǎn)生中斷 1 在上升沿(由低到高跳變)產(chǎn)生中斷373)外設(shè)中斷控制存放器(2個(gè))用來控制和監(jiān)視兩個(gè)外部引腳XINTl和XINT2的狀態(tài)。 外設(shè)中斷l(xiāng)控制存放器(XINTlCR)一地址7070h 控制和監(jiān)視外部引腳XINT1的狀態(tài)。 外設(shè)中斷2控制存放器(XINT2CR)一地址7071h 控制和監(jiān)視外部引腳XINT2的狀態(tài)。 D1 XINTl priority XINT1優(yōu)先級(jí)。 該位決定XINT1引腳中斷的優(yōu)化級(jí)。 0 - 高優(yōu)先級(jí), 1 - 低優(yōu)先級(jí)注意:優(yōu)先級(jí)不同,所掛的CPU 中斷不同 高

24、優(yōu)先級(jí): INT1 中斷向量 0002h 低優(yōu)先級(jí): INT6 中斷向量 000Ch 但外設(shè)中斷向量相同 : XINTl: 0001h XINT2: 0011h 383)外設(shè)中斷控制存放器(2個(gè))用來控制和監(jiān)視兩個(gè)外部引腳XINTl和XINT2的狀態(tài)。 外設(shè)中斷l(xiāng)控制存放器(XINTlCR)一地址7070h 控制和監(jiān)視外部引腳XINT1的狀態(tài)。 外設(shè)中斷2控制存放器(XINT2CR)一地址7071h 控制和監(jiān)視外部引腳XINT2的狀態(tài)。 D0 XINTl enable XINTl使能位。 該位使能或屏蔽外部中斷XINT1 0 屏蔽中斷 1 使能中斷393)外設(shè)中斷控制存放器(2個(gè))用來控制和監(jiān)

25、視兩個(gè)外部引腳XINTl和XINT2的狀態(tài)。 外設(shè)中斷l(xiāng)控制存放器(XINTlCR)一地址7070h 控制和監(jiān)視外部引腳XINT1的狀態(tài)。 外設(shè)中斷2控制存放器(XINT2CR)一地址7071h 控制和監(jiān)視外部引腳XINT2的狀態(tài)。 外設(shè)中斷2控制存放器(XINT2CR)用于控制和監(jiān)視外部引腳XINT2的狀態(tài)。 各位的定義同(XINT1CR) 403 可屏蔽中斷的響應(yīng)流程1)響應(yīng)可屏蔽中斷,條件: (1)INTM = 0 ,使能所有末屏蔽的中斷; (2)中斷屏蔽存放器(IMR)中相應(yīng)位為1;使能相應(yīng)的中斷; (3)假設(shè)有多個(gè)中斷請(qǐng)求,優(yōu)先級(jí)高的中斷源先相應(yīng)。2)將PC壓入堆棧,用相應(yīng)的CPU中

26、斷矢量單元地址裝載到PC;3)CPU從相應(yīng)中斷矢量單元中取出一條用戶設(shè)定的轉(zhuǎn)移指令,然后轉(zhuǎn)入執(zhí)行這一CPU中斷的通用中斷效勞程序(GISRx)。例:INT2上有一外設(shè)中斷請(qǐng)求被響應(yīng),其中斷矢量單元地址為0004h,則在0004h單元放置一條轉(zhuǎn)移指令: 0004h B GISR2413 可屏蔽中斷的響應(yīng)流程4)在GISRx中完成必要的現(xiàn)場(chǎng)保護(hù)后,從外設(shè)中斷矢量存放器(PIVR)中讀取相應(yīng)外設(shè)中斷矢量。 通常并將其左移一個(gè)預(yù)定的值,再加上偏移量,所得到的值就是這個(gè)外設(shè)中斷事件的中斷效勞程序(SISR) 的入口地址。 在SISR中執(zhí)行對(duì)該外設(shè)中斷事件的效勞。5)執(zhí)行SISR,直到一條返回指令,結(jié)束該

27、中斷效勞程序。6)從棧頂彈出返回地址到PC。42例: 典型中斷效勞程序代碼 假設(shè):掛在INT2 之下的EVA 通用定時(shí)器1的周期中斷 INT2的中斷矢量為 0004h EVA 通用定時(shí)器1 周期中斷的中斷矢量(PIV)為 0027h (存放在PIVR) 地址 匯編語(yǔ)言代碼 ;CPU中斷矢量表0000h RSVECT : B START ;復(fù)位矢量0002h INT1: B GISR1 ;轉(zhuǎn)移到INT1的通用中斷效勞子程序GISR10004h INT2: B GISR2 ; 轉(zhuǎn)移到INT2的通用中斷效勞子程序GISR2; CPU其他中斷矢量43地址 匯編語(yǔ)言代碼GISR1:; 其他中斷的通用中斷

28、效勞子程序 GISR2: ; 保存必要的上、下文LACC PIVR, 1 ; 將中斷矢量存放器(PIVR)的值移位(2)后裝; 入累加器ADD offset ;累加器的值加一個(gè)偏移量后,即為特定的中斷; 效勞子程序 SISRx的地址BACC ;轉(zhuǎn)移到累加器指示的地址中(2PIV+offset); 外設(shè)中斷矢量表2PIV+offsetB SISR1 ;轉(zhuǎn)移到中斷事件的特定中斷效勞子程序SISR中2PIV+offset+2B SISR2B SISRxSISRx:;外部事件中斷效勞程序RET;返回 44三、 非屏蔽中斷1硬件非屏蔽中斷 兩個(gè)引腳產(chǎn)生硬件非屏蔽中斷:RS (復(fù)位): CPU停止程序流程

29、,使處理器回到一個(gè)初始狀態(tài),然后從地址0000h 開始執(zhí)行。NMI : 當(dāng)該信號(hào)被激活時(shí)(NMI 引腳變低或NMI指令), CPU使程序控制轉(zhuǎn)向0024h矢量地址,同時(shí)可屏蔽中斷被禁止(NTM = 1)。 NMI也可用做軟件復(fù)位,與硬件復(fù)位不同,其不影響器件任何模式,也不終止當(dāng)前有效指令或存儲(chǔ)器的操作。 LF240 x芯片沒有NMI引腳,當(dāng)器件訪問一個(gè)無(wú)效地址時(shí),將產(chǎn)生非屏蔽中斷請(qǐng)求 452軟件非屏蔽中斷3條指令可引起軟件非屏版中斷:INTR KNMITRAP 該指令允許啟動(dòng)中斷,指令操作數(shù)K表示CPU將轉(zhuǎn)移到哪個(gè)中斷矢量單元。 例 INTR 10 當(dāng)響應(yīng)INTR中斷時(shí),INTM=1禁止可屏蔽

30、中斷。 注意:INTR指令不影響IFR標(biāo)志。462軟件非屏蔽中斷3條指令可引起軟件非屏版中斷:INTR KNMITRAP 該指令使程序轉(zhuǎn)移到中斷矢量地址24h。 與不可屏蔽硬件中斷NMI使用同一單元。 472軟件非屏蔽中斷3條指令可引起軟件非屏版中斷:INTR KNMITRAP 該指令使CPU轉(zhuǎn)移到中斷矢量單元22h,該指令不禁止任何可屏蔽中斷,即INTM不被置148非屏蔽中斷流程圖49四、中斷效勞程序(ISR)的現(xiàn)場(chǎng)保護(hù)與中斷嵌套CPU得到中斷請(qǐng)求并響應(yīng)之后,就根據(jù)中斷矢量轉(zhuǎn)移到相應(yīng)的中斷效勞程序ISR中,ISR在為中斷所要求的任務(wù)效勞前需要保存和恢復(fù)存放器的值,并且還要管理中斷嵌套。501

31、保存和恢復(fù)存放器值CPU進(jìn)入中斷效勞程序(ISR)之前,硬件只將增量后的程序計(jì)數(shù)器的值自動(dòng)保存起來,所以在中斷效勞程序中要用軟件對(duì)一些重要存放器的值進(jìn)行保存和恢復(fù)。例如:如果ISR需要執(zhí)行一次乘法運(yùn)算,那么它就需要使用乘法存放器(PREG)。如果先前的PREG值要求在執(zhí)行完ISR之后仍保存在PREG中,則ISR必須先保存該值,再執(zhí)行新的乘法運(yùn)算,當(dāng)乘法運(yùn)算執(zhí)行完后,中斷效勞程序返回之前,再重新裝載原來那個(gè)PREG值。在大多數(shù)中斷效勞程序中,都需要對(duì)某些存放器進(jìn)行保護(hù),所以,常常備份個(gè)通用的保存和恢復(fù)程序,供中斷效勞程序調(diào)用。512中斷效勞程序(ISR)嵌套的管理C2000硬件堆棧允許中斷嵌套,

32、但須注意:1)如果希望一個(gè)可屏蔽中斷能夠中斷ISR,那么,該ISR必須不屏蔽這個(gè)中斷,可在中斷效勞程序中,通過對(duì)IMR中的相應(yīng)位設(shè)置和執(zhí)行允許中斷指令(CLRC INTM)來解除該中斷屏蔽。2)8級(jí)硬件堆棧。每進(jìn)行一次中斷效勞或進(jìn)入子程序都要將返回地址壓入堆棧,以提供返回的途徑,所以最多允許中斷或子程序嵌套8級(jí)。 如果軟件需要的堆棧超過8級(jí),可以利用POPD和PSHD指令將堆棧有效地?cái)U(kuò)展到數(shù)據(jù)存儲(chǔ)空間。523) C2000具有防止意外嵌套的功能。 因?yàn)樵趫?zhí)行完中斷的效勞程序返回之前,總要先允許中斷,即執(zhí)行 CLRC INTM RET 假設(shè)在執(zhí)行CLRC INTM時(shí)發(fā)生了意外中斷,CPU總是先完

33、成CLRC INTM指令及其后面的那條指令后才去處理已掛起的中斷。 如果希望在中斷效勞程序中實(shí)現(xiàn)中斷嵌套,應(yīng)在返回(RET)指令前至少兩條指令的位置上插入CLRC INTM指令,即 CLRC INTM . . RET53五、中斷等待時(shí)間中斷等待時(shí)間是指提出中斷請(qǐng)求到響應(yīng)請(qǐng)求之間的時(shí)間,其長(zhǎng)短取決于許多因素。在執(zhí)行個(gè)軟件中斷之前CPU總是要完成流水線操作中的所有指令,不可屏蔽中斷最小等待時(shí)間為4個(gè)周期。一個(gè)外部可屏蔽硬件中斷,其最小等待時(shí)間為8個(gè)周期。LF/LC240 x中斷等待時(shí)間包括外設(shè)同步接口時(shí)間、CPU響應(yīng)時(shí)間、ISR轉(zhuǎn)移時(shí)間。外設(shè)同步接口時(shí)間是指外設(shè)中斷事件發(fā)生中斷請(qǐng)求,經(jīng)PIE識(shí)別、判優(yōu)、轉(zhuǎn)換后將請(qǐng)求發(fā)送至CPU的時(shí)間。CPU響應(yīng)時(shí)間是指CPU識(shí)別出已經(jīng)被使能的中斷、響應(yīng)中斷、去除流水線,到從CPU的中斷矢量表中取出轉(zhuǎn)移指令的時(shí)間。ISR轉(zhuǎn)移時(shí)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論