3-DSP的寻址方式

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Data bus(16)
3
3
3
ARB
ARP
3
Auxiliary registers
AR0 AR1 AR2 AR3 AR4 AR5 AR6 AR7
16
16 16 bit data address
ARAU
▪ 将该AR的内容加1或减1,再寻址(循 环常用)
▪ 将该AR的内容加上或减去AR0的内容, 再寻址
程序
MAC *+,A
LD #a1,T MAC *+,A LD #a2,T MAC *+,A LD #a3,T MAC *,A LD A,y0
2)循环寻址
▪ 许多算法,如卷积,相关和FIR滤波等,都 需要在存储器中实现一个循环缓冲区。在 这些算法中,一个循环缓冲区就是一个包 含了最近的数据的滑动窗口。当新的数据 来到时,缓冲区就会覆盖最早的数据。循 环缓冲区实现的关键是循环寻址的实现。 C54X间接寻址中提供了循环寻址的方式, 以%表示。
01234h
2、绝对地址寻址
▪ 1)数据存储器地址(dmad)寻址 ▪ 2)程序存储器地址(pmad)寻址 ▪ 3)端口(PA)寻址 ▪ 4)长立即数*(lk)寻址
1)数据存储器地址(dmad)寻址
用一个符号或一个数来确定数据空间的一个地址:
▪ 使用数据存储器寻址的指令有:
MVDK Smem, dmad
16位立即数——程序存储器地址(0~65535)
16位立即数——I/O口地址(0~65535)
源累加器(A或B)
目的累加器(A或B)
16位长立即数
1、立即寻址
▪ 在立即寻址方式中,指令中包括了立即操 作数。
▪ 一条指令中可对两种立即数编码,一种是 短立即数(长度为3、5、8或9位),另一 种是长立即数(长度为16位)。短立即数 指令编码为一个字长, 长 立即数的指令编 码为两个字长。
第三章 DSP的软件结构
The Software structure of DSP
寻址方式(Addressing mode)
(1)立即数寻址 (2)绝对地址寻址 (3)累加器寻址 (4)直接寻址 (5)间接寻址 (6)存储器映射寄存器寻址 (7)堆栈寻址
表3-1 寻址指令中用到的缩写符号及其含义
编程实例
3
y0 ai xi a0 x0 a1x1 a2 x2 a3 x3 i0
.mmregs .bss x,4,1 a0 .word 012h a1 .word 3211h a2 .word fe11h a3 .word ff03h .sect “program” LD #x,AR1 LD #0,A,AR1 LD #a0,T
6、存储器映像寄存器寻址
▪ 存储器映象寄存器寻址用于修改存储器映 象寄存器(MMR)中的内容,而不影响当 前数据页指针DP和当前堆栈指针SP的值。 由于这种方式不需要修改DP和SP,对寄存 器的写操作开销最小。存储器映象寄存器 寻址可用于直接寻址和间接寻址。
有8条指令可以进行存储器映像寄存器寻址: ▪ LDM MMR,dst ▪ MVDM dmad,MMR ▪ MVMD MMR,dmad ▪ MVMM MMRx,MMRy ▪ POPM MMR ▪ PSHM MMR ▪ STLM src,MMR ▪ STM #lk,MMR
图3-1 DP作为基地址的直接寻址方式 图3-2 SP作为基地址的直接寻址方式
直接寻址
▪ 位于状态寄存器ST1的CPL位(直接寻址 编辑方式)可以选择那种方式。
▪ CPL=0,以数据页指针寄存器DP位基地址。 DP 值可以由LD指令装入。RESET指令将 DP赋0。
▪ CPL=1,堆栈指针SP的16位地址与指令中 的7位地址相加,形成16位数据存储器地址。
▪ 立即数寻址指令中在数字或符号常数前面 加一个“#”号,来表示立即数。
举例
RPT #99 ;将下一条指令循环100次 LD #0h,DP;将0装入数据页指针 ADD #0ffh,A;将0ffh 加给AccA
ADD 0ffh
ADD opcode
0FFh
Machine Code
1011
1000
1111 1111
▪ 将该AR的内容逆向进位加上或减去 AR0的内容,再寻址
示例
▪ ADD *,8,A;将当前辅助寄存器所 指的地址里的数据,左移8-bit后加给 AccA
▪ ADD *+,8,A,AR4;数据左移, 加给AccA后,当前辅助寄存器加1, 选择辅助寄存器AR4
示例
▪ ADD *0+,8,A;执行加法后,将 AR0的值加给当前辅助寄存器
▪ MVPD TABLE,*AR7; 其中,TABLE所代表的就是一个pmad
返回
源自文库
3)端口(PA)寻址
用一个符号或一个数字来确定外部I/O端口的地址: ▪ 使用端口地址的指令有:
PORTR PA, Smem PORTW Smem , PA ▪ 端口地址(PA)寻址使用一个符号(符号地址) 或一个表示16位地址的立即数来给出外部I/O口地 址。例如: PORTR FIFO ,*AR5;
用一个符号或一个数来确定程序存储器的一个地址:
▪ 使用程序存储器寻址的指令有:
FIRS Xmem, Ymem, pmad
MACD Smem, pmad, src MACP Smem, pmad, src
MVDP Smem, pmad
MVPD pmad, Smem
▪ 程序存储器(pmad)寻址使用符号(符号地址)或一个 表示16位地址的立即数来给出程序空间的地址。例如,把 程 序 存 储 器 中 标 号 为 TABLE 地 址 单元中的值复制到AR7 所指定的数据存储器中去,指令可写为:
▪ 循环缓冲区的尾基地址(EOB)是通过用 BK的低N位代替ARx的低N位得到。
▪ 循环缓冲区的index就是ARx的低N位的当 前值。
▪ 步长(step)就是加到辅助寄存器或从辅 助寄存器中减去的值。
▪ 例如,一个循环缓冲区大小 BK=6=N, AR1=0060H,用*AR1+%间接寻址。第一次 寻址后,AR1=0061H;第二次寻址后 AR1=0062H;……;第六次寻址后AR1指 向0066H,再按BK的值6取模,此时AR1 又指向0060H。
缩写符号 Smem Xmem
Ymem dmad pmad PA src dst lk
含义
16位单数据存储器操作数
在双操作数指令及某些单操作数指令中所用的16位双数据存储 器操作数,从DB总线上读出 在双操作数指令中所用的16位双数据存储器操作数,从CB总线 上读出;在读同时并行写的指令中表示写操作数 16位立即数——数据存储器地址(0~65535)
直接寻址
▪ DP值可由LD指令装入。RESET指令将DP 赋值为0。注意:DP不能用上电进行初始 化,在上电后它处于不定状态,所以,没 有初始化DP的程序就可能工作不正常,所 有的程序都必须要对DP作初始化。
例: ▪ LD #4 ,DP;指向页4(0200h-027Fh) ▪ ADD 9h,A;将数据页4中的地址9h加给累加
▪ PSHM,将一个存储器映像寄存器(MMR) 中的值压入堆栈。
▪ POPD,从堆栈弹出一个数到数据存储单 元。
▪ POPM,从堆栈弹出一个数到存储器映像 寄存器(MMR)。
作业
▪ 1、已知(30H)=50H,AR2=40H, AR3=60H,AR4=80H MVKD 30H,*AR2 MVDD *AR2,*AR3 MVDM *AR3,AR4
返回
4)长立即数*(lk)寻址
用一个指定数据空间的地址来确定数据存储器中 的一个地址: ▪ 长立即数*(lk)寻址用于所有支持单数据存储器 操作数(Smem)的指令。 ▪ 长立即数*(lk)寻址使用一个符号(符号地址) 或一个表示16位地址的立即数来指定数据存储空 间的一个地址。例如,把数据空间中地址为 BUFFER单元中的数据传送到累加器A,指令可 写为: LD *(BUFFER),A 注意:使用*(lk)寻址方式的指令不能与循环指令 (RPT、RPTZ)一起使用
循环寻址
▪ 循环缓冲区长度寄存器(BK)说明循环缓冲区的 长度值。一个长度为R的循环缓冲区必须从N位地 址的边界开始。也就是,循环缓冲区的基地址的
最低N位必须是0。其中N是满足 2N R 的最小
的整数。R值必须装入BK中。
循环寻址
▪ 循环缓冲区的有效基地址(EFB)就是用 户选定的辅助寄存器(ARx)的低N位置0 后所得到的值。
器A。
5、间接寻址
▪ 8个辅助寄存器(AR0-AR7),由一个辅 助寄存器指针(ARP 3-bit)来指定
▪ 辅助寄存器算术单元(ARAU)作16-bit无 符号数运算,决定一个新的地址,装入辅 助寄存器中的一个
▪ AR0-AR7的内容相当灵活,可以装入立即 数,加上立即数,减去立即数,也可以从 数据存储器装入地址,还可以作以下的变 址寻址:
▪ ADD *BR0+,8,A;执行加法后, 将AR0的值加给当前辅助寄存器,但 反向进位
表3-2 单数据存储器操作数间接寻址类型
正向进位和反向进位
▪ 正向进位 10 0
+ 10 0 10 0 0
反向进位 10 0 +10 0 010
1)位倒序寻址
▪ 位倒序寻址主要运用于FFT。 ▪ 在位倒序寻址方式中,AR0指明了FFT点
3、累加器寻址
▪ 累加器寻址是用累加器中的数值作为一个地址,用 来对存放数据的程序存储器寻址。共有两条指令可 以采用累加器寻址:
READA Smem
WRITA Smem ▪ READA,把累加器A所确定的程序存储器单元中
的一个字,传送到数据存储器单元Smem中。 ▪ WRITA,把数据单元Smem中的一个字,传送到累
MVDM dmad, MMR
MVKD dmad, Smem
MVMD MMR, dmad
▪ 数据存储器寻址使用符号(符号地址)或一个表 示16位地址的立即数来指明寻址的数据存储单元 的16位绝对地址。例如:
MVKD SMAPLE,*AR5;
其中SMAPLE所代表的就是一个dmad。
返回
2)程序存储器地址(pmad)寻址
加器A确定的程序存储器单元。
4、直接寻址
▪ TMS320C54X的数据存储器分为512页, 每页128字。设置一个数据页指针DP (Data Pointer),用9-bit指向一个数据页, 再加上一个7-bit的页内偏移地址,形成16bit的数据地址
直接寻址
▪ 在直接寻址方式中,指令中包含数据存储 器地址(dma)的低7位,这7位dma作为 地址偏移量,结合基地址(由数据页指针 DP或堆栈指针SP给出)共同形成16位的 数据存储器地址。使用这种寻址方式,用 户可在不改变DP或SP的情况下,对一页内 的128个存储单元随机寻址。采用这种寻址 方式的好处是指令为单字指令,数据存储 器地址(dma)的低7位放在指令字中(如 图3-1、3-2所示)。
7、堆栈寻址
▪ 当发生中断或子程序调用时,系统堆栈自 动保存PC值。堆栈也可以用于保存和传递 其他数据。堆栈由高地址向低地址增长, 处理器使用16位的存储器映象寄存器—— 堆栈指针(SP)对堆栈进行寻址,SP总是 指向压入堆栈的最后一个数据。
有4条指令使用堆栈寻址方式:
▪ PSHD,将数据存储器中的一个数压入堆 栈。
运行以上程序后,(30H)、(40H)、 *AR3和AR4的值分别等于多少?
▪ 2、已知(80H)=20H,(81H)=30H LD #0,DP LD 80H,16,B ADD 81H,B
运行以上程序后,B等于多少呢? 3、编程实现
1111 1111
长立即数寻址
指令字的后一个字是立即数(双字指令) 例: ADD #1234h, A ;将#1234h加给
AccA
ADD #01234h ADD operand Machine Code 1 0 1 1 1 1 1 1 1 0 0 1 0 0 0 0
Operand 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0
数的一半。
AR0=100 AR1=000 按AR1寻址后,将AR0加给AR1,反 向进位
位倒序寻址
原序 0 1 2 3 4 5 6 7
原地址 000 001 010 011 100 101 110 111
位倒序后地址 000 100 010 110 001 101 011 111
位倒序 0 4 2 6 1 5 3 7
相关文档
最新文档