D SP 芯片应用系列讲座(二)
第3讲 TM S 320C 28x 的指令系统与寻址方式
Ξ
郭国良1,闫佩君2,张雄伟3
(1.解放军理工大学通信工程学院研究生1队,江苏南京210007;
2.解放军理工大学通信工程学院研究生5队;
3.解放军理工大学通信工程学院电子信息工程系)摘 要:文中分类介绍了T I 公司新近推出的TM S 320C 28x 系列32位定点D SP 芯片的指令系统和寻址方
式。TM S 320C 28x 系列D SP 芯片的指令系统和寻址方式可以对以前的C 2000系列D SP 兼容,又增加了不少新特性。文中重点介绍了这些新增特性,并举例说明了每一类指令和寻址方式。
关键词:指令系统;寻址方式;数字信号处理器
中图分类号:TN 911.72文献标识码:A 文章编号:CN 3221289(2005)022*******
Ins truc tions a nd A dd re s s ing M ode s of T MS 320C 28x DS P
GUO Guo 2liang 1,YA N P ei 2jun 2,ZH A N G X iong 2w ei 3
(1.Po stgraduate T eam 1I CE ,PLAU ST ,N anjing 210007,Ch ina ;2.Po stgraduate T eam 5I CE ,PLAU ST ;
3.D epartm ent of E lectronic Info r m ati on Engineering I CE ,PLAU ST )
A bs tra c t :T h is paper in troduced the assem b ly language in structi on s and the addressing
m odes of the TM S 320C 28x 322b it fixed 2po in t digital signal p rocesso r developed by T I recen tly .
Com pared w ith the fo r m er C 2000series ,TM S 320C 28x series p rovides m any new featu res of the assem b ly language in structi on s and the addressing m odes w ith em phasis on the new featu res .
Exam p les w ere p rovided fo r each k ind of in structi on s and the address m odes .
Ke y w o rds :in structi on ;addressing m ode ;D SP
在D SP 开发应用中,熟悉D SP 芯片的指令系统和寻址方式是进行D SP 开发的基础。对于已经掌握了D SP 开发方法的人员来讲,如果能够充分利用D SP 所提供的寻址方式并优化使用指令系统,则对提高D SP 程序的运行效率有很大的帮助[1]。
1 T M S 320C 28x 指令系统和寻址方式的特点
TM S 320C 28x 系列D SP 芯片在指令系统和寻址方式上既提供了对以往芯片的兼容性,又具有不少新增加的特性。
(1)兼容性。TM S 320C 28x 系列D SP 芯片是C 2000系列D SP 芯片的一个新的分支。
由于在芯片的内核上存在着一定的继承关系,TM S 320C 28x 系列D SP 芯片对较早的C 2000系列的D SP 芯片的指令可以大部 第26卷第2期
 2005年6月军 事 通 信 技 术Journal of M ilitary Comm unicati ons T echno logy V o l .26N o.2 Jun .2005 
Ξ收稿日期:2004211204
作者简介:郭国良(1981-),男,硕士生.
分兼容,其寻址方式也可以工作在C 2000兼容模式上。特别是,TM S 320C 28x 系列D SP 芯片本身既可以运行在C 27x 模式上,又可以运行在C 28x 模式上。也就是说,对于以前开发的C 2000的D SP 应用程序,只需要
做少量修改或者不作修改(对TM S 320C  F 24x 系列芯片)就可以在TM S 320C 28系列芯片上运行[2]。
(2)新增特性。TM S 320C 28x 系列D SP 芯片新增加了一些功能强大的指令。
例如,可以在单时钟周期内完成32位乘法的系列指令,对N 次重复的乘累加运算,只需要N +2个时钟周期的乘累加系列指令,可以在单时钟周期内完成对64位整数的逻辑位移和算术位移的系列指令等。在寻址模式上,则增加了一些独特的寻址特性,例如可以配置的偏移地址宽度等。这些新增加的指令和寻址模式在一定程度上提高了芯片的处理性能和应用灵活性。下面对TM S 320C 28x 系列D SP 芯片的指令系统和寻址模式分别加以介绍。2 T M S 320C 28x 的指令系统
TM S 320C 28x 提供了十分丰富的指令系统,支持32位操作。从功能上可以分为配置指令、
算术指令、逻辑指令、程序控制指令以及装载与存储指令等5大类,总共有300多条指令。
2.1 配置指令
配置指令主要用来对D SP 芯片的工作模式、片上外设等进行配置,使D SP 芯片工作于开发者所希望的工作模式。一般来讲,配置指令是通过对特定的配置寄存器进行操作来完成其功能的。常用的两个配置指令是SETC 和CL RC ,前者将相应的寄存器位设置为1,后者将相应的寄存器位设置为0。此外还有许多其它的命令也可以完成配置命令。下面以配置工作模式为例来介绍配置指令的使用。
TM S 320C 28x 系列D SP 芯片加电之后,默认进入的工作模式是C 27x 目标兼容模式(OBJM OD E =0,AM OD E =0),为了使其能够工作在C 28x 模式(OBJM OD E =1,AM OD E =0),需要在程序中加入相应的指令。下面两段程序均可以完成这个工作。
;重启后将D SP 设置到C 28x 模式:
R eset :
  SETC OBJM OD E            ;设置C 28x 目标模式
  CL RC AM OD
