《DSP原理及应用第三章.pptx》由会员分享,可在线阅读,更多相关《DSP原理及应用第三章.pptx(157页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、11立即数寻址2绝对地址寻址3累加器寻址4直接寻址5间接寻址6存储器映象寄存器寻址7堆栈寻址寻址分类第1页/共157页2 1立即数寻址 在操作数前面需要加字号来说明该操作数为立即数。否则会把该操作数误认为是一个地址,从而把立即数寻址变成绝对地址寻址。特点指令中包含有执行指令所需要的操作数。立即数分为3、5、8或9位的短立即数和16位的长立即数两种。短立即数可包含在单字或双字指令中,长立即数在双字指令中。注意LD#93h,ALD 93h,A 举例第2页/共157页3 特点:指令中特点:指令中含有一个固定的立即数含有一个固定的立即数,运行速度,运行速度较快,但需占用程序存储空间,并且数值不能改变。
2、较快,但需占用程序存储空间,并且数值不能改变。用途:用于对寄存器初始化。用途:用于对寄存器初始化。3 3位位立即数立即数5 5位位立即数立即数8 8位位立即数立即数9 9位位立即数立即数1616位位立即数立即数LDLDFRAMELDRPTLDADDADDMANDANDMBITFCMPMLDMACORORMRPTRPTZSTSTMSUBXORXORM支持立即数的指令支持立即数的指令 第3页/共157页4 2绝对地址寻址特点在指令中包含有所要寻址的存储单元的16位地址。这个16位的地址可以用其所在单元的地址标号或者16位符号常数来表示。绝对寻址有四种类型绝对寻址有四种类型绝对寻址有四种类型 :数据
3、存储器地址数据存储器地址数据存储器地址(dmad)dmad)dmad)寻址寻址寻址;程序存储器地址程序存储器地址程序存储器地址(pmad)(pmad)(pmad)寻址寻址寻址;端口端口端口(PA)PA)PA)寻址寻址寻址;*(1k1k1k)寻址。寻址。寻址。第4页/共157页5(1)数据存储器地址(damd)寻址 用一个符号或一个数来确定数据空间的一个地址。方法MVKD SAMPLE,*AR3LD 93h,A 举例第5页/共157页6用一个符号或一个具体的数来确定程序存储器中的一个地址(2)程序存储器地址(pmad)寻址 方法MVPD TABLE,*AR4MVPD 90h,*AR4 举例第6页
4、/共157页7用一个符号或一个常数来确定外部I/O口地址(3)PA寻址 端口(PA)方法PORTR FIFO,*AR5PORTR 90h,*AR5 举例第7页/共157页8用一个符号或一个常数来确定数据存储器中的一个地址(4)*(lk)寻址 方法LD *(BUFFER),A 举例特点允许所有使用Smem寻址的指令去访问数据空间的任意单元而不改变数据页指针(DP)的值,也不用对ARx进行初始化 第8页/共157页9绝对寻址总结绝对寻址总结 161616位地址表示形式:位地址表示形式:位地址表示形式:地址符号,如:地址符号,如:地址符号,如:TABLETABLETABLE;161616位数值,如:
5、位数值,如:位数值,如:89AB89AB89AB、123412341234。特点:指令中包含一个固定的16位地址,能寻 址所有数据、程序和I/O存储空间,但 运行速度慢,需要较大的存储空间。用途:用于对速度要求较低的场合。用途:用于对速度要求较低的场合。第9页/共157页10用累加器中的数值作为地址来读写程序存储器。方法READA Smem WRITA Smem 举例特点可用来完成程序存储器单元的数据与数据存储器单元的数据进行交换 3累加器寻址第10页/共157页11 注 意:大多数C54x用A的低16位作为程序存储器的地址,而C548和C549是以A的低23位作为程序存储器地址,C5402是
6、以A的低20位作为程序存储器地址;上述两条指令重复使用时,累加器A自动增减;只能使用累加器A寻址程序空间。第11页/共157页12用一个符号或一个常数来确定7位偏移值,与DP或SP共同形成16位的数据存储器实际地址。4直接寻址方法15 876 0操操 作作 码码I=0数据存储器地址数据存储器地址(dmad)指令的指令的8 8位操作码位操作码指令的标识符指令的标识符表示指令为直接寻址表示指令为直接寻址 数据存储器地址数据存储器地址 包含了数据存储器偏移地址包含了数据存储器偏移地址 指令格式:指令格式:第12页/共157页13 地址形成过程:地址形成过程:当CPL=0时,直接寻址直接寻址指指 令令
7、158760操作码操作码I=0dmad页指针页指针DP(位于位于ST0中中)9位数据页指针位数据页指针DP9 9位数据页指针位数据页指针DPDP高9位dmaddmad低7位1616位数据位数据存储器地址存储器地址CPL=0 7位 dma域 与 9bit的 DP相 结 合 形成16位的数据存储器地址。CPL=1 7位dma域加上(正偏移)SP的值形成16位的数据存储器地址。第13页/共157页14 地址形成过程:地址形成过程:当CPL=1时,直接寻址直接寻址指指 令令158760操作码操作码I=0dmad高9位dmaddmad低7位1616位数据位数据存储器地址存储器地址1616位堆栈指针位堆栈
8、指针SPSP堆栈指针堆栈指针SPSPSP+dmadSP+dmad1616位位SP+dmadSP+dmad第14页/共157页15 DPDP地地址址的的范范围围是是从从0 0 511(2511(29 9-1)-1),将将存存储储器器分分成成512512页。页。以以DPDP为为基基准准的的直直接接寻寻址址是是由由DPDP值值确确定定是是512512页页中中的哪一页,由的哪一页,由dmaddmad确定是该页中的哪一个单元。确定是该页中的哪一个单元。7 7位位dmaddmad范范围围是是从从0 0 127127,每每页页有有128128个个可可以以访访问问的单元。的单元。SPSP可可以以指指向向存存储
9、储器器中中的的任任意意一一个个地地址址。dmaddmad可可以以指指向向当当前前页页中中具具体体的的单单元元,从从而而允允许许访访问问存存储储器器任意基地址中的连续的任意基地址中的连续的128128个单元个单元 第15页/共157页16可以在不改变DP或SP的情况下,随机地寻址128个存储单元中的任何一个单元。RSBX CPLLD#x,DPLD u,A ADD v,A=SSBX CPL LD X1,A ADD Y2,A 举例特点用途主要用于要求运算速度较快的场合第16页/共157页17 例例1 1:数数据据存存储储器器存存储储数数据据如如图图所所示示,采采用用数数据据页指针页指针DPDP直接寻
10、址,完成直接寻址,完成x x,y y单元的两个数据求和。单元的两个数据求和。RSBX CPLRSBX CPL数据存储器数据存储器地址地址数据数据01800001.X X:01FF1000y y:02000500.第第3 3页页第第4 4页页LD#3,DPLD#3,DPLD x,ALD x,AADD y,AADD y,A;CPLCPL复位复位;立即数立即数3 3赋给赋给DPDP;x x单元的数据送入单元的数据送入A A;完成完成x x和和y y单元的数单元的数 据相加据相加DPdmaLD#3,DPLD#3,DPLD#3,DPLD#3,DP000000011LD x,ALD x,ALD x,ALD
11、 x,A1111111操作码01111111机器码x 00000001111111110 1 F Fx01FF01FF10001000A00 0000 100001FF01FF10001000ADD y,AADD y,A操作码00000000机器码0000000y 00000001100000001 8 0 0y01800180000100010180H0001+10010180018000010001100100 0000ADD y,AADD y,A00 0000 1001A结果结果ADD y,AADD y,ALD x,ALD x,ALD#3,DPLD#3,DPRSBX CPLRSBX CP
12、LADD y,AADD y,ALD#4,DPLD#4,DPLD#4,DPLD#4,DPRSBX CPLRSBX CPLLD#3,DPLD#3,DPDP000000011LD x,ALD x,Adma11111110 1 F FxA00 0000 1000LD#4,DPLD#4,DPDP000000100ADD y,AADD y,Adma00000000 2 0 0y05000200H05000200H+005100 0000 00 0000 150000 0000 1500A结果第17页/共157页18 例例2 2:数数据据存存储储器器存存储储数数据据如如图图所所示示,利利用用堆堆栈栈指针指针
13、S SP P直接寻址,求堆栈中距栈顶两个数直接寻址,求堆栈中距栈顶两个数x x,y y的和。的和。SSBX CPLSSBX CPL数据存储器数据存储器002001000050A000.LD 1,ALD 1,AADD 2,AADD 2,A;CPLCPL置位置位;x x单元的数据送入单元的数据送入A A;完成完成x x和和y y单元的数单元的数 据相加据相加12SPSPx x:y y:SPSPx x:y y:0000001000000000SPSP0000001dmaxdmax0000010dmaydmay0 2 0 1X X地址地址0 2 0 2y y地址地址SSBX CPLSSBX CPLLD
14、 1,ALD 1,Ax x:0200H0200H1=0201H1=0201H01000100A00 0000 010000 0000 010001000100 x x:ADD 2,AADD 2,A2=0202H2=0202Hy y:005000500202H0202H005000500 000 000000 00005 51 10 0+y y:0050005000 0000 015000 0000 015000 0000 0150A执行结果第18页/共157页195间接寻址方法特点根据辅助寄存器(AR0AR7)给出的16位地址进行寻址。寻址范围为64K 能在一个指令中访问两个数据存储器单元两个
15、独立的存储器单元读数据读一个、写另一个存储器单元读写两个连续的存储器单元 第19页/共157页20(1)单操作数寻址 LD*AR1,B15 8 7 6 3 2 0 操作码操作码I 1MODARF指令的指令的8 8位操作码位操作码指令的标识符指令的标识符表示指令为间接寻址表示指令为间接寻址4 4位的方式域位的方式域 用来定义间接寻址的类型用来定义间接寻址的类型3 3位辅助寄存器域位辅助寄存器域 用来定义所使用的辅助寄存器用来定义所使用的辅助寄存器第20页/共157页21单操作数间接寻址形式单操作数间接寻址形式MOD域域 操作句法操作句法功功 能能说说 明明0000*ARx 地址地址=ARxARx
16、ARx的内容为数据存储器地址的内容为数据存储器地址0001*ARx-地址地址=ARxARx ARx ARx=ARx-1ARx-1 寻址结束后,寻址结束后,ARx地址减地址减1。注注20010*ARx+地址地址=ARxARx ARx ARx=ARx+1ARx+1 寻址结束后,寻址结束后,ARx地址加地址加1。注注10011*+ARx ARxARx=ARx+1ARx+1 地址地址=ARxARx ARx中的地址加中的地址加1后,再寻址。后,再寻址。注注1、注注2、注注3 0100*ARx-0B 地址地址=ARx ARx ARx ARx=B(ARx-AR0)B(ARx-AR0)寻址结束后,用位倒序进位
17、的方法从寻址结束后,用位倒序进位的方法从 ARx中减去中减去AR0的值。的值。注1:寻址16位字时增/减量为1,32位字时增/减量为2。注2:这种方式只能用写操作指令。注3:这种方式不允许对存储器映像寄存器寻址。第21页/共157页22单操作数间接寻址形式单操作数间接寻址形式MOD域域 操作句法操作句法功功 能能说说 明明0101*ARx-0 地址地址=ARx ARx ARx ARx=ARx-AR0ARx-AR0寻址结束后寻址结束后,从从ARx中减去中减去AR0的值。的值。0110 *ARx+0 地址地址=ARx ARx=ARx+AR0 寻址结束后,把寻址结束后,把AR0加到加到ARx中。中。
18、0111 *ARx+0B 地址地址=ARxARx ARx ARx=B(ARx+AR0)B(ARx+AR0)寻址结束后,用位倒序进位的寻址结束后,用位倒序进位的方法将方法将 AR0加到加到ARx中中1000 *ARx-%地址地址=ARxARx ARx ARx=Circ(ARx-1)Circ(ARx-1)寻址结束后,寻址结束后,ARx中的地址值中的地址值按循环减的方法减按循环减的方法减1。注注1 1001 *ARx-0%地址地址=ARxARx ARx ARx=Circ(ARx-AR0)Circ(ARx-AR0)寻址结束后,按循环减的方法寻址结束后,按循环减的方法从从ARx中减去中减去AR0中的值中
19、的值 注1:寻址16位字时增/减量为1,32位字时增/减量为2。第22页/共157页23单操作数间接寻址形式单操作数间接寻址形式 MOD域域 操作句法操作句法功功 能能说说 明明1010 *ARx+%地址地址=ARxARx ARx ARx=Circ(ARx+1)Circ(ARx+1)寻址结束后,寻址结束后,ARx中的地址值中的地址值按循环加的方法加按循环加的方法加1。注注1 1011 *ARx+0%地址地址=ARx=ARx ARx=Circ(ARx+AR0)ARx=Circ(ARx+AR0)寻址结束后,按循环加的方法寻址结束后,按循环加的方法将将AR0中的值加到中的值加到ARx。1100 *A
20、Rx(lk)地址地址=ARx+lk=ARx+lk ARx=ARx ARx=ARx以以ARx与与16位数之和作为地址,位数之和作为地址,寻址结束后,寻址结束后,ARx中的值不变。中的值不变。1101*+ARx(lk)地址地址=ARx+lkARx+lk ARxARx=ARx+lkARx+lk将一个将一个16位带符号数加到位带符号数加到ARx,然后寻址。,然后寻址。注注31110*ARx(lk)%地址地址=Circ(ARx+lk)Circ(ARx+lk)ARxARx=Circ(ARx+lk)Circ(ARx+lk)将一个将一个16位带符号数按循环加位带符号数按循环加的方法加至的方法加至ARx,然后再
21、寻址,然后再寻址1111*(lk)地址地址=(lk)(lk)利用利用16位无符号数作为地址位无符号数作为地址,寻址数据存储器寻址数据存储器注3:这种方式不允许对存储器映像寄存器寻址。第23页/共157页241)循环寻址 许多算法,如卷积,相关和FIR滤波等,都需要在存储器中实现一个循环缓冲器。在这些算法中,一个循环缓冲器就是一个包含了最近的数据的滑动窗口。当新的数据来到时,缓冲器就会覆盖最早的数据。循环缓冲器实现的关键是循环寻址的实现。C54x间接寻址中提供了循环寻址的方式,以%表示。第24页/共157页25循环寻址的有效地址计算 循环缓冲区的参数主要包括:长度寄存器循环缓冲区的参数主要包括:
22、长度寄存器(BKBK)、有效基地址()、有效基地址(EFBEFB)、尾地址()、尾地址(EOBEOB)。)。uBK:BK:定义了循环缓冲区的大小定义了循环缓冲区的大小R R。大小为。大小为R R的循环缓的循环缓冲器其地址要始于最低冲器其地址要始于最低N N位为零的地址。并且位为零的地址。并且R R要满要满足下面的条件:足下面的条件:2 2N NRRuEFBEFB:循环缓冲器的有效基地址(:循环缓冲器的有效基地址(EFBEFB)就是用户)就是用户选定的辅助寄存器(选定的辅助寄存器(ARxARx)的低)的低N N位置位置 0 0后所得到的后所得到的值。值。uEOBEOB:是通过用是通过用BKBK的
23、低的低N N位代替位代替ARxARx的低的低N N位得到。位得到。例如:缓冲区长度例如:缓冲区长度R=32R=32,若若2 2N N 3232,则则N=6N=6。缓冲区开始的地址:缓冲区开始的地址:xxxx xxxx xx00 0000 xxxx xxxx xx00 0000B B 缓冲区长度缓冲区长度R=32R=32装入装入循环缓冲长度寄存器循环缓冲长度寄存器BKBK中。中。第25页/共157页26第26页/共157页27 循环缓冲器的指示index就是ARx的低N位,步长step就是加到辅助寄存器,或从辅助寄存器中减去的值。循环寻址的算法如下:if0index+stepBK;index=i
24、ndex+stepelseifindex+stepBK;index=index+stepBKelseifindex+step0;index=index+step+BK第27页/共157页28 循环寻址要遵循的原则循环寻址要遵循的原则 :循环缓冲区的长度循环缓冲区的长度R R小于小于2 2N N,且地址从一个低,且地址从一个低N N位为位为0 0的地址开始;的地址开始;步长小于或等于循环缓冲区的长度;步长小于或等于循环缓冲区的长度;所使用的辅助寄存器必须指向缓冲区单元。所使用的辅助寄存器必须指向缓冲区单元。第28页/共157页292)位倒序寻址 用于快速傅氏变换算法用于快速傅氏变换算法FFTFF
25、T。位位码码顺顺序序寻寻址址:按按照照二二进进制制递递增增规规律律寻寻址址。如:如:00000000,00010001,00100010,00110011,11111111。如:如:00000000,10001000,01000100,11001100,11111111。位位码码倒倒序序寻寻址址:根根据据二二进进制制递递增增码码,按按其其位位码倒序的规律进行寻址。码倒序的规律进行寻址。第29页/共157页30 WN0WN0WN0W0N-1-1-1-1X(0)X(1)X(0)X(1)X(0)X(1)X(0)X(1)33445566WN0WN2WN0WN2-1-1-1-1X(0)X(1)X(2)X
26、(3)X(0)X(1)X(2)X(3)11121222WWWWN0N1N2N3-1-1-1-1X(0)X(1)X(2)X(3)X(4)X(5)X(6)X(7)8 8点点DFTDFT的的FFTFFT的运算流图的运算流图(0)(4)(2)(6)(1)(5)(3)(7)第30页/共157页31-1X(0)X(1)X(2)X(3)X(4)X(5)X(6)X(7)-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1X(8)X(9)X(10)X(11)X(12)X(13)X(14)X(15)-1第31页/共157页32位码顺序和倒序对照表
27、位码顺序和倒序对照表序号序号位码顺序位码顺序寻寻 址址位码倒序位码倒序寻寻 址址序号序号位码顺序位码顺序寻寻 址址位码倒序位码倒序寻寻 址址000000000810000001100011000910011001200100100101010010130011110011101111014010000101211000011501011010131101101160110011014111001117011111101511111111第32页/共157页33 倒序寻址主要用于倒序寻址主要用于FFTFFT算法中,位倒序寻址提算法中,位倒序寻址提高了执行速度和在高了执行速度和在FFTFFT算法程
28、序中使用存储器的效算法程序中使用存储器的效率。率。在这种寻址方式中,用到两个辅助寄存器:在这种寻址方式中,用到两个辅助寄存器:AR0AR0:存放的整数:存放的整数NN是是FFTFFT点数的一半。点数的一半。ARxARx:指向数据存放的物理单元。:指向数据存放的物理单元。倒序寻址将倒序寻址将AR0AR0加到辅助寄存器加到辅助寄存器ARxARx中,产中,产生数据存储器的生数据存储器的1616位地址。位地址。当使用位倒序寻址把当使用位倒序寻址把AR0AR0加到辅助寄存器中时,地址以加到辅助寄存器中时,地址以位倒序位倒序的方式产的方式产生,即进位是从左向右,而不是从右向左。生,即进位是从左向右,而不是
29、从右向左。间接寻址中间接寻址中*ARx+0BARx+0B表示位倒序寻址。表示位倒序寻址。0110 1000+0000 1000 0110 0100第33页/共157页34例:设FFT长度为16,则AR0赋值为8,位倒序方式读入数据情况如下:第34页/共157页35(2)双操作数寻址方式 用用于于完完成成执执行行2 2次次读读操操作作或或者者1 1次次读读和和1 1次次写写存存储储的的并并行行操操作作。这这些些指指令令代代码码都都是是1 1个个字字长长,而而且且只只能能以间接寻址方式进行操作。以间接寻址方式进行操作。两个数据存储器操作数由两个数据存储器操作数由XmemXmem和和YmemYmem
30、表示表示。XmemXmem:读操作数;读操作数;YmemYmem:在两次读操作的指令中在两次读操作的指令中,表示一个读操作数;表示一个读操作数;在一次读和一次写的指令中,表示写操作数。在一次读和一次写的指令中,表示写操作数。第35页/共157页36指令格式 MPY*AR2,*AR3,A15 87 65 43 21 0操操 作作 码码XmodXarYmodYar指令的指令的8 8位操作码位操作码用来定义用来定义XmemXmem操作数操作数间接寻址方式的类型间接寻址方式的类型用来定义存储用来定义存储XmemXmem地址的辅助寄存器地址的辅助寄存器用来定义用来定义YmemYmem操作数操作数间接寻址
31、方式的类型间接寻址方式的类型用来定义存储用来定义存储YmemYmem地址的辅助寄存器地址的辅助寄存器第36页/共157页37Xar或Yar辅助寄存器00AR201AR310AR411AR5辅助寄存器选择Xmod或Ymod操作码语法功能说明00*ARxaddr=ARxARx是数据存储器地址01*ARx-addr=ARxARx=ARx-1访问后,ARx中的地址减110*ARx+addr=ARxARx=ARx+1访问后,ARx中的地址加111*ARx+0%addr=ARxARx=circ(ARx+AR0)访问后,AR0以循环寻址的方式加到ARx中双数据存储器操作数寻址的类型双数据存储器操作数寻址的类
32、型第37页/共157页38 总总结结:间间接接寻寻址址通通过过辅辅助助寄寄存存器器和和辅辅助助寄寄存存器器指指针针来来寻寻址址数数据据空空间间存存储储单单元元,并并自自动动实实现现增增量量、减减量量,进进行行变变址址寻寻址址、循循环环寻寻址址,共有共有1616种修正地址的方式。种修正地址的方式。用途:用于需要按固定步长寻址的场合。第38页/共157页390页寻址。不影响当前DP或SP值。用于直接寻址和间接寻址用来修改存储器映象寄存器 6存储器映象寄存器寻址功能LDM PRD,A举例特点方法高9位数据存储器地址被置0,利用指令中的低位地址访问MMR。第39页/共157页40 C54xC54x共有
33、共有8 8条指令可以进行条指令可以进行MMRMMR寻址。寻址。LDM MMRLDM MMR,dstdst ;将将MMRMMR加载到累加器加载到累加器 MVDM dmadMVDM dmad,MMRMMR ;数据存储器向数据存储器向MMRMMR传送数据传送数据 MVMD MMRMVMD MMR,dmaddmad ;MMRMMR向指定地址传送数据向指定地址传送数据 MVMM MMRxMVMM MMRx,MMRyMMRy ;MMRxMMRx向向MMRyMMRy传送数据传送数据 POPM MMRPOPM MMR ;将数据从栈顶弹至将数据从栈顶弹至MMRMMR PSHM MMRPSHM MMR ;将将MM
34、RMMR数据压入堆栈数据压入堆栈 STLM srcSTLM src,MMRMMR ;累加器低位存入累加器低位存入MMRMMR STM#lkSTM#lk,MMRMMR ;长立即数长立即数lklk存入存入MMRMMR第40页/共157页417堆栈寻址从高地址向低地址方向生长,SP用来管理堆栈,SP始终指向堆栈中所存放的最后一个数据,即SP指针始终指向栈顶。在压入操作时,先减小SP的值,再将数据压入堆栈;在弹出操作时,先从堆栈弹出数据,再增加SP的值。用来在中断和子程序调用时自动保存程序计数器(PC)中的数值,也能用来保护现场或传送参数 功能特点第41页/共157页42 进栈操作时,进栈操作时,SP
35、SP先减小,然后数据进入堆栈;先减小,然后数据进入堆栈;数据存储器数据存储器03FFH1234SP567813FF13FFsmem SPSPSP-1SP-1,使,使SPSP指向指向03FEH03FEH;SPSP03FEH03FEH 数据进栈,数据进栈,SP=03FEHSP=03FEH。13FF13FFSPSP 出栈操作时,数据先出栈,然后出栈操作时,数据先出栈,然后SPSP增加。增加。XXXXXXXXsmem SP=03FEHSP=03FEH,数据出栈;,数据出栈;SPSP13FF13FF SPSPSP+1SP+1,使,使SPSP指向指向03FFH03FFH。SPSP第42页/共157页43
36、采用堆栈寻址的指令:采用堆栈寻址的指令:PSHD SmemPSHD Smem ;将将SmemSmem中的数据压入堆栈中的数据压入堆栈 PSHM MMRPSHM MMR ;将将MMRMMR中的数据压入堆栈中的数据压入堆栈 POPD SmemPOPD Smem ;将数据从栈顶弹至将数据从栈顶弹至SmemSmem中中 POPM MMRPOPM MMR ;将数据从栈顶弹至将数据从栈顶弹至MMRMMR中中第43页/共157页44寻址方式寻址方式用用 途途举举 例例指令含义指令含义立即寻址立即寻址主要用于初始化主要用于初始化LD#10,A立即数立即数10 A绝对寻址绝对寻址利用利用16位地址寻址存储单位地
37、址寻址存储单元元STL A,dmad将将AL内容存入内容存入y所在的存储单所在的存储单元元累加器寻址累加器寻址将累加器中的内容作为地将累加器中的内容作为地址址READA x将将A的内容作为地址读程序存的内容作为地址读程序存储器,并存入储器,并存入x存储单元存储单元直接寻址直接寻址利用数据页指针和堆栈指利用数据页指针和堆栈指针寻址针寻址LD x,A(DP+x的低的低7位地址位地址)A间接寻址间接寻址利用辅助寄存器作为地址利用辅助寄存器作为地址指针指针LD *AR1,A(AR1)A存储器映像存储器映像寄存器寻址寄存器寻址快速寻址存储器映象寄存快速寻址存储器映象寄存器器LDM ST1,B(ST1)B
38、堆栈寻址堆栈寻址压入压入/弹出数据存储器和存弹出数据存储器和存储器映像寄存器储器映像寄存器MMRPSHM AG(SP)-1 SP,(AG)(SP)寻址方式总结寻址方式总结第44页/共157页45第二节 程序地址的生成程序地址生成器(PAGEN)构成程序计数器(PC)重复计数器(RC)块重复计数器(BRC)块重复起始地址寄存器(RSA)块重复结束地址寄存器(REA)核心16位程序计数器(PC)中保存某个内部或外部程序存储器的地址。地址内容为:即将取指的某条指令;某个16位立即操作数;系数表。在程序存储器中的地址第45页/共157页46操作加载到PC的地址复位PC=FF80h。顺序执行指令PC=P
39、C+1。分支转移用紧跟在分支转移指令后面的16位立即数加载PC。由累加器分支转移用累加器A或B的低16位立即数加载PC。块重复循环假如ST1中的块重复有效位BRAF=1,当PC+1等于块重复结束地址(REA)+1,将块重复起始地址(RSA)加载PC。子程序调用将PC+2压入堆栈,并用紧跟在调用指令后面的16位立即数加载PC。返回指令将栈顶弹出至PC,回到原先的程序处继续执行。从累加器调用子程序将PC+1压入堆栈,用累加器A或B的低16位加载PC。返回指令将栈顶弹出至PC,回到原先的程序处继续执行。硬件中断或软件中断将PC压入堆栈,用适当的中断向量地址加载PC。中断返回时,将栈顶弹出至PC,继续
40、执行被中断了的子程序。将程序存储器地址加载到程序计数器的途径第46页/共157页471分支转移操作通过分支转移指令改写PC,来改变程序的流向。可执行:分支转移循环控制子程序操作 功能方法第47页/共157页48条件分支转移无条件分支转移BD用指令中所给出的地址加载PCBACCD用所指定的累加器的低16位作为地址加载PC。带延迟不带延迟操作转移种类BCD如果指令中所规定的条件得到满足,就用指令中所给出的地址加载PC;BANZD如果当前辅助寄存器不等于0,就用指令中所规定的地址加载PC。BC new,AOV BANZ loop,*AR2-B nextBACC A第48页/共157页492调用和返回
41、转移前,原程序的下条指令的地址被压入堆栈,而在返回时则将这个地址弹出至PC,使被中断了的原程序能继续执行。当采用调用指令进行子程序或函数调用时,DSP中断当前运行的程序,转移到程序存储器的其它地址继续运行。功能方法无条件调用与返回有条件调用与返回带延迟不带延迟第49页/共157页50RC cond CALL sub CALA srcCC sub,cond RET RETE RETF条件调用指令条件调用指令无条件调用指令无条件调用指令无条件返回指令无条件返回指令条件返回指令条件返回指令第50页/共157页513条件指令中的条件判断第51页/共157页52多重条件判断BC pmad,cond,co
42、nd,cond相与关系相或关系BC pmad,condBC pmad,cond第1组第2组A类B类A类B类C类EQOVTCCBIONEQNOVNTCNCNBIOLTLEQGTGEQ第52页/共157页53第1组 例如 可以从A类中选一个条件,同时可以从B类中选择一个条件。但是不能从同一类中选择两个条件。另外,两种条件测试的累加器必须是同一个。可以同时测试AGT和AOV,但不能同时测试AGT和BGT。BC pmad,AGT,AOVBC pmad,AGT,BOV第53页/共157页54第2组 例如 可以在A、B、C三类中各选择一个条件,但不能从同一类中选择两个条件 BC pmad,TC,C,BIO
43、BC pmad,NTC,TC,NBIO第54页/共157页55特例如果条件分支转移出去的地方只有12字的程序段,则可以用一条单周期条件执行指令(XC)来代替分支转移指令:XC n,cond,cond,cond当 n=1,且 条 件 得 到 满 足,就 执 行 紧 随 此 条件指令后的个字指令。当 n=2,且 条 件 得 到 满 足,就 执 行 紧 随 此 指 令 后 的 1个 双 字 指 令 或 者 2条 单 字指令。当当 条条 件件 不不 满满 足足,就就 依依 n n的的 值值 执执 行行 1 1 条或条或2 2条条NOPNOP指令。指令。第55页/共157页56例3-3 编写计算 的主要
44、程序部分。.bss x,4 ;为X建立4个单元,;放置X1、X2、X3、X4 .bss y,1 ;为Y建立1个单元,放置Y STM#x,AR1 ;将X1的地址传给AR1 STM#3,AR2 ;将循环次数3传给AR2 LD#0,A ;对A清零loop:ADD *AR1+,A ;对X1、X2、X3、X4循环 ;累加,结果放A中 BANZ loop,*AR2-;检查循环是否应结束 STL A,y ;将累加结果存入Y中第56页/共157页574单条指令的重复操作利用RPT和RPTZ可重复执行其后的一条指令。重复的次数是指令操作数加1,这个值保存在16位的重复计数寄存器(RC)中。实现第57页/共157
45、页58特点1RC内容不能编程设置,只能由重复指令(RPT和RPTZ)中的操作数加载。操作数n的最大值为65 535,最大重复执行次数为65 535+1。一旦重复指令被取指、译码,直到重复循环完成以前,对所有的中断(包括NMI,但不包括RS)均不响应。第58页/共157页59重复过程当RPT指令执行时:首先把循环的次数装入循环计数器(RC),其循环次数n由一个16位单数据存储器操作数 Smem或一个8位或16位常数k或lk给定。这样,紧接着的下一条指令会循环执行n+1次。循环,RC在执行减1操作时不能被访问。注意:该循环内不能套用循环。当RPTZ指令执行时:对目的累加器dst清0,循环执行下一条
46、指令n+1次。第59页/共157页60例3-5利用单条指令的重复操作对数组x5=0,0,0,0,0进行初始化。.bss x,5 ;为数组x分配5个存储单元STM#x,AR1;将x的首地址赋给AR1LD#0,A ;对A清零RPT#4 ;设置重复执行下条指令5次STL A,*AR1+;对x5各单元清零或者.bss x,5STM#x,AR1RPTZ A,#4;对A清零并设置重复执行下条指令5次STL A,*AR1+第60页/共157页61特点5块重复操作利用C54x内部的块重复计数器(BRC,加载值可为065 535)、块重复起始地址寄存器(RSA)、块重复结束地址寄存器(REA)与程序块重复指令R
47、PTB,可对紧随RPTB、由若干条指令构成的程序块进行重复操作。功能使用RPTB指令将重复操作的范围扩大到64K长度的循环回路 注意1.RPT指令一旦执行,不会停止操作,即使有中断请求也不响应;2.RPTB指令可以响应中断;第61页/共157页62u块块程程序序重重复复指指令令RPTBRPTB的的操操作作数数是是循循环环回回路路的的结结束束地址;地址;u其下条指令就是重复操作的内容;其下条指令就是重复操作的内容;u在在使使用用RPTB之之前前必必须须先先用用STMSTM指指令令将将所所规规定定的的迭迭代次数加载到块重复计数器(代次数加载到块重复计数器(BRCBRC)中。)中。u单单条条重重复复
48、指指令令执执行行时时关关闭闭所所有有可可屏屏蔽蔽中中断断,而而块块重复操作执行期间可以响应中断。重复操作执行期间可以响应中断。说明第62页/共157页63 .bss .bss x,5x,5start:start:LD LD#1,16,B#1,16,B STM STM#4,BRC#4,BRC STM STM#x,AR4#x,AR4 RPTB RPTB next-1next-1 ADD ADD *AR4,16,B,A*AR4,16,B,A STH STH A,*AR4+A,*AR4+next:next:LD LD#0,B#0,B例3-6对数组x5中的每个元素加1。第63页/共157页64对寄存器的
49、占用6循环的嵌套执行RPT指令时占用RC寄存器(重复计数器);执行RPTB指令时要用到BRC、RSA和RSE寄存器。只有一套块重复寄存器,故块重复操作不能嵌套。由于RPT与RPTB两者用了不同的寄存器,因此RPT指令可以嵌套在RPTB指令的循环中,实现循环的嵌套。执行BANZ指令只占用辅助寄存器ARx。不会与RPT RPTB指令相冲突。嵌套原则参与嵌套循环的寄存器不能重复使用 第64页/共157页65图3-3 一个三重循环嵌套结构第65页/共157页66第四节 指令系统概述TMS320C54x的指令系统分助记符形式和代数式形式两种。共有指令129条,由于操作数的寻址方式不同,派生至205条。第
50、66页/共157页67 C54xC54x的助记符指令是由操作码和操作数两部的助记符指令是由操作码和操作数两部分组成。在进行汇编以前,操作码和操作数都是用分组成。在进行汇编以前,操作码和操作数都是用助记符表示。助记符表示。例如:例如:LDLD#0FFh#0FFh,A A ;将立即数将立即数0FF0FF传送至传送至A A 操作码 源操作数目的操作数注释注释第67页/共157页684.14.1 指令系统中的符号指令系统中的符号 1.1.指令系统中的符号和缩略语指令系统中的符号和缩略语序号序号符符 号号含含 义义1A累加器累加器A2ALU算术逻辑运算单元算术逻辑运算单元3AR泛指通用辅助寄存器泛指通用