第7章語(yǔ)言程序設(shè)計(jì)12_第1頁(yè)
第7章語(yǔ)言程序設(shè)計(jì)12_第2頁(yè)
第7章語(yǔ)言程序設(shè)計(jì)12_第3頁(yè)
第7章語(yǔ)言程序設(shè)計(jì)12_第4頁(yè)
第7章語(yǔ)言程序設(shè)計(jì)12_第5頁(yè)
已閱讀5頁(yè),還剩145頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1第第7章章 匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì)n7.1 程序流程控制程序流程控制n7.2 數(shù)據(jù)塊傳送數(shù)據(jù)塊傳送n7.3 定點(diǎn)數(shù)的基本算術(shù)運(yùn)算定點(diǎn)數(shù)的基本算術(shù)運(yùn)算n7.4 長(zhǎng)字運(yùn)算和并行運(yùn)算長(zhǎng)字運(yùn)算和并行運(yùn)算n7.5 FIR濾波器的濾波器的DSP實(shí)現(xiàn)實(shí)現(xiàn)n7.6 IIR數(shù)字濾波器的數(shù)字濾波器的DSP實(shí)現(xiàn)實(shí)現(xiàn)n7.7 FFT運(yùn)算的運(yùn)算的DSP實(shí)現(xiàn)實(shí)現(xiàn)27.1 程序流程控制程序流程控制n7.1.1 程序存儲(chǔ)器地址生成程序存儲(chǔ)器地址生成n7.1.2 條件操作條件操作n7.1.3 分支轉(zhuǎn)移分支轉(zhuǎn)移n7.1.4 調(diào)用與返回調(diào)用與返回n7.1.5 重復(fù)操作重復(fù)操作n7.1.6 TMS320C54x中斷系統(tǒng)中

2、斷系統(tǒng)n7.1.7 堆棧的使用堆棧的使用返回首頁(yè)37.1.1 程序存儲(chǔ)器地址生成程序存儲(chǔ)器地址生成 程序存儲(chǔ)器程序存儲(chǔ)器中存放指令代碼、參數(shù)表中存放指令代碼、參數(shù)表和立即數(shù)。和立即數(shù)。程序地址產(chǎn)生邏輯程序地址產(chǎn)生邏輯(PAGEN),),為尋址存放在程序存儲(chǔ)器為尋址存放在程序存儲(chǔ)器中的指令代碼、參數(shù)表、中的指令代碼、參數(shù)表、16位立即數(shù)或位立即數(shù)或其它信息產(chǎn)生的地址,并加到其它信息產(chǎn)生的地址,并加到PAB上。上。 包括包括5個(gè)寄存器:個(gè)寄存器:n程序計(jì)數(shù)器(程序計(jì)數(shù)器(PC););n重復(fù)計(jì)數(shù)器(重復(fù)計(jì)數(shù)器(RC););n塊重復(fù)計(jì)數(shù)器(塊重復(fù)計(jì)數(shù)器(BRC););n塊重復(fù)起始地址寄存器(塊重復(fù)起始

3、地址寄存器(RSA););n塊重復(fù)結(jié)束地址寄存器(塊重復(fù)結(jié)束地址寄存器(REA)。)。圖圖7-1 程序地址產(chǎn)生邏程序地址產(chǎn)生邏輯(輯(PAGEN)寄存器寄存器4n擴(kuò)展程序計(jì)數(shù)器(擴(kuò)展程序計(jì)數(shù)器(XPC)用于尋址擴(kuò)展程序存)用于尋址擴(kuò)展程序存儲(chǔ)器儲(chǔ)器nC54x程序地址總線程序地址總線(PAB)可尋址空間可尋址空間64KnC548,C549還有還有7根地址線可尋址根地址線可尋址128(27)64K=8M 字的程序空間字的程序空間nC5402還有還有4根地址線可尋址根地址線可尋址16(24)64K=1M字字的程序空間的程序空間5返回本節(jié)n程序計(jì)數(shù)器(程序計(jì)數(shù)器(PC)是一個(gè)是一個(gè)16位的寄存器,存放

4、即位的寄存器,存放即將取指的某條指令、立即數(shù)或系數(shù)表在程序存儲(chǔ)器將取指的某條指令、立即數(shù)或系數(shù)表在程序存儲(chǔ)器中的地址。中的地址。nC54x通過(guò)把通過(guò)把PC值放到值放到PAB上,從程序存儲(chǔ)器中取上,從程序存儲(chǔ)器中取指,指,PC值自動(dòng)增加,指向下一條指令的地址。如值自動(dòng)增加,指向下一條指令的地址。如果出現(xiàn)跳轉(zhuǎn)指令,則裝入具體新地址。果出現(xiàn)跳轉(zhuǎn)指令,則裝入具體新地址。67.1.2 條件操作條件操作7表7-1 條件指令中的各種條件條 件 算 符操作符號(hào)條 件說(shuō) 明操作符號(hào)條 件說(shuō) 明AEQA=0累加器A等于0 AOVAOV=1 累加器A溢出 BEQB=0累加器B等于0 BOVBOV=1 累加器B溢出

5、ANEQA 0累加器A不等于0 ANOVAOV=0 累加器A不溢出 BNEQB 0累加器B不等于0 BNOVBOV=0 累加器B不溢出 ALTA0累加器A小于0 CC=1ALU進(jìn)位位置1 BLTB0累加器A大于0 BIOBIO低BIO信號(hào)電平為低 BGTB0累加器B大于0 NBIOBIO高BIO信號(hào)電平為高 AGEQA 0累加器A大于等于0 UNC無(wú)無(wú)條件操作 BGEQB 0累加器B大于等于0 8表7-2 多條件指令中的條件組合第1組第2組A類B類A類B類C類 EQ NEQ LEQ GEQ LT GTOVNOVTCNTCCNCBIONBIO9表7-2 多條件指令中的條件組合第1組第2組A類B類

6、A類B類C類 EQ NEQ LEQ GEQ LT GTOVNOVTCNTCCNCBIONBIO10表7-2 多條件指令中的條件組合第1組第2組A類B類A類B類C類 EQ NEQ LEQ GEQ LT GTOVNOVTCNTCCNCBIONBIO11表7-2 多條件指令中的條件組合第1組第2組A類B類A類B類C類 EQ NEQ LEQ GEQ LT GTOVNOVTCNTCCNCBIONBIO1213返回本節(jié)147.1.3 分支轉(zhuǎn)移分支轉(zhuǎn)移n分支轉(zhuǎn)移指令打斷了程序執(zhí)行的次序,轉(zhuǎn)移到程序分支轉(zhuǎn)移指令打斷了程序執(zhí)行的次序,轉(zhuǎn)移到程序存儲(chǔ)器的另外一個(gè)位置去執(zhí)行,存儲(chǔ)器的另外一個(gè)位置去執(zhí)行,n分支轉(zhuǎn)移影

7、響程序地址產(chǎn)生的存儲(chǔ)在分支轉(zhuǎn)移影響程序地址產(chǎn)生的存儲(chǔ)在PCPC中的值。中的值。n包括條件分支轉(zhuǎn)移包括條件分支轉(zhuǎn)移n無(wú)條件分支轉(zhuǎn)移,延遲和非延遲。無(wú)條件分支轉(zhuǎn)移,延遲和非延遲。15表7-3 無(wú)條件分支轉(zhuǎn)移指令指令指令說(shuō)明說(shuō)明周期數(shù)周期數(shù)(非延遲(非延遲/延遲)延遲)BD用指令中給出的地址加載用指令中給出的地址加載PC4/2BACCD用指定累加器(用指定累加器(A或或B)的低的低16位作位作為地址加載為地址加載PC6/4n非延遲分支轉(zhuǎn)移:在指令流水線中先清除分支指令后面已讀非延遲分支轉(zhuǎn)移:在指令流水線中先清除分支指令后面已讀入的兩指令,后再進(jìn)行分支轉(zhuǎn)移入的兩指令,后再進(jìn)行分支轉(zhuǎn)移n延遲分支轉(zhuǎn)移:在

8、分支指令后面已讀入的兩指令先執(zhí)行,再延遲分支轉(zhuǎn)移:在分支指令后面已讀入的兩指令先執(zhí)行,再進(jìn)行分支轉(zhuǎn)移(不能是跳轉(zhuǎn)子類的指令)進(jìn)行分支轉(zhuǎn)移(不能是跳轉(zhuǎn)子類的指令)16表7-4 條件分支轉(zhuǎn)移指令指令指令說(shuō)明說(shuō)明周期數(shù)(條件滿周期數(shù)(條件滿足足/不滿足)不滿足)非延遲非延遲延遲延遲BCD如果指令中的條件滿足,就用指令中給如果指令中的條件滿足,就用指令中給出的地址加載出的地址加載PC5/33/3BANZD如果所選擇的輔助寄存器不等于如果所選擇的輔助寄存器不等于0,就,就用指令中給出的地址加載用指令中給出的地址加載PC(用于循環(huán))用于循環(huán))4/22/2n非延遲分支轉(zhuǎn)移:條件滿足,清除分支指令后面已讀入的

9、兩非延遲分支轉(zhuǎn)移:條件滿足,清除分支指令后面已讀入的兩指令,后從目的地址開始執(zhí)行;不滿足,執(zhí)行指令,不轉(zhuǎn)移指令,后從目的地址開始執(zhí)行;不滿足,執(zhí)行指令,不轉(zhuǎn)移n延遲分支轉(zhuǎn)移:已讀入的兩指令先執(zhí)行,再進(jìn)行分支轉(zhuǎn)移延遲分支轉(zhuǎn)移:已讀入的兩指令先執(zhí)行,再進(jìn)行分支轉(zhuǎn)移17表7-5 遠(yuǎn)分支轉(zhuǎn)移指令指令指令說(shuō)明說(shuō)明周期數(shù)周期數(shù)(非延遲(非延遲/延遲)延遲)FBD可以轉(zhuǎn)移到由指令所給定的可以轉(zhuǎn)移到由指令所給定的23位地址(位地址(C5402為為20位地址)位地址)4/2FBACCD可以轉(zhuǎn)移到指定累加器所給定的可以轉(zhuǎn)移到指定累加器所給定的23位地址位地址(C5402為為20位地址)位地址)6/4n使程序分支轉(zhuǎn)

10、移到擴(kuò)展程序存儲(chǔ)器使程序分支轉(zhuǎn)移到擴(kuò)展程序存儲(chǔ)器18例例2XC1,TC ;TC=1執(zhí)行執(zhí)行CC,TC=0執(zhí)執(zhí)行行BCCCsub, BNEQ ;B 0,調(diào)用調(diào)用sub,B=0繼續(xù)繼續(xù)BCnew, AGT, AOV ;A0且溢出且溢出(“與與”的關(guān)系的關(guān)系), 轉(zhuǎn)轉(zhuǎn)new,否則繼續(xù)否則繼續(xù)若例若例2中兩個(gè)條件相中兩個(gè)條件相“或或”怎么辦?怎么辦?分寫成兩條指令:分寫成兩條指令:BC new, AGTBC new, AOV1920 101 iixy計(jì)算2122返回本節(jié)237.1.4 調(diào)用與返回調(diào)用與返回n調(diào)用函數(shù)或子程序時(shí),調(diào)用函數(shù)或子程序時(shí),DSPDSP中斷當(dāng)前程序的執(zhí)行,中斷當(dāng)前程序的執(zhí)行,PC

11、PC裝入給定的程序存儲(chǔ)器地址,并從這個(gè)地址開始裝入給定的程序存儲(chǔ)器地址,并從這個(gè)地址開始執(zhí)行。執(zhí)行。nPCPC裝入新值之前,調(diào)用指令的下一條指令地址被壓裝入新值之前,調(diào)用指令的下一條指令地址被壓入堆棧。入堆棧。n子程序或函數(shù)必須以返回指令結(jié)束,以便執(zhí)行到返子程序或函數(shù)必須以返回指令結(jié)束,以便執(zhí)行到返回指令時(shí),將先前壓入堆棧的地址彈出再裝入回指令時(shí),將先前壓入堆棧的地址彈出再裝入PCPC,使程序從調(diào)用指令的下一條指令繼續(xù)執(zhí)行。使程序從調(diào)用指令的下一條指令繼續(xù)執(zhí)行。n有條件調(diào)用和返回、無(wú)條件調(diào)用和返回,延遲和非有條件調(diào)用和返回、無(wú)條件調(diào)用和返回,延遲和非延遲延遲24表7-6 無(wú)條件調(diào)用與返回指令2

12、5表7-7 條件調(diào)用與返回指令n條件返回指令條件返回指令RCRC使函數(shù)或中斷服務(wù)程序使函數(shù)或中斷服務(wù)程序ISRISR有多個(gè)返回有多個(gè)返回的出口,出口的選擇在于所處理的數(shù)據(jù)。的出口,出口的選擇在于所處理的數(shù)據(jù)。n不需要用條件分支轉(zhuǎn)移指令不需要用條件分支轉(zhuǎn)移指令26表7-8 遠(yuǎn)調(diào)用和遠(yuǎn)返回指令返回本節(jié)277.1.5 重復(fù)操作重復(fù)操作1單條指令的重復(fù)操作單條指令的重復(fù)操作nRPT(重復(fù)執(zhí)行下一條指令)重復(fù)執(zhí)行下一條指令)nRPTZ(累加器清累加器清0后重復(fù)執(zhí)行下一條指令)后重復(fù)執(zhí)行下一條指令)2塊重復(fù)操作指令塊重復(fù)操作指令nRPTB塊重復(fù)指令塊重復(fù)指令用于將一個(gè)碼塊重復(fù)執(zhí)行用于將一個(gè)碼塊重復(fù)執(zhí)行N1

