3-DSP第三章匯編語(yǔ)言程序設(shè)計(jì).ppt_第1頁(yè)
3-DSP第三章匯編語(yǔ)言程序設(shè)計(jì).ppt_第2頁(yè)
3-DSP第三章匯編語(yǔ)言程序設(shè)計(jì).ppt_第3頁(yè)
3-DSP第三章匯編語(yǔ)言程序設(shè)計(jì).ppt_第4頁(yè)
3-DSP第三章匯編語(yǔ)言程序設(shè)計(jì).ppt_第5頁(yè)
已閱讀5頁(yè),還剩53頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、,1,第三章TMS320C54x匯編語(yǔ)言程序設(shè)計(jì),光電學(xué)院 樂(lè)燕芬 le_,2,內(nèi)容提要,匯編語(yǔ)言源程序的概述,堆棧的使用方法,控制程序,算術(shù)運(yùn)算,1,2,3,4,3,3-1 匯編語(yǔ)言源程序概述,.asm為擴(kuò)展名 助記符指令語(yǔ)法格式 標(biāo)號(hào): 助記符 操作數(shù) ; 注釋,4,3-1 匯編語(yǔ)言源程序概述,標(biāo)號(hào) 冒號(hào)可選;由字母、數(shù)字、下劃線(xiàn)等組成;分大小寫(xiě) 供本程序或其它程序調(diào)用,標(biāo)號(hào)的值是段程序計(jì)數(shù)器SPC的當(dāng)前值(局部的符號(hào)地址)。 例如,若使用.word偽指令初始化幾個(gè)字,則標(biāo)號(hào)將指到第一個(gè)字。,標(biāo)號(hào)也可獨(dú)立成行,5,3-1 匯編語(yǔ)言源程序概述,可作為.global,.ref,.def或.bs

2、s等匯編偽指令的操作數(shù) 如:,.def:在當(dāng)前模塊中定義,并可在別的模塊中使用的符號(hào)。 .ref:在當(dāng)前模塊中使用,但在別的模塊中定義的符號(hào)。 .global:可以是上面的任何一種情況。,6,3-1 匯編語(yǔ)言源程序概述,操作數(shù) 指令中參與操作的數(shù)值或匯編偽指令定義的內(nèi)容,緊跟在助記符的后面,由一個(gè)或多個(gè)空格分開(kāi)。 操作數(shù)前綴 “#”:作為立即數(shù) 例如:Label: ADD # 99, B “*” :間接地址,即把操作數(shù)的內(nèi)容作為地址 例如: Label: LD * AR3, B “”:作為直接地址,即操作數(shù)由直接地址碼賦值。 例如: Label: LD x, A,7,3-1 匯編語(yǔ)言源程序概述

3、,匯編語(yǔ)言中的數(shù)據(jù)類(lèi)型,8,3-1 匯編語(yǔ)言源程序概述,匯編時(shí)間常數(shù) .set 使用.set偽指令給一個(gè)符號(hào)賦值,該符號(hào)就成為一個(gè)匯編時(shí)間常數(shù),等效于一個(gè)常數(shù)。 將符號(hào)常數(shù)賦給寄存器名。此時(shí),該符號(hào)變成了寄存器的替代名。,9,3-1 匯編語(yǔ)言源程序概述,局部標(biāo)號(hào) 局部標(biāo)號(hào)是一種特殊的標(biāo)號(hào),使用的范圍和影響是臨時(shí)性的 定義方式: 用$n來(lái)定義。n是09的十進(jìn)制數(shù),10,3-1 匯編語(yǔ)言源程序概述,局部標(biāo)號(hào)舉例:,假設(shè)符號(hào)ADDRA,ADDRB,ADDRC已經(jīng)在前面作了定義。,11,3-1 匯編語(yǔ)言源程序概述,符號(hào): 由AZ,az,09,_和$組成;第一位不能為數(shù)字;不能含空格; 符號(hào)也可被設(shè)置成

4、常數(shù)值。為了提高程序的可讀性,可以用有意義的名稱(chēng)來(lái)代表一些重要的常數(shù)值。 如:,12,3-1 匯編語(yǔ)言源程序概述,匯編源程序中的表達(dá)式,13,3-2 堆棧的使用,當(dāng)程序調(diào)用中斷服務(wù)程序或子程序時(shí),需要將程序計(jì)數(shù)器PC的值和一些重要的寄存器值進(jìn)行壓棧保護(hù),以便程序返回時(shí)能從間斷處繼續(xù)執(zhí)行。 C54x提供一個(gè)用16位堆棧指針SP尋址的軟件堆棧。 當(dāng)向堆棧中壓入數(shù)據(jù)時(shí),堆棧是從高地址向低地址方向填入,堆棧指針SP先減1,然后將數(shù)據(jù)壓入堆棧。 當(dāng)從堆棧中彈出數(shù)據(jù)時(shí)。數(shù)據(jù)先從堆棧中彈出,然后堆棧指針SP加1。,14,3-2 堆棧的使用方法,堆棧的設(shè)置 使用堆棧 如: CALL pmad ;(SP)-1S