;设置C 27x  C 28x 指令寻址模式.c 28-amode ;告诉汇编器是C 27x  C 28x 指令寻址模式
  SETC M 0M 1M A P
;设置RAM 或
;重启后将D SP 设置到C 28x 模式:
R eset :
  C 28OBJ
;设置C 28x 目标模式  C 28ADDR
;设置C 27x  C 28x 指令寻址模式.c 28-amode ;告诉汇编器是C 27x  C 28指令寻址模式
  C 28M A P
;设置RAM ……
在上面的程序中,SETC OBJM OD E 与C 28OBJ 完成的功能一样,它们执行的结果都是将CPU 的ST 1寄存器的OBJM OD E 位置为1,在执行这个指令后的第5个时钟周期开始,CPU 进入C 28x 目标模式;CL RC AM OD E 与C 28ADDR 完成的功能一样,它们执行的结果都是将ST 1寄存器的AM OD E 位置为0,从下一个时钟周期开始,D SP 进入C 27x  C 28x 指令寻址模式。
2.2 算术指令
算术指令是指用于算术运算的相关指令,包括加法、减法、乘法、乘累加、乘累减以及其它一些专用指令。值得一提的是,由于内核的增强特性,TM S 320C 28x 系列D SP 芯片支持32位硬件乘法,也就是说,它可以单
17 第2期             郭国良等:TM S 320C 28x 的指令系统与寻址方式 
27军 事 通 信 技 术                 2005年 
周期完成一个32位×32位的定点乘法或者乘累加运算,或者单周期完成两个16位×16位的定点乘累加运算。下面以32位×32位定点乘法为例,介绍一下算述指令的使用。先来看下面的一段程序。
;int32X[N]; ∥数据
;int32C[N]; ∥系数(存在低4M)
;int64sum=0;
;fo r(i=0,i<N;i++)
;
sum=sum+(X[i]3C[i]µ5;调用子程序的例子
;计算低32比特:
  M OVL XA R2,#X           ;XA R2=X的首地址
  M OVL XA R7,#C;XA R7=C的首地址
  SP M -5;设置乘积右移5位
  Z A PA;A CC,P,OV CU设置为0
  R PT #(N-1);重复执行下一条指令N次
  ‖I M A CL P,3XA R2++,XA R7++;OV CU:A CC=OV CU:A CC+P
;P=(X[i])3C[i])µ5
;i++
  ADDUL A CC,@P;OV CU:A CC=OV CU:A CC+P
  M OVL@sum+0,A CC;存储低32位的结果到sum中
;计算高32比特:
  M OVU@AL,OV C;A CC=OV CU(进位数)
  M OVB A H,#0
  M PYB P,T#0;P=0
  M OVL XA R2,#X;XA R2=X的首地址
  M OVL XA R7,#C;XA R7=C的首地址
  R T P#(N-1);重复执行下一条指令N次
  ‖QM A CL P,3XA R2++,XA R7++;A CC=A CC+Pµ5,
;p=(X[i]3C[i])=µ32,
;i++
  ADDL A CC,PνP M;A CC=A CC+Pµ5
  M OVL@sum+2,A CC;存储高32的结果到sum中
