第3章节TMS320C54x数据寻址方式
合集下载
第三章:DSP软件体系_寻址方式

DSP技术及其应用 26
TMS320C54X-DSP
循环寻址:
许多算法,如卷积,相关和FIR滤波等,都需要在存 储器中实现一个循环缓冲器。在这些算法中,一个循环缓 冲器就是一个包含了最近的数据的滑动窗口。当新的数据 来到时,缓冲器就会覆盖最早的数据。循环缓冲器实现的 关键是循环寻址的实现。‘C54x间接寻址中提供了循环寻 址的方式,以%表示。 循环寻址图示
*ARx-0%/*ARx+0% : – 访问后,从ARx中以循环寻址的方 式减 去/加上AR0 *ARx(lk): – ARx和16-bit的长偏移(lk) 的和用来作为数据存储器地址。 ARx本身不被修改 *+ARx(lk): – 在寻址之前,把一个带符号的16-bit的长偏移(lk)加 到ARx中,然后用新的ARx的值作为数据存储器的地址 *+ARx(lk)%: – 在寻址之前,把一个带符号的16-bit的长偏移以循环寻址 的方式加到ARx中,然后再用新的ARx的值作为数据存 储器的地址
*ARx-0B/ *ARx+0B :
– 访问后,从ARx中以位倒序进位的方式减去/加上AR0
*ARx-0/ *ARx+0 :
– 访问后,从ARx中减去/加上AR0
*ARx-%/ *ARx+% :
– 访问后,ARx中的地址以循环寻址的方式减1/加1
DSP技术及其应用 12
TMS320C54X-DSP
共有四条使用堆栈寻址方式访问堆栈的指令:
PSHD 把一个数据存储器的值压入堆栈。 PSHM 把 一 个 存 储 器 映 射 寄 存 器 的 值 压 入 堆 栈 。 POPD 把一个数据存储器的值弹出堆栈。 POPM 把一个存储器映射寄存器的值弹出堆栈。
3tms320c54指令系统概要

累加器寻址和直接寻址举例
• DM的地址:0206h
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 0 0 0 0 0 1000000110
5. 间接寻址
在间接寻址中,64K数据空间任意单元都可通过一 个辅助寄存器中的16-bit地址进行访问。
‘C54x有8个16-bit辅助寄存器(AR0-AR7)。两个 辅助寄存器算术单元(ARAU0和ARAU1),根据辅助寄 存器的内容进行操作,完成无符号的16-bit算术运算。
SP 0024 0100
LD @1, A ADD @2, A ;A的结果:150
0050 3404
4. 累加器寻址
累加器寻址是用累加器中的数作为一个地址。这种寻 址方式可用来对存放数据的程序存储器寻址。地址由累加 器的低16位决定,共有两条指令可以采用累加器寻址:
READA Smem WRITA Smem READA是把累加器A所确定的程序存储器单元中的一个字, 传送到单数据存储器(Smem)操作数所确定的数据存储器单 元中。WRITA是把Smem操作数所确定的数据单元中的一个字 ,传送到累加器A确定的程序存储器单元中去。 上述两条指令,在重复的方式下执行,搬移连续的数据(以 A的值为起始地址)到连续的DM中,能够对累加器A自动增量
访问后, ARx中的地址减1/加1
• *+ARx:
在寻址之前,ARx中的地址加1
• *ARx-0B/ *ARx+0B :访问后,从ARx中以位倒序进位的
方式减去/加上AR0
• *ARx-0/ *ARx+0 : 访问后,从ARx中减去/加上AR0
第三章 TMS320C54X指令系统
本章内容包括:(1)存储器寻址方式 (2)汇编语言指令系统 (3)伪指令系统。
第3章TMS320C54x的指令系统详解

15~7
9位数据页指针DP值 图3.1.2
6~0
7位IR值
CPL=0时, 16位数据存储单元的地址
② 当CPL=1时,将堆栈指针SP的16位地址 与指令中的7位地址相加,形成16位的数据 存储器地址,如图:
15~0
16位堆栈指针SP
15~7 0 0 0 0 0 0 0 0 0 6~0 7位IR值
有效存储地址 图3.1.3 CPL=1时, 16位数据存储单元的地址
下图列出了双操作数寻址的指令代码格式:
15~8 操作码 7 Xmod 6 5 Xar 4 3 Ymod 2 1 Yar 0
图3.1.5双操作数寻址的指令代码格式
表3.1.7 双操作数的各位说明:
位 15~8 7~6 5~4 3~2 1~0
名称 操作码 Xmod Xar Ymod Yar
功能 8位代码包含了指令的操作码 定义了用于寻址Xmem操作数的间接寻址方式的类型 2位代码确定了存储Xmem地址的辅助寄存器 定义了用于寻址Ymem操作数的间接寻址方式类型 2位代码确定存储Ymem地址的辅助寄存器
3.1.3 累加器寻址
累加器寻址是将累加器的内容作为地址 去访问程序存储器单元,即将累加器中的 数作为地址,用来对存放数据的程序存储 器寻址。有两条指令可以采用累加器寻址。 ① READ A Smem ② WRIT A Smem
3.1.4 直接寻址
直接寻址是利用数据指针和堆栈指针寻 址,其特点是数据存储器地址由基地址和 偏移地址共同构成,共16位。 基地址位于数据存储器地址的高9位, 偏移地址位于数据存储器地址(dmad)的 低7位。 下面分别给出了直接寻址的指令代码格 式以及各位说明。
由于只有2位可以用于选择辅助寄存器,所以 根据Xar或Yar的值可以选择4个寄存器。 下表列出了Xar或Yar同辅助寄存器的对应关系:
9位数据页指针DP值 图3.1.2
6~0
7位IR值
CPL=0时, 16位数据存储单元的地址
② 当CPL=1时,将堆栈指针SP的16位地址 与指令中的7位地址相加,形成16位的数据 存储器地址,如图:
15~0
16位堆栈指针SP
15~7 0 0 0 0 0 0 0 0 0 6~0 7位IR值
有效存储地址 图3.1.3 CPL=1时, 16位数据存储单元的地址
下图列出了双操作数寻址的指令代码格式:
15~8 操作码 7 Xmod 6 5 Xar 4 3 Ymod 2 1 Yar 0
图3.1.5双操作数寻址的指令代码格式
表3.1.7 双操作数的各位说明:
位 15~8 7~6 5~4 3~2 1~0
名称 操作码 Xmod Xar Ymod Yar
功能 8位代码包含了指令的操作码 定义了用于寻址Xmem操作数的间接寻址方式的类型 2位代码确定了存储Xmem地址的辅助寄存器 定义了用于寻址Ymem操作数的间接寻址方式类型 2位代码确定存储Ymem地址的辅助寄存器
3.1.3 累加器寻址
累加器寻址是将累加器的内容作为地址 去访问程序存储器单元,即将累加器中的 数作为地址,用来对存放数据的程序存储 器寻址。有两条指令可以采用累加器寻址。 ① READ A Smem ② WRIT A Smem
3.1.4 直接寻址
直接寻址是利用数据指针和堆栈指针寻 址,其特点是数据存储器地址由基地址和 偏移地址共同构成,共16位。 基地址位于数据存储器地址的高9位, 偏移地址位于数据存储器地址(dmad)的 低7位。 下面分别给出了直接寻址的指令代码格 式以及各位说明。
由于只有2位可以用于选择辅助寄存器,所以 根据Xar或Yar的值可以选择4个寄存器。 下表列出了Xar或Yar同辅助寄存器的对应关系:
第3章TMS320C54XDSP寻址方式09.10

ARx包含了数据存储器地址 访问后,ARx以循环寻址方式减1 ARx包含了数据存储器地址 访问后,ARx以循环寻址方式减去 AR0 ARx包含了数据存储器地址 访问后,ARx以循环寻址方式加1 ARx包含了数据存储器地址 访问后,ARx以循环寻址方式加上 AR0 ARx加上16位长偏移量作为数据 存储器地址 访问后,ARx中内容不变 ARx加上16位长偏移量作为数据 存储器地址 访问后,ARx中内容加上16位长 偏移量 ARx以循环寻址方式加上16位长 偏移量作为数据存储器地址, 同时修改ARx中内容 以无符号16位长偏移量作为数据 存储器地址 (绝对地址)
19
单操作数 3 间接寻址 y0 a i x i a0 x0 a1 x1 a 2 x 2 a3 x3 编程举例: i 0 .mmregs .bss x, 4 .word 1, 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 …..
第一条指令表示将数据存储器中以DATA符号为地址单元中 的数据传送到由辅助寄存器ARl所指向的数据存储单元中去。 DATA代表数据存储单元的地址dmad。 第二条指令表示将程序存储器中以TABLE符号为地址单元中 的数据传送到由辅助寄存器AR2所指向的数据存储单元中去。 TABLE代表程序存储单元的地址pmad。 第三条指令表示将地址为0F2F0H的端口中的数据传送到由 辅助寄存器AR5所指向的数据存储单元中去。
17序号间址类型功能说明arxaddrarxarx包含了数据存储器地址arxaddrarxarxarx1arx包含了数据存储器地址访问后arx中地址减1arxaddrarxarxarx1arx包含了数据存储器地址访问后arx中地址加1arxaddrarx1arxarx1寻址前arx中地址加1arx0baddrarxarxbarxar0arx包含了数据存储器地址访问后arx以位倒序方式减去ar0arx0addrarxarxarxar0arx包含了数据存储器地址访问后arx中减去ar0arx0addrarxarxarxar0arx包含了数据存储器地址访问后arx中加上ar0arx0baddrarxarxbarxar0arx包含了数据存储器地址访问后arx以位倒序方式加上ar0号表示间址32位字时增减为2寻址前变址只用于写操作指令18arxaddrarxarxcircarx1arx包含了数据存储器地址访问后arx以循环寻址方式减1arx0addrarxarxcircarxar0arx包含了数据存储器地址访问后arx以循环寻址方式减去ar010arxaddrarxarxcircarx1arx包含了数据存储器地址访问后arx以循环寻址方式加111arx0addrarxarxcircarxar0arx包含了数据存储器地址访问后arx以循环寻址方式加上ar012arxlkaddrarxlkarxarxarx加上16位长偏移量作为数据存储器地址访问后arx中内容不变13arxlkaddrarxlkarxarxlkarx加上16位长偏移量作为数据存储器地址访问后arx中内容加上16位长偏移量14arxlkaddrcircarxlkarxcircarxlkarx以循环寻址方式加上16位长偏移量作为数据存储器地址同时修改arx中内容15lkaddrlk以无符号16位长偏移量作为数据存储器地址绝对地址lk不允许mmr寻址19间接寻址时
第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)堆栈寻址 )
位倒序寻址
AR0存放 存放FFT点数的一半,另外一个辅助寄存器指向数据存放单元。 点数的一半, 存放 点数的一半 另外一个辅助寄存器指向数据存放单元。 当AR0加到指针中时,进位从左到右。 加到指针中时,进位从左到右。 加到指针中时 FFT长度 长度N=16,AR0=8=0000 1000B,AR2=0110 0000B 长度 , , *AR2+0B;AR2=0110 0000 *AR2+0B;AR2=0110 1000 *AR2+0B;AR2=0110 0100 *AR2+0B;AR2=0110 1100 *AR2+0B;AR2=0110 0010 *AR2+0B;AR2=0110 1010 *AR2+0B;AR2=0110 0110 *AR2+0B;AR2=0110 1110
返回首页
图3-1 DP作为基地址的直接寻址方式
图3-2 SP作为基地址的直接寻址方式 返回本节
3.5 间接寻址
3.5.1 单操作数寻址 3.5.2 双操作数寻址
返回首页
3.5.1 单操作数寻址
列出了单数据存储器( 表3-2列出了单数据存储器(Smem)操作数间接 列出了单数据存储器 ) 寻址类型。 寻址类型。 特殊的间接寻址方式有: 特殊的间接寻址方式有: 1.循环寻址 . 2.倒序寻址(如表3-3所示) .倒序寻址(如表 所示) 所示
3.1 立即寻址 3.2 绝对寻址 3.3 累加器寻址 3.4 直接寻址 3.5 间接寻址 3.6 存储器映象寄存器寻址 3.7 堆栈寻址 寻址方式小结
TMS320C54x DSP提供以下 种基本数据寻址方式。 提供以下7种基本数据寻址方式 提供以下 种基本数据寻址方式。 (1)立即数寻址 ) (2)绝对地址寻址 ) (3)累加器寻址 ) (4)直接寻址 ) (5)间接寻址 ) (6)存储器映射寄存器寻址 ) (7)堆栈寻址 )
位倒序寻址
AR0存放 存放FFT点数的一半,另外一个辅助寄存器指向数据存放单元。 点数的一半, 存放 点数的一半 另外一个辅助寄存器指向数据存放单元。 当AR0加到指针中时,进位从左到右。 加到指针中时,进位从左到右。 加到指针中时 FFT长度 长度N=16,AR0=8=0000 1000B,AR2=0110 0000B 长度 , , *AR2+0B;AR2=0110 0000 *AR2+0B;AR2=0110 1000 *AR2+0B;AR2=0110 0100 *AR2+0B;AR2=0110 1100 *AR2+0B;AR2=0110 0010 *AR2+0B;AR2=0110 1010 *AR2+0B;AR2=0110 0110 *AR2+0B;AR2=0110 1110
返回首页
图3-1 DP作为基地址的直接寻址方式
图3-2 SP作为基地址的直接寻址方式 返回本节
3.5 间接寻址
3.5.1 单操作数寻址 3.5.2 双操作数寻址
返回首页
3.5.1 单操作数寻址
列出了单数据存储器( 表3-2列出了单数据存储器(Smem)操作数间接 列出了单数据存储器 ) 寻址类型。 寻址类型。 特殊的间接寻址方式有: 特殊的间接寻址方式有: 1.循环寻址 . 2.倒序寻址(如表3-3所示) .倒序寻址(如表 所示) 所示
指令系统d3

1 . 立即数寻址
在立即数寻址中,指令里包括了立即操作数。在 一条指令中可对两种立即数编码。一种是短立即数(3、 5、8或9bits),另一种是16bits的长立即数。立即数 可包含在单字或双字指令中。3-,5-,8-或9-bit值在 单字指令中,16-bit值在双字指令中。
复习:CPU状态和控制寄存器
第三章 TMS320C54X的指令系统
TMS320C5000指令系统
‘C54x寻址方式 ‘C54x特殊寻址
方式说明 ‘C54x指令集 ‘C54x特殊指令
使用说明
3.1 TMS320C54x的寻址方式
• 立即数寻址: 指令中嵌有一个固定的数 • 绝对地址寻址: 指令中有一个固定的地址 • 累加器寻址: 按累加器内的地址去访问程序存储器中
•例:
LD *(BUFFER),A ;BUFFER为地址 注: *(lk) 寻址,不改变DP的值,也不选择辅助寄存器。 只是指令字较多。它不能与循环指令RPT、RPTZ一起使用 。
5. 累加器寻址
累加器寻址是用累加器中的数作为一个地址。这种寻址 方式可用来对存放数据的程序存储器寻址。共有两条指令 可以采用累加器寻址:
双数据存储器操作数间接寻址方框图
双数据存储器操作数的间接寻址指令格式
Xmod 定义用于访问Xmem操作数的间接寻址方式的类型 Ymod 定义用于访问Ymem操作数的间接寻址方式的类型 Xar 定义用于访问Xmem的辅助寄存器 Yar 定义用于访问Ymem的辅助寄存器
Xmod,Ymod 操作码语法
;IMR=FFFFh(16位)
注:立即数前加#号。
短立即数RPT
例: RPT #99
;将跟在RPT后的下一条指令重复 执行100次
3tms320c54指令系统

RPT #15 PORTW *AR2+0B, PA
位倒序寻址的执行
设FFT长度N=16,则AR0赋值为8,位倒序 方式读入数据情况如下:
存 储 器 映 射 寄 存 器
6. 存储器映射寄存器寻址 存储器映射寄存器寻址用来修改存储器映射寄存器而 不影响当前数据页指针(DP)或堆栈指针(SP)的值。 存储器映射寄存器寻址 直接寻址中利用操作数中的低7位访问MMR 间接寻址中利用ARx访问MMR, Arx高位被臵0 。
累加器寻址和直接寻址举例
• DM的地址:0206h
15 0 14 0 13 0 12 0 11 0 10 0 9 8 7 6 5 4 3 2 1 0 1 0 0 0 0 0 0 1 1 0
5. 间接寻址 在间接寻址中,64K数据空间任意单元都可通过一 个辅助寄存器中的16-bit地址进行访问。 ‘C54x有8个16-bit辅助寄存器(AR0-AR7)。两个 辅助寄存器算术单元(ARAU0和ARAU1),根据辅助寄 存器的内容进行操作,完成无符号的16-bit算术运算。 间接寻址很灵活,不仅能从存储器中读或写一个单 16-bit数据操作数,而且能在一条指令中访问两个数据存 储器单元(即从两个独立的存储器单元读数据,或读一 个存储器单元同时写另一个存储器单元,或读写两个连 续的存储器单元)。
部分寻址的缩写语
符号 含 义
Smem Xmem Ymem dmad pmad PA src dst lk
16位单寻址操作数 16位的双寻址操作数,从DB总线读出 16位的双寻址操作数,从CB总线读出 16位立即数,数据存储器的地址 16位立即数,程序存储器的地址 16位立即数,I/O的地址 源累加器 目的累加器 16位的长立即数
FIRS Xmem, Ymem, pmad MACP Smem, pmad, src MACD Smem, pmad, src MVPD pmad, Smem
位倒序寻址的执行
设FFT长度N=16,则AR0赋值为8,位倒序 方式读入数据情况如下:
存 储 器 映 射 寄 存 器
6. 存储器映射寄存器寻址 存储器映射寄存器寻址用来修改存储器映射寄存器而 不影响当前数据页指针(DP)或堆栈指针(SP)的值。 存储器映射寄存器寻址 直接寻址中利用操作数中的低7位访问MMR 间接寻址中利用ARx访问MMR, Arx高位被臵0 。
累加器寻址和直接寻址举例
• DM的地址:0206h
15 0 14 0 13 0 12 0 11 0 10 0 9 8 7 6 5 4 3 2 1 0 1 0 0 0 0 0 0 1 1 0
5. 间接寻址 在间接寻址中,64K数据空间任意单元都可通过一 个辅助寄存器中的16-bit地址进行访问。 ‘C54x有8个16-bit辅助寄存器(AR0-AR7)。两个 辅助寄存器算术单元(ARAU0和ARAU1),根据辅助寄 存器的内容进行操作,完成无符号的16-bit算术运算。 间接寻址很灵活,不仅能从存储器中读或写一个单 16-bit数据操作数,而且能在一条指令中访问两个数据存 储器单元(即从两个独立的存储器单元读数据,或读一 个存储器单元同时写另一个存储器单元,或读写两个连 续的存储器单元)。
部分寻址的缩写语
符号 含 义
Smem Xmem Ymem dmad pmad PA src dst lk
16位单寻址操作数 16位的双寻址操作数,从DB总线读出 16位的双寻址操作数,从CB总线读出 16位立即数,数据存储器的地址 16位立即数,程序存储器的地址 16位立即数,I/O的地址 源累加器 目的累加器 16位的长立即数
FIRS Xmem, Ymem, pmad MACP Smem, pmad, src MACD Smem, pmad, src MVPD pmad, Smem
TMS320C54x的指令系统精品PPT课件

16位双寻址操作数,用于双操作数指令,从CB数据总 线上读取
16位立即数:数据存储器地址(0~65 535)
16位立即数:程序存储器地址(0~65 535)
16位立即数:I/O口地址(0~65 535)
源累加器(A或B)
目的累加器(A或B)
16位长立即数
2021/1/9
DSP原理及应用
4
3.1.1 立即寻址
第3章 TMS320C54x的指令系统
着重介绍助记符指令的分类及基本功能: ● 寻址方式 ● 指令表示方法 ● TMS320C54x的指令系统
2021/1/9
DSP原理及应用
1
3.1 寻址方式
寻址方式:当硬件执行指令时,寻找指令所指定的参与运
算的操作数的方法。 立即寻址 累加器寻址 间接寻址 寄存器寻址
用途:用于完成程序存储空间与数据存储空间之间的数据 传输
2021/1/9
DSP原理及应用
8
3.1.4 直接寻址
利用数据指针DP和堆栈指针SP寻址
指令格式:
15 ~ 8
7
6~0
操 作 码 I = 0 数据存储器地址(dmad)
指令的8位操作码
数据存储器地址 包含了数据存储器偏移地址
指令的标识符 表示指令为直接寻址
指令中含有执行指令所需的操作数。操作数紧随操作
码存放在程序存储器中。
例如: LD #F180,A ;将立即数F180加载到A
立即数的数值形式:
程序存储器
短立即数:3、5、8、9位,单字指令 长立即数:16位,双字指令 用途:用于表示常数或对寄存器初始化
操作码 立即数F180
特点:指令中含有一个固定的立即数,运行速度
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
长立即数*(lk)寻址使用一个符号(符号地址) 或一个表示16位地址的立即数来指定数据存储空 间的一个地址。例如,把数据空间中地址为 BUFFER 单元中的数据传送到累加器 A,指令可 写为: LD *(BUFFER),A
返回本节
3.3 累加器寻址
累加器寻址是用累加器中的数值作为一个地址读 写程序存储器。共有两条指令可以采用累加器寻 址: READA
返回首页
3.2.1 数据存储器(dmad)寻址
使用数据存储器寻址的指令有:
MVDK Smem, dmad MVKD dmad, Smem MVDM dmad, MMR MVMD MMR, dmad
数据存储器寻址使用符号(符号地址)或一个表 示16位地址的立即数来指明寻址的数据存储单元 的16位绝对地址。例如:
程序存储器(pmad)寻址使用符号(符号地址)或一个 表示 16 位地址的立即数来给出程序空间的地址。例如, 把程序存储器中标号为 TABLE 单元中的值复制到 AR7 所 指定的数据存储器中去,指令可写为: MVPD TABLE,*AR7; 返回本节
3.2.3 端口地址(PA)寻址
使用端口地址的指令有:
LD
#0,ARP
;ARP=0(#k3)
LD
LD LD
#3,ASM
#50,DP #1234,A
;ASM=3(#k5)
;DP=50(#k9) ;A=1234(#lk)
返回首页
3.2 绝对寻址
3.2.1 数据存储器(dmad)寻址
3.2.2 程序存储器(pmad)寻址 3.2.3 端口地址(PA)寻址 3.2.4 长立即数*(lk)寻址
2.倒序寻址(如表3-3所示)
表3-2 单数据存储器操作数间接寻址类型
循环缓冲区
Data Memory
Start_address = xxxxxxxxxxx00000 ARi
ARi
xxxxxxxxxxx00010
BK N=30=1 1 1 1 0
End_address = xxxxxxxxxxx11111
If 0=<index+step<BK
若 N=32, 起始地址的最低6位=000000 for N=30,起始地址的最低5位 =00000
访问循环缓冲区: 用N (nb bits) 初始化BK 选择1个 ARi 作为指针
在ARi中的有效起始地址低nb位为0。 结束地址 = 起始地址+N-1。
循环寻址的算法:
index=index+step
循环寻址
间接寻址中用%表示循环寻址方式
*ARi-%, *ARi+%, *ARi-0%, *ARi+0%, *ARi(lk)%
BK寄存器 存放循环缓冲区的长度N。 使用循环缓冲区之前,必须对BK初始化。 可以在不同地址安排多个循环缓冲区,但它们 的长度必须相同。
如果N表示为nb位二进制数,起始地址的最低( LSB) 的nb位必须为0: 例如:
SMAPLE,*AR5;
MVKD
返回本节
3.2.2 程序存储器(pmad)寻址
使用程序存储器寻址的指令有:
FIRS Xmem, Ymem, pmad MACP Smem, pmad, src MVPD pmad, Smem MACD Smem, pmad, src MVDP Smem, pmad
(4)直接寻址
(5)间接寻址
(6)存储器映射寄存器寻址
(7)堆栈寻址
表3-1 寻址指令中用到的缩写符号及其含义
缩写符号 含义 16位单数据存储器操作数 在双操作数指令及某些单操作数指令中所用的16位双数据存储 器操作数,从DB总线上读出 在双操作数指令中所用的16位双数据存储器操作数,从CB总线 上读出;在读同时并行写的指令中表示写操作数 16位立即数——数据存储器地址(0~65535) 16位立即数——程序存储器地址(0~65535) 16位立即数——I/O口地址(0~65535) 源累加器(A或B) 目的累加器(A或B) 16位长立即数
返回首页
图3-1 DP作为基地址的直接寻址方式
图3-2 SP作为基地址的直接寻址方式 返回本节
3.5 间接寻5.2 双操作数寻址
返回首页
3.5.1 单操作数寻址
表3-2列出了单数据存储器(Smem)操作数间接 寻址类型。
特殊的间接寻址方式有:
1.循环寻址
PORTR PORTW PA, Smem Smem , PA
端口地址(PA)寻址使用一个符号(符号地址) 或一个表示16位地址的立即数来给出外部I/O口地 址。例如:
PORTR FIFO ,*AR5;
返回本节
3.2.4 长立即数*(lk)寻址
长立即数*(lk)寻址用于所有支持单数据存储器 操作数(Smem)的指令。
WRITA
Smem
Smem
返回首页
3.4 直接寻址
在直接寻址方式中,指令中包含数据存储器地址 (dma)的低7位,这7位dma作为地址偏移量, 结合基地址(由数据页指针 DP 或堆栈指针 SP 给 出)共同形成16位的数据存储器地址。使用这种 寻址方式,用户可在不改变 DP 或 SP 的情况下, 对一页内的 128 个存储单元随机寻址。采用这种 寻址方式的好处是指令为单字指令,数据存储器 地址(dma)的低7位放在指令字中(如图3-1、 3-2所示)。
第3章 TMS320C54x的数据寻址方式
3.1 立即寻址 3.2 绝对寻址 3.3 累加器寻址 3.4 直接寻址 3.5 间接寻址 3.6 存储器映象寄存器寻址
3.7 堆栈寻址
寻址方式小结
TMS320C54x DSP提供以下7种基本数据寻址方式。
(1)立即数寻址
(2)绝对地址寻址 (3)累加器寻址
Smem
Xmem Ymem dmad pmad PA src dst
lk
3.1 立即寻址
在立即寻址方式中,指令中包括了立即操作数。
一条指令中可对两种立即数编码,一种是短立即 数(3、5、8或9位),另一种是16位的长立即数。 短立即数指令编码为一个字长,16位立即数的指 令编码为两个字长。 立即数寻址指令中在数字或符号常数前面加一个 “#”号,来表示立即数。
返回本节
3.3 累加器寻址
累加器寻址是用累加器中的数值作为一个地址读 写程序存储器。共有两条指令可以采用累加器寻 址: READA
返回首页
3.2.1 数据存储器(dmad)寻址
使用数据存储器寻址的指令有:
MVDK Smem, dmad MVKD dmad, Smem MVDM dmad, MMR MVMD MMR, dmad
数据存储器寻址使用符号(符号地址)或一个表 示16位地址的立即数来指明寻址的数据存储单元 的16位绝对地址。例如:
程序存储器(pmad)寻址使用符号(符号地址)或一个 表示 16 位地址的立即数来给出程序空间的地址。例如, 把程序存储器中标号为 TABLE 单元中的值复制到 AR7 所 指定的数据存储器中去,指令可写为: MVPD TABLE,*AR7; 返回本节
3.2.3 端口地址(PA)寻址
使用端口地址的指令有:
LD
#0,ARP
;ARP=0(#k3)
LD
LD LD
#3,ASM
#50,DP #1234,A
;ASM=3(#k5)
;DP=50(#k9) ;A=1234(#lk)
返回首页
3.2 绝对寻址
3.2.1 数据存储器(dmad)寻址
3.2.2 程序存储器(pmad)寻址 3.2.3 端口地址(PA)寻址 3.2.4 长立即数*(lk)寻址
2.倒序寻址(如表3-3所示)
表3-2 单数据存储器操作数间接寻址类型
循环缓冲区
Data Memory
Start_address = xxxxxxxxxxx00000 ARi
ARi
xxxxxxxxxxx00010
BK N=30=1 1 1 1 0
End_address = xxxxxxxxxxx11111
If 0=<index+step<BK
若 N=32, 起始地址的最低6位=000000 for N=30,起始地址的最低5位 =00000
访问循环缓冲区: 用N (nb bits) 初始化BK 选择1个 ARi 作为指针
在ARi中的有效起始地址低nb位为0。 结束地址 = 起始地址+N-1。
循环寻址的算法:
index=index+step
循环寻址
间接寻址中用%表示循环寻址方式
*ARi-%, *ARi+%, *ARi-0%, *ARi+0%, *ARi(lk)%
BK寄存器 存放循环缓冲区的长度N。 使用循环缓冲区之前,必须对BK初始化。 可以在不同地址安排多个循环缓冲区,但它们 的长度必须相同。
如果N表示为nb位二进制数,起始地址的最低( LSB) 的nb位必须为0: 例如:
SMAPLE,*AR5;
MVKD
返回本节
3.2.2 程序存储器(pmad)寻址
使用程序存储器寻址的指令有:
FIRS Xmem, Ymem, pmad MACP Smem, pmad, src MVPD pmad, Smem MACD Smem, pmad, src MVDP Smem, pmad
(4)直接寻址
(5)间接寻址
(6)存储器映射寄存器寻址
(7)堆栈寻址
表3-1 寻址指令中用到的缩写符号及其含义
缩写符号 含义 16位单数据存储器操作数 在双操作数指令及某些单操作数指令中所用的16位双数据存储 器操作数,从DB总线上读出 在双操作数指令中所用的16位双数据存储器操作数,从CB总线 上读出;在读同时并行写的指令中表示写操作数 16位立即数——数据存储器地址(0~65535) 16位立即数——程序存储器地址(0~65535) 16位立即数——I/O口地址(0~65535) 源累加器(A或B) 目的累加器(A或B) 16位长立即数
返回首页
图3-1 DP作为基地址的直接寻址方式
图3-2 SP作为基地址的直接寻址方式 返回本节
3.5 间接寻5.2 双操作数寻址
返回首页
3.5.1 单操作数寻址
表3-2列出了单数据存储器(Smem)操作数间接 寻址类型。
特殊的间接寻址方式有:
1.循环寻址
PORTR PORTW PA, Smem Smem , PA
端口地址(PA)寻址使用一个符号(符号地址) 或一个表示16位地址的立即数来给出外部I/O口地 址。例如:
PORTR FIFO ,*AR5;
返回本节
3.2.4 长立即数*(lk)寻址
长立即数*(lk)寻址用于所有支持单数据存储器 操作数(Smem)的指令。
WRITA
Smem
Smem
返回首页
3.4 直接寻址
在直接寻址方式中,指令中包含数据存储器地址 (dma)的低7位,这7位dma作为地址偏移量, 结合基地址(由数据页指针 DP 或堆栈指针 SP 给 出)共同形成16位的数据存储器地址。使用这种 寻址方式,用户可在不改变 DP 或 SP 的情况下, 对一页内的 128 个存储单元随机寻址。采用这种 寻址方式的好处是指令为单字指令,数据存储器 地址(dma)的低7位放在指令字中(如图3-1、 3-2所示)。
第3章 TMS320C54x的数据寻址方式
3.1 立即寻址 3.2 绝对寻址 3.3 累加器寻址 3.4 直接寻址 3.5 间接寻址 3.6 存储器映象寄存器寻址
3.7 堆栈寻址
寻址方式小结
TMS320C54x DSP提供以下7种基本数据寻址方式。
(1)立即数寻址
(2)绝对地址寻址 (3)累加器寻址
Smem
Xmem Ymem dmad pmad PA src dst
lk
3.1 立即寻址
在立即寻址方式中,指令中包括了立即操作数。
一条指令中可对两种立即数编码,一种是短立即 数(3、5、8或9位),另一种是16位的长立即数。 短立即数指令编码为一个字长,16位立即数的指 令编码为两个字长。 立即数寻址指令中在数字或符号常数前面加一个 “#”号,来表示立即数。