5、P,(PC)+2TOS,pmadPC RET ;(TOS)PC,(SP)+1SP,15,3-2 堆棧的使用方法,堆棧大小的確定 先開(kāi)辟一個(gè)較大的堆棧區(qū),用已知數(shù)填充 如: LD # -9224,B STM # length,AR1 MVMM SP,AR4 loop: STL B,*AR4- BANZ loop,*AR1-,;堆棧區(qū)要充填的數(shù)0DBF8h加載B ;設(shè)置循環(huán)次數(shù) ;設(shè)置數(shù)據(jù)指針AR4,SPAR4 ;循環(huán),填充數(shù)據(jù),運(yùn)行程序,執(zhí)行所有堆棧操作 檢查堆棧中的數(shù)值 用過(guò)的堆棧區(qū)就是實(shí)際需要的堆??臻g。,6B14,0013,SP,7AB3,用過(guò)的棧區(qū),16,3-3 控制程序,C54x具有豐

6、富的程序控制指令,利用這些指令可以執(zhí)行分支轉(zhuǎn)移、子程序調(diào)用、子程序返回,條件執(zhí)行以及循環(huán)等控制操作 分支操作: 分支轉(zhuǎn)移程序 子程序調(diào)用 子程序返回 條件操作程序 比較轉(zhuǎn)移 循環(huán)操作,17,3-3 控制程序,分支操作分支轉(zhuǎn)移程序 改寫(xiě)PC值,使程序改變流向 分支轉(zhuǎn)移指令,18,3-3 控制程序,例: STM #88H,AR0 LD #1000H,A Loop1: ADD AR0,A BC Loop1,AGT,AOV,;若累加器A0且溢出則轉(zhuǎn)至 Loop1,否則往下執(zhí)行,例:,19,3-3 控制程序,BC Loop1,AGT,AOV,20,3-3 控制程序,分支操作子程序調(diào)用 當(dāng)子程序被調(diào)用時(shí),

7、緊跟在調(diào)用后的下一條指令的地址保存在堆棧中。該地址用于返回時(shí)能繼續(xù)執(zhí)行調(diào)用前的程序,21,3-3 控制程序,分支操作子程序返回 子程序返回可使程序重新在被中斷的連續(xù)指令處繼續(xù)執(zhí)行。 返回指令通過(guò)將彈出堆棧的值(包含將要執(zhí)行的下一條指令的地址),送到程序計(jì)數(shù)器PC來(lái)實(shí)現(xiàn)返回功能。,22,3-3 控制程序,例: STM #123H,AR0 LD #456H,AR1 CALL new LD AR1,16,A new: MPY AR0,AR1,A RET,;將操作數(shù)#123H裝入AR0 ;將操作數(shù)#456H裝入AR1 ;調(diào)子程序new ;將AR1的內(nèi)容左移16位后裝入A ;AR0與AR1的內(nèi)容相乘,結(jié)

8、果放入A中 ;子程序返回,例:,23,3-3 控制程序,分支操作比較轉(zhuǎn)移 指令: CMPR CC,ARx 指令功能: 輔助寄存器ARx與AR0進(jìn)行比較,若比較結(jié)果使所給定的測(cè)試條件成立,則TC位置1。 實(shí)現(xiàn)方法: 通過(guò)CMPR的比較結(jié)果得TC值; 根據(jù)TC值,由條件轉(zhuǎn)移指令實(shí)現(xiàn)分支轉(zhuǎn)移。,24,3-3 控制程序,例如:比較操作后條件分支轉(zhuǎn)移 STM #5,AR1 ; AR1=5 STM #10,AR0 ; AR0=10 loop: *AR1+ ; AR1=AR1+1 CMPR LT,AR1 ;若AR1 AR0,則TC=1,否則為0 BC loop, TC ;若AR1 AR0,則循環(huán) ;若AR1