13、次,次,N是裝入塊重復(fù)計(jì)數(shù)器(是裝入塊重復(fù)計(jì)數(shù)器(BRC)的值。的值。28重復(fù)執(zhí)行單條指令重復(fù)執(zhí)行單條指令n重復(fù)指令只需取指一次,進(jìn)行循環(huán)比重復(fù)指令只需取指一次,進(jìn)行循環(huán)比BANZ效率高效率高n重復(fù)執(zhí)行重復(fù)執(zhí)行n次,指令中計(jì)數(shù)值設(shè)為次,指令中計(jì)數(shù)值設(shè)為n-1n重復(fù)操作使多周期指令(重復(fù)操作使多周期指令(MAC、MVDK和和MVPD等)等)變成單周期指令變成單周期指令29重復(fù)執(zhí)行單條指令重復(fù)執(zhí)行單條指令30重復(fù)執(zhí)行單條指令重復(fù)執(zhí)行單條指令312塊重復(fù)操作指令塊重復(fù)操作指令n塊重復(fù)指令塊重復(fù)指令RPTB用于將一個(gè)碼塊重復(fù)執(zhí)行用于將一個(gè)碼塊重復(fù)執(zhí)行N1次,次,N是裝入塊重復(fù)計(jì)數(shù)器(是裝入塊重復(fù)計(jì)數(shù)器

14、(BRC)的值。的值。n程序塊重復(fù)操作指令程序塊重復(fù)操作指令RPTBRPTB將重復(fù)操作的范圍擴(kuò)大到任意將重復(fù)操作的范圍擴(kuò)大到任意長(zhǎng)度的循環(huán)路,循環(huán)開銷為長(zhǎng)度的循環(huán)路,循環(huán)開銷為0 0n循環(huán)起始地址為下一行的地址循環(huán)起始地址為下一行的地址n塊重復(fù)操作前,必須先將迭代次數(shù)加載到塊重復(fù)操作前,必須先將迭代次數(shù)加載到BRCBRC(塊重復(fù)計(jì)塊重復(fù)計(jì)數(shù)器)數(shù)器)nRPTBRPTB指令可以響應(yīng)中斷指令可以響應(yīng)中斷32塊重復(fù)操作指令塊重復(fù)操作指令33程序塊重復(fù)操作舉例3435363738循環(huán)嵌套的開銷 循環(huán)循環(huán)操操 作作指令指令重復(fù)次數(shù)重復(fù)次數(shù)機(jī)器周期機(jī)器周期內(nèi)層內(nèi)層單程序重復(fù)操作單程序重復(fù)操作 RPT RP

15、T N N 1中層中層塊程序重復(fù)操作塊程序重復(fù)操作 RPTB RPTB M M 4+2外層外層循環(huán)操作循環(huán)操作 BANZ BANZ L L 4N+2返回本節(jié)397.1.6 TMS320C54x中斷系統(tǒng)中斷系統(tǒng)1中斷類型中斷類型nC54x支持軟件中斷和硬件中斷。支持軟件中斷和硬件中斷。n軟件中斷軟件中斷由程序指令產(chǎn)生(由程序指令產(chǎn)生(INTR、TRAP或或RESET)。)。n硬件中斷硬件中斷由設(shè)備的一個(gè)信號(hào)產(chǎn)生,包括兩種類型:由設(shè)備的一個(gè)信號(hào)產(chǎn)生,包括兩種類型:外部硬件中斷外部硬件中斷由由外部中斷口外部中斷口的信號(hào)觸發(fā);的信號(hào)觸發(fā); 內(nèi)部硬件中斷內(nèi)部硬件中斷由由片內(nèi)外設(shè)片內(nèi)外設(shè)的信號(hào)觸發(fā)。的信號(hào)

16、觸發(fā)。n硬件中斷和軟件中斷,都屬于以下兩種類型:硬件中斷和軟件中斷,都屬于以下兩種類型:(1)可屏蔽中斷)可屏蔽中斷 (2)非屏蔽中斷)非屏蔽中斷 40(1)可屏蔽中斷)可屏蔽中斷 可以用軟件來(lái)屏蔽或開放可以用軟件來(lái)屏蔽或開放的中斷。的中斷。C54x最多最多16個(gè)個(gè)(SINT15-SINT0)例例C5402中:中:INT3-INT0(外部用戶中斷)(外部用戶中斷)BRINT0,BXINT0, BRINT1,BXINT1(緩沖串口中斷緩沖串口中斷)TINT0-TINT1(定時(shí)器中斷)(定時(shí)器中斷)HPINT(HPI接口中斷)接口中斷)DMAC0, DMAC4, DMAC5(DMA通道中斷通道中斷

17、)41(2)非屏蔽中斷)非屏蔽中斷 不能用軟件來(lái)屏蔽或開放不能用軟件來(lái)屏蔽或開放的中斷。的中斷。C54x總能響應(yīng)這總能響應(yīng)這類中斷,響應(yīng)中斷后轉(zhuǎn)去執(zhí)行中斷服務(wù)程序。類中斷,響應(yīng)中斷后轉(zhuǎn)去執(zhí)行中斷服務(wù)程序。包括包括所有軟件中斷所有軟件中斷和兩個(gè)和兩個(gè)外部硬件中斷外部硬件中斷RS、NMI(可以用軟件設(shè)置)。(可以用軟件設(shè)置)。RS對(duì)對(duì)C54x所有操作方式都有影響。所有操作方式都有影響。NMI不影響不影響C54x操作方式,響應(yīng)中斷時(shí),所有其它操作方式,響應(yīng)中斷時(shí),所有其它中斷都將被禁止。中斷都將被禁止。42表7-9 C5402中斷源的中斷向量及硬件中斷優(yōu)先權(quán)143表7-9 C5402中斷源的中斷向量

18、及硬件中斷優(yōu)先權(quán)2442.中斷標(biāo)志寄存器中斷標(biāo)志寄存器(IFR)和中斷屏蔽寄存器和中斷屏蔽寄存器(IMR)n中斷標(biāo)志寄存器(中斷標(biāo)志寄存器(IFR)是存儲(chǔ)器映象的是存儲(chǔ)器映象的CPU寄寄存器。存器。n一個(gè)可屏蔽中斷在一個(gè)可屏蔽中斷在IFR中有相應(yīng)的中斷標(biāo)志位,中有相應(yīng)的中斷標(biāo)志位,當(dāng)當(dāng)CPU接收到可屏蔽中斷請(qǐng)求時(shí),接收到可屏蔽中斷請(qǐng)求時(shí),IFR相應(yīng)的位相應(yīng)的位置置1,直到中斷得到處理為止。,直到中斷得到處理為止。45圖圖7-2 中斷標(biāo)志寄存器(中斷標(biāo)志寄存器(IFR)結(jié)構(gòu)圖結(jié)構(gòu)圖n如圖如圖7-2所示為所示為C5402中斷標(biāo)志寄存器(中斷標(biāo)志寄存器(IFR)結(jié)結(jié)構(gòu)圖。構(gòu)圖。46下面下面4種方法可

19、以清除中斷標(biāo)志種方法可以清除中斷標(biāo)志nC54x復(fù)位復(fù)位(RS為低電平為低電平)n中斷得到處理。中斷得到處理。n將將1寫到寫到IFR中的適當(dāng)位中的適當(dāng)位(該位變?yōu)樵撐蛔優(yōu)?),相應(yīng)未處理,相應(yīng)未處理完的中斷被清除。完的中斷被清除。STM #0FFFFH IFRn用適當(dāng)?shù)闹袛嗵?hào)來(lái)執(zhí)行用適當(dāng)?shù)闹袛嗵?hào)來(lái)執(zhí)行INTR指令。指令。IFR某位為某位為1表示一個(gè)未響應(yīng)的中斷。表示一個(gè)未響應(yīng)的中斷。47中斷屏蔽寄存器(中斷屏蔽寄存器(IMR)也是存儲(chǔ)器映象的也是存儲(chǔ)器映象的CPU寄寄存器,用來(lái)屏蔽外部和內(nèi)部的可屏蔽中斷,其存器,用來(lái)屏蔽外部和內(nèi)部的可屏蔽中斷,其結(jié)結(jié)構(gòu)圖同構(gòu)圖同IFR完全一致完全一致。 n如果如

20、果 ST1中的中斷屏蔽位中的中斷屏蔽位INTM=0,IMR中的某一中的某一位是位是1,表示允許(開放)相應(yīng)的中斷;,表示允許(開放)相應(yīng)的中斷;nNMI和和RS都不包括在都不包括在IMR中;中;n讀讀IMR可以檢查中斷是否被屏蔽;可以檢查中斷是否被屏蔽;n寫寫IMR可以屏蔽中斷或解除屏蔽中斷??梢云帘沃袛嗷蚪獬帘沃袛唷D圖7-2 中斷標(biāo)志寄存器(中斷標(biāo)志寄存器(IFR)結(jié)構(gòu)圖結(jié)構(gòu)圖483中斷響應(yīng)過(guò)程中斷響應(yīng)過(guò)程(1)接受中斷請(qǐng)求。)接受中斷請(qǐng)求。 (2)響應(yīng)中斷。)響應(yīng)中斷。(3)執(zhí)行中斷服務(wù)程序()執(zhí)行中斷服務(wù)程序(ISR)。)。49(1)接受中斷請(qǐng)求。)接受中斷請(qǐng)求。 n當(dāng)有中斷請(qǐng)求時(shí),

