![匯編語言程序舉例課件_第1頁](http://file4.renrendoc.com/view/a0b026ee9f2c9aca24c0ba9162a4b64f/a0b026ee9f2c9aca24c0ba9162a4b64f1.gif)
![匯編語言程序舉例課件_第2頁](http://file4.renrendoc.com/view/a0b026ee9f2c9aca24c0ba9162a4b64f/a0b026ee9f2c9aca24c0ba9162a4b64f2.gif)
![匯編語言程序舉例課件_第3頁](http://file4.renrendoc.com/view/a0b026ee9f2c9aca24c0ba9162a4b64f/a0b026ee9f2c9aca24c0ba9162a4b64f3.gif)
![匯編語言程序舉例課件_第4頁](http://file4.renrendoc.com/view/a0b026ee9f2c9aca24c0ba9162a4b64f/a0b026ee9f2c9aca24c0ba9162a4b64f4.gif)
![匯編語言程序舉例課件_第5頁](http://file4.renrendoc.com/view/a0b026ee9f2c9aca24c0ba9162a4b64f/a0b026ee9f2c9aca24c0ba9162a4b64f5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
匯編語言編程舉例第一節(jié)匯編語言編程的基本方法第二節(jié)DSP的浮點(diǎn)運(yùn)算方法第三節(jié)DSP在信號(hào)發(fā)生器上的應(yīng)用第四節(jié)用DSP實(shí)現(xiàn)FIR濾波器第五節(jié)用DSP實(shí)現(xiàn)IIR濾波器
第一節(jié)匯編語言編程的基本方法1.堆棧的使用
1.壓入數(shù)據(jù)時(shí),堆棧從高地址向低地址增長(zhǎng)。2.壓棧時(shí)指針先減,SP-1,再壓入數(shù)據(jù);3.出棧時(shí),先彈出數(shù)據(jù)后,再SP+1。4.如要用堆棧,必須先設(shè)置,后使用。
例:設(shè)計(jì)一存儲(chǔ)空間為100個(gè)單元的堆棧。size.set100;設(shè)置堆??臻g的;大小為100stack.usect“STK”,size;設(shè)置堆棧段的首地址;和堆??臻gSTM#stack+size,SP;將棧底地址指針?biāo)?;SP,對(duì)其初始化傳送速度比加載和存儲(chǔ)指令要快;傳送數(shù)據(jù)不需要通過累加器;可以尋址程序存儲(chǔ)器;與RPT指令相結(jié)合(重復(fù)時(shí),這些指令都變成單周期指令),可以實(shí)現(xiàn)數(shù)據(jù)塊傳送。
3.?dāng)?shù)據(jù)塊傳送
特點(diǎn)(1)數(shù)據(jù)存儲(chǔ)器←→數(shù)據(jù)存儲(chǔ)器這類指令有:MVDKSmem,dmad;指令的字?jǐn)?shù)/執(zhí)行周期2/2MVKDdmad,Smem;Smem=dmad2/2MVDDXmem,Ymem;Ymem=Xmem1/1(2)程序存儲(chǔ)器←→數(shù)據(jù)存儲(chǔ)器這類指令有:MVPDpmad,Smem;Smem=pmad2/3MVDPSmem,pmad;pmad=Smem2/4pmad為16位立即數(shù)程序存儲(chǔ)器地址;dmad為16位立即數(shù)數(shù)據(jù)存儲(chǔ)器地址;Smem為數(shù)據(jù)存儲(chǔ)器地址;Xmem、Ymem為雙操作數(shù)數(shù)據(jù)存儲(chǔ)器地址,Xmem從DB數(shù)據(jù)總線上讀出。Ymem從CB數(shù)據(jù)總線上讀出。(3)數(shù)據(jù)存儲(chǔ)器←→MMR這類指令有:MVDMdmad,MMR;指令的字?jǐn)?shù)/執(zhí)行周期2/2MVMDMMR,dmad;dmad=MMR2/2MVMMmmrx,mmry;mmry=mmrx1/1(4)程序存儲(chǔ)器(Acc)←→數(shù)據(jù)存儲(chǔ)器包括:READASmem;Smem=prog(A)1/5WRITASmem;prog(A)=Smem1/5mmrx,mmry為AR0~AR7或SP;MMR為任何一個(gè)存儲(chǔ)器映象寄存器;例:將數(shù)組x[5]初始化為{1,2,3,4,5}。.data;定義初始化數(shù)據(jù)段起始地址TBL:.word1,2,3,4,5;為標(biāo)號(hào)地址TBL;開始的5個(gè)單元賦初值.sect“.vectors”;定義自定義段,并獲;得該段起始地址BSTART;無條件轉(zhuǎn)移到標(biāo)號(hào)為START的地址.bssx,5;為數(shù)組x分配5個(gè)存儲(chǔ)單元.text;定義代碼段起始地址START:STM#x,AR5;將x的首地址存入AR5RPT#4;設(shè)置重復(fù)執(zhí)行5次下條指令
MVPDTBL,*AR5+;將TBL開始的5個(gè)值傳給x(1)程序存儲(chǔ)器→數(shù)據(jù)存儲(chǔ)器start:STM#0,SWWSR;復(fù)位SWWSRSTM#STACK+30H,SP;初始化堆指針STM#x,AR1;將目的地首地址賦給AR1RPT#19;設(shè)定重復(fù)傳送的次數(shù)為20次
MVPDtable,*AR1+;程序存儲(chǔ)器傳送到數(shù);據(jù)存儲(chǔ)器STM#x,AR2;將x的首地址存入AR2STM#y,AR3;將y的首地址存入AR3RPT#19;設(shè)置重復(fù)執(zhí)行20次下條指令
MVDD*AR2+,*AR3+;將地址x開始的20個(gè)值;復(fù)制到地址y開始的20個(gè)單元end:Bend.end單操作數(shù)指令方案雙操作數(shù)指令方案LD#0,BLD#0,BSTM#a,AR2STM#a,AR2STM#x,AR3STM#x,AR3
STM#19,BRCSTM#19,BRCRPTBdone-1RPTBdone-1
LD*AR2+,T;1TMPY*AR2+,*AR3+,A;1T
MPY*AR3+,A;1TADDA,B;1TADDA,B;1Tdone:STHB,@ydone:STHB,@ySTLB,@y+1STLB,@y+1(2)奇地址排列法指令中給出的地址為奇地址,存儲(chǔ)器中低地址存放低16位操作數(shù)。如:DLD*AR3+,A執(zhí)行前:A=0000000000執(zhí)行后:A=00BD906CACAR3=0101AR3=0103(0100h)=6CAC(低字)(0100h)=6CAC(0101h)=BD90(高字)(0101h)=BD90推薦采用偶地址排列法,將高16位操作數(shù)放在偶地址存儲(chǔ)單元中。如:程序存儲(chǔ)器.long12345678h;偶地址:1234;奇地址:5678
(1)并行運(yùn)算指同時(shí)利用D總線和E總線。其中,D總線用來執(zhí)行加載或算術(shù)運(yùn)算,E總線用來存放先前的結(jié)果。(2)并行指令都是單字單周期指令。(3)并行運(yùn)算時(shí)所存儲(chǔ)的是前面的運(yùn)算結(jié)果,存儲(chǔ)之后再進(jìn)行加載或算術(shù)運(yùn)算。(4)并行指令都工作在累加器的高位。(5)大多數(shù)并行運(yùn)算指令都受累加器移位方式ASM位影響。
6.并行運(yùn)算表并行指令舉例指令指令舉例操作說明并行加載和乘法指令LD‖MAC[R]LD‖MAS[R]LDXmem,dst‖MAC[R]Ymem[,dst]dst=Xmem<<16dst2=dst2+T*Ymem并行加載和存儲(chǔ)指令ST‖LDSTsrc,Yme‖LDXmem,dstYmem=src>>(16-ASM)dst=Xmem<<16并行存儲(chǔ)和乘法指令ST‖MAYST‖MAC[R]ST‖MAS[R]STsrc,Ymem‖MAC[R]Xmem,dstYmem=src>>(16-ASM)dst=dst+T*Xmem并行存儲(chǔ)和加/減法指令ST‖ADDST‖SUBSTsrc,Ymem‖ADDXmem,dstYmem=src>>(16-ASM)dst=dst+Xmem7.小數(shù)運(yùn)算整數(shù)運(yùn)算的問題(1)兩個(gè)16位整數(shù)相乘,乘積總是“向左增長(zhǎng)”。這意味著多次相乘后,乘積將會(huì)很快超出定點(diǎn)器件的數(shù)據(jù)范圍。(2)保存32位乘積到存儲(chǔ)器,要開銷2個(gè)機(jī)器周期以及2個(gè)字的存儲(chǔ)器單元。(3)由于乘法器都是16位相乘,因此很難在后續(xù)的遞推運(yùn)算中,將32位乘積作為乘法器的輸入。小數(shù)運(yùn)算的優(yōu)點(diǎn)(1)乘積總是“向右增長(zhǎng)”。這就味著超出定點(diǎn)器件數(shù)據(jù)范圍的將是不太感興趣的部分。(2)既可以存儲(chǔ)32位乘積,也可以存儲(chǔ)高16位乘積,這就允許用較少的資源保存結(jié)果。(3)可以用于遞推運(yùn)算。C54x采用2的補(bǔ)碼表示小數(shù),其最高位為符號(hào)位,數(shù)值范圍從-1~1。一個(gè)16位2的補(bǔ)碼小數(shù)(Q15格式)的每一位的權(quán)值為:MSB(最高位)…LSB(最低位)-1.1/21/41/8…2-15一個(gè)十進(jìn)制小數(shù)乘以32768之后再將其十進(jìn)制整數(shù)部分轉(zhuǎn)換成十六進(jìn)制數(shù),就能得到這個(gè)十進(jìn)制小數(shù)的2的補(bǔ)碼表示了?!?→7FFFh0.5正數(shù):乘以327684000h0→0000h-0.5負(fù)數(shù):其絕對(duì)值部分乘以32768,再取反加1C000h-18000h(1)小數(shù)的表示方法通過合適的Q格式,可以把數(shù)值根據(jù)所需的精確度做適當(dāng)?shù)剞D(zhuǎn)換,以便定點(diǎn)數(shù)的DSP也可以處理高精度的浮點(diǎn)數(shù)。下面以Q15為例,說明轉(zhuǎn)換的過程。1)先確定準(zhǔn)備轉(zhuǎn)換的十進(jìn)制數(shù)值N,是在Q15格式的數(shù)值范圍之間,即-1.000000≤N≤+0.999997。2)數(shù)值N乘以215,即N'=N×215=N×327683)把步驟2)的結(jié)果加216,即N''=N'+216=N'+655364)步驟3)的結(jié)果轉(zhuǎn)換成十六進(jìn)制,并把第17位舍棄掉,得到的結(jié)果就是N的Q15轉(zhuǎn)換值。下面通過把-0.2345及+0.2345轉(zhuǎn)換成Q15格式來說明轉(zhuǎn)換方法。-0.2345的轉(zhuǎn)換為:-0.2345×32768=-7684.1≈-7684-7684+65536=5785257852轉(zhuǎn)換成十六進(jìn)制數(shù)值為0E1FCh,所以結(jié)果為E1FCh。+0.2345的轉(zhuǎn)換為:0.2345×32768=7684.1≈76847684+65536=7332073320轉(zhuǎn)換成十六進(jìn)制數(shù)值為11E04h,并把第17位舍棄掉,結(jié)果為1E04h。
上述乘積是7位,當(dāng)將其送到8位累加器時(shí),為保持乘積的符號(hào),必須進(jìn)行符號(hào)位擴(kuò)展,這樣,累加器中的值為11110100(-0.09375=-12/27),出現(xiàn)了冗余符號(hào)位。原因是:Sxxx(Q3)×Syyy(Q3)SSzzzzzz(Q6格式)即兩個(gè)帶符號(hào)數(shù)相乘,得到的乘積帶有2個(gè)符號(hào)位,造成錯(cuò)誤的結(jié)果。同樣,對(duì)于兩個(gè)十六位數(shù)相乘,乘積只有30位,在最高的兩位也是符號(hào)位,同樣會(huì)造成錯(cuò)誤的結(jié)果.解決冗余符號(hào)的辦法是:在程序中設(shè)定狀態(tài)寄存器ST1中的FRCT(小數(shù)方式)位1,在乘法器將結(jié)果傳送至累加器時(shí)就能自動(dòng)地左移1位,累加器中的結(jié)果為:Szzzzzz0(Q7格式),即11101000(-0.1875=-24/27←-24=(11101000)補(bǔ)),自動(dòng)地消去了兩個(gè)帶符號(hào)數(shù)相乘時(shí)產(chǎn)生的冗余符號(hào)位。所以在小數(shù)乘法編程時(shí),應(yīng)當(dāng)事先設(shè)置FRCT位:
SSBXFRCT…MPY*AR2,*AR3,ASTHA,@Z這樣,C54x就完成了Q15*Q15=Q15的小數(shù)乘法。table:.word1*32768/10;在table開始的8個(gè).word2*32768/10;地址放數(shù)據(jù).word-3*32768/10
.word4*32768/10
.word8*32768/10
.word6*32768/10
.word-4*32768/10
.word-2*32768/10.text;定義可執(zhí)行程序代碼段start:SSBXFRCT;設(shè)置FRCT位,表示進(jìn)行小數(shù)乘STM#x,AR1;將x的首地址傳給AR1RPT#7;重復(fù)8次下條指令MVPDtable,*AR1+;將程序空間8個(gè)數(shù)傳給數(shù)據(jù)存儲(chǔ)器STM#x,AR2;將數(shù)據(jù)存儲(chǔ)器第一個(gè)數(shù)x1的地址傳給AR2STM#a,AR3;將數(shù)據(jù)存儲(chǔ)器第五個(gè)數(shù)a1的地址傳給AR3RPTZA,#3;將A清零,重復(fù)4次下條指令MAC*AR2+,*AR3+,A;執(zhí)行乘法累加和,結(jié)果放在A中STHA,@y;將A的高端字存入結(jié)果y,低端字省去end:Bend;原處循環(huán)等待.end結(jié)果y=0x1EB7。轉(zhuǎn)換為十進(jìn)制數(shù):y=(1×163+14×162+11×161+7×160)/32768=0.24第二節(jié)DSP的浮點(diǎn)運(yùn)算方法
1.浮點(diǎn)數(shù)的表示方法(1)C54x本身是定點(diǎn)DSP芯片;(2)用定點(diǎn)DSP芯片進(jìn)行浮點(diǎn)數(shù)運(yùn)算,必須先將定點(diǎn)數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)。浮點(diǎn)數(shù)表示定點(diǎn)數(shù),采用尾數(shù)和指數(shù)兩部分來表示定點(diǎn)數(shù)=尾數(shù)×2-(指數(shù))或x=m×2e例提取A=FFFFFFFFCB中的指數(shù)值。執(zhí)行指令:EXPA執(zhí)行前執(zhí)行后A=FFFFFFFFCBA=FFFFFFFFCBT=0000T=0019(25)本例中,由于A≠0,需要先求出A的冗余符號(hào)位并減去8。A=FFFFFFFFCB
111111111111111111111111111111111100101133位冗余符號(hào)位1,33-8=25=0x0019例提取B=0785432105中的指數(shù)值。執(zhí)行指令:EXPB執(zhí)行前執(zhí)行后B=0785432105B=0785432105T=0007T=FFFC(-4)本例中,由于B≠0,需要先求出B的冗余符號(hào)位并減去8。A=0785432105
00000111100001010100001100100001000001014位冗余符號(hào)位0,4-8=-4=0xFFFC-4=-(0x0004)=(1111111111111011+1)補(bǔ)=(0xFFFC)補(bǔ)(2)使用指令STT,EXPONENT將保存在T寄存器中的指數(shù)存放到數(shù)據(jù)存儲(chǔ)器的指定單元EXPONENT中。如EXPASTT,@e1;將指數(shù)存入數(shù)據(jù)存儲(chǔ)器;e1所指定的單元中。(3)使用指令NORMA。
按T寄存器中的內(nèi)容對(duì)累加器A進(jìn)行歸一化處理。這里的將定點(diǎn)數(shù)轉(zhuǎn)換成浮點(diǎn)數(shù)所進(jìn)行的歸一化處理,指通過左移或右移,使一個(gè)二進(jìn)制數(shù)變?yōu)橐粋€(gè)小數(shù),且小數(shù)點(diǎn)后的第一個(gè)數(shù)不為零,移動(dòng)的位數(shù)用指數(shù)表示。例如:0.3=(0.010011)2×2-0=(0.10011)2×2-1,-0.8=-0.8×2-0=-(0.110011)2×2-0,-0.24=-(0.001111)×2-0=-(0.1111)2×2-2。3=(11)2×2-0=(0.11)2×22
-8=-(1000)2×2-0=-(0.1)2×24-24=-(11000)2×2-0=-(0.11)2×25上例中,對(duì)于小數(shù),當(dāng)轉(zhuǎn)換成小數(shù)點(diǎn)后第一位為1的歸一化數(shù)時(shí),通過將小數(shù)點(diǎn)右移實(shí)現(xiàn),指數(shù)為負(fù)數(shù)。對(duì)于整數(shù),則將小數(shù)點(diǎn)左移實(shí)現(xiàn),指數(shù)為正數(shù)。例對(duì)累加器A進(jìn)行歸一化處理。執(zhí)行指令:NORMA執(zhí)行前執(zhí)行后A=FFFFFFF001A=FF80080000T=0013T=0013(19)執(zhí)行時(shí),按T中的十進(jìn)制數(shù)值,這里為正19,對(duì)累加器A中的值左移19位,即將在A=FFFFFFF001中的值左移19位,低位添零,高位溢出丟棄。A=(1111111111111111111111111111000000000001)2←11111111111111111111111111110000000000010000000000000000000左移出去掉的19位左移進(jìn)19位添0←(1111111110000000000010000000000000000000)2=(FF80080000)16例對(duì)累加器B中的值進(jìn)行歸一化處理后存入A。執(zhí)行指令:NORMB,A執(zhí)行前執(zhí)行后A=FFFFFFF001A=0042141414B=210A0A0A0AB=210A0A0A0AT=FFF9T=FFF9(-7)將B移-7位,即右移7位:B=(0010000100001010000010100000101000001010)2→00000000010000100001010000010100000101000001010右移進(jìn)7位添0去掉移出的7位→(000000000100001000010100000101000001
0100)2=(0042141414)16
3.浮點(diǎn)數(shù)轉(zhuǎn)換成定點(diǎn)數(shù)在將浮點(diǎn)數(shù)轉(zhuǎn)換成定點(diǎn)數(shù)時(shí),按指數(shù)值將尾數(shù)右移(指數(shù)為負(fù)時(shí)左移)即可。其操作與定點(diǎn)數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)相反。這種相反方向的移位是通過對(duì)指數(shù)取反實(shí)現(xiàn)的。
使用指令
NEGA
NORMA
第三節(jié)DSP在信號(hào)發(fā)生器上的應(yīng)用
1.一個(gè)角度正弦值的計(jì)算按C54x系列采用的Q15格式,將θ轉(zhuǎn)換為十進(jìn)制小數(shù)的2的補(bǔ)碼形式為:
θ=0.7854×32768=6487h弧度。再將要計(jì)算的值θ放在d_x單元中,計(jì)算結(jié)果放在d_sinx單元中。
.title“sinx.asm”;為程序取名.mmregs;定義存儲(chǔ)器映象寄存器.defstart;定義標(biāo)號(hào)start.refsin_start,d_x,d_sinx;引用別處定義的;sin_start,d_x,d_sinxSTACK:.usect“STACK”,10;設(shè)置堆棧空間的大小和起始位置start:STM#STACK+10,SP;設(shè)置堆棧指針初始指向的棧底位置LD#d_x,DP;設(shè)置數(shù)據(jù)存儲(chǔ)器頁指針的起始位置ST#6487h,d_x;將θ值送入地址為d_x的單元中CALLsin_start;調(diào)用計(jì)算正弦值的子程序end:Bend;循環(huán)等待sin_start:.defsin_start;定義標(biāo)號(hào)sin_start的起始位置d_coeff.usect“coeff”,4;定義4個(gè)單元的未初始化段coeff
.datatable:.word01c7h;在程序空間定義4個(gè)系數(shù),c1=1/(8*9).word030bh;c2=1/(6*7).word0666h;c3=1/(4*5).word1556h;c4=1/(2*3)d_x.usect“sin_vars”,1;在自定義的未初始化段sin_vars中d_squr_x.usect“sin_vars”,1;保留5個(gè)單元的的空間,它們通常d_temp.usect“sin_vars”,1;被安排在RAM中,用于暫存變量d_sinx.usect“sin_vars”,1c_1.usect“sin_vars”,1.text;完成正弦計(jì)算的可執(zhí)行代碼段SSBXFRCT;設(shè)置進(jìn)行小數(shù)乘法,以便自動(dòng)左移一位STM#d_coeff,AR5;將4個(gè)系數(shù)的首地址d_coeff送AR5RPT#3;重復(fù)執(zhí)行下一指令4次,以便將程序空MVPD#table,*AR5+;間的4個(gè)系數(shù)傳送到數(shù)據(jù)空間d_coeffSTM#d_coeff,AR3;將系數(shù)所在空間d_coeff首地址送AR3STM#d_x,AR2;將θ所在地址送AR2STM#c_1,AR4;將小數(shù)的最大值7fff地址c_1送AR4ST#7FFFh,c_1;將#7FFFh(即整數(shù)1)送c_1SQUR*AR2+,A;A=x2,AR2指向d_squr_xSTA,*AR2;d_squr_x=x2(A右移16位,即存高字節(jié))‖LD*AR4,B;B=1(7FFFh左移16位放在B的高字節(jié))MASR*AR2+,*AR3+,B,A;A=1-x2/72,T=x2,AR2指向d_temp,;AR3指向c2(湊整運(yùn)算為結(jié)果加215再對(duì)15-0位清0)MPYAA;A=T*A=x2(1-x2/72)STHA,*AR2;(d_temp)=x2(1-x2/72)MASR*AR2-,*AR3+,B,A;A=1-x2/42(1-x2/72);T=x2(1-x2/72)MPYA*AR2+;B=x2(1-x2/42(1-x2/72))STB,*AR2;(d_temp)=x2(1-x2/42(1-x2/72))‖LD*AR4,B;B=1MASR*AR2-,*AR3+,B,A;A=1-x2/20(1-x2/42(1-x2/72))MPYA*AR2+;B=x2(1-x2/20(1-x2/42(1-x2/72)))STB,*AR2;(d_temp)=B=x2(1-x2/20(1-x2/42(1-x2/72)))‖LD*AR4,B;B=1MASR*AR2-,*AR3+,B,A;A=1-x2/6(1-x2/20(1-x2/42(1-x2/72)))MPYAd_x;B=x(1-x2/6(1-x2/20(1-x2/42(1-x2/72))))STHB,d_sinx;sin(theta)RET.end第四節(jié)用DSP實(shí)現(xiàn)FIR濾波器1.FIR濾波器基本概念1.FIR濾波器沒有反饋回路,因此它是無條件穩(wěn)定系統(tǒng),其單位沖激響應(yīng)h(n)是一個(gè)有限長(zhǎng)序列。2.FIR濾波算法實(shí)際上是一種乘法累加運(yùn)算。2.FIR濾波器中z-1的實(shí)現(xiàn)對(duì)于N級(jí)的FIR濾波器,在數(shù)據(jù)存儲(chǔ)器中開辟一個(gè)稱之為滑窗的N個(gè)單元的緩沖區(qū),存放最新的N個(gè)輸入樣本;從最老的樣本開始,每讀一個(gè)樣本后,將此樣本向下移位,讀完最后一個(gè)樣本后,輸入最新樣本至緩沖區(qū)的頂部。用線性緩沖區(qū)實(shí)現(xiàn)z-1的優(yōu)點(diǎn)是,新老數(shù)據(jù)在存儲(chǔ)器中存放的位置直接明了。(1)用線性緩沖區(qū)法實(shí)現(xiàn)z-1C54x片內(nèi)沒有I/O資源,CPU通過外部譯碼可以尋址64K的I/O單元。有兩條實(shí)現(xiàn)輸入和輸出的指令:PORTRPA,Smem;將為PA的端口內(nèi)容送;數(shù)據(jù)存儲(chǔ)器SmemPORTWSmem,PA;將地址為Smem的數(shù)據(jù);存儲(chǔ)器內(nèi)容送端口PA數(shù)據(jù)的輸入/輸出
N=6的線性緩沖區(qū)存儲(chǔ)器圖使用存儲(chǔ)器延時(shí)指令DELAY,可以將數(shù)據(jù)存儲(chǔ)單元中的內(nèi)容向較高地址的下一單元傳送。實(shí)現(xiàn)z-1的運(yùn)算指令為:DELAYSmem;(Smem)→Seme+1,即數(shù)據(jù)存儲(chǔ);器單元的內(nèi)容送下一高地址單元DELAY*AR2;AR2指向源地址,即將AR2所指單;元內(nèi)容復(fù)制到下一高地址單元中存儲(chǔ)器的延時(shí)操作延時(shí)指令與其它指令的結(jié)合LT+DELAY→LTD指令;單數(shù)據(jù)存儲(chǔ)器的值裝入;T寄存器并送下一單元延時(shí)MAC+DELAY→MACD指令;操作數(shù)與程序存儲(chǔ)器值相乘;后累加并送下一單元延時(shí)
在數(shù)據(jù)存儲(chǔ)器中開辟一個(gè)稱之為滑窗的N個(gè)單元的緩沖區(qū),滑窗中存放最新的N個(gè)輸入樣本;每次輸入新樣本時(shí),以新樣本改寫滑窗中的最老的數(shù)據(jù),而滑窗中的其它數(shù)據(jù)不作移動(dòng);利用片內(nèi)BK(循環(huán)緩沖區(qū)長(zhǎng)度)寄存器對(duì)滑窗進(jìn)行間接尋址,循環(huán)緩沖區(qū)地址首尾相鄰。利用循環(huán)緩沖區(qū)實(shí)現(xiàn)Z-1的優(yōu)點(diǎn)是不需要移動(dòng)數(shù)據(jù),不存在一個(gè)機(jī)器周期中要求能一次讀和一次寫的數(shù)據(jù)存儲(chǔ)器,因而可以將循環(huán)緩沖區(qū)定位在數(shù)據(jù)存儲(chǔ)器的任何位置(線性緩沖區(qū)要求定位在DARAM)。
(2)用循環(huán)緩沖區(qū)法實(shí)現(xiàn)z-1N=6的循環(huán)緩沖區(qū)存儲(chǔ)器圖3.FIR濾波器的實(shí)現(xiàn)方法例編寫N=5,y(n)=a0*x(n)+a1*x(n-1)+a2*x(n-2)+a3*x(n-3)+a4*x(n-4)的計(jì)算程序。先將系數(shù)a0~a4存放在數(shù)據(jù)存儲(chǔ)器中,然后設(shè)置線性緩沖區(qū),用以存放輸入和輸出數(shù)據(jù)。(1)用線性緩沖區(qū)和直接尋址方法實(shí)現(xiàn)FIR線性緩沖區(qū)安排.title“FIR1.ASM”;定義源程序名.mmregs;定義存儲(chǔ)器映象寄存器.defstart;定義語句標(biāo)號(hào)start.bssy,1;為結(jié)果y預(yù)留1個(gè)單元的空間XN.usect“XN”,1;在自定義的未初始化段“XN”XNM1.usect“XN”,1;中保留5個(gè)單元的空間XNM2.usect“XN”,1XNM3.usect“XN”,1XNM4.usect“XN”,1A0.usect“A0”,1;在自定義的未初始化段“A0”A1.usect“A0”,1;中保留5個(gè)單元的空間A2.usect“A0”,1A3.usect“A0”,1A4.usect“A0”,1PA0.set0;定義PA0為輸出端口PA1.set1;定義PA1為輸入端口.datatable:.word1*32768/10;假定程序空間有五個(gè)參數(shù).word-3*32768/10.word5*32768/10.word-3*32768/10.word1*32768/10.textstart:.SSBXFRCT;設(shè)置進(jìn)行小數(shù)相乘STM#A0,AR1;將數(shù)據(jù)空間用于放參數(shù)的首地址送AR1RPT#4;重復(fù)下條指令5次傳送MVPDtable,*AR1+;傳送程序空間的參數(shù)到數(shù)據(jù)空間LD#XN,DP;設(shè)置數(shù)據(jù)存儲(chǔ)器頁指針的起始位置PORTRPA1,@XN;從數(shù)據(jù)輸入端口I/O輸入最新數(shù)據(jù)x(n)FIR1:LD@XNM4,T;x(n-4)→TMPY@A4,A;a4*x(n-4)→ALTD@XNM3;x(n-3)→T,x(n-3)→x(n-4)MAC@A3,A;A+a3*x(n-3)→ALTD@XNM2;x(n-2)→T,x(n-2)→x(n-3)MAC@A2,A;A+a2*x(n-2)→ALTD@XNM1;x(n-1)→T,x(n-1)→x(n-2)MAC@A1,A;A+a1*x(n-1)→ALTD@XN;x(n)→T,x(n)→x(n-1)MAC@A0,A;A+a0*x(n)→ASTHA,@y;保存y(n)的高字節(jié)PORTW@y,PA0;輸出y(n)BDFIR1;執(zhí)行完下條指令后循環(huán)PORTRPA1,@XN;輸入x(n).endvectors.objfir1.obj-ofir1.out-mfir1.map-estartMEMORY{PAGE0:EPROM:org=01OOOHlen=01000HVECS:org=03F80Hlen=00080HPAGE1:SPRAM:org=00060Hlen=00020HDARAM:org=00080Hlen=01380H}SECTIONS{.vectors:>VECSPAGE0.text:>EPROMPAGE0.data:>EPROMPAGE0.bss:>SPRAMPAGE1.XN:>DARAMalign(8){}PAGE1.A0:>DARAMalign(8){}PAGE1}(2)用線性緩沖區(qū)和間接尋址方法實(shí)現(xiàn)FIR例編寫y(n)=a0*x(n)+a1*x(n-1)+a2*x(n-2)+a3*x(n-3)+a4*x(n-4)的計(jì)算程序,其中N=5。
將系數(shù)a0~a4存放在數(shù)據(jù)存儲(chǔ)器中,并設(shè)置線性緩沖區(qū)存放輸入數(shù)據(jù)。利用AR1和AR2分別作為間接尋址線性緩沖區(qū)和系數(shù)區(qū)的輔助寄存器。
.title“FIR2.ASM”;定義源程序名.mmregs;定義存儲(chǔ)器映象寄存器.defstart;定義語句標(biāo)號(hào)start.bssy,1;為結(jié)果y預(yù)留1個(gè)單元的空間x.usect“x”,5;在自定義的未初始化段“x”中保留5個(gè)單元的空間a.usect“a”,5;在自定義的未初始化段“a”中保留5個(gè)單元的空間PA0.set0;定義PA0為輸出端口PA1.set1;定義PA1為輸入端口.datatable:.word2*32768/10;假定程序空間有五個(gè)參數(shù).word-3*32768/10.word4*32768/10.word-3*32768/10.word2*32768/10
.textstart:STM#a,AR2;將數(shù)據(jù)空間用于放參數(shù);的首地址送AR2RPT#4;重復(fù)下條指令5次傳送MVPDtable,*AR2+;傳送程序空間的參數(shù)到數(shù)據(jù)空間STM#x+4,AR1;AR1指向x(n-4)STM#a+4,AR2;AR2指向a4STM#4,AR0;指針復(fù)位值4→AR0SSBXFRCT;小數(shù)相乘LD#x,DP;設(shè)置數(shù)據(jù)存儲(chǔ)器頁指針;的起始位置PORTRPA1,@x;從端口PA1輸入最新值x(n)FIR2:LD*AR1-,T;x(n-4)→TMPY*AR2-,A;a4*x(n-4)→ALTD*AR1-;x(n-3)→T,x(n-3)→x(n-4)MAC*AR2-,A;A+a3*x(n-3)→ALTD*AR1-;x(n-2)→T,x(n-2)→x(n-3)MAC*AR2-,A;A+a2*x(n-2)→ALTD*AR1-;x(n-1)→T,x(n-1)→x(n-2)MAC*AR2-,A;A+a1*x(n-1)→ALTD*AR1;x(n)→T,x(n)→x(n-1)MAC*AR2+0,A;A+a0*x(n)→A,AR2復(fù)原,指向a4STHA,@y;保存運(yùn)算結(jié)果的高位字到y(tǒng)(n)PORTW@y(n),PA0;將結(jié)果y(n)輸出到端口PA0BDFIR2;執(zhí)行完下條指令后,從FIR2開始循環(huán)PORTRPA1,*AR1+0;輸入新值x(n),AR1復(fù)原指向x+4.end(3)用線性緩沖區(qū)和帶移位雙操作數(shù)尋址方法實(shí)現(xiàn)FIR例編寫y(n)=a0*x(n)+a1*x(n-1)+a2*x(n-2)+a3*x(n-3)+a4*x(n-4)的計(jì)算程序,其中N=5。與前面的編程不同,本例中,系數(shù)a0~a4存放在程序存儲(chǔ)器中,輸入數(shù)據(jù)存放在數(shù)據(jù)存儲(chǔ)器的線性緩沖區(qū)中。乘法累加利用MACD指令,該指令完成數(shù)據(jù)存儲(chǔ)器單元與程序存儲(chǔ)器單元相乘,并累加、移位的功能。
.title“FIR3.ASM”;定義源程序名.mmregs;定義存儲(chǔ)器映象寄存器.defstart;定義語句標(biāo)號(hào)start.bssy,1;為結(jié)果y預(yù)留1個(gè)單元的空間x.usect“x”,6;在自定義的未初始化;段“x”中保留6個(gè)單元PA0.set0;定義PA0為輸出端口PA1.set1;定義PA1為輸入端口.dataCOEF:.word1*32768/10;假定程序空間有五個(gè)參數(shù),a4.word-4*32768/10;a3.word3*32768/10;a2.word-4*32768/10;a1.word1*32768/10;a0.textstart:SSBXFRCT;小數(shù)乘法STM#x+5,AR1;AR1指向x(n-4)STM#4,AR0;設(shè)置AR1復(fù)位值LD#x+1,DP;設(shè)置數(shù)據(jù)存儲(chǔ)器頁指針的起始位置PORTRPA1,@x+1;輸入最新值x(n)FIR3:RPTZA,#4;累加器A清0,設(shè)置重復(fù)下條指令5次MACD*AR1-,COEF,A;x(n-4)→T,A=x(n-4)*a4+A;(PAR)+1→PAR,x(n-4)→x(n-5)STHA,*AR1;暫存結(jié)果到y(tǒng)(n)PORTW*AR1+,PA0;輸出y(n)到PA0,AR1指向x(n)BDFIR3;執(zhí)行下條指令后循環(huán)PORTRPA1,*AR1+0;輸入新數(shù)據(jù)到x(n),AR1指向x(n-4)(4)用循環(huán)緩沖區(qū)和雙操作數(shù)尋址方法實(shí)現(xiàn)FIR例編寫y(n)=a0*x(n)+a1*x(n-1)+a2*x(n-2)+a3*x(n-3)+a4*x(n-4)的計(jì)算程序,其中N=5。本例中,存放a0~a4的系數(shù)表以及存放數(shù)據(jù)的循環(huán)緩沖區(qū)均設(shè)在DARAM中。.title“FIR4.ASM”;給匯編程序取名.mmregs;定義存儲(chǔ)器映象寄存器.defstart;定義標(biāo)號(hào)start的起始位置.bssy,1;為未初始化變量y保留空間xn.usect“xn”,5;自定義5個(gè)單元空間的數(shù)據(jù)段xna0.usect“a0”,5;自定義5個(gè)單元空間的數(shù)據(jù)段a0PA0.set0;設(shè)置數(shù)據(jù)輸出端口I/O,PA0=0PA1.set1;設(shè)置數(shù)據(jù)輸入端口I/O,PA1=1.datatable:.word1*32768/10;a0=0.1=0x0CCC.word2*32768/10;a1=0.2=0x1999.word3*32768/10;a2=0.3=0x2666.word4*32768/10;a3=0.4=0x3333.word5*32768/10;a4=0.5=0x4000.textstart:SSBXFRCT;小數(shù)乘法STM#a0,AR1;AR1指向a0RPT#4;從程序存儲(chǔ)器table開始的地址傳送MVPDtable,*AR1+;5個(gè)系數(shù)至數(shù)據(jù)空間a0開始的數(shù)據(jù)段STM#xn+4,AR3;AR3指向x(n-4)STM#a0+4,AR4;AR4指向a4STM#5,BK;設(shè)循環(huán)緩沖區(qū)長(zhǎng)度BK=5STM#-1,AR0;AR0=-1,雙操作數(shù)減量LD#xn,DP;設(shè)置數(shù)據(jù)存儲(chǔ)器頁指針的起始位置PORTRPA1,@xn;輸入新數(shù)據(jù)到x(n)FIR4:RPTZA,#4;A清0,重復(fù)執(zhí)行下條指令5次MAC*AR3+0%,*AR4+0%,A;系數(shù)與輸入數(shù)據(jù)雙;操作數(shù)相乘并累加STHA,@y;保存結(jié)果的高字節(jié)到y(tǒng)(n)PORTW@y,PA0;輸出y(n)到端口PA0BDFIR4;執(zhí)行完下條指令后循環(huán)PORTRPA1,*AR3+0%;從端口PA1輸入新數(shù)據(jù)到x(n).end4.系數(shù)對(duì)稱FIR濾波器設(shè)計(jì)系數(shù)對(duì)稱的FIR濾波器具有線性相位特性,這種濾波器是用得最多的FIR濾波器,特別是對(duì)相位失真要求很高的場(chǎng)合。如果FIR濾波器的h(n)是實(shí)數(shù),且滿足偶對(duì)稱h(n)=h(N-1-n)或奇對(duì)稱h(n)=-h(N-1-n)的條件,則濾波器具有線性相位特性。
一個(gè)對(duì)稱FIR濾波器滿足h(n)=h(N-1-n)。對(duì)稱FIR濾波器的實(shí)現(xiàn)可按如下步驟進(jìn)行:(1)將數(shù)據(jù)存儲(chǔ)器分為新舊兩個(gè)循環(huán)緩沖區(qū),New循環(huán)緩沖區(qū)中存放N/2=4個(gè)新數(shù)據(jù);Old循環(huán)緩沖區(qū)中存放N/2=4個(gè)老數(shù)據(jù)。每個(gè)循環(huán)緩沖區(qū)的長(zhǎng)度為N/2。(2)設(shè)置循環(huán)緩沖區(qū)指針,以AR2指向New循環(huán)緩沖區(qū)中最新的數(shù)據(jù);以AR3指向Old循環(huán)緩沖區(qū)中最老的數(shù)據(jù)。(3)在程序存儲(chǔ)器中設(shè)置系數(shù)表。(4)(AR2)+(AR3)→AH(累加器A的高位),AR2-1→AR2,AR3-1→AR3。(5)將累加器B清0,重復(fù)執(zhí)行4次(i=0,1,2,3)下面的運(yùn)算:(AH)*系數(shù)hi+(B)→B,系數(shù)指針(PAR)加1,(AR2)+(AR3)→AH,AR2和AR3減1。(6)保存和輸出結(jié)果(結(jié)果在BH中)。(7)修正數(shù)據(jù)指針,讓AR2和AR3分別指向New循環(huán)緩沖區(qū)最新的數(shù)據(jù)和Old循環(huán)緩沖區(qū)中最老的數(shù)據(jù)。(8)用New循環(huán)緩沖區(qū)中最老的數(shù)據(jù)替代Old循環(huán)緩沖區(qū)中最老的數(shù)據(jù)。Old循環(huán)緩沖區(qū)指針減1。(9)輸入一個(gè)新數(shù)據(jù)替代New循環(huán)緩沖區(qū)中最老的數(shù)據(jù)。重復(fù)執(zhí)行(4)~(9)步。在編程中要用到系數(shù)對(duì)稱有限沖激響應(yīng)濾波器指令FIRS,其操作為:FIRSXmem,Ymem,Pmad該指令執(zhí)行Pmad→PAR(程序存儲(chǔ)器地址寄存器)當(dāng)(RC)≠0(B)+(A(32~16))×(由PAR尋址Pmem)→B((Xmem)+(Ymem))<<16→A(PAR)+1→PAR(RC)-1→RCFIRS指令在同一個(gè)機(jī)器周期內(nèi),通過C和D總線讀2次數(shù)據(jù)存儲(chǔ)器,同時(shí)通過P總線讀一個(gè)系數(shù)。例設(shè)計(jì)對(duì)稱FIR濾波器(N=8)。.title“FIR5.ASM”;給匯編程序取名.mmregs;定義存儲(chǔ)器映象寄存器.defstart;定義標(biāo)號(hào)start的起始位置.bssy,1;為未初始化變量y保留空間x_new.usect“DATA1”,4;自定義4個(gè)單元的未初始化段DTAT1x_old.usect“DATA2”,4;自定義4個(gè)單元的未初始化段DATA2Size.set4;定義符號(hào)size=4PA0.set0;設(shè)置數(shù)據(jù)輸出端口I/O,PA0=0PA1.set1;設(shè)置數(shù)據(jù)輸入端口I/O,PA1=1.dataCOEF.word1*32768/10,2*32768/10;系數(shù)對(duì)稱,只需
.word3*32768/10,4*32768/10;給出N/2=4個(gè)系數(shù).textstart:LD#y,DP;設(shè)置數(shù)據(jù)存儲(chǔ)器頁指針的起始位置SSBXFRCT;小數(shù)乘法STM#x_new,AR2;AR2指向新緩沖區(qū)第1個(gè)單元STM#x_old+(size-1),AR3;AR3指向老緩;沖區(qū)最后1個(gè)單元STM#size,BK;設(shè)置循環(huán)緩沖區(qū)長(zhǎng)度BK=sizeSTM#-1,AR0;循環(huán)控制增量AR0=-1PORTRPA1,#x_new;從I/O輸入端口PA1;輸入數(shù)據(jù)到x(n)FIR5:ADD*AR2+0%,*AR3+0%,A;AH=x(n)+;x(n-7)(第一次)RPTZB,#(size-1);B=0,下條指令執(zhí)行size次FIRS*AR2+0%,*AR3+0%,COEF;B+=AH*h0,;AH=x(n-1)+x(n-6)…STHB,@y;保存結(jié)果到y(tǒng)PORTW@y,PA0;輸出結(jié)果到PA0MAR*+AR2(2)%;修正AR2,指向新緩;沖區(qū)最老的數(shù)據(jù)MAR*AR3+%;修正AR3,指向老緩;沖區(qū)最老的數(shù)據(jù)MVDD*AR2,*AR3+0%新緩沖區(qū)向老緩;沖區(qū)傳送一個(gè)數(shù)BDFIR5;執(zhí)行完下條指令后轉(zhuǎn)移FIR5并循環(huán)PORTRPA1,*AR2;輸入新數(shù)據(jù)至新緩沖區(qū).end第五節(jié)用DSP實(shí)現(xiàn)IIR濾波器
1.IIR濾波器的基本概念特點(diǎn)IIR濾波器與FIR濾波器的一個(gè)重要區(qū)別是,IIR濾波器可以用較少的階數(shù)獲得很高的選擇特性,所用的存儲(chǔ)單元少,運(yùn)算次數(shù)少,具有經(jīng)濟(jì)、高效的特點(diǎn)。但是,在有限精度的運(yùn)算中,可能出現(xiàn)不穩(wěn)定現(xiàn)象。而且,選擇性越好,相位的非線性越嚴(yán)重,不像FIR濾波器可以得到嚴(yán)格的線性相位。因此,在相位要求不敏感的場(chǎng)合,如語言通信等,選用IIR濾波器較為合適;而對(duì)于圖像信號(hào)處理、數(shù)據(jù)傳輸?shù)纫圆ㄐ螖y帶信息的系統(tǒng),對(duì)線性相位要求較高,在條件許可的情況下,采用系數(shù)對(duì)稱FIR濾波器較好。2.二階IIR濾波器的實(shí)現(xiàn)方法3個(gè)二階節(jié)級(jí)聯(lián)的六階IIR濾波器對(duì)于一個(gè)高階的IIR濾波器,由于總可化成多個(gè)二階基本節(jié)(或稱二階節(jié))相級(jí)聯(lián)或并聯(lián)的形式
二階節(jié)的標(biāo)準(zhǔn)形式由反饋通道和前向通道的差分方程構(gòu)成:反饋通道:x0=w(n)=x(n)+A1*x1+A2*x2前向通道:y(n)=B0*x0+B1*x1+B2*x2二階節(jié)IIR濾波器(1)二階IIR濾波器的單操作數(shù)指令實(shí)現(xiàn)法如存儲(chǔ)器分配圖所示。x0單元有三個(gè)用處:存放輸入數(shù)據(jù)x(n)、暫時(shí)存放相加器的輸出x0和輸出數(shù)據(jù)y(n)。例編寫二階IIR濾波器的程序。
存儲(chǔ)器分配圖.title“IIR1.ASM”;給匯編程序取名.mmregs;定義存儲(chǔ)器映象寄存器.defstart;定義標(biāo)號(hào)start的起始位置X0.usect“x”,1;自定義3個(gè)單元的未初始化段xX1.usect“x”,1;X2.usect“x”,1;B2.usect“COEF”,1;自定義5個(gè)單元的未初始化段COEFB1.usect“COEF”,1;B0.usect“COEF”,1;A2.usect“COEF”,1;A1.usect“COEF”,1;PA0.set0;設(shè)置數(shù)據(jù)輸出端口I/O,PA0=0PA1.set1;設(shè)置數(shù)據(jù)輸入端口I/O,PA1=1.datatable:.word0,0;x(n-1),x(n-2).word1*32768/10,2*32768/10,3*32768/10;B2,B1,B0.word5*32768/10,-4*32768/10;A2,A1
.textstart:LD#x0,DP;以x0的地址為數(shù)據(jù)存儲(chǔ)器;頁指針起始位置SSBXFRCT;小數(shù)乘法STM#x1,AR1;x1首地址傳給AR1RPT#1;重復(fù)2次下條指令MVPD#table,*AR1+;用程序空間的2個(gè);系數(shù)0對(duì)x1,x2單元清零STM#B2,AR1;B2首地址傳給AR1RPT#4;重復(fù)5次下條指令MVPD#table+2,*AR1+;用5個(gè)系數(shù)對(duì);B2,B1,B0,A2,A1單元賦值IIR1:PORTRPA1,@x0;從PA1輸入數(shù)據(jù)到x(n)LD@x0,16,A;計(jì)算反饋通道,x0送A的16位高端字LD@x1,T;x1送T寄存器MAC@A1,A;x0+x1*A1→ALD@x2,T;x2送T寄存器MAC@A2,A;x0+x1*A1+x2*A2→ASTHA,@x0;暫存x0+x1*A1+x2*A2→x0單元MPY@B2,A;計(jì)算前向通道,x2*B2→ALTD@x1;x1送T寄存器,x1移至x2單元MAC@B1,A;x2*B2+x1*B1→ALTD@x0;x0送T寄存器,x0移至x1單元MAC@B0,A;x2*B2+x1*B1+x0*B0→ASTHA,@x0;暫存y(n)=x2*B2+x1*B1+x0*B0→x0單元BDIIR1;執(zhí)行完下條指令后循環(huán)PORTW@x0,PA0;給出結(jié)果y(n)到PA0端口.end(2)二階IIR濾波器的雙操作數(shù)指令實(shí)現(xiàn)特點(diǎn)是,乘法累加運(yùn)算利用雙操作數(shù)指令,數(shù)據(jù)和系數(shù)表在數(shù)據(jù)存儲(chǔ)器(DARAM),其存儲(chǔ)器分配圖如圖例用雙操作數(shù)指令實(shí)現(xiàn)二階IIR濾波器。H(z)=
.title“IIR2.ASM”;給匯編程序取名.mmregs;定義存儲(chǔ)器映象寄存器.defstart;定義標(biāo)號(hào)start的起始位置x2.usect“x”,1;自定義3個(gè)單元的未初始化段xX1.usect“x”,1;X0.usect“x”,1;COEF.usect“COEF”,5;自定義5個(gè)單元的未初始化段COEFPA0.set0;設(shè)置數(shù)據(jù)輸出端口I/O,PA0=0PA1.set1;設(shè)置數(shù)據(jù)輸入端口I/O,PA1=1.datatable:.word0,0;x(n-2),x(n-1).word676*32768/10000,1352*32768/10000;B2,B1.word676*32768/10000;B0.word-4174*32768/10000,707*32768/10000;A2,A1/2.textstart:SSBXFRCT;小數(shù)乘法STM#x2,AR1;x2首地址傳給AR1RPT#1;重復(fù)2次下條指令MVPD#table,*AR1+;用程序空間的2個(gè)系數(shù)0對(duì)x2,x1單元清零STM#COEF,AR1;COEF首地址傳給AR1RPT#4;重復(fù)5次下條指令MVPD#table+2,*AR1+;將5個(gè)系數(shù)傳到COEF單元STM#x2,AR3;x2首地址傳給AR3STM#COEF+4,AR4;COEF中的A1地址傳給AR4MVMMAR4,AR1;保存AR4地址值在AR1中STM#3,BK;設(shè)置循環(huán)緩沖區(qū)長(zhǎng)度STM#-1,AR0;設(shè)置間接尋址步長(zhǎng)IIR2:PORTRPA1,*AR3;從PA1口輸入數(shù)據(jù)到x(n)LD*AR3+0%,16,A;計(jì)算反饋通道,A=x(n)MAC*AR3,*AR4,A;A=x(n)+A1*x1MAC*AR3+0%,*AR4-,A;A=x(n)+A1*x1+A1*x1MAC*AR3+0%,*AR4-,A;A=x(n)+;2*A1*x1+A2*x2=x0STHA,*AR3;保存x0MPY*AR3+0%,*AR4-,A;計(jì)算前向通道。A=B0*x0MAC*AR3+0%,*AR4-,A;A=B0*x0+B1*x1MAC*AR3,*AR4-,A;A=B0*x0+B1*x1+B2*x2=y(n)STHA,*AR3;保存y(n)MVMMAR1,AR4;AR4重新指向A1BDIIR2;執(zhí)行
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教版數(shù)學(xué)八年級(jí)上冊(cè)15.4.1《提公因式法因式分解》聽評(píng)課記錄
- 人教版七年級(jí)地理上冊(cè):4.2《世界的語言和宗教》聽課評(píng)課記錄1
- 八年級(jí)歷史上聽課評(píng)課記錄《第一單元第1課鴉片戰(zhàn)爭(zhēng)》聽課評(píng)課記錄
- 用維修基金維修電梯主機(jī)軸承合同
- 生態(tài)項(xiàng)目投資合作協(xié)議書(2篇)
- 人教版數(shù)學(xué)八年級(jí)上冊(cè)聽評(píng)課記錄15.2.1《分式的乘除》
- 部編版八年級(jí)道德與法治下冊(cè)第五課《我國基本制度》第3課時(shí)《基本政治制度》聽課評(píng)課記錄
- 北師大版數(shù)學(xué)一年級(jí)上冊(cè)第一單元《生活中的數(shù) 第3課時(shí) 玩具》聽評(píng)課記錄
- 北師大版數(shù)學(xué)五年級(jí)上冊(cè)《軸對(duì)稱再認(rèn)識(shí)(一)》聽評(píng)課記錄2
- 冀教版數(shù)學(xué)七年級(jí)下冊(cè)《數(shù)學(xué)活動(dòng) 拼圖與分解因式》聽評(píng)課記錄
- 2012年安徽高考理綜試卷及答案-文檔
- 《游戲界面設(shè)計(jì)專題實(shí)踐》課件-知識(shí)點(diǎn)5:圖標(biāo)繪制準(zhǔn)備與繪制步驟
- 自動(dòng)扶梯安裝過程記錄
- MOOC 材料科學(xué)基礎(chǔ)-西安交通大學(xué) 中國大學(xué)慕課答案
- 智慧供熱管理系統(tǒng)方案可行性研究報(bào)告
- 帕金森病的言語康復(fù)治療
- 中國城市居民的健康意識(shí)和生活方式調(diào)研分析報(bào)告
- 上海星巴克員工手冊(cè)
- 貓狗創(chuàng)業(yè)計(jì)劃書
- 復(fù)產(chǎn)復(fù)工試題含答案
- 部編版語文三年級(jí)下冊(cè)第六單元大單元整體作業(yè)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論