9、AR0,則順序執(zhí)行,25,3-3 控制程序,循環(huán)操作 指令: BANZ 轉(zhuǎn)移地址,*ARx 指令功能: 當(dāng)輔助寄存器不為0時(shí),則轉(zhuǎn)至轉(zhuǎn)移地址,否則順序執(zhí)行。,26,3-3 控制程序,例:,.bss x,10 ;給x保留10個(gè)空間 .bss y,1 ;給y保留1個(gè)空間 STM #x,AR1 ;設(shè)置數(shù)據(jù)段的首地址 STM #9,AR2 ;設(shè)置循環(huán)計(jì)數(shù)值 LD #0,A ;累加器清0 loop: ADD *AR1+,A ;累加運(yùn)算,并修改地址 BANZ loop,*AR2- ;若計(jì)數(shù)值不為0,則循環(huán),并計(jì)數(shù)值減1 ;若計(jì)數(shù)值為0,則結(jié)束循環(huán) STL A, y ;累加和存入y中,注意: BANZ lo

10、op, *AR2- ;先判斷,再修正AR2=AR2-1,用AR2作為循環(huán)計(jì)數(shù)器,由BANZ實(shí)現(xiàn)程序的循環(huán)控制。,27,3-4 算術(shù)運(yùn)算,加減法和乘法運(yùn)算 在數(shù)字信號(hào)處理中,加法和乘法運(yùn)算是最常見(jiàn)的算術(shù)運(yùn)算。 例:計(jì)算 y = a x + b,LD a, T ;取a值,T=a MPY x, B ;完成ax乘積,B=ax ADD b, B ;完成ax+b運(yùn)算,B=ax+b STL B, y ;計(jì)算結(jié)果存入y中,28,;T=x1 ;B=x1a1 ;T=x2 ;乘法累加,B=x1a1+x2a2 ;計(jì)算結(jié)果的低字BL存入y中 ;計(jì)算結(jié)果的高字BH存入y+1中,3-4 算術(shù)運(yùn)算,例:計(jì)算 y = xl a

11、l + x2 a2,LD x1, T MPY a1, B LD x2, T MAC a2, B STL B, y STH B, y+1,29,例:計(jì)算 y =,3-4 算術(shù)運(yùn)算,Test1.asm,30,3-4 算術(shù)運(yùn)算,例: 求4項(xiàng)乘積aixi(i=1,2,3,4,5)中的最大值,并存放累加器A中。,STM #a, AR1 STM #x, AR2 STM #2, AR3 LD *AR1+,T MPY *AR2+,A loop1: LD *AR1+,T MPY *AR2+,B MAX A BANZ loop1,*AR3-,;乘法運(yùn)算A=aixi,并修改AR2 ;乘法運(yùn)算B=aixi,并修改AR

12、2 ;求A和B中的最大值 ;若AR30,則循環(huán),并修改AR3,31,35 重復(fù)操作,指令 RPT: 重復(fù)下條指令 RPTZ: 累加器清0,并重復(fù)下條指令 RPTB: 塊重復(fù),.bss x, 8 STM #x, AR1 LD #0, A RPT #7 STL A,*AR1+,.bss x, 8 STM #x, AR1 RPTZ A,#7 STL A,*AR1+,【例】對(duì)數(shù)組進(jìn)行初始化,使x8=0,0,0,0,0,0,0,0,32,35 重復(fù)操作,【例】對(duì)數(shù)組x8中的每一元素加1。,.bss x, 8 begin: LD #1,16,B STM #7,BRC STM #x,AR4 RPTB nex

13、t-1 ADD *AR4,16,B,A STH A,*AR4+ next: LD #0,B ,;設(shè)置重復(fù)次數(shù),BRC=7,循環(huán)8次 ;設(shè)置循環(huán)結(jié)束地址 ;數(shù)組數(shù)據(jù)左移16位與BH相加 ;存入數(shù)組結(jié)果,并修改地址,注 意 塊結(jié)束地址REA 重復(fù)次數(shù) RPTB指令可以響應(yīng)中斷,33,36 數(shù)據(jù)塊傳送,指令 數(shù)據(jù)存儲(chǔ)器之間 MVDK Smem,dmad MVKD dmad,Smem MVDD Xmem,Ymem,數(shù)據(jù)存儲(chǔ)器與MMR之間,MVDM dmad,MMR MVMD MMR,dmad MVMM MMRx,MMRy,程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器之間,MVPD pmad,Smem MVDP Smem,p

