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

DSP第五章解析.ppt

124页
  • 卖家[上传人]:m****
  • 文档编号:588504592
  • 上传时间:2024-09-08
  • 文档格式:PPT
  • 文档大小:941KB
  • / 124 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • DSPDSP第五章解析第五章解析 n寻址方式:分为数据寻址和程序寻址寻址方式:分为数据寻址和程序寻址n数据寻址:对数据存储空间进行寻址数据寻址:对数据存储空间进行寻址n程程序序寻寻址址::对对程程序序存存储储空空间间进进行行寻寻址址(程序存储空间可能存有指令及参数等)(程序存储空间可能存有指令及参数等) 第一节第一节 数据寻址方式数据寻址方式        TMS320C54x寻址的存储器有16位和32位两种,但只有双精度和长字指令才能寻址32位在32位数寻址时,高有效字先处理,低有效字后处理如果寻址的第1个字处在偶地址,那么第2个字就处在下一个(较高的)地址;如果第1个字处在奇地址,那么第2个字就处在前一个(较低的)地址 例如:      DST  B,*AR3+ 表示把源累加器B中的内容00 4AB2 CC22存放到AR3寄存器所指向的长数据存储器单元中,然后AR3寄存器的内容加2本例中,数据存储器单元的地址为0100,第1个字处在偶地址0100h,故第2个字就处在下一个(较高的)地址0101h执行后,第1个字0100h的内容为4AB2,第2个字0101h的内容为CC22          DST  B,*AR3-       表示把源累加器B中的内容00  4AB2 CC22存放到AR3寄存器所指向的长数据存储器单元中,然后AR3寄存器的内容减2。

      本例中,数据存储器单元的地址为0101,第1个字处在奇地址0101h,故第2个字就处在前一个(较低的)地址0100h执行后,第1个字0101h的内容为4AB2,第2个字0100h的内容为CC22                在寻址中常会用到下列缩写:          Smem:16位单寻址(单数据存储器)操作数          Xmem:16位双寻址操作数,用于双操作数指令及                    某些单操作数指令从DB数据总线上读出          Ymem:16位双寻址操作数,用于双操作数指令                      从CB数据总线上读出          dmad: 16位立即数表示的数据存储器地址,                      地址范围为0~65535          pmad: 16位立即数表示的程序存储器地址,                      地址范围为0~65535          PA:     16位立即数,I/O口地址,                      地址范围为0~65535          src:     源累加器(A或B)。

                dst:    目的累加器(A或B)  lk:16位长立即数 1.立即数寻址:       指令中已经包含有执行指令所需要的操作数CPU不必再去寻找数据       立即数分为短立即数(3、5、8或9)和长立即数(16位)两种短立即数可包含在单字或双字指令中,长立即数在双字指令中      在操作数前面需要加#字号来说明该操作数为立即数否则会把该操作误认为是一个地址,从而把立即数寻址变成绝对地址寻址 例如指令:      LD  #93h,A           把立即数93h送入累加器A      LD  93h,A            把地址为93h单元中的数装到累加器A,而不是把93h送入累加器A nRPT  #99: 将紧跟在RPT后面的指令循环执行100次 操作数是短立即数,与操作码在同一字中   1  1  1  0  1  1  0  0      8-bit constant  操作数是16-bit长立即数的指令是双字指令操作码占一个,操作数紧跟其后也占一个字   RPT  #0FFFh;将紧跟在RPT后面的指令循环执行1000h次   1  1  1  1  0  0  0  0  1  1  1  1  0  0  0  0                  16-bit constant     2.绝对地址寻址:      利用一个16位数标识地址,这个16位的地址可以用其所在单元的地址标号或者16位符号常数来表示。

      有4种类型的绝对地址寻址      ⑴数据存储器地址(damd)寻址:它是用一个符号或一个数来确定数据空间的一个地址 例如,把数据空间SAMPLE标注的地址里的数复制到由AR3所指定的数据存储单元中去:   MVKD  SAMPLE,*AR3            SAMPLE标注的地址就是一个数据存储器地址 (damd)的值 ⑵程序存储器地址(pmad)寻址:它是用一个符号或一个具体的数来确定程序存储器中的一个地址          例如,把用TABLE标注的地址里的程序存储器单元中的一个字复制到由AR4所指定的数据存储单元中去:   MVPD  TABLE,*AR4           TABLE所标注的地址就是一个程序存储器                                  地址(pmad)的值      ⑶⑶I/O端口寻址(端口寻址(PA)) ::用一个符号或一个常数来确定外部I/O口地址        例如,把一个数从端口地址为FIFO的I/O口中的一个字复制到AR5指向的数据存储器单元:   PORTR  FIFO,*AR5              FIFO所标注的地址为端口地址。

       ⑷  *(lk)寻址:用一个符号或一个常数来确定数据存储器中的一个地址,这种寻址的语法允许所有使用Smem寻址的指令去访问数据空间的任意单元而不改变数据页指针(DP)的值,也不用对AR进行初始化          例如,把地址为BUFFER的数据单元中的数装到累加器A:    LD  *(BUFFER),A        这里的BUFFER是一个16位的符号常数    3.累加器寻址:      累加器寻址是用累加器中的数值作为地址来读写程序存储器这种寻址方式可用来对存放数据的程序存储器寻址共有两条指令可以采用累加器寻址:READA Smem    把累加器A中的数作为地址, 从程序存储器单元中读入一个字的数据,并传送到由单数据存储器(Smem)操作数所确定的数据存储器单元中WRITA Smem    把Smem操作数所确定的数据存储单元中的一个字,传送到累加器A指定的程序存储器单元中     4.直接寻址:        指令代码中包含了数据存储器地址(dam)的低7位这7bits的dam作为偏移地址与数据页指针(DP)或堆栈指针(SP)相结合共同形成16位的数据存储器实际地址可以在不改变DP或SP的情况下,随机地寻址128个存储单元中的任何一个单元。

      但它的优点是每条指令代码只有一个字          直接寻址的语法是用一个符号或一个常数来确定偏移值         在表示时,用符号@加在变量的前面   例如:            ADD   @x,A                 把变量x存储器单元中的内容加到累加器A中去       图5-3给出了使用直接寻址的指令代码格式      其中:8位操作码包含了指令的操作码;           I=0表示指令使用的寻址方式为直接寻址方式;    数据存储器地址(dma)包含了指令的数据存储器地址偏移       DP和SP都可以与dma偏移相结合产生实际地址位于状态ST1寄存器中的编译方式位(CPL)决定选择采用哪种方式来产生实际地址CPL=0  dma域与9bits的DP相结合形成            16位的数据存储器地址CPL=1  7位dma域加上(正偏移)SP的值           形成16位的数据存储器地址      图5-4给出了以DP和SP为基准的直接寻址 DP用用于于指指向向512页页中中的的某某一一页页,,而而dma则指出该页中的某一特定单元则指出该页中的某一特定单元。

      DP的值由LD指令装入,RESET指令将DP赋值为0,DP的值不能用上电进行安全初始化,因为上电后它处于不定状态       例:        LD    #x,DP               把立即数x送入状态寄存器0的DP位        LD    @u,A                把X页u存储器单元中的内容装入到累加器A中去        ADD   @v,A               把X页v存储器单元中的内容与累加器A中的内容相加                 在以SP为基准的直接寻址中,指令寄存器中的7位dma作为一个正偏移与SP相加得到有效有16位数据存储器地址          SP可指向存储器中的任意一个地址          dma可指向当前页中一个明确的单元,从而允许访问存储器任意基地址中连续128个字            例:   SSBX  CPL             对状态寄存器ST1的CPL置位,CPL=1;   LD    @X1,A          SP指针加X1形成的地址中的内容送累加器A;   ADD   @Y2,A       SP指针加Y2形成的地址中的内容与累加器A中的值相加。

                       由于DP与SP两种直接寻址方式是相互排斥的,当采用SP直接寻址后再次用DP直接寻址之前,必须选用RSBX  CPL指令对CPL清零 5.间接寻址间接寻址:       间接寻址通过辅助寄存器中的16位地址进                                                                                                                          行寻址,寻址范围为64K       C54x有8个16位辅助寄存器(AR0~AR7)都可用来进行寻址  两个辅助寄存器算术单元(ARAU0和ARAU1),根据辅助寄存器的内容进行操作,完成无符号的16位算术运算        间接寻址可以间接寻址可以从两个独立的存储器从两个独立的存储器单元读数据,或读一个存储器单元同时单元读数据,或读一个存储器单元同时写另一个存储器单元,或读写两个连续写另一个存储器单元,或读写两个连续的存储器单元的存储器单元        ⑴单操作数寻址:      其中:I=1表示指令的寻址方式为间接寻址。

             MOD为4bit方式域,定义间接寻址的类型       ARF为3bit辅助寄存器域定义寻址所使用的辅助寄存器,ARF由状态寄存器ST1中的兼容方式位(CMPT)决定:   CMPT=0 标准方式   ARF确定辅助寄存器,不管ST0中的ARP的值在这种方式下ARP不能被修改,必须一直设为0  CMPT=1 兼容方式  如果ARF=0,就用ARP来选择辅助寄存器,否则,用ARF来确定辅助寄存器访问完成后,ARF的值装入ARP         汇编指令中的*ARx  表示ARP所选择的辅助寄存器 n状态寄存器0(ST0)的结构如下:n   ARP:复位值为0功能:辅助寄存器指针这3位字段是在间接寻址单操作数时,用来选择辅助寄存器的当DSP处在标准方式时(CMPT=0),ARP必定置成0         下面对表中提到的两种特殊的寻址功能做一说明:      ①循环寻址:      循环寻址用于卷积、相关和FIR滤波算法中,这些算法要求在存储器中实现一个循环缓冲器一个循环缓冲器是一个包含了最近的数据的滑动窗口当新的数据进来时,缓冲器就会覆盖最早的数据,循环缓冲器实现的关键是循环寻址的实现。

               循环缓冲区的长度值存放在BK寄存器(循环缓冲区长度寄存器)中,BK中的数值由           STM  #lk,BK   指令设定          长度为R的的循环缓冲器必须从一个N位地址的边界开始,即循环缓冲器基地址的最低N位必须为0N是满足2N>R的最小整数R的值必须装入BK例如,含有31个字的循环缓冲器必须从最低5位为0的地址开始,即xxxx xxxx xxx0 00002,N=5,25>31,且31值必须装入BK         循环缓冲器的有效基地址(EFB)就是用户指定的辅助寄存器(Arx)的低N位置0后得到循环缓冲器的尾地址(EOB)是通过用BK的低N位代替ARx的低N位得到循环缓冲器的INDEX就是ARx的低N位,step就是加到辅助寄存器,或从辅助寄存器中减去的值循环寻址的算法为:      if 0≦ index + step < BK;          index=index+step     else  if infex + step ≧ BK;          index=index+step-BK     else  if infex + step < 0          index=index+step+BK     ②位倒序寻址:          位倒序寻址用于FFT算法中,可以提高执行速度和在程序中使用存储器的效率。

                在这种寻址方式中,用AR0存放FFT点数的一半整数N,用另一辅助寄存器指向一数据存放的物理单元当使用位倒序寻址把AR0加到辅助寄存器中时,地址以位倒序的方式产生,即进位是从左向右,而不是从右向左进位例如:               0 1 1 0           +  1 1 0 0                1 0 0 1        以8位辅助寄存器为例,AR1表示了在存储  器中数据的基地址(0110 0000) 2,AR0的值为(0000 1000)2利用以下两条语句可以向外设口(口地址为PA)输出整序后的FFT变换结果:    RPT    #15     重复执行下条指令15+1次    PORTW  *AR1+0B,PA    向外设口PA输                          出整序后的FFT变换结果        n利用辅助寄存器ARx对数据存储空间进行访问数据空间的地址被存储在ARx当中,ARx加(*)号前缀,表示的是ARx中地址所指向的存储器单元保存在ARx中的地址再对存储单元访问前/后可以进行修改,具体有15种修改方式。

      间接寻址方式下的数据存取间接寻址方式下的数据存取 n*ARx—访问后ARx中地址不变n*ARx-—访问后ARx中地址减1n*ARx+—访问后ARx中地址加1n*ARx-0—访问后ARx中地址减去AR0中的值n*ARx+0—访问后ARx中地址加上AR0中的值n*ARx-0B—访问后ARx中地址减去AR0中的值,并反向进位n*ARx+0B—访问后ARx中地址加上AR0中的值,并反向进位n*ARx-%—访问后ARx中地址减1,并循环寻址n*ARx+%—访问后ARx中地址加1,并循环寻址 n*ARx-0%—访问后ARx中地址减去AR0中的值,并循环寻址n*ARx+0%—访问后ARx中地址加上AR0中的值,并循环寻址n*ARx(lk)—访问地址为ARx中的地址加上立即数值lk ,访问后ARx不变n*+ARx(lk)—访问前ARx中的地址加上立即数值lk 新的 修改后的Arx值作为访问地址n*+ARx(lk)%—访问前ARx中的地址加上立即数值lk(访问前修改Arx ),并循环寻址 n例:nAR3=#2000H   *AR3=#0ac01h   T=#8   B=*AR3_<

      这些指令只有一个字长且只能以间接寻址的方式工作其指令格式如图5-8         图中:Xmod定义了用于访问Xmem操作数(DB数据总线)的间接寻址方式的类型;      Ymod定义了用于访问Ymem操作数(CB数据总线)的间接寻址方式的类型;      Xar用于确定包含Xmem地址的辅助寄存器;      Yar用于确定包含Ymem地址的辅助寄存器       两位的Xar和Yar域对辅助寄存器的选择为:          Xar或Yar       辅助寄存器          00              AR2          01              AR3          10              AR4          11              AR5       Xmod和Ymod域对双数据存储器操作数寻址的类型的确定如表5-3所示 6.存储器映射寄存器寻址:存储器映射寄存器寻址:       存储器映射寄存器(MMR)寻址用来修改存储器映射寄存器而不影响当前数据页指针(DP)或堆栈指针(SP)的值当采用直直接接寻寻址址方式时,高9位数据存储器地址被置0,而不管当前的DP或SP为何值,利用指令中的低7位地址访问MMR。

             当采用间接寻址方式时,高9位数据存储器地址被置0,按照当前辅助寄存器中的低7位地址访问MMR访问MMR后,寻址操作完成后辅助寄存器的高9位被强迫置0 n例如,用AR1来指向一个存储器映射寄存器,其包含的值为FF25H,其低7位是25H而地址为25H的单元,用作定时器周期计数器PRD,故AR1指向了定时器周期寄存器n执行后,存放在AR1中的值为0025H      能使用存储器映射寄存器寻址的指令共有8条:LDM      MMR,dst       将MMR加载到累加器MVDM   dmad,MMR    数据存储器向MMR传                                   送数据MVMM   MMRx,MMRy   MMRx向MMRy传送                                    数据POPM    MMR        将数据从栈顶弹出至MMRPSHM    MMR        将MMR压入堆栈STLM    src, MMR    累加器低位存到MMRSTM     #1k,MMR    长立即数存到MMR 7.堆栈寻址:堆栈寻址:         系统堆栈用来在中断和子程序调用时自动保存程序计数器(PC)中的数值。

      它也能用来保护现场或传送参数         C54x的堆栈是从高地址向低地址方向生长,并用一个16位存储器映象寄存器堆栈指针(SP)来管理堆栈,SP始终指向堆栈中所存放的最后一个数据,即SP指针始终指向栈顶在压入操作时,先减小SP的值,再将数据压入堆栈;在弹出操作时,先从堆栈弹出数据,再增加SP的值     采用堆栈寻址的指令有4条:    PSHD:     将数据寄存器中的                    一个数压入堆栈;    PSHM:     将一个MMR中的值压入椎栈;    POPD:     从堆栈弹出一个数至                    数据存储单元;    POPM:    从堆栈弹出一个数至MMR 第二节第二节 程序寻址程序寻址      程序地址是由程序地址生成器(PAGEN)生成的,并加载到程序地址总总线线(PAB)上C54x的寻址能力为64K字的程序空间,C548和C549多了7根地址线,可寻址外部128个64K字页,总计程序空间为8192K程序地址指出程序存储器的位置,程序存储器中存放着应用程序的代码、系数表以及立即操作数          程序地址生成器(PAGEN)由程序计数器(PC)、重复计数器(RC)、块重复计数器(BRC)、块重复起始地址寄存器(RSA)和块重复结束地址寄存器(REA)构成。

               C548和C549中还有一个扩展的程序计数器(XPC),以寻址扩展的程序存储空间          程序计数器(PC)是一个16位计数器,内中保存的是某个内部或外部程序存储器的地址,而在这个地址中存放的则是即将取指的某条指令、即将访问的某个16位立即操作数或系数表在程序存储器中的地址        将程序存储器地址加载到程序计数器的途径如表5-4所示       表5-4中的部分加载PC的方法解释如下:     1.分支转移操作:       对C54x而言有两种分支转移形式,即条件分支转移和无条件分支转移,两者都可以带延迟操作(指令助记符带后缀D)和不带延迟操作      条件分支转移与无条件分支转移操作上的差别仅在于前者需在规定的条件得到满足时才执行,否则不执行当条件满足时,用分支转移的第2个字(分支转移地址)加载PC,并从这个地址继续执行程序         无条件分支转移指令有两条:   B[D]        用指令中所给出的地址加载PC.   BACC[D] 用所指定的累加器的低16位作为地址加载PC       条件分支转移指令有两条:   BC[D]    如果指令中所规定的条件得到满足,就用指令中所给出的地址加载PC;   BANZ[D] 如果当前辅助寄存器不等于0,就用指令中所规定的地址加载PC。

      nB[D]指令:      助记符方式          表达式方式       B[D]  pmad         goto  pmad执行过程:       pmad  PC           指令指针指向指定的程序存储器地址( pmad),该地址可以是一个符号或一个数字如果是延迟转移,紧接着转移的两条单字指令或双字指令从程序存储器中取出先执行 nBACC[D]指令:      助记符方式          表达式方式    BACC[D]  src     goto  src( dgoto  src)执行过程:   (src(15-0))  PC        程序指针PC指向src的低位所确定的16-bit地址如果是延迟转移,紧接着转移的两条单字指令或双字指令从程序存储器中取出先执行 nBANZ[D]指令:      助记符方式              表达式方式BANZ[D]  pmad,Sind     if(Sind!=0)goto pmad                                     if(Sind!=0)dgoto pmad执行过程:   If ((Arx) =0)   Then  pmad  PC                         Else  (PC+2)  PC        如果当前辅助寄存器Arx不为0,程序指针转移到指定的程序存储器地址( pmad);否则PC指针加2。

      nBC[D]指令: 助记符方式   BC[D]  pmad,cond[cond[,cond ]] 表达式方式                 if(cond[cond[,cond ]]) [d]goto mad执行过程:   If (cond(s))   Then  pmad  PC                           Else  (PC+2)  PC        如果满足特定的条件,程序指针转移到指定的程序存储器地址( pmad);否则PC指针加2 分支转移指令对流水线影响:后面的两个指令字已经被取指带延迟的分支转移,双字指令或两条单字指令被执行后再进行分支转移;如果是在不带延迟的分支转移后,就将已被读入的一条双字指令或两条单字指令从流水线中清除,不予执行,立即进行分支转移     2.调用和返回:       分无条件调用与返回和有条件调用与返回,并且两者都可能带延迟和不带延迟操作远分支转移、远调用和远返回: C548和C549 ,有一个7位的程序计数器扩展寄存器(XPC),用来选择当前的64K字页程序存储器转移前,原程序的下条指令的地址被压入堆栈,而在返回时则将这个地址弹出至PC,使被中断了的原程序能继续执行。

        无条件调用与返回指令有如下几种:   CALL[D]:将返回地址压入堆栈,用指令 所规定的地址加载PC;   CALA[D]:将返回地址压入堆栈,用指定累加器的低16位加载PC;   RET[D]:  用栈顶的返回地址加载PC;   RETE[D]:用栈顶的返回地址加载PC并开放中断;   RETF[D]:用快速返回寄存器RTN中的 返回地址加载PC,并开放中断              条件调用与返回指令有两种:   CC[D]:如果指令中所规定的条件得到满足,则先将返回地址压入堆栈,然后用所指定的地址加载PC    RC[D]:如果指令中所规定的条件得到满足,则将堆栈顶部的返回地址加载PC n     3.条件指令中的条件判断:      前面提到的条件分支转移和条件调用与返回指令中,所涉及的条件列于表5-5中     当指令需要多重条件判断时,如:        BC  pmad,cond[,cond[,cond]]        必须所有的条件得到满足时,程序才能转移到pmad由于有的条件是相斥的,因此在一条指令中,不是所有的条件都能选用的,只能进行部分组合如表5-6所示。

            表5-6中将各种可能的条件分成了两种,每组可以构成一种组合其组合方法为:      第1组:可以从A类中选一个条件,同时可以从B类中选择一个条件但是不能从同一类中选择两个条件另外,两种条件测试的累加器必须是同一个例如,可以同时测试AGT和AOV,但不能同时测试AGT和BGT      第2组:可以在A、B、C三类中各选择一个条件,但不能从同一类中选择两个条件例如可以同时测试TC、C和BIO,但不能同时测试NTC、C和NC n     4.重复操作:        C54x具有重复执行下一条指令和重复执行一个程序块若干指令的功能     ①重复执行单条指令:      可重复操作指令,可以使乘法/累加和数据块传送这类多周期指令在执行一次之后变成单周期指令,从而大大提高这些指令的执行速度一旦重复指令被取指、译码,直到重复循环完成以前,对所有的中断(包括NMI,但不包括RS)均不响应 在执行重复操作期间,若C54x响应保持输入HOLD信号,重复操作是否执行则取决于状态寄存器ST1的HM若HM=0,则继续操作,否则暂停操作nHLOD:输入保持输入信号   HLOD低电平有效时,表示外部电路请求控制地址、数据和控制信号线。

      当C54x响应时,这些线均变成高阻状态 nHM:保持方式位当处理器响应信号时,HM指示处理器是否继续执行内部操作      HM=0  处理器从内部程序存储器取指,继续执行内部操作,而将外部接口置成高阻状态      HM=1  处理器暂停内部操作       实现重复操作:16位的重复计数器(RC)和两条能对其下条指令进行重复操作的指令RPT和RPTZ重复执行的次数等于(RC)+1RC只能由重复指令(RPT和RPTZ)中的操作数加载              RC在执行减1操作时不能被访问        该循环内不能套用循环       nRPT指令:      助记符方式          表达式方式       RPT   Smem         repert(Smem)       RPT   #k              repeat(#k)       RPT   #lk              RPT    #lk执行过程:       (Smem) RC           k  RC           lk  RC nRPTZ指令:      助记符方式          表达式方式  RPTZ  dst,#k      repert(#lk),dst=0执行过程:       0 dst         lk  RC        当RPTZ指令执行时,对目的累加器dst清0,循环执行下一条指令n+1次。

      RC的值是一个16位常数1k         操作数n的最大值为65 535(216),因此重复执行单条指令的最大次数为65 536 ②②块重复操作:块重复操作:       利用块重复计数器(BRC,加载值可为0~65535)、块重复起始地址寄存器(RSA)、块重复结束地址寄存器(REA)与程序块重复指令RPTB,可对紧随RPTB、由若干条指令构成的程序块进行重复操作     nRPTB指令:      助记符方式          表达式方式  RPTB  pmad         blockrepert(pmad)执行过程:   1 BRAF (块循环有效标志位)   if (delayed)then (PC)+4 RSA   Else    (PC)+2 RSA   pmad (程序存储器地址) REA注:BRC必须在指令执行前装入 例如:  STM   #99,BRC    ;99→块重复计数                                     器BRC  RPTB  NEXT-1        ;对下条指令至标号                                 为NEXT前的程序                                 块执行       ┇                    ;重复操作      NEXT:...             ;重复程序块以外的                                 指令         执行上述程序过程:执行上述程序过程:1.先将99加载到BRC中,即对程序块重复执行99+1=100次。

      2.执行RPTB指令时将(PC)+2→RSA,将NEXT-1→REA,同时将1→BRAF(状态寄存器ST1中的块重复操作标志位),表示正在进行块重复操作每执行一次程序块重复操作,BRC减1,直到BRC减到0,将0→BRAF,块重复操作全部完成          在程序块重复操作过程中,可以响应中断 n状态寄存器1(ST1)的结构如下:n nBRAF:块重复标志位指示块重复是否处于激活状态   BRAF=0,表示当前不在进行块重复操作当块重复计数器(BRC)减到低于0时,BRAF被清0   BRAF=1,表示当前正在进行块重复操作当执行RPTB指令时,BRAF被自动地置1      5.复位操作:       复位(RS)是一个不可屏蔽的外部中断,它可以在任何时候使C54x进入一已知状态上电后RS应至少保持5个时钟周期的低电平,以确保数据、地址和控制线的正确配置复位后RS为高电平,处理器从FF80h处取指,并开始执行程序复位期间,处理器进行如下操作:    ①将处理器工作方式寄存器PMST中的中断向量指针IPTR置成1FFh    ②将处理器工作方式寄存器PMST中的MP/MC位置成与引脚MP/MC相同的数值。

      n处理器工作方式状态寄存器(PMST)的结构如下:IPTR:中断向量指针9位地址指向128字的中断向量所在的程序页用户可以为引导操作将中断向量指针重新定义到RAM复位时,这9位全都置1;复位向量总是驻留在程序存储器空间的地址FF80hRESET指令不影响这个字段复位值为1FFh nMP/MC 微处理器/微型计算机工作方式位      MP/MC=0,允许使能并寻址片内ROM;      MP/MC =1,不能利用片内ROM    ③将PC置成FF80h将扩展的程序计数器XPC寄存器清0(仅C548和C549)   ④无论MP/MC状态如何,将FF80h加到地址总线   ⑤数据总线变成高阻状态控制线均处于无效状态   ⑥产生中断响应信号IACK   ⑦状态寄存器ST1中的中断方式位INTM置1,关闭所有的可屏蔽中断   ⑧中断标志寄存器IFR清0   ⑨产生同步复位信号(SRESET),对外围电路初始化          ⑩将下列状态位置成初始值:        ARP=0    CLKOFF=0    HM=0        SXM=1              ASM=0    CMPT=0       INTM=1      TC=1         AVIS=0   CPL=0         OVA=0        XF=1            BRAF=0   DP=0           OVB=0        C=1                DROM=0  OVLY=0   C16=0        FRCT=0            OVM=0           由于在复位期间对其余状态位以及堆栈指针(SP)没有初始化,因此,用户在程序中必须对它们适当地进行初始化.          如果MP/MC=0,则处理器从片内ROM开始执行程序,否则,它将从片外程序存储器开始执行程序。

      第三节第三节 汇编语言格式汇编语言格式       TMS320C54x是TMS320系列中的一种定点数字信号处理器,它的指令系统分助记符形式和代数式形式两种共有指令129条,由于操作数的寻址方式不同,派生至205条        汇编语言程序的编写方法汇编语言程序的编写方法 TMS320C54x汇编语言源程序由包括汇编语言指令、汇编指令(伪指令)和注释的语句组成1)语句的开头只能是标号、空格、星号或分号2)标号是可选项如果使用,必须从第一列开始3)每个域必须由一个或多个空格分开4)注释是可选项开始于第一列的注释用星号(*)或分号(;)来标明,开始于其它列的注释用分号开头     汇编语言源程序以.asm为扩展名,程序的每一行由4个部分组成,其句法格式为:    [标号][:] ↑[助记符] ↑ [操作数] ↑[;注释]                  ---------------------------------n SUM: STM     #a,AR3         ; AR3指向an           STM     #x,AR4       ; AR4指向xn           RPTZ    A,#3         ;累加器清0,n                                      ;然后后一语句循环4次n*加法操作 标号域:供本程序的其它部分或其它程序调用。

      标号是任选项,标号后面可以加也可以不加冒号“:”     引用标号时,标号的大小写必须一致标号的值就是SPC(段程序计数器)的值如果不用标号,则第一个字母必须为空格、分号或星号(*)       指令域:         助记符指令、汇编指令、宏指令和宏调用:           作为助记符指令,一般用大写;          汇编命令和宏命令,以句号“.”开始,且为小写          汇汇编编指指令令可以形成常数和变量,当用它控制汇编和链接过程时,可以不占存储空间指令和汇编命令都不能写在第1列        操作数:指令中的操作数或汇编命令中定义的内容操作数之间必须用逗号“,”分开有的指令无操作数,如NOP,RESET注释:注释从分号“;”开始,可以放在指令或汇编命令的后面,也可以放在单独的一行或数行,注释是任选项如果注释从第1列开始,也可以用“*”号)    汇编语言程序中的数据型式有下列几种:    二进制:如1110001b或1111001B;    八进制:226q或572Q;    十进制:1234或+1234或-1234(缺省型)    十六进制:0A40h或0A40H或0xA40         浮点数:1.623e-23(仅C语言程序中能用,汇编程序不能用)    字符:‘D’    字符串:“this is a string” 汇编伪指令n汇编伪指令(伪指令)是用来为程序提供数据和控制汇编进程的。

           C54x汇编器共有64条汇编命令     将代码和数据汇编到特定的段中    为未初始化的变量保留存储器空间    控制展开列表的形式    存储器初始化    汇编条件块    定义全局变量 n(1)段定义指令 .bss 在.bss段中为未初始化的变量保留存储器空间 .date 通常包含了初始化的数据 .sect 定义初始化的带命名的段,并将紧接着的代码或数据并入该段 .text 该段中包含了可执行的代码 .usect 在一个未初始化的有命名的段中保留空间 n(2)常数初始化指令 .bes和 .space 在当前段保留确定数目的位 当在.space 段使用了标号时,它指向保留位的第一个字;当在.bes 段使用了标号时,它指向保留位的最后一个字 .byte 把一个或多个8位值放入当前段的连续字中 .filed 把一个数放入当前字的特定数目的位中 .float和 .xloat 计算以IEEE格式表示的单精度(32位)浮点数,并存放在当前段的连续字中,高位字先存int和 .word 把一个或多个16位数存放在当前段的连续字中。

      long和 .xlong 把32位数存放在当前段的连续的两个字中,高位字先存string和 .pstring 把8位的字符从一个或多个字符串中传到当前段中 n(3)段程序计数器定位指令 .align 使SPC对准1-word到128-word的边界保证了紧接着该指令的代码从一个整字或页边界开始 操作数: 1 让SPC对准字边界 2 让SPC对准长字/偶地址边界 128 让SPC对准页边界 不带操作数时,确省值为128 n(4)输出列表格式指令 .drlist/ .drnolist .fclist/ .fcnolist .length .width .list/ .nolist .mlist/ .mnolist .option .page .title .sslist/ .ssnolist n(5)引用其他文件的指令 .copy/ .include 告诉汇编器器开始从其他文件中读源语言。

      .def 确认一个在当前模块中定义的且被其他模块使用的符号 .global 声明一个外部符号,使其他模块在连接的时候可以使用它 .mlib 向汇编器提供一个包含宏定义的文档库的名称 .ref 确认一个在当前段中使用但在其它段中定义的符号 n(6)条件汇编指令 .if/ .elseif/.else/ .endif 告诉汇编器根据表达式的值条件汇编一块代码 .loop/ .break/.endloop 告诉汇编器按照表达式的值循环汇编一块代码 .loop expression 标注一块循环代码的开始 .break expression 告诉汇编器当表达式为假时,继续循环汇编;当表达式为真时,立即转到.endloop 后面懂得代码去 n(7)汇编时的符号指令 使有意义的符号名与常数值或字符串相等同 .asg 规定一个字符串与一个替代符号相等,并将其存放在替代符号表中 .eval 计算一个表达式的值并把结果传送到与一个替代符号等同的字符串中 .label 定义一个专门的符号以表示当前段内装入时的地址而不是运行时的地址 .set/ .equ 把一个常数值等效成一个符号,存放在符号表中且不能被清除。

      n(8)其他方面的汇编指令 .algebraic .end .mmregs .newblock .sblock .version 第四节第四节 指令系统指令系统       TMS320C54x是TMS320系列中的一种定点数字信号处理器,它的指令系统分助记符形式和代数式形式两种共有指令129条,由于操作数的寻址方式不同,派生至205条        nTMS320C54x指令系统的主要特点是:n可同时读入2或3个操作数;n支持双精度运算的32位长操作数指令;n可进行单条指令重复和块指令重复操作;n有块存储器传送指令和并行操作(如并行存储和加载、并行存储和加/减法、并行存储和乘法、并行加载和乘法)指令;n设有条件存储指令及延迟操作指令、有从中断快速返回指令;n有为特殊用途设计的指令(如支持FIR滤波、最小均方算法LSM、多项式计算以及浮点运算);有为省电安排的空转指令 基本类型n算术指令   加法、减法、乘法、32位操作数、特殊用途    n逻辑指令    与、或、异或和移位、测试n程序控制指令    跳转、调用、中断、返回、重复、栈操作和复杂控制 n装入和存储指令   载入、存储、条件存储、并行载入存储、并行载入乘法、并行存储加减、并行存储乘法和复杂载入存储 n加减运算:   (1)ST1中符号扩展模式位SXM:      SXM=0,符号不扩展;      SXM=1,符号扩展。

          (2)ALU运算模式位C16:      C16=0,双精度(32位)运算;      C16=1,双16位运算 n例:nAR3=#2000h   *AR3=#0F117h   AR5=#2500h   *AR5=#0a866h   AR4=#2501h   *AR4=#3124h   ASM=#-8   ;-----------------SXM----------------- SXM=1A=#0ABCDH             ;A=FF FFFF ABCD hA=#A+#8ADEH        ;A=FF FFFF 36AB hA=A-#9ACDH<<16   ;A=00 6532 36AB hB=#0C69Eh              ;B=FF FFFF C69E hB=A-*AR5                ;B=00 6531 B6AC hSXM=0A=#07ab8h<<16      ;A=00 7ab8 0000hA=A+#4adeh            ;A=00 7ab8 4adehA=A=#8ADEH<<16   ;A=FF EFDA 4ADEh;-------------------------C16--------------------- SXM=1C16=0///长操作数A=A+*AR3<<12    ;A=FF EFDA 4ADEh+FF FF11 7000h       =FF EEEB BADEhA=dbl(*AR5)-A///长操作数    ;A=FF A866 3124h-FF EEEB BADEh       =FF B97A 7646 hB=B+*AR3+CARRY    ;B=00 6533 7F5C h A=A-*AR5-BORROW    ;A=FF B979 CDDFhA=A+UNS(*AR5+)    ;A=FF B979 CDDFh+uns(FF FFFF A866h)       =FF B97A 7645hT=#1234H               ;T=1234HB=DADST(*AR5,T)    ;B=FF BA9A 4358 h C16=1A=A+DBL(*AR5)        ;A=FF 61E0 1769 hT=#7654HA=DSADT(*AR5,T)      ;A=FF 3212 A778 hA=DBL(*AR5)-A          ;A=00 7654 89AC h*AR3+=HI(B)||B=A+*AR5+0%        ;B=00 1EBA 89AC h*AR5-=HI(A)||A=*AR31<<16-B     ;A=FF F14D 7654 h n逻辑运算:AR2=#3000h A=#1234h*A=#6789hA=A&*AR2-B=#8848hA=A|B<<-6A=#2365hA=B^#5678h<<8A=A+#997AHA=B^#541e<<16 n乘法运算:   AR5=#2000h   *AR5=#49A6H   FRCT=0   SXM=1   T=#6789h   A=T**AR5+   A=T*#4000H   A=#1234<<16   B=T*HI(A)    A=T*uns(*AR5-)   B=T**AR3+   FRCT=1   SXM=1   OVM=1   T=#0C000H   B=T**AR5+   B=RND(A+T**AR3+)   A=B+T*#3876H   A=RND(A+T**AR5+)    A=#2000H<<16   B=*AR3-*#2000H,T=*AR3-   B=B-*AR5-HI(A)   A=B+*AR3+#1000H,T=*AR3+   B=B-*AR5+*HI(A),T=*AR5+   A=*AR3-**AR3-   B=B-*AR5-**AR5-,T=*AR5- 思考题思考题n1、何为指令的寻址方式?n2、C54x系列DSP有多少种寻址方式?n3、立即数寻址和绝对地址寻址如何区别?n4、如何将累加器中值作为地址值?n5、直接寻址中如何确定使用DP或SP方式?n6、直接寻址方式,在DP或SP确定时,可以寻址多少个存储单元? n7、下述语句执行后,完成什么功能?   (1)CPL=0           A=#1234h           DP=#09H           @25=A   (2)CPL=1            SP=#1C00h            @5Fh=#0ACDCh    n8、循环寻址中,长度为R的循环缓冲器必须从一个N位地址的边界开始,即循环缓冲器基地址的最低N位必须为0。

      这是为什么?N值如何确定?n9、地址以位倒序方式产生,是何意义?n10、指令AR2=#023AH               *AR2+=#999Ah   执行后,AR2中值为多少?999Ah放在何处?                *+AR2=#999Ah  执行后,AR2中值为多少?999Ah放在何处? n11、下述语句执行后,完成什么功能?AR3=#2000H   *AR3+0=#1111h      *AR3+0=#2222h   *AR3+0=#3333h   *AR3(#16)=#5555h n12、下述语句执行后,AR2中地址为何?    B=#025Ah    *AR2+0%=B<<4    n13、程序地址生成器的组成?n14、PC中保存的什么值?复位后PC值为多少?n15、带延迟与不带延迟分支转移执行时有何区别?n16、重复执行单条指令为何能提高指令的执行速度?n17、下述语句执行后,完成什么功能?          STM   #99,BRC              RPTB  NEXT-1                                   ┇                                 NEXT:...              n18、C54x系列DSP的六级流水线的功能是什么?n19、同时从同一存储器中取指和取操作数或同时对同一存储器块进行写操作和读(第二个数)操作,是否会造成时序冲突?          流水线不同级上的两条指令同时访问同一存储器块,是否会造成时序冲突?n20、简单论述C54x系列DSP的各个基本类型的功能? 结束结束 。

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