21、在當(dāng)有中斷請(qǐng)求時(shí),在IFR相應(yīng)的標(biāo)志位置相應(yīng)的標(biāo)志位置1. 中斷響應(yīng)后,這中斷響應(yīng)后,這個(gè)標(biāo)志自動(dòng)清除。個(gè)標(biāo)志自動(dòng)清除。n外部硬件中斷由外部接口的信號(hào)請(qǐng)求,有外部硬件中斷由外部接口的信號(hào)請(qǐng)求,有RS、NMI、INT3-INT0.內(nèi)部硬件中斷由片內(nèi)外設(shè)的信號(hào)請(qǐng)求,內(nèi)部硬件中斷由片內(nèi)外設(shè)的信號(hào)請(qǐng)求,C5402內(nèi)部硬內(nèi)部硬件中斷有件中斷有BRINT0、BXINT0、BRINT1、BXINT1、TINT、HPINT、DMA通道中斷通道中斷n軟件中斷由程序中的指令軟件中斷由程序中的指令I(lǐng)NTR、TRAP和和RESET產(chǎn)生產(chǎn)生nINTR K,可執(zhí)行任何中斷服務(wù)程序,入口地址可執(zhí)行任何中斷服務(wù)程序,入口地址

22、K,將,將INTM位位置置1,不可屏蔽。,不可屏蔽。nTRAP K,同上,但不會(huì)將同上,但不會(huì)將INTM位置位置1nRESET, 非屏蔽復(fù)位指令,將非屏蔽復(fù)位指令,將INTM位置位置1,影響狀態(tài)寄存器,影響狀態(tài)寄存器ST0、ST1,不影響處理器方式寄存器不影響處理器方式寄存器PMST。50(2)響應(yīng)中斷。)響應(yīng)中斷。CPU接收到硬件或軟件的中斷請(qǐng)求后,判斷是否響接收到硬件或軟件的中斷請(qǐng)求后,判斷是否響應(yīng)。應(yīng)。軟件中斷和非屏蔽中斷立即響應(yīng)軟件中斷和非屏蔽中斷立即響應(yīng),可屏蔽中可屏蔽中斷則判斷斷則判斷以下條件:以下條件:n優(yōu)先級(jí)最高的先響應(yīng)。優(yōu)先級(jí)最高的先響應(yīng)。n狀態(tài)寄存器狀態(tài)寄存器ST1中的中的

23、INTM位是位是0,表示允許可屏,表示允許可屏蔽中斷,可以用蔽中斷,可以用RSBX INTM指令來(lái)復(fù)位。指令來(lái)復(fù)位。n中斷屏蔽寄存器中斷屏蔽寄存器IMR中相應(yīng)的位是中相應(yīng)的位是151(3)執(zhí)行中斷服務(wù)程序()執(zhí)行中斷服務(wù)程序(ISR)。)。響應(yīng)中斷后,響應(yīng)中斷后,CPU做如下操作:做如下操作:把程序計(jì)算器把程序計(jì)算器(PC)的值的值(返回地址返回地址)壓入堆棧;壓入堆棧;把中斷向量的地址裝入把中斷向量的地址裝入PC取出位于中斷向量地址處的指令。若為延遲分支轉(zhuǎn)移指令,取出位于中斷向量地址處的指令。若為延遲分支轉(zhuǎn)移指令,取出其后兩條指令。取出其后兩條指令。執(zhí)行分支轉(zhuǎn)移指令,程序轉(zhuǎn)到中斷服務(wù)程序。如

24、果分支轉(zhuǎn)移執(zhí)行分支轉(zhuǎn)移指令,程序轉(zhuǎn)到中斷服務(wù)程序。如果分支轉(zhuǎn)移是延遲的,那么其后兩個(gè)指令先執(zhí)行。是延遲的,那么其后兩個(gè)指令先執(zhí)行。執(zhí)行中斷服務(wù)程序直到返回指令執(zhí)行中斷服務(wù)程序直到返回指令;從堆棧中彈出返回地址并裝入從堆棧中彈出返回地址并裝入PC;繼續(xù)執(zhí)行主程序。繼續(xù)執(zhí)行主程序。52n執(zhí)行中斷服務(wù)程序時(shí),某些寄存器也要壓入堆棧,執(zhí)行中斷服務(wù)程序時(shí),某些寄存器也要壓入堆棧,保護(hù)現(xiàn)場(chǎng)。返回時(shí)恢復(fù)寄存器內(nèi)容。保護(hù)現(xiàn)場(chǎng)。返回時(shí)恢復(fù)寄存器內(nèi)容。n用用PSHM,POPM指令將這些寄存器壓入或彈出堆棧,指令將這些寄存器壓入或彈出堆棧,也可以用也可以用PSHD和和POPD將數(shù)據(jù)寄存器的值壓入或彈將數(shù)據(jù)寄存器的值

25、壓入或彈出堆棧出堆棧.n要注意壓入和彈出的順序相反,先進(jìn)后出。要注意壓入和彈出的順序相反,先進(jìn)后出。nBRC必須在恢復(fù)必須在恢復(fù)ST1中的中的BRAF位前恢復(fù)。位前恢復(fù)。下圖下圖7-3為中斷操作流程圖為中斷操作流程圖53圖圖7-3 中斷操作流程圖中斷操作流程圖544重新映象中斷向量地址重新映象中斷向量地址nC54x的中斷向量表是可重定位的的中斷向量表是可重定位的,即在,即在DSP復(fù)位復(fù)位時(shí),中斷向量表的起始地址固定為時(shí),中斷向量表的起始地址固定為0FF80H,復(fù)復(fù)位后,此表的起始地址可由用戶指定。位后,此表的起始地址可由用戶指定。n中斷向量可重新被映象到程序存儲(chǔ)器的任何一個(gè)中斷向量可重新被映象

26、到程序存儲(chǔ)器的任何一個(gè)128字頁(yè)開始的地方(除保留區(qū)域外)。中斷向字頁(yè)開始的地方(除保留區(qū)域外)。中斷向量地址由量地址由PMST中的中斷向量指針中的中斷向量指針I(yè)PTR(9位)位)和中斷向量號(hào)(和中斷向量號(hào)(031)左移兩位后組成。如圖)左移兩位后組成。如圖7-4所示。所示。復(fù)位時(shí),復(fù)位時(shí),IPTR位全為位全為1(IPTR=1FFH),因此硬件復(fù)位),因此硬件復(fù)位后中斷向量表的起始地址為后中斷向量表的起始地址為0FF80H.55中斷向量號(hào)左移兩位后中斷向量地址圖7-4 中斷向量地址的產(chǎn)生IPTR=0001H0080INT0=10H 40H則則INT0的的中斷向量地址為中斷向量地址為00C0H返

27、回本節(jié)567.1.7 堆棧的使用堆棧的使用n堆棧被用于保存中斷程序、調(diào)用子程序的返回地堆棧被用于保存中斷程序、調(diào)用子程序的返回地址,也用于保護(hù)和恢復(fù)用戶指定的寄存器和數(shù)據(jù),址,也用于保護(hù)和恢復(fù)用戶指定的寄存器和數(shù)據(jù),還可用于程序調(diào)用時(shí)的參數(shù)傳遞。還可用于程序調(diào)用時(shí)的參數(shù)傳遞。返回地址是由返回地址是由DSP自動(dòng)保存的。自動(dòng)保存的。 n用戶編寫的壓棧指令和出棧指令將指定的內(nèi)容壓用戶編寫的壓棧指令和出棧指令將指定的內(nèi)容壓入和彈出堆棧,入和彈出堆棧,SP總是指向最后壓入堆棧的數(shù)據(jù),總是指向最后壓入堆棧的數(shù)據(jù),壓棧之前壓棧之前SP減減1,出棧之后,出棧之后SP加加1。 5758nC54x支持軟件堆棧,在