14、mad READA Smem WRITA Smem,從PA口讀/寫(xiě)數(shù)據(jù),PORTR PA,Smem PORTW Smem,PA,34,36 數(shù)據(jù)塊傳送,35,36 數(shù)據(jù)塊傳送,【例】初始化數(shù)組x8=0,1,2,3,4,5,6,7 。,. bss x,8 . data TBL: . word 0,1,2,3,4,5,6,7 . text START: STM #x,AR5 RPT #7 MVPD TBL,*AR5+ ,36,37 雙操作數(shù)乘法,課后自習(xí) 雙操作數(shù)乘法的編程方法、特點(diǎn),37,38 小數(shù)運(yùn)算,定標(biāo) 設(shè)定小數(shù)點(diǎn)在16位中的位置。 位置不同,可以表示不同大小和不同精度的小數(shù)。 Q表示法

15、如Q0,Q1,Q15。Q越大,可以表示的數(shù)的范圍越小,但精度越高。 小數(shù)表示方法 基于2的補(bǔ)碼小數(shù)(Q15格式),其位權(quán)值: MSB LSB -1. 2-1 2-2 2-3 2-15 00000010.1010000021+2-1+2-3 = 2.625,38,0.5 4000H 0.25 2000H 0 0000H -0.25 E000H -0.5 C000H -1 8000H,0.532768=4000H 0.2532768=2000H 032768=0000H (0.2532768)補(bǔ)=E000H (0.532768)補(bǔ)=C000H (132768)補(bǔ)=8000H,注意:匯編時(shí),不能直接

16、寫(xiě)成十進(jìn)制小數(shù) 如:0.907 .word 32 768*907/1000,38 小數(shù)運(yùn)算,2的補(bǔ)碼小數(shù): 正數(shù):乘以32768(215),整數(shù)轉(zhuǎn)換成16進(jìn)制數(shù)(Q15格式) 負(fù)數(shù):其絕對(duì)值乘以32768,整數(shù)取反加1 (Q15格式),39,38 小數(shù)運(yùn)算,小數(shù)乘法與冗余符號(hào)位 小數(shù)乘法實(shí)例 0.5(-0.375) = -0.1875 假設(shè)字長(zhǎng)4位,累加器8位(Q3格式),0 1 0 0 (0.5),1 1 0 1 (-0.375),0 1 0 0,0 0 0 0,0 1 0 0,1 1 0 0 (-0100),1 1 1 0 1 0 0,(-0.1875),40,38 小數(shù)運(yùn)算,乘積: -0

17、.1875 = 1110100 7位二進(jìn)制,擴(kuò)展8位后,乘積:11110100 = -0.09375,出錯(cuò)原因:兩帶符號(hào)數(shù)相乘,其結(jié)果帶有2個(gè)符號(hào)位。,解決辦法:運(yùn)算結(jié)果左移一位,消去多余符號(hào)位??赏ㄟ^(guò)對(duì) FRCT位置1,乘法器自動(dòng)將乘積結(jié)果左移一位,自動(dòng)消去冗余 符號(hào)位,41,38 小數(shù)運(yùn)算,【例】 編制程序段計(jì)算 a1=0.3 a2=0.2 a3=-0.4 a4=0.1 x1=0.6 x2=0.5 x3=-0.1 x4=-0.2,floatMAC.asm,42,39 FIR濾波器的設(shè)計(jì),FIR濾波器的差分方程: FIR濾波器的傳遞函數(shù): FIR濾波器的結(jié)構(gòu),43,39 FIR濾波器的設(shè)計(jì),

18、FIR濾波器的輸出表達(dá)式 y(n)=b0 x(n)+b1x(n-1)+ +bn-1x(n-N+1) bi為濾波器系數(shù),x(n)為濾波器在n時(shí)刻的輸入,y(n)為n時(shí)刻的輸出。 基本算法: 采用乘法累加運(yùn)算。即不斷輸入樣本x(n),經(jīng)過(guò)z-1延時(shí)后,再進(jìn)行乘法-累加,最后輸出濾波結(jié)果y(n)。 z-1算法的實(shí)現(xiàn) 線(xiàn)性緩沖區(qū)法 循環(huán)緩沖區(qū)法,44,39 FIR濾波器的設(shè)計(jì),線(xiàn)性緩沖區(qū)法 在數(shù)據(jù)存儲(chǔ)器中開(kāi)辟一個(gè)N單元的緩沖區(qū)(滑窗),用來(lái)存放最新的N個(gè)輸入樣本; 從最老樣本開(kāi)始取數(shù),每取一個(gè)數(shù)后,樣本向下移位; 讀完最后一個(gè)樣本后,輸入最新樣本并存入緩沖區(qū)的頂部。,緩沖區(qū): 頂部為低地址單元,存放最

