第3章TMS320C54XDSP寻址方式10_第1页
第3章TMS320C54XDSP寻址方式10_第2页
第3章TMS320C54XDSP寻址方式10_第3页
第3章TMS320C54XDSP寻址方式10_第4页
第3章TMS320C54XDSP寻址方式10_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《DSP技术与应用》学时:32(含8学时实验)1第3章

TMS320C54XDSP寻址方式

2本章内容1、寻址与寻址方式2、立即寻址3、绝对寻址4、累加器寻址5、直接寻址6、间接寻址

7、MMR寻址

8、堆栈寻址

9、程序存储器寻址3

寻址与寻址方式

指令执行过程中涉及两次寻址操作,一次是预取指阶段的指令代码寻址,另一次是访问阶段的操作数寻址

指令代码寻址主要在程序存储空间进行,称作程序存储器寻址;操作数寻址主要在数据存储空间进行,称作数据存储器寻址,简称寻址。寻找指令代码和寻找参与运算的操作数的方法称作寻址方式。同一功能指令因寻址方式不同而有多种表示形式。4符号含义Smem16位单数据寻址操作数Xmem16位双数据寻址操作数,从DB总线读出Ymem16位双数据寻址操作数,从CB总线读出dmad16位立即数,数据存储器地址pmad16位立即数,程序存储器地址PA16位立即数,I/O口地址src源累加器(A或B)dst目的累加器(A或B)lk16位长立即数寻址指令中的缩写符号及其含义5立即数寻址:指令中包含有一个立即数(#)操作数绝对地址寻址:指令中包含有一个操作数的16位物理地址累加器寻址:用累加器的低16位值作为地址去访问程序存储器直接寻址:指令中包含的7位偏移地址与当前数据页指针DP或堆栈指针SP共同决定了操作数在数据存储器中的物理地址间接寻址:

8个辅助寄存器中包含有操作数所在的数据存储器地址存储器映射寄存器寻址:修改存储器映射寄存器中的值,而不影响当前DP或SP的值堆栈寻址:把数据压入和弹出系统堆栈寻址方式操作数寻址方式’C54x共有7种操作数寻址方式:6

1.立即寻址在立即寻址方式中,指令里包含了立即操作数。立即寻址方式中的立即数有两种数值形式,1、5、8、9位短立即数和16位的长立即数,它们在指令中分别编码为单字指令和双字指令。

例如:

LD#0AH,ASM;5-bit(EDOA) RPT#99H ;8-bit(EC99) LD#020H,DP;9-bit(EA20) LD#0FE00H,A;16-bit(F020FE00)需要注意的是,立即数前面加需“#”以区别于地址表示方法,不得遗漏。例如,LD#0FE00H,A,表示将立即数FE00H送入累加器A,遗漏#,则变成把地址为0FE00H单元的内容送入累加器A(1000FE00)。7有四种绝对寻址指令:

数据存储器地址(dmad)寻址:

MVDKSmem,dmadMVDMdmad,MMRMVKDdmad,SmemMVMDMMR,dmad程序存储器地址(pmad)寻址:

FIRSXmem,Ymem,pmadMVDPSmem,pmadMACPSmem,pmad,srcMVPDpmad,SmemI/O端口地址(PA)寻址:

PORTRPA,SmemPORTWSmem,PA长立即数*(lk)寻址:

LD*(BUFFER),A2.绝对寻址绝对寻址方式的指令中包含有所寻操作数的16位单元地址。由于寻址16位绝对地址,故绝对寻址指令长度至少为2个字。8例如:

MVKDDATA,*AR1; 数据存储器寻址

MVPDTABLE, *AR2; 程序存储器寻址

PORTR0F2F0H, *AR5; 端口寻址第一条指令表示将数据存储器中以DATA符号为地址单元中的数据传送到由辅助寄存器ARl所指向的数据存储单元中去。DATA代表数据存储单元的地址dmad。第二条指令表示将程序存储器中以TABLE符号为地址单元中的数据传送到由辅助寄存器AR2所指向的数据存储单元中去。TABLE代表程序存储单元的地址pmad。第三条指令表示将地址为0F2F0H的端口中的数据传送到由辅助寄存器AR5所指向的数据存储单元中去。93.累加器寻址

累加器寻址是利用累加器A的低16位(AL内容)作为地址对程序存储器中的数据进行访问,这种寻址方式常用来寻址存放数据的程序存储空间。

只有两条指令可用于累加器寻址方式。

READASmem

WRITASmem第一条指令意为将累加器A(AL)的内容作为地址寻找程序存储器中的数据,传送到Smem指定的数据存储单元中。第二条指令意为将Smem指定的数据存储单元中的数据(1个字),写到累加器A(AL)指定地址的程序存储器中去。10累加器寻址举例:DM的地址:0206h1514131211109876543210000000100000011011

4.直接寻址

直接寻址指令中包含有数据存储器地址的低7位(dma)。

以dma为偏移地址,与基地址(数据页指针DP或堆栈指针SP)共同构成16位数据存储器的物理地址。数据指针(DP),当ST1中的CPL位=0堆栈指针(SP),当ST1中的CPL位=1

位于状态寄存器ST1中的CPL的值决定了这种寻址方式的指针选择CPL=0,选择数据页指针DP,用DP中的9位作为高位与指令中指定的7位作为低位,共同构成16位数据存储单元的地址。CPL=1,选择堆栈指针SP,用SP的值与指令中指定的7位正偏移量相加,构成16位数据存储单元的地址。利用这种寻址方式,可以在不改变数据页指针DP和堆栈指针SP内容的情况下,随机地寻址128个存储单元中的任何一个单元。

直接寻址的优点是寻址速度快且为单字指令。129-bit的DP与7-bit的dma结合形成数据存储器物理地址以DP为基准的直接寻址DP9-bit9-bit的DP指向数据存储空间的512个数据页中的某一页012510511

CPL=0DP直接寻址注意:用DP直接寻址时操作对象需处于同一页当偏移地址为变量时,变量前加@符号例:x.set20LD#20hDPLD@x,A13

观察如下程序,计算累加器A中数据。

RSBXCPLLD#3,DPLD@x,ALD#4,DPADD@y,A

直接寻址方式书写时需在变量前加@,或者用一个数dma设定偏移地址值。

DP的值可由LD指令装入,用RESET指令复位清零;

CPL的值可由SSBX置位,由RSBX复位。

采用DP数据页指针直接寻址编程举例地址数据00010180▪▪▪▪▪▪▪▪01FF100002000500▪▪▪▪▪▪▪▪数据存储器xy14地址计算公式:例如:SSBXCPL;CPL置位LD@1,AADD@2,A;A的结果:1500024010000503404SP(SP则始终指向栈顶)

CPL=1SP直接寻址15

5.间接寻址

间接寻址根据8个辅助寄存器AR0—AR7中定义的任一寄存器给出的16位地址寻址。每一个寄存器都可以用来寻址64K字数数据存储空间中的任何一个单元。

间接寻址很灵活,不仅能从存储器中读或写一个单16-bit数据操作数,而且能在一条指令中访问两个数据存储器单元(即从两个独立的存储器单元读数据,或读一个存储器单元同时写另一个存储器单元,或读写两个连续的存储器单元)。

VC5402有两个辅助寄存器算术运算单元ARAU0和ARAU1,它们与8个辅肋辅助寄存器一起,可以进行无符号数算术运算,实现16种单操作数间接寻址或4种双操作数间接寻址方式。16

序号间址类型功能说明0*ARxAddr=ARxARx包含了数据存储器地址1*ARx-Addr=ARxARx=ARx-1ARx包含了数据存储器地址访问后,ARx中地址减12*ARx+Addr=ARxARx=ARx+1ARx包含了数据存储器地址访问后,ARx中地址加13*+ARxAddr=ARx+1ARx=ARx+1寻址前,ARx中地址加14*ARx-0BAddr=ARxARx=B(ARx-AR0)ARx包含了数据存储器地址访问后,ARx以位倒序方式减去AR05*ARx-0Addr=ARxARx=ARx-AR0ARx包含了数据存储器地址访问后,ARx中减去AR06*ARx+0Addr=ARxARx=ARx+AR0ARx包含了数据存储器地址访问后,ARx中加上AR07*ARx+0BAddr=ARxARx=B(ARx+AR0)ARx包含了数据存储器地址访问后,ARx以位倒序方式加上AR0*号表示间址

32位双字时+/-增减为2寻址前变址只用于写操作指令178*ARx-%Addr=ARxARx=circ(ARx-1)ARx包含了数据存储器地址访问后,ARx以循环寻址方式减19*ARx-0%Addr=ARxARx=circ(ARx-AR0)ARx包含了数据存储器地址访问后,ARx以循环寻址方式减去AR010*ARx+%Addr=ARxARx=circ(ARx+1)ARx包含了数据存储器地址访问后,ARx以循环寻址方式加111*ARx+0%Addr=ARxARx=circ(ARx+AR0)ARx包含了数据存储器地址访问后,ARx以循环寻址方式加上AR012*ARx(lk)Addr=ARx+lkARx=ARxARx加上16位长偏移量作为数据存储器地址访问后,ARx中内容不变13*+ARx(lk)Addr=ARx+lkARx=ARx+lkARx加上16位长偏移量作为数据存储器地址访问后,ARx中内容加上16位长偏移量14*+ARx(lk)%Addr=circ(ARx+lk)ARx=circ(ARx+lk)ARx以循环寻址方式加上16位长偏移量作为数据存储器地址,同时修改ARx中内容15*(lk)Addr=lk以无符号16位长偏移量作为数据存储器地址(绝对地址)(lk)不允许MMR寻址18间接寻址时:间址寄存器前加*号有B符号,位倒序寻址有%符号,循环寻址有0符号,与AR0有关“+”号在前,修改生成新值后再寻址“+”号在后,寻址后再修改生成新值19单操作数间接寻址编程举例:

.mmregs .bssx,4a .word1,2,3,4 STM#a,AR1 STM#x,AR2 LD#0,A LD*AR1+,T MAC*AR2+,A LD*AR1+,T

MAC*AR2+,A LD*AR1+,T MAC*AR2+,A LD*AR1,T MAC*AR2,A …..采用双操作数间接寻址可使程序简化20双操作数间接寻址方式双操作数间接寻址类型为:*ARx、*ARx-、*ARx+、*ARx+0%双操作数间接寻址寄存器只能使用:AR2、AR3、AR4、AR5双操作数间接寻址特点:速度快,使用DB、CB两条总线

RPTZA,#3 MAC*AR2+,*AR3+,A LD#a,DP STLA,@y STHA,@y+1 …..

.mmregs .bssx,4a.word1,2,3,4 STM#a,AR2 STM#x,AR3

双操作数间接寻址编程举例:21

间接寻址除可以完成增量、减量、变址等常规寻址要求外,还可以完成数字信号处理算法中常用的位倒序和循环寻址功能。

FFT算法中常用到位码倒序寻址。

FFT运算时输出/输入序列中必有其一要倒序。以8点蝶形FFT运算为例:

FFT变换前按顺序排列的输入序列数据经蝶形变换后,输出序列按倒序排列;

FFT变换前按倒序排列的输入序列数据经蝶形变换后,输出序列按顺序排列;

(1)

位码倒序寻址222324倒序及其进位(有B符号)位倒序表示:1010,0101;0011,1100

位倒序进位:进位不是加到左边而是加到右边。例如:进位加到左边(正序)

进位加到右边(倒序)

11001100

+1000+1000101000010

16点蝶形FFT运算中,将FFT序列长度的一半(8)存放AR0中,如果AR2指向x(0)首址2000H,则执行下面2条程序后将以倒序地址:2000H,2008H,2004H,200CH,2002H,…,2007H,200FH存放读自PA口采样数据。

RPT#15PORTR*AR2+0B,PA2526(2)

循环寻址在卷积、相关、FIR滤波算法中,要求在存储器中设置一个缓冲区作为滑动窗,保存最新一批数据。循环寻址过程中,不断有新的数据覆盖旧的数据,从而实现循环缓冲区寻址。循环缓冲区长度BK决定缓冲区的大小,循环寻址时首先应将缓冲区的长度值R加载至循环缓冲区长度寄存器BK。

STM#lk,BK;设置循环缓冲区长度循环缓冲区从N位的地址边界(N位0)开始,要求2N>缓冲区长度R。若R=32,则N=6,即开始地址为:

xxxxxxxxxx000000。循环寻址时用一个ARx指向缓冲区。27循环寻址算法:

if0≤index+step<BK:index=index+step;

elseifindex+step≥BK:index=index+step-BK;

elseifindex+step<0:index=index+step+BK;

其中,index是ARx的低N位(缓冲区偏移地址)。

28

256点16阶FIR滤波器 .sect “fir-prog”

STM#255,BRC

;BlockRepeatCounter

……………

;Repeat256times

STM#1,AR0

RPTBDfir_filter_loop

STM#16,BK ;FIRcircularbuffersize LD*AR7+,A ;loadtheinputvalue STLA,*AR4+% ;replaceoldestsamplewith ;newestsample RPTZA,#16-1 MAC*AR4+0%,*AR3+0%,A ;filtering STHA,*AR5+ ;replacetheoldestbuffervaluefir_filter_loop循环寻址编程举例:29

6.存储器映像寄存器寻址

存储器映像寄存器寻址主要用于不改变DP、SP的情况下,访问MMR中的内容。因此,这种寻址方式对MMR执行写操作开销小。

存储器映像寄存器MMR寻址有两种方法。(1)采用直接寻址方式,高9位数据存储器地址置0(无论DP、SP为何值),利用指令中的低7位地址直接访问MMR。(2)采用间接寻址方式,高9位数据存储器地址置0(无论DP、SP为何值),按照当前辅助寄存器的低7位地址访问MMR。此种方式访问MMR,寻址操作完成后,辅助寄存器的高9位被强迫置成0。30CPU存储器映射寄存器31只有8条指令能使用存储器映射寄存器寻址:LDM

MMR,dstSTLMsrc,MMRSTM#lk,MMR

MVMD

MMR,dmad

MVDMdmad,MMR

MVMM

MMRx,MMRyPSHM

MMR

POPM

MMR存储器映射寄存器寻址用来访问存储器映射寄存器而不影响当前数据页指针(DP)或堆栈指针(SP)的值。

直接寻址中利用操作数中的低7位访问MMR;间接寻址中利用ARx访问MMR时ARx高9位被置0。327.堆栈寻址

’C54x的堆栈是从高地址向低地址方向生长的,并用16位堆栈指针SP管理堆栈。

SP总是指向存放在堆栈中的最后一个元素,即栈顶。

堆栈寻址就是利用SP完成寻址操作。共有4条堆栈寻址指令:

PSHD;数据存储器中的一个数压栈

PSHM;MMR中的数压栈

POPD;弹出一个数至数据存储单元

POPM;弹出一个数至MMR33几种寻址方式的特点(1)立即寻址的特点是操作数在指令中,运行速度快,但需要较多的程序存储空间,而且数值不能改变,主要用于表示常数和初始化。

绝对寻址可以访问任何的数据空间,但速度慢,且要求较多的存储空间,可用于对速度没有苛刻要求的场合。

累加器寻址是利用累加器中的数值寻址程序存储器,故主要

用于程序空间和数据空间的数据传送。

间接寻址是通过辅助寄存器和辅助寄存器指针寻址数据存储空间任一单元的,较为灵活,可自动实现增量、减量、变址寻址、循环寻址等操作。2634几种寻址方式的特点(2)直接寻址指令中包含有数据存储器的低7位地址,与DP或SP内容结合形成l6位地址,可以实现单指令周期寻址128个单元。速度较快,利用并行流水线操作,用于时间要求较高的场合。

MMR是基地址为零(不考虑SP、DP、CPL)的直接寻址方式,寻址速度较快,可以直接利用存储器映像寄存器MMR快速访

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论