C28x系列DSP寻址方式详解_第1页
C28x系列DSP寻址方式详解_第2页
C28x系列DSP寻址方式详解_第3页
C28x系列DSP寻址方式详解_第4页
C28x系列DSP寻址方式详解_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、TMS320C2000系列包括C24x和C28x系列C24x系列建议使用LF24xx系列替代C24x系列,LF24xx 系列的价格比C24x便宜,性能髙于C24x,而且LF24xxA具有加密功能。C28x系列主要用于大存 储设备管理高性能的控制场合。 TMS320C3X系列包括C3x和VC33,主要推荐使用VC330C3x系列是TI浮点DSP的基础,不可能停 产,但价格不会进一步下调。 TMS320C5X系列巳不推荐使用,建议使用C24x或C5000系列替代。 TMS320C5000系列包括C54x和C55x系列。其中VC54xx还不断有新的器件出现,如:TMS320VC5471 (DSP+A

2、RM7) o C55x系列是TI的第三代DSP.功耗为VC54xx的1/6.性能为VC54xx的5倍.是 一个正在发展的系列。C5000系列是目前TIDSP的主流DSP,它涵盖了从低档到中高档的应用领 域目前也是用户最多的系列。 TMS320C6000系列包括C62xx、C67xx和C64xx。此系列是TI的高档DSP系列。其中C62xx系列 是定点的DSP.系列芯片种类较丰富是主要的应用系列。C67xx系列是浮点的DSP,用于需要高 速浮点处理的领域。C64xx系列是新发展.性能是C62xx的10倍。 系列是TI专门用于多媒体领域的芯片,它是C55+ARM9.性能卓越,非常适合于手持设备、

3、Internet终端等多媒体应用。 感谢作者总结 C28x系列DSP有四种基本寻址方式: 直接寻址一16位的寄存器DP用作,固定页指针(段指针),DP中存放当前变 量所在页的首地址,指令中的6位或7位二进制数给出变量的偏移量(段偏移量)。 用于访问固定地址的数据结构,如片上外设或C/C+中的全局变量和静态变量。 栈寻址一通过使用栈指针SP访问变量,在C28x中栈是从低地址向高地址增长的, SP始终指向下一个可用的空栈单元。SP值减去指令中6位二进制数给出的偏移 量为变量地址,或者该偏移量给出分别在压栈(或出栈)操作时SP需要后加(或 先减)的量。 间接寻址一32位的辅助寄存器XAR0、XAR7

4、用作通用32位数据指针。指令可以 进行直接的后加、先减/后减,或者通过三位二进制立即数给出对哪个寄存器操 作,也可以用另外一个16位辅助寄存器内容给出当前用的寄存器。 寄存器寻址一直接对寄存器内容操作,寄存器可以是操作的源或目的地。这就 使得C28x架构可以直接进行寄存器对寄存器的操作。 DSP其它的寻址方式: 数据/程序/I0空问立即寻址一存储器地址操作数直接嵌入在指令中。 程序空间间接寻址一某些指令可以使用某个间接指针来访问程序空间。因为 C28x CPU中存储器之一致的,因此这种寻址模式可以完成在同一条指令中同时 读两个操作数的操作。 说明:寻址模式由指令中的八位编码给出,状态寄存器ST

5、1中的寻址模式选择位 AM0DE给出了编译器所使用的编码方式。 AM()DE=O -复位时默认的寻址模式,也是C28x的C/C卄编译器使用的默认模式。 但某些寻址方式C2xLP器件不兼容,此时段偏移量由六位二进制数给出(C2xLP 器件是七位的),因此仅支持部分C2xLP器件的间接寻址方式。 AM()DE=1 -包含了 C2xLP器件全兼容的寻址模式。此时段偏移量为七位二进制 数给出,支持C2xLP器件所有的寻址方式。 注意:(l)C28x器件和C2xLP器件间接寻址指令的不同在于,C28x的指令中辅 助寄存器指针是隐含的,也就是指令中标明了对哪个寄存器操作。而在Cx2LP 的指令中,对哪个寄