28、用戶指定的存儲(chǔ)區(qū)開辟一支持軟件堆棧,在用戶指定的存儲(chǔ)區(qū)開辟一塊存儲(chǔ)區(qū)作為堆棧存儲(chǔ)器。塊存儲(chǔ)區(qū)作為堆棧存儲(chǔ)器。堆棧的定義及初始化堆棧的定義及初始化步驟步驟為:為:1)聲明具有適當(dāng)長(zhǎng)度的未初始化段;)聲明具有適當(dāng)長(zhǎng)度的未初始化段;2)將堆棧指針指向棧底;)將堆棧指針指向棧底;3)在鏈接命令文件)在鏈接命令文件(.cmd)中將堆棧段放入內(nèi)部中將堆棧段放入內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)。數(shù)據(jù)存儲(chǔ)區(qū)。 59n堆棧的設(shè)置:堆棧的設(shè)置:nsize .set 100nstack .usect STK, sizenSTM #stack+size, SPn堆棧用法:堆棧用法:nCALL PC+1(N)放入堆棧,放入堆棧,SP-1

29、SPnRET 彈出彈出PC,SP+1 SPn注意:在鏈接命令文件中要為堆棧區(qū)定位,例如注意:在鏈接命令文件中要為堆棧區(qū)定位,例如nSTK: DARAMPAGE 1n見(jiàn)見(jiàn)EXAMPLE.ASM和和EXAMPLE.CMD60鏈接命令文件鏈接命令文件 example.cmdvectors.objexample.obj-o example.out-m example.map-e startMEMORY PAGE 0: EPROM:org=0E000h,len=100h VECS: org=0FF80h,len=80h PAGE 1: SPRAM: org=0060h,len=20h DARAM:org

30、=0080h,len=100h SECTIONS .text:EPROM PAGE 0 .bss:SPRAM PAGE 1 .data:DARAM PAGE 1 STACK:DARAM PAGE 1 Vectors:VECS PAGE 061example.asm程序清單程序清單* example.asm y= a1*x1+a2*x2+a3*x3+a4*x4 * .title example.asmSTACK usect STACK, 10h ;allocate space for stack .bss x,4 ;allocate 9 word for variables .bss a,4 .

31、bss y,1 .def start .data table: .word 1,2,3,4 ;data follows . .word 8,6,4,262example.asm程序清單(續(xù)程序清單(續(xù)1).text ;code follows . start: STM #STACK+10h, SP ;set stack pointer STM #table,AR1 ;AR1 point to table STM #x,AR2 ;AR2 point to x STM #7,AR0 LD #0,A loop: LD *AR1+,A ;move 8 values STL A,*AR2+ ;from

32、program memory BANZ loop,*AR0- ;into data memory CALL SUM ;call SUM subroutine end: B end63example.asm程序清單(續(xù)程序清單(續(xù)2).SUM: STM #a, AR3 ;The subroutine implement STM #x, AR4 ;multiply- ;accumulate RPTZ A, #3 MAC *AR3+, *AR4+, A STL A, y RET .end6465數(shù)據(jù)RAMDDDDDSPD66數(shù)據(jù)RAMAR4DBF8DBF8DBF8DBF8DBF8SPDBF8返回本節(jié)

33、677.2 數(shù)據(jù)塊傳送數(shù)據(jù)塊傳送返回首頁(yè)68nC54x數(shù)據(jù)傳送指令用于數(shù)據(jù)傳送數(shù)據(jù)傳送指令用于數(shù)據(jù)傳送,可分為四類:可分為四類: 697071數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)存儲(chǔ)器#W/C數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)存儲(chǔ)器MMR#W/CMVDK Smem, dmad2/2MVDM dmad, MMR2/2MVKD dmad,Smem2/2MVMD MMR, dmad2/2MVDD Xmem, Ymem1/1MVMM mmr, mmr1/1程序存儲(chǔ)器程序存儲(chǔ)器數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)存儲(chǔ)器#W/C程序存儲(chǔ)器程序存儲(chǔ)器(ACC) 數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)存儲(chǔ)器#W/CMVPD Pmad, Smem2/3READA Smem1/5

34、MVDP Smem, Pmad2/4WRITA Smem1/5#W/C :指令的字?jǐn)?shù):指令的字?jǐn)?shù)/執(zhí)行周期數(shù)執(zhí)行周期數(shù); pmad :16位立即數(shù)程序存儲(chǔ)器地址位立即數(shù)程序存儲(chǔ)器地址;Smem :數(shù)據(jù)存儲(chǔ)器的地址數(shù)據(jù)存儲(chǔ)器的地址; mmr :AR0AR7或或SP;MMR :任何一個(gè)存儲(chǔ)映象寄存器任何一個(gè)存儲(chǔ)映象寄存器; dmad :16位立即數(shù)數(shù)據(jù)存儲(chǔ)器地址位立即數(shù)數(shù)據(jù)存儲(chǔ)器地址;Xmem、Ymem :雙操作數(shù)數(shù)據(jù)雙操作數(shù)數(shù)據(jù)存儲(chǔ)器地址。存儲(chǔ)器地址。72737421212121349. 0199. 11)1 (0653. 0566. 0947. 1624. 1)1 (106. 0)(zzzzz

35、zzH7521212121349. 0199. 11)1 (0653. 0566. 0947. 1624. 1)1 (106. 0)(zzzzzzzH7621212121349. 0199. 11)1 (0653. 0566. 0947. 1624. 1)1 (106. 0)(zzzzzzzH77數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)存儲(chǔ)器例例10:10:編寫一段程序?qū)?shù)據(jù)存儲(chǔ)器中的數(shù)組編寫一段程序?qū)?shù)據(jù)存儲(chǔ)器中的數(shù)組x20 x20復(fù)制復(fù)制到數(shù)組到數(shù)組y20y20 .bss x,20 .bss y,20 .text LD #x,AR2 LD #y,AR3 RPT #19 MVDD *AR2+, *

36、AR3+ 78 .mmregs .def _c_int00 .dataTBL: .word0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 .word 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1PROM: .usect PROM,20 .bss a,20 .bss x,20 .bss y,20DATA: .usect DATA,20 .text1編寫匯編源程序?yàn)榫帉憛R編源程序?yàn)?9_c_int00 b start nop nopstart: STM #a,AR1 ;a20=0,1,2,3,4,5,6,7,8,

37、9,10, ;11,12,13,14,15,16,17,18,19 RPT#39 ;x20=1,1,1,1,1,1,1,1,1,1 MVPD TBL,*AR1+ ;1,1,1,1,1,1,1,1,1,1 STM #x, AR2;將數(shù)據(jù)存儲(chǔ)器中的數(shù)組將數(shù)據(jù)存儲(chǔ)器中的數(shù)組x20復(fù)制到數(shù)組復(fù)制到數(shù)組y20 STM #y,AR3 RPT #19 MVDD *AR2+, *AR3+80 STM #a, AR1 ;將數(shù)據(jù)存儲(chǔ)器中的將數(shù)據(jù)存儲(chǔ)器中的a20寫入到程序存儲(chǔ)器寫入到程序存儲(chǔ)器PROM LD #PROM, A STM #19, AR3LOOPP: WRITA *AR1+ ADD #1, A, A B