19、新樣本; 底部為高地址單元,存放最老樣本; 指針ARx指向緩沖區(qū)底部。,45,39 FIR濾波器的設(shè)計(jì),求y(n)的過(guò)程: 算法,取數(shù)、移位和運(yùn)算:, 以ARx為指針,按x(n-7)x(n)的順序取數(shù),每取一次數(shù)后,數(shù)據(jù)向下移一位,并完成一次乘法累加運(yùn)算;, 當(dāng)經(jīng)過(guò)8次取數(shù)、移位和運(yùn)算后,得y(n);, 求得y(n)后,輸入新樣本x(n+1),存入緩沖區(qū)頂部單元;, 修改指針ARx,指向緩沖區(qū)的底部。,46,39 FIR濾波器的設(shè)計(jì),求y(n)的過(guò)程: 算法,ARx,x(n-7),ARx,x(n-6),y(n)=y7=b7x(n-7)+0,x(n-6),ARx,x(n-5),y(n)=y6=b

20、6x(n-6)+y7,x(n-5),ARx,x(n-4),y(n)=y5=b5x(n-5)+y6,x(n-4),ARx,x(n-3),y(n)=y4=b4x(n-4)+y5,x(n-3),ARx,x(n-2),y(n)=y3=b3x(n-3)+y4,x(n-2),ARx,x(n-1),y(n)=y2=b2x(n-2)+y3,x(n-1),ARx,x(n),y(n)=y1=b1x(n-1)+y2,x(n),y(n)=b0 x(n)+y1,PORTR,x(n+1),ARx,47,39 FIR濾波器的設(shè)計(jì),求y(n1)的過(guò)程: 算法,結(jié)果:, y(n),取數(shù)順序:,x(n-6)x(n+1),x(n-

21、5),x(n-4),x(n-3),x(n-2),x(n-1),x(n),x(n+1),最新樣本:,x(n+2),x(n+2), y(n+1), y(n+6), y(n+7),ARx,48,39 FIR濾波器的設(shè)計(jì),Z-1的運(yùn)算是通過(guò)執(zhí)行存儲(chǔ)器延時(shí)指令來(lái)實(shí)現(xiàn)的。即將數(shù)據(jù)存儲(chǔ)器中的數(shù)據(jù)向較高地址單元移位來(lái)進(jìn)行延時(shí)。,注意:用線(xiàn)性緩沖區(qū)實(shí)現(xiàn)z-1運(yùn)算時(shí),緩沖區(qū)的數(shù)據(jù)需要移動(dòng),這樣 在一個(gè)機(jī)器周期內(nèi)需要一次讀和一次寫(xiě)操作。因此,線(xiàn)性緩 沖區(qū)只能定位在DARAM中。,49,39 FIR濾波器的設(shè)計(jì),可與其他指令結(jié)合,可在同樣的機(jī)器周期內(nèi)完成這些操作。如: LD + DELAY LTD MAC + DEL

22、AY MACD 例:雙操作數(shù)尋址指令:MACD *AR1-,b,A 功能: A=A+(AR1)(b), AR1-1AR1, (AR1)(AR1+1),50,39 FIR濾波器的設(shè)計(jì),FIR濾波器的實(shí)現(xiàn),設(shè)N=7,F(xiàn)IR濾波器的算法:,y(n)=b0 x(n)+b1x(n-1)+b5x(n-5) +b6x(n-6),使用線(xiàn)性緩沖區(qū)的FIR1.asm,MACD *AR1-,b,A,51,39 FIR濾波器的設(shè)計(jì),Z-1的另外一種實(shí)現(xiàn):循環(huán)緩沖區(qū)法 特點(diǎn): 在數(shù)據(jù)存儲(chǔ)器中開(kāi)辟一個(gè)N個(gè)單元的緩沖區(qū)(滑窗),用來(lái)存放最新的N個(gè)輸入樣本; 從最新樣本開(kāi)始取數(shù); 讀完最老樣本后,輸入最新樣本來(lái)代替最老樣本,而其他數(shù)據(jù)位置不變; 用BK寄存器對(duì)緩沖區(qū)進(jìn)行間接尋址,使緩沖區(qū)地址首尾相鄰。,52,39 FIR濾波器的設(shè)計(jì),求y(n)的過(guò)程:,ARx,ARx,計(jì)算過(guò)程: 以ARx為指針,按順序取數(shù),并修改指針; 每取1次數(shù)后,完成1次乘法累加計(jì)算; 求得y(n)后,輸入新樣本替代最老樣本; 修改指針ARx,指向最新樣

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論