6、存器操作是由3位的辅助寄存器指针ARP (在ST1中)给出 的,并且可以同时给出下一条指令要使用辅助寄存器指针(第三个操作数);(2) 在C28x的指令中,目的操作数总是在源操作数的左边。请看下例: 假如要完成这样的操作,把XAR4所指的数据读出加到AL中,随后把XAR4的内 容加一,C28x的指令为:ADD AL,*XAR4+; C2xLP的指令可以为:ADD AL,*+ (此时ARP=4) o而C2xLP的指令ADD AL,*+,ARP5则在完成上述操作的同时, 把ARP的内容更新为5,即令ARP指向ARP5。 具体的区别请参见TI的文档spru430d中第五章的表5-1。 操作符*和的作

7、用:*表示取后面的变量值或寄存器的内容作为地址,取该地址 所指向的存储空间的内容作为操作数。表示直接取后面的变量值或寄存器的内 容作为操作数。 如何改变编译器的处理模式: 编译器总是默认为AMODE=Ot通过两种方式改变编译器的处理方式,一种是命令 行参数法,当使用-v28时使编译器默认为AMODE=O模式,当使用-v28 -m20时默 认为AMODE=1模式。另一种是源文件中指定法,如下面的文件(假设编译器命令 行参数为-v28) ;文件开始 SETC AMODE : AMODE 位置一 .lp_amode ;通知编译器检查C27x/C28x的语法,该段代码只能用AMODE=1的寻 址方式

8、CLRC AMODE ; AMODE 位清零 .c28_amode ;通知编译器检查C28x的语法,该段代码只能用AMODE=O的寻址方 式 ;文件结束 DSP指令实例: DSP直接寻址(只能寻址C28x的低4M数据地址空间): (1) 6位二进制立即数方式,适用于AMODE=0,地址髙10位为0,地址次高16 位为DP的低16位,地址低6位为6位二进制立即数,可寻址DP以上的0到63 字的地址范围: ;VarA和VarB在同一个长度为64字的分页中,VarC和VarD同在另夕I、一个长度 为64字的分页中 MOVW DP,#VarA ;把变量VarA所在页的首地址载入段指针DP中 ADD A

9、L,VarA ;把变量VarA的内容加到AL中 MOV VarB.AL ;把AL的内容写进变量VarB中 MOVW DP,#VarC ; SUB AL,VarC ; MOV VarD.AL ; (2) 7位二进制立即数方式,适用于AMODE,地址髙10位为0,地址次高15 位为DP的低15:1位,地址低7位为7位二进制立即数,可寻址DP以上的0到 127字的地址范围: SETC AMODE .Ip amode MOVW DP,#VarA ADD AL,VarA MOV VarB,AL MOVW DP,#VarC SUB AL,VarC MOV VarD,AL 栈寻址(只能寻址C28x的低64k

10、数据地址空间): (2)*-SP6位二进制立即数方式,适用于AMODE=O,高16位地址为0,低16 位地址为SP-6位二进制立即数,SP不变,可寻址低于SP的0到63个字地址范 围: ADD AL,*-SP5;栈顶减5个字所指向的内容(16位)加到AL中,SP不变 MOV *-SP8,AL ; AL的內容(16位)写到栈顶减8个字所指向的位置,SP不 变 ADDL ACC,*-SP12;栈顶减12个字所指向的内容(32位)加到ACC中,SP 不变 MOVL *-SP34,ACC : ACC的内容(32位)写到栈顶减32个字所指向的位置, SP不变 (2)*SP卄方式,适用于AMODE=x,

11、16位操作时SP二SP+1, 32位操作时SP二SP+2, 高16位地址为0,低16位地址为SP: MOV *SP+,AL ; AL的內容(16位)压入栈顶 MOVL *SP卄,P ; P的内容(32位)压入栈顶 (3)*SP方式,适用于AM0DE=x, 16位操作时SP=SP1, 32位操作时SP=SP2, 高16位地址为0,低16位地址为SP: ADD AL,*SP ;栈顶内容弹出并加到AL中(16位) MOVL ACC,*SP ;栈顶内容弹出到ACC中(32位) C28x间接寻址: (1)*XARn+方式,适用于AMODE=x,ARP=n, 32位地址为XARn, 16位操作时 XARn

