1 / 46

第 3 章 TMS320C54x 的数据寻址方式

第 3 章 TMS320C54x 的数据寻址方式. 3.1 立即寻址 3.2 绝对寻址 3.3 累加器寻址 3.4 直接寻址 3.5 间接寻址 3.6 存储器映象寄存器寻址 3.7 堆栈寻址. TMS320C54x DSP 提供以下7种基本数据寻址方式:. (1)立即数寻址 (2)绝对地址寻址 (3)累加器寻址 (4)直接寻址 (5)间接寻址 (6)存储器映射寄存器寻址 (7)堆栈寻址. 助记符指令的基本形式 :. 标号,操作符,操作数 1 ,操作数 2 ,操作数 3

henry
Download Presentation

第 3 章 TMS320C54x 的数据寻址方式

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第3章TMS320C54x的数据寻址方式 • 3.1 立即寻址 • 3.2 绝对寻址 • 3.3 累加器寻址 • 3.4 直接寻址 • 3.5 间接寻址 • 3.6 存储器映象寄存器寻址 • 3.7 堆栈寻址

  2. TMS320C54x DSP提供以下7种基本数据寻址方式: (1)立即数寻址 (2)绝对地址寻址 (3)累加器寻址 (4)直接寻址 (5)间接寻址 (6)存储器映射寄存器寻址 (7)堆栈寻址

  3. 助记符指令的基本形式: 标号,操作符,操作数1,操作数2,操作数3 其中,标号是可选项,操作数可以没有或有多个,其内容可以是立即数、寄存器、程序地址、数据地址、I/O地址等。TMS320C54x中源操作数一般在操作数1的位置,目的操作数则在操作数3的位置,指令执行结果存放到目的操作数单元中,源操作数不变。 例如:LD #0FFH,A 上述指令的执行结果是将立即数0FFH传送至累加器A中。这里的LD为操作符,#0FFH为操作数1,累加器A为操作数2。

  4. 缩写符号 含义 Smem 16位单数据存储器操作数 Xmem 在双操作数指令及某些单操作数指令中所用的16位双数据存储器操作数,从DB总线上读出 Ymem 在双操作数指令中所用的16位双数据存储器操作数,从CB总线上读出;在读同时并行写的指令中表示写操作数 dmad 16位立即数——数据存储器地址(0~65535) pmad 16位立即数——程序存储器地址(0~65535) PA 16位立即数——I/O口地址(0~65535) src 源累加器(A或B) dst 目的累加器(A或B) lk 16位长立即数 表3-1 寻址指令中用到的缩写符号及其含义

  5. 3.1 立即寻址 • 在立即寻址方式中,指令中包括了立即操作数。 • 一条指令中可对两种立即数编码,一种是短立即数(3、5、8或9位),另一种是16位的长立即数。短立即数指令编码为一个字长,16位立即数的指令编码为两个字长。 • 立即数寻址指令中在数字或符号常数前面加一个“#”号,来表示立即数,否则就会被认为是一个地址 。 返回首页

  6. 例如:把立即数80H装入累加器A,其正确的指令为:例如:把立即数80H装入累加器A,其正确的指令为: LD #80H,A 如果漏掉了“#”号,指令LD 80H,A就变成了把地址80H单元中的数装到累加器A中去。

  7. 3.2 绝对寻址 • 3.2.1 数据存储器(dmad)寻址 • 3.2.2 程序存储器(pmad)寻址 • 3.2.3 端口地址(PA)寻址 • 3.2.4 长立即数*(lk)寻址 返回首页

  8. 3.2.1 数据存储器(dmad)寻址 • 使用数据存储器寻址的指令有: MVDK Smem, dmad MVDM dmad, MMR MVKD dmad, Smem MVMD MMR, dmad • 数据存储器寻址使用符号(符号地址)或一个表示16位地址的立即数来指明寻址的数据存储单元的16位绝对地址。例如: MVKD SMAPLE,*AR5; 返回本节

  9. MVKD 1000H,*+AR5 例 Data Memory

  10. 3.2.2 程序存储器(pmad)寻址 • 使用程序存储器寻址的指令有: • FIRS Xmem, Ymem, pmad MACD Smem, pmad, src • MACP Smem, pmad, src MVDP Smem, pmad • MVPD pmad, Smem • 程序存储器(pmad)寻址使用符号(符号地址)或一个表示16位地址的立即数来给出程序空间的地址。例如,把程序存储器中标号为TABLE单元中的值复制到AR7所指定的数据存储器中去,指令可写为: • MVPD TABLE,*AR7; 返回本节

  11. 3.2.3 端口地址(PA)寻址 • 使用端口地址的指令有: PORTR PA, Smem PORTW Smem , PA • 端口地址(PA)寻址使用一个符号(符号地址)或一个表示16位地址的立即数来给出外部I/O口地址。例如: PORTR FIFO ,*AR5; 返回本节

  12. PORTR 05,INDAT;INDAT .equ 60H I/O Memory Data Memory

  13. PORTW OUTDAT,5H;OUTDAT .equ 07H 例 I/O Memory Data Memory

  14. 3.2.4 长立即数*(lk)寻址 • 长立即数*(lk)寻址用于所有支持单数据存储器操作数(Smem)的指令。 • 长立即数*(lk)寻址使用一个符号(符号地址)或一个表示16位地址的立即数来指定数据存储空间的一个地址。例如,把数据空间中地址为BUFFER单元中的数据传送到累加器A,指令可写为: LD *(BUFFER),A 返回本节

  15. 3.3 累加器寻址 • 累加器寻址是用累加器中的数值作为一个地址读写程序存储器。共有两条指令可以采用累加器寻址: READA Smem WRITA Smem 返回首页

  16. READA DAT6 Program Memory Data Memory

  17. 例4.44 WRITA DAT5 Program Memory Data Memory

  18. 3.4 直接寻址 • 在直接寻址方式中,指令中包含数据存储器地址(dma)的低7位,这7位dma作为地址偏移量,结合基地址(由数据页指针DP或堆栈指针SP给出)共同形成16位的数据存储器地址。使用这种寻址方式,用户可在不改变DP或SP的情况下,对一页内的128个存储单元随机寻址。采用这种寻址方式的好处是指令为单字指令,数据存储器地址(dma)的低7位放在指令字中。直接寻址的代码格式为: 返回首页

  19. DP或SP都可以与dmad偏移相结合来产生实际地址。位于状态寄存器ST1中的编译方式位(CPL)决定选择采用哪种方式来产生实际地址。DP或SP都可以与dmad偏移相结合来产生实际地址。位于状态寄存器ST1中的编译方式位(CPL)决定选择采用哪种方式来产生实际地址。 CPL=0时,dmad域与9 bit的DP域相结合形成16 bit的数据存储器地址; CPL=1时,dmad域加上(正偏移)SP的值形成16 bit的数据存储器地址。

  20. 图3-1 DP作为基地址的直接寻址方式 图3-2 SP作为基地址的直接寻址方式 返回本节

  21. 直接寻址的指令书写格式为在变量前加一个@,或者用一个dmad来设定偏移地址。直接寻址的指令书写格式为在变量前加一个@,或者用一个dmad来设定偏移地址。 • 下面举例说明: • LD #3,DP ;设置当前页面为3 • LD @x,A ;将x值加载到累加器A • LD #4,DP ;设置当前页面为4,y所在的页面 • ADD @y,A ;将y值加到累加器A

  22. .bss x 128 ,1 • .text • LD #0 , A • LD #X , DP • ADD #1 , A , A • STL A , X • ADD #1 , A , A • STL A , X+128 • ………

  23. 3.5 间接寻址 • 3.5.1 单操作数寻址 • 3.5.2 双操作数寻址 返回首页

  24. 在间接寻址中,64 K字数据空间中的任意单元都可以通过一个辅助寄存器中的16位地址进行访问,同时可以预调整或修改辅助寄存器值,完成循环寻址和位码倒序寻址等特殊功能。 TMS320C54x有8个16位辅助寄存器(AR0~AR7)、两个辅助寄存器算术运算单元(ARAU0和ARAU1),它们与8个辅助寄存器一起完成16位无符号数算术运算。

  25. 间接寻址很灵活,它不仅能在单条指令中对存储器读/写一个16位操作数,而且还能在单条指令中读两个独立的数据存储单元,读/写两个顺序的数据存储单元,或者读一个数据存储单元的同时写另一个数据存储单元。

  26. 3.5.1 单操作数寻址 • 单数据存储器操作数间接寻址指令的格式如下:

  27. 2~0位:3位辅助寄存器域,它定义了寻址所使用的辅助寄存器。ARF由状态寄存器ST1中的兼容方式位CMPT来决定。2~0位:3位辅助寄存器域,它定义了寻址所使用的辅助寄存器。ARF由状态寄存器ST1中的兼容方式位CMPT来决定。 • CMPT=0:标准方式。ARP始终设置为0,不能修改。 • CMPT=1:兼容方式。

  28. 表3-2列出了单数据存储器(Smem)操作数间接寻址类型。表3-2列出了单数据存储器(Smem)操作数间接寻址类型。 • 特殊的间接寻址方式有: 循环寻址 倒序寻址

  29. 表3-2 单数据存储器操作数间接寻址类型

  30. 1、循环寻址 在卷积、相关和FIR滤波器等算法中,都需要在存储器中设置一个循环缓冲器,它是一个滑动窗口,保存着最新的一批数据。当新的数据到来时,缓冲器中最早的数据就会被新的数据覆盖。循环缓冲器实现的关键是循环寻址的实现。循环缓冲器大小寄存器(BK)的内容确定了循环缓冲器的大小。BK中的数值由指令“STM #lk,BK”设定。长度为R的缓冲器必须从N位地址的边界开始(即循环缓冲器基地址的N个最低有效位必须为0),N应满足2N>R的最小整数。

  31. 循环缓冲区的有效基地址(EFB)就是用户选定的辅助寄存器(ARx)的低N位置0后所得到的值,循环缓冲区的的尾地址(EOB)是通过用BK的低N位代替ARx的低N位得到的。循环缓冲区的指针index就是ARx的低N位,step就是加到辅助寄存器或从辅助寄存器中减去的值。循环寻址方框图如图3-3。

  32. 3-3循环寻址的框图

  33. 循环寻址的算法为: • if 0≤index+step≤BK; • index=index+step. • else if index+step≥BK; • index=index+step-BK. • else if index+step<0; • index=index+step+BK.

  34. 举例: 一个循环缓冲区大小BK=N=6,AR1=0060H,用*AR1+%间接寻址。第一次寻址后,AR1=0061H;第二次寻址后, AR1=0062H;….;第六次寻址后,AR1指向0066H,再按照BK的值6取模,此时,AR1又指向0060H单元(前面5次按照BK取模时,AR1的值不变)。

  35. 2、位码倒序寻址功能 位码倒序寻址提高了执行速度,在FFT算法中,经常要用到位码倒序寻址功能。在这种寻址方式中,AR0存放的整数N是FFT点数的一半。一个辅助寄存器指向一个数据存放的物理单元,当使用位倒序寻址把AR0加到辅助寄存器中时,地址以位倒序的方式产生,即进位是从左向右,而不是通常的从右向左。

  36. 例如:AR0=0000 1010B,AR2=0110 0110B,如执行*AR2+0B寻址功能,也就是(0110 0110)+(000 1010),结果AR2=0110 1101B。应注意,计算是采用从左到右运算的。 • 以16点FFT为例,其运算结果的顺序为X(0)、X(8)、X(4)、…、X(15),如表3-3所示。

  37. 表3-3 位倒序寻址 返回本节

  38. 3.5.2 双操作数寻址 • 双数据存储器操作数间接寻址类型为*ARx、*ARx-、*ARx+、*ARx+0%。 • 所用辅助寄存器只能是AR2、AR3、AR4、AR5。 • 其特点是:占用程序空间小,运行速度快,在一个机器周期内通过两个16位数据总线(C和D)读两个操作数。指令中Xmem表示从DB总线上读出的16位操作数,Ymem表示从CB总线上读出的16位操作数。 返回本节

  39. 3.6 存储器映象寄存器寻址 • 存储器映象寄存器寻址用于修改存储器映象寄存器(MMR)中的内容,而不影响当前数据页指针DP和当前堆栈指针SP。由于这种方式不需要修改DP和SP,对寄存器的写操作开销最小。存储器映象寄存器寻址可用于直接寻址和间接寻址。 返回首页

  40. * 当采用直接寻址方式时,数据存储器地址的低7位来自指令字。不管当前DP或SP值为多少,数据地址的高9位都被置零。 * 当采用间接寻址方式时,数据存储器地址的低7位来自当前辅助寄存器的低7位,数据地址的高9位置零。当操作完后,辅助寄存器的高9位都被强制清零。

  41. 共8条指令能使用存储器映射寄存器的寻址方式:共8条指令能使用存储器映射寄存器的寻址方式: * LDM MMR,dst * MVDM dmad,MMR * MVMD MMR,dmad * MVMM MMRx,MMRy * POPM MMR * PSHM MMR * STLM src,MMR * STM #1k,MMR

  42. LDM AR4,A

  43. 3.7 堆栈寻址 • 当发生中断或子程序调用时,系统堆栈自动保存PC值。堆栈也可以用于保存和传递其他数据。堆栈由高地址向低地址增长,处理器使用16位的存储器映象寄存器——堆栈指针(SP)对堆栈进行寻址, C54x DSP的堆栈存放数据是从高端地址向低端地址进行的,SP总是指向压入堆栈的最后一个数据。 返回首页

  44. 有4条使用堆栈寻址的指令: • PSHD 把一个数据存储器数据压入堆栈; • PSHM 把一个存储器映象寄存器中的值压入堆栈; • POPD 从堆栈中弹出一个数据至数据存储器单元; • POPM 从堆栈中弹出一个数据至存储器映象寄存器。 返回本节

  45. 操作前的堆栈和SP 操作后的堆栈和SP SP 0001 0011 SP 0010 0001 0010 0010 x2 0011 x1 0011 x1 0100 0100 0101 0101 0110 0110

More Related