C28x系列DSP寻址方式详解

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

C28x系列DSP寻址方式详解

1.TMS320C2000 TMS320C2000系列包括C24x和C28x系列。C24x系列建议使用LF24xx系列替代C24x系列,LF24xx系列的价格比C24x便宜,性能高于C24x,而且LF24xxA具有加密功能。 C28x 系列主要用于大存储设备管理,高性能的控制场合。

2.TMS320C3x TMS320C3x系列包括C3x和VC33,主要推荐使用VC33。C3x系列是TI浮点DSP的基础,不可能停产,但价格不会进一步下调。

3.TMS320C5x TMS320C5x系列已不推荐使用,建议使用C24x或C5000系列替代。

4.TMS320C5000 TMS320C5000系列包括C54x和C55x系列。其中VC54xx还不断有新的器件出现,如:TMS320VC5471(DSP+ARM7)。 C55x系列是TI的第三代DSP,功耗为VC54xx的1/6,性能为VC54xx的5倍,是一个正在发展的系列。 C5000系列是目前TI DSP的主流DSP,它涵盖了从低档到中高档的应用领域,目前也是用户最多的系列。

5.TMS320C6000 TMS320C6000系列包括C62xx、C67xx和C64xx。此系列是TI的高档DSP系列。其中C62xx系列是定点的DSP,系列芯片种类较丰富,是主要的应用系列。 C67xx系列是浮点的DSP,用于需要高速浮点处理的领域。 C64xx系列是新发展,性能是C62xx的10倍。

6.OMAP系列是TI专门用于多媒体领域的芯片,它是C55+ARM9,性能卓越,非常适合于手持设备、Internet终端等多媒体应用。

感谢作者总结

C28x系列DSP有四种基本寻址方式:

直接寻址- 16位的寄存器DP用作,固定页指针(段指针),DP中存放当前变量所在页的首地址,指令中的6位或7位二进制数给出变量的偏移量(段偏移量)。用于访问固定地址的数据结构,如片上外设或C/C++中的全局变量和静态变量。

栈寻址-通过使用栈指针SP访问变量,在C28x中栈是从低地址向高地址增长的,SP始终指向下一个可用的空栈单元。SP值减去指令中6位二进制数给出的偏移量为变量地址,或者该偏移量给出分别在压栈(或出栈)操作时SP需要后加(或先减)的量。

间接寻址- 32位的辅助寄存器XAR0~XAR7用作通用32位数据指针。指令可以进行直接的后加、先减/后减,或者通过三位二进制立即数给出对哪个寄存器操作,也可以用另外一个16位辅助寄存器内容给出当前用的寄存器。

寄存器寻址-直接对寄存器内容操作,寄存器可以是操作的源或目的地。这就使得C28x架构可以直接进行寄存器对寄存器的操作。

DSP其它的寻址方式:

数据/程序/IO空间立即寻址-存储器地址操作数直接嵌入在指令中。

程序空间间接寻址-某些指令可以使用某个间接指针来访问程序空间。因为

C28x CPU中存储器之一致的,因此这种寻址模式可以完成在同一条指令中同时读两个操作数的操作。

说明:寻址模式由指令中的八位编码给出,状态寄存器ST1中的寻址模式选择位

AMODE给出了编译器所使用的编码方式。

AMODE=0 -复位时默认的寻址模式,也是C28x的C/C++编译器使用的默认模式。但某些寻址方式C2xLP器件不兼容,此时段偏移量由六位二进制数给出(C2xLP 器件是七位的),因此仅支持部分C2xLP器件的间接寻址方式。

AMODE=1 -包含了C2xLP器件全兼容的寻址模式。此时段偏移量为七位二进制数给出,支持C2xLP器件所有的寻址方式。

注意:(1)C28x器件和C2xLP器件间接寻址指令的不同在于,C28x的指令中辅助寄存器指针是隐含的,也就是指令中标明了对哪个寄存器操作。而在Cx2LP

的指令中,对哪个寄存器操作是由3位的辅助寄存器指针ARP(在ST1中)给出的,并且可以同时给出下一条指令要使用辅助寄存器指针(第三个操作数);(2)在C28x的指令中,目的操作数总是在源操作数的左边。请看下例:

假如要完成这样的操作,把XAR4所指的数据读出加到AL中,随后把XAR4的内容加一,C28x的指令为:ADD AL,*XAR4++;C2xLP的指令可以为:ADD AL,*++(此时ARP=4)。而C2xLP的指令ADD AL,*++,ARP5则在完成上述操作的同时,把ARP的内容更新为5,即令ARP指向ARP5。

具体的区别请参见TI的文档spru430d中第五章的表5-1。

操作符*和@的作用:*表示取后面的变量值或寄存器的内容作为地址,取该地址所指向的存储空间的内容作为操作数。@表示直接取后面的变量值或寄存器的内容作为操作数。

如何改变编译器的处理模式:

编译器总是默认为AMODE=0,通过两种方式改变编译器的处理方式,一种是命令行参数法,当使用-v28时使编译器默认为AMODE=0模式,当使用-v28 -m20时默认为AMODE=1模式。另一种是源文件中指定法,如下面的文件(假设编译器命令行参数为-v28)

; 文件开始

...

...

...

SETC AMODE ; AMODE位置一

.lp_amode ; 通知编译器检查C27x/C28x的语法,该段代码只能用AMODE=1的寻址方式

...

...

...

CLRC AMODE ; AMODE位清零

.c28_amode ; 通知编译器检查C28x的语法,该段代码只能用AMODE=0的寻址方式

...

...

...

; 文件结束

DSP指令实例:

DSP直接寻址(只能寻址C28x的低4M数据地址空间):

(1)@6位二进制立即数方式,适用于AMODE=0,地址高10位为0,地址次高16位为DP的低16位,地址低6位为6位二进制立即数,可寻址DP以上的0到63字的地址范围:

; VarA和VarB在同一个长度为64字的分页中,VarC和VarD同在另外一个长度为64字的分页中

MOVW DP,#VarA ; 把变量VarA所在页的首地址载入段指针DP中

ADD AL,@VarA ; 把变量VarA的内容加到AL中

MOV @VarB,AL ; 把AL的内容写进变量VarB中

MOVW DP,#VarC ;

SUB AL,@VarC ;

MOV @VarD,AL ;

(2)@7位二进制立即数方式,适用于AMODE=1,地址高10位为0,地址次高15位为DP的低15:1位,地址低7位为7位二进制立即数,可寻址DP以上的0到127字的地址范围:

SETC AMODE

.lp_amode

MOVW DP,#VarA

ADD AL,@@VarA

MOV @@VarB,AL

MOVW DP,#VarC

SUB AL,@@VarC

MOV @@VarD,AL

栈寻址(只能寻址C28x的低64k数据地址空间):

(2) *-SP[6位二进制立即数]方式,适用于AMODE=0,高16位地址为0,低16

相关文档
最新文档