12、二XARn+1,32 位操作时 XARn二XARn+2: MOVL XAR2,#Arrayl ;载入 Array 1 的首地址到 XAR2 中 MOVL XAR3,#Array2 ;载入 Array2 的首地址到 XAR3 中 MOV ARO,#N-1 ;载入循环计数N到ARO中 Loop: MOVL ACC,*XAR2+ ;载入XAR2指向的内容到ACC中,XAR2后加1 MOVL *XAR3+,ACC ; ACC的内容写入XAR3指向的地址,XAR3后加1 BANZ Loop, ARO;循环到 ARO = 0, ARO 后加 1 (2)*XARn方式,适用于AMODE=x, ARP=n,

13、32位地址为XARn, 16位操作时 XARn二XARn-1,32 位操作时 XARn=XARn2: MOVL XAR2,#Arrayl+N*2 ;载入 Array 1 的末地址到 XAR2 中 MOVL XAR3,#Array2+N*2 ;载入 Array 1 的末地址到 XAR2 中 MOV ARO,#N-1 ;载入循环计数N到ARO中 Loop: MOVL ACC,*XAR2 ; XAR2先减1,载入XAR2所指向的内容到ACC中 MOVL *XAR3.ACC ; XAR3先减,ACC内容写入XAR3所指的位置 BANZ Loop,ARO;循环到 ARO = 0, ARO 后加 1 (3

14、)*+XARnARO 或(ARI)方式,适用于 AMODE=x, ARP 二 n, 32 位地址为 XARn +ARO (或ARI) , XARO (或XAR1)的低16位作为无符号数加到XARn中,忽略 高16位,可能会产生到XARn髙16位的溢出: MOVW DP,#ArraylPtr ;指向 Array 1 Ptr 的段 MOVL XAR2,ArraylPtr ;载入 Array 1 的首地址到 XAR2 中 MOVB XARO,#16 : ARO = 16, AROH = 0 MOVB XAR1,#68 ; ARI = 68, AR1H = 0 MOVL ACC,*+XAR2AR0;把

15、 Array 1 16和 Arrayl68内容互换,首先载入 Arrayl16内容到 ACC MOVL P,*+XAR2AR1;把 Ar rayl 68内容到 P MOVL *+XAR2ARl,ACC ;写入 ACC 内容到 Array 1 68 MOVL *+XAR2AR0,P ;写入 P 内容到 Array 1 16,完成互换 (4) *+XARn3位二进制立即数方式,适用于AMODE=x, ARP=n,32位地址为XARn +无符号3位二进制立即数,*XARn等价于*+XARn0: MOVW DP,#ArraylPtr ;指向 Array 1 Ptr 的段 MOVL XAR2,Array

16、lPtr ;载入 Array 1 的首地址到 XAR2 MOVL ACC,*+XAR22;把 Array 1 2和 Arrayl5内容互换,首先载入 Arrayl2 内容到ACC MOVL P,*+XAR25;把 Ar rayl 5內容到 P MOVL *+XAR2 5 , ACC ;写入 ACC 内容到 Ar rayl 5 MOVL *+XAR22,P ;写入P内容到Array 1 2,完成互换 循环间接寻址: DSP寄存器寻址: (1)32位操作,使用寄存器ACC, XT, P, XARn,当人8作为目的操作数时, 可能会影响Z, N, V, C, OVC标志位。 (2)16 位操作,使用

17、寄存器AL, AH, PL, PH, TH, SP, ARn,当人1,或 AH作为目的操作数时,可能会影响Z, N, V, C, OVC标志位。对应的高16位 或低16位不受影响。 数据/程序/I0空间立即寻址: (1)* (16位二进制立即数)方式,地址的高16位为0,低16位为16位二进 制立即数。当该指令连续使用时,每次地址都会后加。只能寻址低64k数据空间。 可用指令: MOV locl6,*(0:16bit) ; locl6 = 0: 16bit MOV *(0:16bit),locl6 ; locl6 = 0:16bit (2)*(PA)方式,地址的髙16位为0,低16位为PA中的