上面的程序完成的功能是32位×32位乘累加运算,并保留64位结果。从上面的程序可以看出,保留64位结果的乘法运算需要两个步骤完成。第一步使用的是I M A CL指令,它完成的是32位有符号数的乘累加运算,并保留低32位;第二步使用的是QM A CL指令,它完成的是32位有符号数的乘累加运算,并保留高32位。进行32位×32位乘法,并保留64位结果必须要分两次进行,这是由TM S320C28x系列D SP芯片的硬件乘法器的结构所决定的。
2.3 逻辑指令
逻辑指令包括与、或、异或、移位和测试等指令。C28x系列芯片除了提供C24x系列D SP支持的各种逻辑指令外,还支持64位的逻辑运算,共提供了9个支持64位逻辑运算的逻辑指令。下面以64位逻辑右移指令(L SR64)为例,介绍一下C28x系列芯片所支持的64位逻辑运算。先来看下面的程序。
;将64位变量V ar64右移10位
  M OVL A CC,@V ar64+2;将变量V ar64的高32位装入A CC寄存器
  M OVL P,@V ar64+0;将变量V ar64的低32位装入P寄存器
  L SR64 A CC:P,#10;将A CC:P内的值右移10位
  M OVL @V ar64+2,A CC;将右移结果的高32位存入变量V ar64中去
  M OVL @V ar64+0,P;将右移结果的低32位存入变量V ar64中去
在上面的程序中,前面两条指令进行右移操作的准备工作,后面两条指令进行右移操作结果的保存工
作,L SR 64指令完成逻辑右移操作。逻辑右移操作的运行结果是,右移之后左边空出的位补零,最后移出的一位保存在ST 0寄存器的C 位(Carry b it ),其它移出的位丢掉。
2.4 程序控制指令
程序控制指令主要是指用来完成程序跳转控制、子程序调用和返回、指令和指令块循环、中断处理等功能的相关指令。C 28x 系列芯片提供了丰富的程序控制指令,这使得开发人员可以灵活地在程序中设置各种跳转,可以进行模块化的程序设计,提高程序的可读性和可维护性。
下面以一种子程序调用指令为例,介绍一下程序控制指令的使用。先来看下面的一段程序。
;利用R PC 寄存器来调用子程序Func A ;
  L CR Func A
;调用子程序Func A ,返回地址放在R PC 寄存器里面  …
;其它程序  …
;其它程序  Func A :
;子程序A :  …
;子程序A 的处理指令  L R ETR ;利用R PC 寄存器里的地址进行返回
这段程序采用的是利用R PC (R etrun P rogram Coun ter )寄存器来进行子程序调用和返回的方法。其中,L CR 指令和L R ETR 指令必须运行在C 28x 模式下,它们执行需要的时间都是4个时钟周期。执行L CR 指令完成的功能是先将当前的R PC 寄存器的值压入堆栈,然后将L CR 下一条指令的地址装载到R PC 寄存器里去,最后将需要跳转到的子程序的第一条指令的地址装载到PC 寄存器里面去。执行L R ETR 指令完成的功能是先将当前R PC 寄存的值装载到PC 寄存器里去,然后再从堆栈里面恢复调用子程序以前的R PC 的值。这样,L CR 指令和L R ETR 指令配合使用可完成一次子程序的调用。
2.5 装载和存储指令
装载和存储指令一般用在算术运算和逻辑运算的前后,给相应的寄存器转载需要运算的数或包含有需要运算的数的地址,或将运算的结果存储到相应的存储单元里面去。这一类的指令总的来说使用起来非常简便。下面是这类指令的一些例子。
  M OV  A CC ,@V ar A ν#10
;将变量V ar A 左移10位后转载到累加器里面去  M OV  A H ,3+XA R 0[0]
;将XA R 0所指向的地址单元里的内容转载到累加器的高16位(A H );里面去,低16位(AL )的内容不变  M OV  3SP ++,IER
;将IER 寄存器里面的值存入到堆栈里面去  M OV  IER ,@V ar A ;将变量V ar A 的值装载到IER 寄存器里面去
3 T M S 320C 28x 的寻址方式
在D SP 应用系统中,程序代码和数据都是存放在D SP 的存储器中,因此运行程序时必然要对程序存储器以及数据存储器的相应单元进行访问,这就是寻址所要完成的工作。TM S 320C 28x 系列D SP 芯片提供了灵活多样的寻址方式。TM S 320C 28x 系列D SP 芯片除了支持4种基本的寻址方式,即直接寻址(direct
addressing m ode )、
堆栈寻址(stack addressing m ode )、间接寻址(indirect addressing m ode )和寄存器寻址(register addressing m ode ),另外还支持数据 程序 I O 空间立即寻址(data  p rogram  I O space i m m ediate addressing m ode )、程序空间间接寻址(p rogram space indirect addressing m ode )和字节寻址(byte addressing m ode )。
3.1 直接寻址
在直接寻址中,数据地址由基地址和偏移地址共同决定。基地址存放在数据页指针寄存器D P (16位)37 第2期             郭国良等:TM S 320C 28x 的指令系统与寻址方式 
47军 事 通 信 技 术                 2005年 
中,偏移地址由直接寻址指令提供。当ST1寄存器的AM OD E位为0的时候,偏移地址是6位,对应D P指示的一个数据页内,包含64个数据单元;当ST1寄存器的AM OD E位为1的时候,偏移地址是7位,对应D P指示的一个数据页内,包含128个数据单元。在两种情况下,数据地址高10位全为0,也就是说,直接寻址只能寻址4M数据空间。
下面是6位偏移寻址的例子。
  M OVW  D P,#V ar A      ;AM OD E=0,将变量V ar A所在数据页(16位)地址载入D P
  ADD AL,@V ar A;将变量V ar A的6位偏移地址加进AL中
这里需要注意的是,当偏移地址是7位的时候,数据页为15位,存放在D P中,D P最后一位为0。
下面是7位偏移寻址的例子。
  SETC AM OD E;使AM OD E=1
  M OVW D P,#V ar A;pAM OD E=1,将变量V ar A所在数据页(15位)地址载入D P
  ADD AL,@V ar A;将变量V ar A的7位偏移地址加进AL中
3.2 堆栈寻址
堆栈寻址一般是专用的SP(堆栈指针寄存器)来对堆栈寻址的方法。TM S320C28x系列D SP芯片用一个16位的SP来对堆栈寻址,且SP总是指向堆栈中最后存入的数据单元(即顶部)。堆栈寻址主要负责对系统堆栈的压入和弹出。用SP进行寻址时,数据地址的低16位与SP相关,而高16位默认为0X0000。例如:  ADD AL,3-SP[6bit]
;
AM OD E=0,将(SP-6bit)指向的堆栈单元内容加到AL寄存器中
上面的[6b it]在应用中用一个0~63的整数进行代替,例如用5代替,则将当前SP所指向的地址减去5所指向的地址单元的内容加到AL寄存器中去。此外,不用考虑AM OD E,堆栈寻址还支持下面的寻址方法。
  M OV3SP++,AL;将16位AL中的值压入堆栈顶部,SP=SP+1
  M OVL3SP++,P;将32位P寄存器中的值压入堆栈顶部,SP=SP+2
  ADD AL,322SP;把堆栈顶部的16位数写入AL中,SP=SP-1
  M OVL A CC,322SP;把堆栈顶部的32位数写入A CC中,SP=SP-2
3.3 间接寻址
在间接寻址方式中,数据空间任意单元都可以通过一个辅助寄存器(XA R0~XA R7)中的内容所代表的32位地址进行访问。当指令以间接方式寻址时,辅助寄存器可以通过地址寄存器算术单元(A RAU)进行地址增量、减量或偏移,还可以提供循环来进行寻址。例如:
  M OVL XA R2,#A rray1;将数值A rray1的首地址装入XA R2中
  M OVL A CC,3XA R2++;将由XA R2指向的地址单元内容写入A CC,
;且XA R2进行递增(此处加2)
3.4 寄存器寻址
寄存器寻址就是对寄存器的内容进行访问。这里主要负责对A CC、P、XT及XA R n(n为0~7)等寄存器间的操作,包括16位和32位。例如:
  M OVL A CC,XT;将XT寄存器中的内容存入A CC中(32位)
  M OVL XA R6,XA R2;将XA R2中的内容存入XA R6中(32位)
  ADD AL,PH;将PH(P寄存器的高16位)所包含的值加到AL中(16位)
3.5 数据 程序 I O空间立即寻址
立即寻址,就是在指令中包含有所要寻址的存储单元的地址。在立即寻址指令中,存储单元的地址可以用其所在单元的地址标号或者二进制符号来表示。C28x的立即寻址有以下几种类型:
(1)数据存储空间立即寻址
此时,数据地址的高16位为0,例如: