第4章 TMS320C54x的数据寻址方式
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
返回首页
图3-1 DP作为基地址的直接寻址方式
图3-2 SP作为基地址的直接寻址方式 返回本节
TMS320C54x的数据存储器分为512页,每页128 字。设置一个数据页指针DP(Data Pointer), 用9-bit指向一个数据页,再加上一个7-bit的页内 偏移地址,形成16-bit的数据地址。
第3章 TMS320C54x的数据寻址方式
3.1 立即寻址
3.2 绝对寻址 3.3 累加器寻址
3.4 直接寻址
3.5 间接寻址
3.6 存储器映象寄存器寻址
3.7 堆栈寻址
TMS320C54x DSP提供以下7种基本数据寻址方式。
(1)立即数寻址
(2)绝对地址寻址 (3)累加器寻址
在读同时并行写的指令中表示写操作数dmad16位立即数数据存储器地址065535512页每页128字64k641024216pmad16位立即数程序存储器地址065535512页每页128字pa16位立即数io口地址065535512页每页128字src源累加器a或bdst目的累加器a或blk16位长立即数31一条指令中可对两种立即数编码一种是短立即数358或9位短立即数指令编码为一个字长
100
100
————
1000
————
010
以位倒序进位应用
设AR1中的地址值为0000,
AR0中的地址值为0100 RPT #7 PORTW *AR1+0B , PA
原序 原地址
位倒序后地址
位倒序
0 1 2 3 4 5 6 7
பைடு நூலகம்
0000 0001 0010 0011 0100 0101 0110 0111
LD #4,DP ADD 9h,A
;指向页4(0200h-027Fh) ;将数据页4中地址9h的 数据加给AccA
给一个具体地址,怎样区分在哪一页的哪个位置??
.bss temp,1
指向第一页,第0号地址.
; address of 0x080
0080h=0000 0000 1000 0000h,
数据存储器寻址使用符号(符号地址)或一个表 示16位地址的立即数来指明寻址的数据存储单元 的16位绝对地址。例如:
MVKD SMAPLE,*AR5; SMAPLE是符号常数,代表数据 存储单元地址;将数据存储器SMAPLE地址单元中的数据 传送到由AR5辅助寄存器所指向的数据存储单元中。 返回本节
0209h=0000 0010 0000 1001h, 指向第四页,第9号地址.
3.5 间接寻址
在间接寻址中,64K数据空间任意单元都可通过一个辅助寄存器 中的16-bit地址进行访问。C54x有8个16-bit辅助寄存器(AR0AR7)。两个辅助寄存器算术单元(ARAU0和ARAU1),根据辅助 寄存器的内容进行操作,完成无符号的16-bit算术运算。间接 寻址很灵活,不仅能从存储器中读或写一个单16-bit数据操作 数,而且能在一条指令中访问两个数据存储器单元(即从两个 独立的存储器单元读数据,或读一个存储器单元同时写另一个 存储器单元,或读写两个连续的存储器单元)。 8个辅助寄存器(AR0--AR7),由一个辅助寄存器指针(ARP 3bit)来指定。 辅助寄存器算术单元(ARAU)作16-bit无符号数运算,决定一 个新的地址,装入辅助寄存器中的一个。
返回首页
3.4 直接寻址
在直接寻址方式中,指令中包含数据存储器地址(dma) 的低7位,这7位dma作为地址偏移量,结合基地址(由 数据页指针DP或堆栈指针SP给出)共同形成16位的数据 存储器地址。使用这种寻址方式,用户可在不改变DP或 SP的情况下,对一页内的128( 27 )个存储单元随机寻址。 512页( 29 ) 采用这种寻址方式的好处是指令为单字指令,数据存储器 地址(dma)的低7位放在指令字中(如图3-1、3-2所 示)。
(4)直接寻址
(5)间接寻址
(6)存储器映射寄存器寻址
(7)堆栈寻址
立即数寻址: 指令中嵌有一个固定的数
绝对地址寻址: 指令中有一个固定的地址 累加器寻址: 按累加器内的地址去访问程序存储 器中的一个单元 直接寻址: 指令中的7bits是一个数据页内的偏移 地址,而所在的数据页由数据页指针DP或SP决 定。该偏移加上DP和SP的值决定了在数据存储 器中的实际地址。
LD #3,ASM 加器移位方式
长立即数寻址(双字指令)
指令字的后一个字是立即数(双字指 令)
ADD #1234h,A ;将#1234h加给 AccA LD #1234,A ;
3.2 绝对寻址
就是在指令之中包含有所要寻址的存储单元的 16位地址。以下4种:
3.2.1 数据存储器(dmad)寻址
0000 0100 0010 0110 0001 0101 0011 0111
0 4 2 6 1 5 3 7
8点的FFT蝶型结运算
0000 0100 0010
x(0) W0 x(4) W0 x(2) W0 x(6) x(1) W0 x(5) W0 x(3) W0 W
2
X(0) X(1) X(2) W2 W0 W1 W2 W3 X(3) X(4) X(5) X(6) X(7)
位倒序寻址主要应用于FFT运算,可以提高FFT算 法的执行速度和使用存储器的效率。FFT运算主 要实现采样数据从时域到频域的转换,用于信号 分析,FFT要求采样点输入是倒序时,输出才是 顺序;若输入是顺序,则输出就是倒序,采用位 倒序寻址的方式正好符合FFT算法的要求。
正向进位与反向进位 100
+ 100 +
特殊的间接寻址方式有:
倒序寻址
在这种寻址方式中,AR0存放的整数N是FFT点数 的一半。一个辅助寄存器指向一数据存放的物理 单元。 当使用位倒序寻址把AR0加到辅助寄存器中时, 地址以位倒序的方式产生,即进位是从左向右, 而不是从右向左。间接寻址中*Arx+0B/-0B表示位 倒序寻址。
*+ARx(lk):在寻址之前,把一个带符号的16-bit的长偏移 (lk)加到ARx中,然后用新的ARx的值作为数据存储器 的地址。 *+ARx(lk)%:在寻址之前,把一个带符号的16-bit的长偏 移以循环寻址的方式加到ARx中,然后再用新的ARx的值 作为数据存储器的地址。
ADD * AR4 ,8,A ;将当前辅助寄存器AR4所指的地址 里的数据,左移8bit后加给AccA ;
PORTR FIFO ,*AR5; FIFO 是 端 口 地 址 标 号 ; 从 FIFO端口读入一个数据,将其存放到由AR5寄存器所指 向的数据存储单元中。
返回本节
3.2.4 长立即数*(lk)寻址
长立即数*(lk)寻址用于所有支持单数据存储器操作数 (Smem)的指令。 长立即数*(lk)寻址使用一个符号(符号地址)或一个 表示16位地址的立即数来指定数据存储空间的一个地址。 例如,把数据空间中地址为BUFFER单元中的数据传送到 累加器A,指令可写为: LD *(BUFFER),A; BUFFER是16位符号常数; 将BUFFER符号所指的数据存储单元中的数,传送到累加 器A。 返回本节
间接寻址: 按照辅助寄存器中的地址访问存储器。
存储器映射寄存器寻址: 修改存储器映射寄存器 中的值,而不影响当前DP或SP的值。
堆栈寻址: 把数据压入和弹出系统堆栈。
表3-1 寻址指令中用到的缩写符号及其含义
缩写符号 含义 16位单数据存储器操作数 在双操作数指令及某些单操作数指令中所用的16位双数据存储 器操作数,从DB总线上读出 在双操作数指令中所用的16位双数据存储器操作数,从CB总线 上读出;在读同时并行写的指令中表示写操作数 16位立即数——数据存储器地址(0~65535)512页,每页128字 (64K=64*1024=216) 16位立即数——程序存储器地址(0~65535) 512页,每页128字 16位立即数——I/O口地址(0~65535) 512页,每页128字 源累加器(A或B) 目的累加器(A或B) 16位长立即数
Smem
Xmem Ymem dmad pmad PA src dst
lk
3.1 立即数寻址
在立即数寻址方式中,指令中包括了立即操作数。
一条指令中可对两种立即数编码,一种是短立即 数(3、5、8或9位),短立即数指令编码为一个 字长。 另一种是16位的长立即数,16位立即数的指令编 码为两个字长。
ADD * AR4 +,8,A ;当前辅助寄存器AR4所指的地址里 的数据左移,加给AccA后,当前辅助寄存器地址加1; ADD * + AR4 ,8,A ;当前辅助寄存器地址加1,新地址 里的数据左移,再加给AccA ; ADD *AR4+0,8,A ;执行加法后,将AR0的地址值加 给当前辅助寄存器的地址 ; ADD *AR4+0B,8,A ;将AR0的地址值加给当前辅助寄 存器的地址,但反向进位。
3.2.2 程序存储器(pmad)寻址
3.2.3 端口地址(PA)寻址
3.2.4 长立即数*(lk)寻址
返回首页
3.2.1 数据存储器(dmad)寻址
使用数据存储器寻址的指令有:
MVDK Smem, dmad MVKD dmad, Smem MVDM dmad, MMR MVMD MMR, dmad
0110
0001 0101 0011 0111
x(7)
表3-3 位倒序寻址
返回本节
循环寻址
许多算法,如卷积,相关和FIR滤波等,都需要 在存储器中实现一个循环缓冲器。在这些算法中, 一个循环缓冲器就是一个包含了最近的数据的滑 动窗口。当新的数据来到时,缓冲器就会覆盖最 早的数据。循环缓冲器实现的关键是循环寻址的 实现。C54x间接寻址中提供了循环寻址的方式, 以%表示。
*ARx-0B/ *ARx+0B :访问后,从ARx中以位倒序进位的 方式减去/加上AR0。
*ARx-0/ *ARx+0 :访问后,从ARx中减去/加上 AR0。
*ARx-%/ *ARx+% :访问后,ARx中的地址以循环寻址的 方式减1/加1。
*ARx-0%/ *ARx+0% :访问后,从ARx中以循环寻址的方 式减去/加上AR0。 *ARx(lk):ARx和16-bit的长偏移(lk) 的和用来作为数据存 储器地址。ARx本身不被修改。
返回首页
分类
3.5.1 单操作数寻址
3.5.2 双操作数寻址
单操作数间接寻址方框图
3.5.1 单操作数寻址
表3-2列出了单数据存储器(Smem)操作数间接 寻址类型。
表3-2 单数据存储器操作数间接寻址类型
单操作数间接寻址类型:
*Arx:ARx包含了数据存储器地址。 *ARx-/ *ARx+ :访问后,ARx中的地址减1/加1。 *+ARx:在寻址之前,ARx中的地址加1。
3.2.2 程序存储器(pmad)寻址
使用程序存储器寻址的指令有:
FIRS Xmem, Ymem, pmad MACP Smem, pmad, src MVPD pmad, Smem MACD Smem, pmad, src MVDP Smem, pmad
程序存储器(pmad)寻址使用符号(符号地址)或一个 表示16位地址的立即数来给出程序空间的地址。例如, 把程序存储器中标号为TABLE单元中的值复制到AR7所 指定的数据存储器中去,指令可写为:
3.3 累加器寻址
累加器寻址是用累加器中的数值作为一个地址读写程序存 储器。共有两条指令可以采用累加器寻址: READA Smem ;以累加器A中的数为地址,从程序存 储器中读入一个数,并传送到由Smem所指定的数据存储 器单元中。 WRITA Smem ;将Smem所指定的数据存储器单元中 的一个数,传送到由累加器A所指定的程序存储器单元中。 对大多数C54x,用累加器的低16位作为程序存储器地址
立即数寻址指令中在数字或符号常数前面加一个 “#”号,来表示立即数。
返回首页
短立即数寻址(单字指令)
在指令字中包括立即操作数
;将下一条指令循环100次 ADD #0ffh,A ;将0ffh加给AccA
RPT #99
例:
LD #0,ARP ;用立即数0,加到ST0【状态寄存 器0】中的 三位指针位 ;用立即数3,加到ST1中的 5位累
MVPD TABLE,*AR7; TABLE是地址标号,程序存储单 元地址;将程序存储器标号为TABLE地址单元中的数据传 送到由AR7寄存器所指向的数据存储单元中。 返回本节
3.2.3 端口地址(PA)寻址
使用端口地址的指令有:
PORTR PORTW PA, Smem Smem , PA
端口地址(PA)寻址使用一个符号(符号地址) 或一个表示16位地址的立即数来给出外部I/O口地 址。例如: