好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

DSP原理及应用--TMS320C54x的数据寻址方式.ppt

63页
  • 卖家[上传人]:大米
  • 文档编号:602839974
  • 上传时间:2025-05-17
  • 文档格式:PPT
  • 文档大小:603.50KB
  • / 63 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第,3,章,TMS320C54x,的,数据寻址方式,1,七种基本的寻址方式:,立即寻址,绝对寻址,累加器寻址,直接寻址,间接寻址,存储器映象寄存器寻址,堆栈寻址,2,不同的寻址方式为编程提供了极大的柔性操作空间,可以根据程序要求采用不同的寻址方式,以便提高程序的速度和代码效率引言,1,、寻址方式的定义,2、寻址方式的选择,指令的寻址方式是指:当硬件执行指令时,寻找指令所指定的参与运算的操作数的方法,3,3,、寻址中遇到的缩写符号及其含义,缩写符号,含义,Smem,16,位单数据存储器操作数,Xmem,在双操作数指令及某些单操作数指令中所用的,16,位双数据存储器操作数,从,DB,总线上读出,Ymem,在双操作数指令中所用的,16,位双数据存储器操作数,从,CB,总线上读出;在读同时并行写的指令中表示写操作数,dmad,16,位立即数,数据存储器地址(,065535,),pmad,16,位立即数,程序存储器地址(,065535,),PA,16,位立即数,I/O,口地址(,065535,),src,源累加器(,A,或,B,),dst,目的累加器(,A,或,B,),lk,16,位长立即数,4,#,立即数说明,;,直接存储器寻址,;,*,间接寻址符,变量名汇编后表示其所在的单元地址标号;,有括号的变量名表示其所在的单元地址存储的内容;,说明,5,1,、特点,3,、长立即数和短立即数的指令代码格式,单字指令:,16,位,=,操作码,+,短立即数操作数,双字指令:,32,位,=16,位操作码,+16,位长立即数操作数,一、立即寻址,2,、立即数分类,短立即数:,3,、,5,、,8,和,9,位,长立即数:,16,位(用,lk,表示),指令中含有立即数操作数,6,例如:,RPT,指令,注:该指令支持,8,位和,16,位指令,解释:将紧跟在后面的指令执行,99+1,次,指令代码格式:,8,位的操作码,+8,位的操作数,RPT#0FFFH,解释:将紧跟在后面的指令执行,1000H,次,指令代码格式:,16,位操作码,+16,位操作数,RPT#99,7,注意:在立即数寻址中必须在立即数前加“,#”,LD#80H,,,A,将立即数,80H,装入累加器,A,将地址为,80H,单元中的内容装入累加器,A,中,例如:,LD 80H,,,A,8,允许立即寻址的指令有:,9,特点:,操作数是,16,位单元地址或,16,位符号常数,提问:,指令代码至少有几个字?,说明:,这,16,位单元地址或,16,位符号常量可以是数据存储器地址、程序存储器地址、端口地址和,16,为长立即数,分类:,(,1,)数据存储器地址(,damd,)寻址,(,2,)程序存储器地址(,pmad,)寻址,(,3,)端口(,PA,)地址寻址,(,4,)长立即数*(,lk,)寻址,二、绝对寻址,10,MVDK,Smem,,,dmad,;(,Smem,),dmad,MVKD,dmad,,,Smem,;(,dmad,),Smem,MVDM,dmad,,,MMR,;(,dmad,),MMR,MVMD MMR,dmad,;(,MMR,),dmad,1、数据存储器地址(dmad)寻址,用一个符号或一个数来确定数据空间的一个地址,有以下几条指令:,11,dmad,是用一个符号或一个数表示的数据空间地址,这,4,条指令均可重复执行,当重复执行时,,dmad,自动加,1,Smem,是一个单数据存储器操作数,MMR,是存储器映射寄存器,说明,12,语法:,MVDK,Smem,dmad,操作数:,Smem,:Single data-memory operand,0dmad65 535,(一个数或符号),执行:,说明:,EAR:EAB address register,13,例1:,例2:,14,用一个,16,位符号或一个,16,位的数来表示一个,程序,空间地址。

      2、程序存储器地址(pmad)寻址,有以下几条指令,:,15,pmad,是用一个符号或一个数表示的数据空间地址指令,MVDP,MVPD,,,MACP,MACD,FIRS,均可重复执行,.,单独执行时,需,3,4,个时钟周期当重复执行时,,pmad,自动加,1,,指令只需,1,个时钟周期说明,16,例,1,:,17,例,2,:,18,例,3,:,19,用一个符号或一个,16,位的数来确定,I/O,地址,(,端口地址、,PA,地址)有以下,2,条指令:,注:,PA,是用一个符号或一个数表示的端口地址地址0,PA,65535,3、端口地址(PA)寻址,20,例,1,:,21,例,2,:,22,允许所有使用,Smem,寻址的指令去访问数据空间的任意单元而不改变数据页指针(,DP,)的值,也不用对,ARx,进行初始化,用一个符号或一个常数来确定数据存储器中的一个地址,例如:,LD *,(,BUFFER,),,A,4、长立即数*(,lk)寻址,23,三、累加器寻址,特点:,用累加器中的数值作为,程序,地址来读写,程序存储器适用范围:,可用来,完成,程序存储器单元的数据,与,数据存储器单元的数据,进行交换,有两条指令,:,24,除了,C548,和,C549,用累加器的低,23b,作为程序存储器的地址,其他,DSP,芯片都是用低,16b,作为程序存储器的地址。

      这,2,条指令可重复执行,当重复执行时,便成为单周期指令,,A,的值自动加,1,,可连续复制数据说明,25,格式:,READA,Smem,将,A,的内容作为地址读程序存储器的内容并存入,Smem,所在的数据单元,执行:,26,例:,27,七种基本的寻址方式:,立即寻址,绝对寻址,累加器寻址,直接寻址,间接寻址,存储器映象寄存器寻址,堆栈寻址,28,1,、定义,3,、问题,四、直接寻址,2,、说明,基地址可以是,9,位的数据页指针,DP,,,也可以是,16,位的堆栈指针,SP,操作数地址,=,基地址,+,地址偏移量,到底是用,DP,还是,SP,来产生实际地址呢?,16,位,Dmad,的低,7,位,29,例,如,:,LD,x,A,;,(,DP+x,的低,7,位地址),A,4,、地址产生方法,由,ST1,的编译模式位,CPL,确定基地址,CPL=0:,前,9b,为,DP,后,7b,为本页的偏移地址,CPL=1:SP+,偏移地址,30,CPL=0:,当前数据页寻址,,DP:offset,CPL=1:,堆栈页寻址,,SP+offset,31,若,CPL=0,DP=40h,,则直接寻址范围为:,DP,低,7,位,实际地址,寄存器内容,0 0100 0000,000 0000,0 x2000,0 0100 0000,0 0100 0000,111 1111,0 x207F,数据空间:,2000h,207Fh,,共,128,个单元,如超过这个地址范围,需修改,DP,或采用其它寻址方式。

      32,若,CPL=1,SP=40h,,则直接寻址范围为:,SP,指令低,7,位,实际地址,寄存器内容,SP40h,000 0000,40h,SP40h,SP40h,111 1111,BFh,数据空间:,40h,BFh(SP,往高地址偏移,7,位地址值,),,共,128,个单元如超过这个地址范围,需修改,SP,或采用其它寻址方式33,基于,DP,的直接寻址示例:,34,.,bss,x,1,;,三个变量各为一个字的存储 空间(,16,位),.,bss,y,1,.,bss,z,1,.text,start:,LD#x,DP,;,为了使用直接寻址,先装载,x,的,页面,DP,值,ST#1,x,;,变量赋初值,,x=1,ST#2,y,;y=2,LDx,A,;,将,x,的值装载至累加器,addy,A,;,累加器加上,y,的值,stl,A,z,;,将,AL,的值存放到变量,z,直接寻址程序示例:完成,z=,x+y,35,五、间接寻址,定义:,适用范围:,优点:,分类:,操作数的地址放在辅助寄存器中,而这个地址是由,AR0AR7,和,ARAU0,ARAU1,进行无符号数算术运,算产生的,用在需要存储器地址以步进方式连续变化的场合,1),可以提供循环寻址和位倒序寻址,2),可以进行双操作数寻址,比较灵活,单操作数寻址:一次访问一个存储单元,双操作数寻址:同时可以访问两个存储单元,36,单操作数寻址指令格式:,1,、单操作数寻址,有两种特殊的寻址方式:,循环寻址,位倒序寻址,用来完成存储单元中,16,位单数据的读写操作。

      15,8,7,6,3,2,0,操作码,I,1,MOD,ARF,指令的,8,位操作码,指令的标识符,表示指令为间接寻址,4,位的方式域,用来定义间接寻址的类型,3,位辅助寄存器域,用来定义所使用的辅助寄存器,37,单数据存储器操作数间接寻址类型,38,39,40,说明:,在,MOD,中以,%,为后缀的表示循环寻址,可用在单也可用在双操作数寻址中,注明:,BK,:,循环缓冲区大小寄存器,R,:,循环缓冲区的大小,N,:,R,化为二进制所占的位数,ARx,:,象一个指针指向,BK,的某个单元,EFB,:,循环缓冲区的有效基地址,EOB,:,循环缓冲区的尾地址,INDEX,:,循环缓冲区的索引,Step,:,步长,(,1,)循环寻址,41,EFB,:,循环缓冲区的有效基地址,EOB,:,循环缓冲区的尾地址,INDEX,:,循环缓冲区的索引,Step,:,步长,42,例如:,1,),R=31=11111B,则:,N=5,2,),R=32=100000,则:,N=6,43,PORTR PA1,,*,AR6,;,LD *AR6,,,A,;,STL A,,*,AR4+%,;,MAC *AR4+0%,,*,AR5+0%,,,A,;,STH A,,*,AR7+,;,例:翻译下列指令,44,循环寻址示例:从,1,开始,依次加,1,到循环缓冲区,.global start,;,定义程序入口地址,.,mmregs,;,定义映射寄存器,.,bss,x,16,;,x,分配,16,个单元,首地址在,cmd,中,.text,start,:,STM#16,BK,STM#x,AR1,LD#0,A,add_start,:,ADD#1,A,STLA,*AR1+%,B,add_start,45,若,x,首地址为:,0 x2000,,则执行,16,次的结果为左图所示,再执行,16,次的结果如右图所示。

      46,适用于,fft,算法中的倒位序寻址,,在间接寻址中用*,ARx+0B,或*,ARx-0B,表示倒位序寻址,说明:,ARx,指向存储器的某个单元,AR0,中放,N,的一半(,N,为,FFT,的点数),实际地址,=*ARx+0B,(,2,)倒位序寻址,倒位序相加,47,AR0,的值为(,0000 1000B,)AR1,表示在存储器中数据的基地址(为,0110 1000B,),进位方式为:,0110,1,000,+0000,1,000,0110,01,00,以,16,点,FFT,为例:,利用以下两条语句可以向外设口(端口地址为,PA,)输出,整序后的,FFT,变换结果:,RPT#15,;,重复执行下条指令,15+1,次,PORTW *AR1+0B,,,PA,;,向外设口,PA,输出整结果,48,位倒序对,FFT,变换结果的序号调整:,AR1,修改循环值,存储单,元地址,整序前,FFT,变换结果,位倒序,AR1,更新的地址值,AR0=0000 1000B,整序后,PA,输出的,FFT,变换结果,0,0000,X(0),0000,0110 0000,X(0),1,0001,X(8),1000,0110 1000,X(1),2,0010,X(4),0100,0110 0100,X(2),3,0011,X(12),1100,0110 1100,X(3),4,0100,X(2),0010,0110 0010,X(4),5,0101,X(10),1010,0。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.