38、ANZ LOOPP, *AR3- LD #PROM-1, A ;讀程序存儲(chǔ)器讀程序存儲(chǔ)器PROM中中20個(gè)數(shù)據(jù)存入個(gè)數(shù)據(jù)存入 ;數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)存儲(chǔ)器DATA STM #DATA, AR1 ST #19, BRC RPTB LOOP2 ADD #1, A, ALOOP2: READA *AR1+ ;該指令為單字指令該指令為單字指令WAIT: NOP B WAIT81n點(diǎn)擊點(diǎn)擊CCS C5000圖標(biāo),進(jìn)入圖標(biāo),進(jìn)入CCS環(huán)境,再點(diǎn)環(huán)境,再點(diǎn)擊擊FileNewSource File菜單命令,打開一菜單命令,打開一個(gè)空白文檔,將匯編源程序逐條輸入。個(gè)空白文檔,將匯編源程序逐條輸入。n單擊單擊FileS

39、ave菜單命令,出現(xiàn)如下圖菜單命令,出現(xiàn)如下圖7-5所所示的窗口,示的窗口,2建立匯編源程序建立匯編源程序82 圖圖7-5 保存匯編源程序保存匯編源程序 n選擇選擇 D:Program Filesti myprojcetsmymoven子目錄,在子目錄,在“文件名文件名”一欄中輸入一欄中輸入mymove,并選擇保存并選擇保存類型為類型為Assembly Source Files(*.asm),),單擊單擊“保存保存”按鈕,以上匯編程序被存盤。按鈕,以上匯編程序被存盤。83n點(diǎn)擊點(diǎn)擊FileNewSource File菜單命令,打開一個(gè)空白文菜單命令,打開一個(gè)空白文檔,逐條輸入鏈接命令文件。檔,

40、逐條輸入鏈接命令文件。 mymove.obj -o mymove.out -m mymove.map MEMORY PAGE 0: RAM: origin=1000h,length=800h RAM1: origin=2000h,length=300h PAGE 1: DARAM1: origin=0100h,length=100h DARAM2: origin=0200h,length=100h 3建立鏈接命令文件建立鏈接命令文件84SECTIONS .data :RAM PAGE 0 .text :RAM PAGE 0 PROM :RAM1 PAGE 0 .bss :DARAM1 PAGE

41、 1 DATA :DARAM2 PAGE 1n點(diǎn)擊點(diǎn)擊FileSave菜單命令,如下圖菜單命令,如下圖7-5所示所示85 圖圖7-5 保存匯編源程序保存匯編源程序 n選擇選擇D:Program Filestimyprojcetsmymoven子目錄,在子目錄,在“文件名文件名”一欄中輸入一欄中輸入mymove,并選擇保存類并選擇保存類型為型為TI Command Language File(*.cmd),),單擊單擊“保存保存”按鈕,以上鏈接命令程序被存盤。按鈕,以上鏈接命令程序被存盤。864創(chuàng)建一個(gè)新工程創(chuàng)建一個(gè)新工程n在在Project菜單中選擇菜單中選擇New項(xiàng),彈出項(xiàng),彈出Projec

42、t Creation(工程創(chuàng)建)窗口,如圖工程創(chuàng)建)窗口,如圖7-6所示。所示。圖圖7-6 工程工程創(chuàng)建窗口創(chuàng)建窗口n在在Project一欄鍵入一欄鍵入mymove,然后單擊然后單擊“完成完成”按鈕,按鈕,CCS將創(chuàng)建一個(gè)名為將創(chuàng)建一個(gè)名為mymove.pjt的工程,此文件保存了的工程,此文件保存了工程的設(shè)置信息及工程中的文件引用情況。工程的設(shè)置信息及工程中的文件引用情況。875將有關(guān)文件添加到工程中將有關(guān)文件添加到工程中n從從Project菜單中選取菜單中選取Add Files to Project命令,選擇文命令,選擇文件件mymove.asm,雙擊將雙擊將mymove.asm添加到工程中

43、。添加到工程中。n點(diǎn)擊點(diǎn)擊ProjectAdd Files to Project菜單命令,將菜單命令,將mymove.cmd添加到工程文件中。添加到工程文件中。n逐層打開如圖逐層打開如圖7-7所示。雙擊所示。雙擊mymove.asm打開文件,可以打開文件,可以觀察和修改觀察和修改mymove.asm文件的內(nèi)容。文件的內(nèi)容。 886匯編、編譯和鏈接產(chǎn)生匯編、編譯和鏈接產(chǎn)生.out文件文件n點(diǎn)擊點(diǎn)擊Project菜單中的菜單中的Rebuild All。請(qǐng)注意在監(jiān)請(qǐng)注意在監(jiān)視窗口顯示的匯編、編譯和鏈接的相關(guān)信息。如視窗口顯示的匯編、編譯和鏈接的相關(guān)信息。如果沒(méi)有錯(cuò)誤,將產(chǎn)生果沒(méi)有錯(cuò)誤,將產(chǎn)生mymo

44、ve.out文件;如果有文件;如果有錯(cuò),在監(jiān)視窗口以紅色字體顯示出錯(cuò)行,用鼠標(biāo)錯(cuò),在監(jiān)視窗口以紅色字體顯示出錯(cuò)行,用鼠標(biāo)雙擊該行,光標(biāo)跳將至源程序相應(yīng)的出錯(cuò)行。修雙擊該行,光標(biāo)跳將至源程序相應(yīng)的出錯(cuò)行。修改錯(cuò)誤后,重新匯編、鏈接。改錯(cuò)誤后,重新匯編、鏈接。897加載并運(yùn)行加載并運(yùn)行.out文件文件n執(zhí)行菜單命令執(zhí)行菜單命令FileLoad Program,選擇選擇mymove.out并打開,將并打開,將Rebuild All生成的程序生成的程序加載到加載到DSP中。中。CCS將自動(dòng)打開一個(gè)反匯編窗口,將自動(dòng)打開一個(gè)反匯編窗口,顯示加載程序的反匯編指令。顯示加載程序的反匯編指令。n點(diǎn)擊點(diǎn)擊Deb

45、ugRun菜單命令運(yùn)行程序,單步執(zhí)行菜單命令運(yùn)行程序,單步執(zhí)行程序則點(diǎn)擊程序則點(diǎn)擊DebugStepInto菜單命令,或按菜單命令,或按F8鍵。鍵。908觀察運(yùn)行結(jié)果觀察運(yùn)行結(jié)果n點(diǎn)擊點(diǎn)擊ViewMemory菜單命令,將出現(xiàn)如圖菜單命令,將出現(xiàn)如圖7-8所所示的選項(xiàng)窗口,將示的選項(xiàng)窗口,將Address改為改為0 x0100,單擊單擊OK按鈕,將在匯編窗口顯示選定的數(shù)據(jù)空間的按鈕,將在匯編窗口顯示選定的數(shù)據(jù)空間的內(nèi)容。內(nèi)容。n當(dāng)結(jié)果數(shù)據(jù)錯(cuò)誤時(shí),可檢查源程序并進(jìn)行修改。當(dāng)結(jié)果數(shù)據(jù)錯(cuò)誤時(shí),可檢查源程序并進(jìn)行修改。修改完畢,可重新匯編、鏈接,再加載運(yùn)行修改完畢,可重新匯編、鏈接,再加載運(yùn)行.out文