18、16位二进制立即数。 当该指令连续使用时,每次地址都会后加。该模式寻址时,在访问10空间时, 10选通信号被置位。用数据地址线访问10空间。可用指令: OUT *(PA),locl6 ; I0space0:PA = locl6 UOUT *(PA),locl6 ; I0space0:PA = locl6 (unprotected) IN locl6,*(PA) ; locl6 = I0space0:PA (3) 0:pma方式,22位的地址高6位为0,低16位为16位二进制立即数pma, 当该指令连续使用时,每次地址都会后加。只能寻址低64k程序空间。可用指令: MAC P, locl6,0:

19、 pma ; ACC = ACC + P PM, P = loclG I * ProgSpace0: pma (4) *(pma)方式,22位的地址髙6位为0,低16位为16位二进制立即数pma, 当该指令连续使用时,每次地址都会后加。只能寻址低64k程序空间。可用指令: XPREAD locl6,*(pma) ; locl6 = ProgSpace0 x3F:pma XMACP,locl6,*(pma) : ACC = ACC + P PM, P= locl6 * ProgSpace0 x3F: pma XMACD P,locl6,*(pma) ; ACC = ACC + P PM, P =

20、 locl6 * ProgSpace0 x3F:pma, locl6+l = locl6 DSP程序空间间接寻址: (1) * (AL)方式,22位的地址高6位为0 x3F,低16位为AL,当该指令连续 使用时,AL的内容被复制到一个影子寄存器中,并在每次地址后加,AL的内容 不变。只能寻址低64k程序空间。可用指令: XPREAD locl6,*AL ; locl6 = ProgSpace0 x3F:AL XPWRITE *AL,locl6 ; ProgSpace0 x3F:AL = locl6 (2) *XAR7方式,22位地址为XAR7,当在指令XPREAD或XPWRITE中连续使用 时

21、,XAR7的内容被复制到一个影子寄存器中,并每次地址后加,XAR7的内容不变。 其它指令则不会。可用指令: MAC P,locl6,*XAR7 ; ACC = ACC + P PM,P = locl6 * ProgSpace*XAR7 DMAC ACC:P,loc32,*XAR7 ; ACC = (loc32.MSW * ProgSpace*XAR7. MSW) PM, ;P = (loc32.LSW * ProgSpace*XAR7. MSW) PM QMACL P,loc32,*XAR7 ; ACC = ACC + P PM, ;P = (loc32 * ProgSpace*XAR7) 3

22、2 IMACL P,loc32,*XAR7 ; ACC = ACC + P, ;P = (loc32 * ProgSpace*XAR7) PM PREAD locl6,*XAR7 ; locl6 = ProgSpace*XAR7 PWRITE *XAR7,locl6 ; ProgSpace*XAR7 = locl6 (2) *XAR7+方式,22位地址为XAR7, 16位操作时XAR7二XAR7+1, 32位操作 时XAR7二XAR7+2,指令重复时,地址后加。可用指令: MAC P, locl6,*XAR7+ ; ACC = ACC + P PM, P = locl6 * ProgSpace

23、*XAR7+ DMAC ACC:P,loc32,*XAR7+ ; ACC=(loc32. MSW * ProgSpace *XAR7+. MSW) PM, ;P=(loc32.LSW * ProgSpace*XAR7 +. MSW)PM QMACL P,loc32,*XAR7卄;ACC = ACC + P PM, P = (loc32 * ProgSpace*XAR7+) 32 IMACL P, loc32,*XAR7+ ; ACC = ACC + P, P = (loc32 * ProgSpace*XAR7+) PM DSP字节寻址: *+XARn ARO, *+XARn ARO, *+XARn 3 位二进制立即数,32 位地址为 XARn + 偏移 量(AR0/AR1/3位二进制立即数),如果偏移量为偶数值,则访问16位存储器 位置的低有效位,高有效位不变;如果为奇数,则访问16位存储器位置的髙有 效位,低有效位不变。其它所有寻址模式,只访问访问寻址位置的低有效位,不

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论