46、件,直到結(jié)果正確。文件,直到結(jié)果正確。返回本節(jié)917.3 定點(diǎn)數(shù)的基本算術(shù)運(yùn)算定點(diǎn)數(shù)的基本算術(shù)運(yùn)算n7.3.1 加法、減法和乘法運(yùn)算加法、減法和乘法運(yùn)算n7.3.2 定點(diǎn)除法運(yùn)算定點(diǎn)除法運(yùn)算返回首頁(yè)9293947.3.1 加法、減法和乘法運(yùn)算加法、減法和乘法運(yùn)算1定點(diǎn)定點(diǎn)DSP中數(shù)據(jù)表示方法中數(shù)據(jù)表示方法n定點(diǎn)定點(diǎn)DSP芯片的數(shù)值表示是基于芯片的數(shù)值表示是基于2的補(bǔ)碼表示的補(bǔ)碼表示形形式。式。n數(shù)的定標(biāo)有數(shù)的定標(biāo)有Q表示法和表示法和S表示法,表表示法,表7-10列出了列出了16位數(shù)的位數(shù)的16種種Q表示和表示和S表示,以及它們所能表表示,以及它們所能表示的十進(jìn)制數(shù)范圍。示的十進(jìn)制數(shù)范圍。n16

47、位中有一個(gè)符號(hào)位、位中有一個(gè)符號(hào)位、Q個(gè)小數(shù)位和個(gè)小數(shù)位和15-Q個(gè)整數(shù)個(gè)整數(shù)位來(lái)表示一個(gè)數(shù)。位來(lái)表示一個(gè)數(shù)。 95表7-10 Q表示、S表示及數(shù)值范圍96n浮點(diǎn)數(shù)(浮點(diǎn)數(shù)(x)轉(zhuǎn)換為定點(diǎn)數(shù)()轉(zhuǎn)換為定點(diǎn)數(shù)(xq)n xq=(int)(x2q)n定點(diǎn)數(shù)(定點(diǎn)數(shù)(xq)轉(zhuǎn)換為浮點(diǎn)數(shù)()轉(zhuǎn)換為浮點(diǎn)數(shù)(x)n x=(float)(xq2-q)n浮點(diǎn)數(shù)浮點(diǎn)數(shù)3.1,定標(biāo)定標(biāo)Q=13,定點(diǎn)數(shù),定點(diǎn)數(shù)xq=3.1213=25395nQ13定點(diǎn)數(shù)定點(diǎn)數(shù)25395,浮點(diǎn)數(shù)為浮點(diǎn)數(shù)為x=253952-13=3.1浮點(diǎn)數(shù)與定點(diǎn)數(shù)的轉(zhuǎn)換關(guān)系浮點(diǎn)數(shù)與定點(diǎn)數(shù)的轉(zhuǎn)換關(guān)系97C54x采用采用2的補(bǔ)碼小數(shù)的補(bǔ)碼小數(shù)nQ15格

48、式格式,最高位為符號(hào)位,小數(shù)點(diǎn)在符號(hào)位后最高位為符號(hào)位,小數(shù)點(diǎn)在符號(hào)位后n數(shù)值范圍從數(shù)值范圍從-1到到+1(1-2-15=0.999969482421875)n16位位2的補(bǔ)碼小數(shù)(的補(bǔ)碼小數(shù)(Q15格式)每個(gè)的權(quán)值為:格式)每個(gè)的權(quán)值為: MSB LSB -1(0). 1/2 1/4 1/8 2-15小數(shù)的表示方法小數(shù)的表示方法9899匯編語(yǔ)言程序中小數(shù)的寫法匯編語(yǔ)言程序中小數(shù)的寫法100216位定點(diǎn)加法和位定點(diǎn)加法和16位定點(diǎn)減法位定點(diǎn)減法nC54x中提供了多條用于加法的指令,如中提供了多條用于加法的指令,如ADD、ADDC、ADDM和和ADDS。其中,其中,nADDS用于無(wú)符號(hào)數(shù)的加法運(yùn)

49、算,用于無(wú)符號(hào)數(shù)的加法運(yùn)算,nADDS Smem, src ; src=src+uns(Smem)nADDC用于帶進(jìn)位的加法運(yùn)算,用于帶進(jìn)位的加法運(yùn)算,nADDC Smem, src ; src=src+Smem+CnADDM專用于立即數(shù)的加法。專用于立即數(shù)的加法。nADDM #lk, Smem ; Smem=Smem+#lk101n C54x中提供了多條用于減法的指令,如中提供了多條用于減法的指令,如SUB、SUBB、SUBC和和SUBS。其中,其中,nSUBS用于無(wú)符號(hào)數(shù)的減法運(yùn)算,用于無(wú)符號(hào)數(shù)的減法運(yùn)算,nSUBS Smem, src ; src=src-uns(Smem)nSUBB用于

50、帶進(jìn)位的減法運(yùn)算,用于帶進(jìn)位的減法運(yùn)算,nSUBB Smem, src ; src=src-Smem-CnSUBC為條件減法指令。為條件減法指令。nSUBC Smem, src ; if(src-Smem=0n src =(src-Smem15)1+1n else src = src1102316位定點(diǎn)整數(shù)乘法位定點(diǎn)整數(shù)乘法nC54x中提供了大量的乘法運(yùn)算指令,其結(jié)果都是中提供了大量的乘法運(yùn)算指令,其結(jié)果都是32位,放在累加器位,放在累加器A或或B中。乘數(shù)在中。乘數(shù)在C54x的乘法的乘法指令中很靈活,可以是指令中很靈活,可以是T寄存器、立即數(shù)、存儲(chǔ)寄存器、立即數(shù)、存儲(chǔ)單元和累加器單元和累加器A

51、或或B的高的高16位。位。n在在C54x中,一般對(duì)數(shù)據(jù)的處理都當(dāng)做有符號(hào)數(shù),中,一般對(duì)數(shù)據(jù)的處理都當(dāng)做有符號(hào)數(shù),如果是無(wú)符號(hào)數(shù)相乘,使用如果是無(wú)符號(hào)數(shù)相乘,使用MPYU指令,這是一指令,這是一條專門用于無(wú)符號(hào)數(shù)乘法運(yùn)算的指令,其他指令條專門用于無(wú)符號(hào)數(shù)乘法運(yùn)算的指令,其他指令都是有符號(hào)數(shù)的乘法。都是有符號(hào)數(shù)的乘法。 103RSBX FRCT ;FRCT=0,準(zhǔn)備整數(shù)乘法準(zhǔn)備整數(shù)乘法LD x, T ;將將x裝入裝入TMPY y, A ;y乘乘x,放,放ASTH A, z_h ;將乘積結(jié)果高將乘積結(jié)果高16位放位放z_hSTL A, z_l ;將乘積結(jié)果低將乘積結(jié)果低16位放位放z_l104加、減

52、法和乘法運(yùn)算例子加、減法和乘法運(yùn)算例子1 1105加、減法和乘法運(yùn)算例子加、減法和乘法運(yùn)算例子2 2106加、減法和乘法運(yùn)算例子加、減法和乘法運(yùn)算例子2 2iiixa41107加、減法和乘法運(yùn)算例子加、減法和乘法運(yùn)算例子2 2iiixa41108加、減法和乘法運(yùn)算例子加、減法和乘法運(yùn)算例子2 2iiixa41109加、減法和乘法運(yùn)算例子加、減法和乘法運(yùn)算例子3 31104Q15定點(diǎn)小數(shù)乘法運(yùn)算定點(diǎn)小數(shù)乘法運(yùn)算n兩個(gè)兩個(gè)16位整數(shù)相乘,乘積總是位整數(shù)相乘,乘積總是“向左增長(zhǎng)向左增長(zhǎng)”,這,這就意味著多次相乘后乘積將會(huì)很快超出定點(diǎn)器件就意味著多次相乘后乘積將會(huì)很快超出定點(diǎn)器件的數(shù)據(jù)范圍。而且要將的

53、數(shù)據(jù)范圍。而且要將32位乘積保存到數(shù)據(jù)存儲(chǔ)位乘積保存到數(shù)據(jù)存儲(chǔ)器,就要耗費(fèi)兩個(gè)機(jī)器周期以及兩個(gè)字的程序和器,就要耗費(fèi)兩個(gè)機(jī)器周期以及兩個(gè)字的程序和RAM單元。單元。n然而,兩個(gè)然而,兩個(gè)Q15的小數(shù)相乘,乘積總是的小數(shù)相乘,乘積總是“向右增向右增長(zhǎng)長(zhǎng)”,這就意味著超出定點(diǎn)器件數(shù)據(jù)范圍的將是,這就意味著超出定點(diǎn)器件數(shù)據(jù)范圍的將是不太感興趣的部分。不太感興趣的部分。 111 整數(shù)相乘,整數(shù)相乘,“向左增長(zhǎng)向左增長(zhǎng)”的缺陷的缺陷 開銷開銷2個(gè)機(jī)器周期個(gè)機(jī)器周期 占用占用2個(gè)字的程序和個(gè)字的程序和RAM單元單元 難以遞推運(yùn)算難以遞推運(yùn)算 小數(shù)相乘,小數(shù)相乘,“向右增長(zhǎng)向右增長(zhǎng)” 保存高保存高16位乘積

54、,占用較少資源位乘積,占用較少資源 便于遞推運(yùn)算便于遞推運(yùn)算112113 S x x x S x x x (Q3(Q3格式)格式) S y y y S y y y (Q3(Q3格式)格式) S S z z z z z z S S z z z z z z (Q6(Q6格式)格式)114小數(shù)乘法編程小數(shù)乘法編程SSBX FRCT ;FRCT=1,準(zhǔn)備小數(shù)乘法準(zhǔn)備小數(shù)乘法LD x, 16, A ;將將x裝入裝入A的高的高16位位MPYA y ;y乘乘A的高的高16位,放位,放BSTH B, z ;將乘積結(jié)果高將乘積結(jié)果高16位放位放znx=y=4000H(0.5) 20000000H(0.25)20

55、00H(0.25)nx=0CCDH(0.1) y=0599AH(0.7)nB=08F5F0A4H(0.070005) 08F5H(0.06997)1155混合表示法混合表示法n有些情況下,運(yùn)算過(guò)程中為了既滿足數(shù)值的動(dòng)態(tài)有些情況下,運(yùn)算過(guò)程中為了既滿足數(shù)值的動(dòng)態(tài)范圍又保證一定的精度,必須采用范圍又保證一定的精度,必須采用Q0與與Q15之間之間的表示方法。的表示方法。n在做加、減運(yùn)算時(shí),如果兩個(gè)操作數(shù)的定標(biāo)不一在做加、減運(yùn)算時(shí),如果兩個(gè)操作數(shù)的定標(biāo)不一樣,在運(yùn)算前要進(jìn)行小數(shù)點(diǎn)的調(diào)整,為保證運(yùn)算樣,在運(yùn)算前要進(jìn)行小數(shù)點(diǎn)的調(diào)整,為保證運(yùn)算精度,需要使精度,需要使Q值小的數(shù)調(diào)整為與另一個(gè)數(shù)的值小的數(shù)調(diào)整

56、為與另一個(gè)數(shù)的Q值一樣大。值一樣大。116 41iiixayaxy117 41iiixayaxy0.30.2-0.5-0.1-0.20.3返回本節(jié)1187.3.2 定點(diǎn)除法運(yùn)算定點(diǎn)除法運(yùn)算n在一般的在一般的DSP中,沒(méi)有專門的除法指令。同樣,在中,沒(méi)有專門的除法指令。同樣,在C54x中也沒(méi)有提供專門的除法指令。一般有兩種方法來(lái)完成除中也沒(méi)有提供專門的除法指令。一般有兩種方法來(lái)完成除法。法。n一種是用乘法來(lái)代替,除以某個(gè)數(shù)相當(dāng)于乘以其倒數(shù),所一種是用乘法來(lái)代替,除以某個(gè)數(shù)相當(dāng)于乘以其倒數(shù),所以先求出其倒數(shù),然后相乘。這種方法對(duì)于除以常數(shù)特別以先求出其倒數(shù),然后相乘。這種方法對(duì)于

57、除以常數(shù)特別適用。適用。n另一種方法是使用條件減法另一種方法是使用條件減法SUBC指令,加上重復(fù)指令指令,加上重復(fù)指令RPT #15,重復(fù)重復(fù)16次減法完成無(wú)符號(hào)數(shù)除法運(yùn)算。次減法完成無(wú)符號(hào)數(shù)除法運(yùn)算。兩種不兩種不同情況下的除法程序。同情況下的除法程序。1|被除數(shù)被除數(shù)|除數(shù)除數(shù)|,商為小數(shù),商為小數(shù)2|被除數(shù)被除數(shù)|除數(shù)除數(shù)|,商為整數(shù),商為整數(shù)119長(zhǎng)除數(shù)法長(zhǎng)除數(shù)法 0.4/(-0.8) 3333h/999Ah 0.4/0.8 3333h/6666h 3333h 16ACCNEG:取反加一。取反加一。120除數(shù)結(jié)果除數(shù)結(jié)果被除數(shù)被除數(shù) 4*32768/10(0.4)除數(shù)除數(shù) -8*3276

58、8/10(-0.8) 商(十六進(jìn)制)商(十六進(jìn)制) 0 xc000 商(十進(jìn)制)商(十進(jìn)制) -0.5 121| |被除數(shù)被除數(shù)|除數(shù)除數(shù)| |,商為小數(shù),商為小數(shù)數(shù)據(jù)存儲(chǔ)器分子分母商:0.4-0.8AR1num0.4-0.8quot122| |被除數(shù)被除數(shù)|除數(shù)除數(shù)| |,商為小數(shù),商為小數(shù)0.4:-0.8商-0.80.4數(shù)據(jù)存儲(chǔ)器AR1quot0.8-0.5123| |被除數(shù)被除數(shù)|除數(shù)除數(shù)| |,商為小數(shù),商為小數(shù)被除數(shù)被除數(shù) 除除 數(shù)數(shù) 商商( (十六進(jìn)制十六進(jìn)制) ) 商商( (十進(jìn)制十進(jìn)制) ) 4 4* *3232 768/100(0.4) 768/100(0.4) -8-8*

59、*3232 768/100(-0.8) 768/100(-0.8) 0 0 xC000 xC000 -0.5 -0.5 -128 -128 1 1 024 024 0 0 xF000 xF000 -0.125 -0.125 124| |被除數(shù)被除數(shù)|除數(shù)除數(shù)| |,商為整數(shù),商為整數(shù)125| |被除數(shù)被除數(shù)|除數(shù)除數(shù)| |,商為整數(shù),商為整數(shù)126| |被除數(shù)被除數(shù)|除數(shù)除數(shù)| |,商為整數(shù),商為整數(shù)被除數(shù)被除數(shù) 除除 數(shù)數(shù) 商商( (十六進(jìn)制十六進(jìn)制) ) 商商( (十進(jìn)制十進(jìn)制) ) 1616 384 384 512 512 0 0 xC020 xC020 32 32 6666* *3232 768/100(0.66) 768/100(0.66) -33-33* *3232 768/100(-0.33) 768/100(-0.33) 0 0 xFFFE xFFFE -2 -2 127返回本節(jié)關(guān)于除法操作的說(shuō)明關(guān)于除法操作的說(shuō)明nSUBCSUBC指令僅對(duì)指令僅對(duì)無(wú)符號(hào)數(shù)無(wú)符號(hào)數(shù)進(jìn)行操作進(jìn)行操作n除法運(yùn)算必須對(duì)被除數(shù)和除數(shù)取絕對(duì)值除法運(yùn)算必須對(duì)被除數(shù)和除數(shù)取絕對(duì)值n利用乘法操作,獲取商的

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論