DSP第五章.ppt

上传人:豆**** 文档编号:26205348 上传时间:2022-07-16 格式:PPT 页数:124 大小:567.50KB
返回 下载 相关 举报
DSP第五章.ppt_第1页
第1页 / 共124页
DSP第五章.ppt_第2页
第2页 / 共124页
点击查看更多>>
资源描述

《DSP第五章.ppt》由会员分享,可在线阅读,更多相关《DSP第五章.ppt(124页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、n寻址方式:分为数据寻址和程序寻址。寻址方式:分为数据寻址和程序寻址。n数据寻址:对数据存储空间进行寻址数据寻址:对数据存储空间进行寻址n程序寻址:对程序存储空间进行寻址程序寻址:对程序存储空间进行寻址(程序存储空间可能存有指令及参数等)(程序存储空间可能存有指令及参数等)第一节第一节 数据寻址方式数据寻址方式 TMS320C54x寻址的存储器有16位和32位两种,但只有双精度和长字指令才能寻址32位。在32位数寻址时,高有效字先处理,低有效字后处理。如果寻址的第1个字处在偶地址,那么第2个字就处在下一个(较高的)地址;如果第1个字处在奇地址,那么第2个字就处在前一个(较低的)地址。例如: D

2、ST 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,故第个字就处在前一个(较低的)地址010

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

4、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

5、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所指定的数据存

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

7、R5 FIFO所标注的地址为端口地址。 *(lk)寻址:用一个符号或一个常数来确定数据存储器中的一个地址,这种寻址的语法允许所有使用Smem寻址的指令去访问数据空间的任意单元而不改变数据页指针(DP)的值,也不用对AR进行初始化。 例如,把地址为BUFFER的数据单元中的数装到累加器A: LD *(BUFFER),A 这里的BUFFER是一个16位的符号常数。 3.累加器寻址: 累加器寻址是用累加器中的数值作为地址来读写程序存储器。这种寻址方式可用来对存放数据的程序存储器寻址。共有两条指令可以采用累加器寻址:READA Smem 把累加器A中的数作为地址, 从程序存储器单元中读入一个字的数据,

8、并传送到由单数据存储器(Smem)操作数所确定的数据存储器单元中。WRITA Smem 把Smem操作数所确定的数据存储单元中的一个字,传送到累加器A指定的程序存储器单元中。 4.直接寻址: 指令代码中包含了数据存储器地址(dam)的低7位。这7bits的dam作为偏移地址与数据页指针(DP)或堆栈指针(SP)相结合共同形成16位的数据存储器实际地址。可以在不改变DP或SP的情况下,随机地寻址128个存储单元中的任何一个单元。但它的优点是每条指令代码只有一个字。 直接寻址的语法是用一个符号或一个常数来确定偏移值。 在表示时,用符号加在变量的前面 例如: ADD x,A 把变量x存储器单元中的内

9、容加到累加器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则指

10、出该页中的某一特定单元。则指出该页中的某一特定单元。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个字。 例: SSB

11、X 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位辅助寄存器(AR0AR7)都可用来进行寻址。两个辅助寄存器算术单元(ARAU0和ARAU1),根据辅助寄存器的内容进行操作,完成无符号的16位算术运算。 间接寻址可

12、以间接寻址可以从两个独立的存储器从两个独立的存储器单元读数据,或读一个存储器单元同时单元读数据,或读一个存储器单元同时写另一个存储器单元,或读写两个连续写另一个存储器单元,或读写两个连续的存储器单元。的存储器单元。 单操作数寻址: 其中:I=1表示指令的寻址方式为间接寻址。 MOD为4bit方式域,定义间接寻址的类型。 ARF为3bit辅助寄存器域定义寻址所使用的辅助寄存器,ARF由状态寄存器ST1中的兼容方式位(CMPT)决定: CMPT=0 标准方式。 ARF确定辅助寄存器,不管ST0中的ARP的值。在这种方式下ARP不能被修改,必须一直设为0。 CMPT=1 兼容方式。 如果ARF=0,

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

14、是循环寻址的实现。 循环缓冲区的长度值存放在BK寄存器(循环缓冲区长度寄存器)中,BK中的数值由 STM #lk,BK 指令设定。 长度为R的的循环缓冲器必须从一个N位地址的边界开始,即循环缓冲器基地址的最低N位必须为0。N是满足2NR的最小整数。R的值必须装入BK。例如,含有31个字的循环缓冲器必须从最低5位为0的地址开始,即xxxx xxxx xxx0 00002,N=5,2531,且31值必须装入BK。 循环缓冲器的有效基地址(EFB)就是用户指定的辅助寄存器(Arx)的低N位置0后得到。循环缓冲器的尾地址(EOB)是通过用BK的低N位代替ARx的低N位得到。循环缓冲器的INDEX就是A

15、Rx的低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加到辅助寄存器中时,地址以位倒序的方式产生,即进位

16、是从左向右,而不是从右向左进位。例如: 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中的地址再对存储单元访问前/后可

17、以进行修改,具体有15种修改方式。间接寻址方式下的数据存取间接寻址方式下的数据存取n*ARx访问后ARx中地址不变。n*ARx-访问后ARx中地址减1。n*ARx+访问后ARx中地址加1。n*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%访问

18、后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_TS AR2=#023AH *AR2+=#999Ah *AR2=A7 AR0=#8 nAR3=#2000H *AR3+0=#1111h *AR3+0=#2222h *AR3+0=#3333h AR4=#266

19、ah *AR4=#8848h B=#025Ah *AR2+0%=B4 双操作数寻址方式: 双数据存储器操作数寻址用在完成两个读或一个读并行一个存储器写的指令中。这些指令只有一个字长且只能以间接寻址的方式工作。其指令格式如图5-8。 图中:Xmod定义了用于访问Xmem操作数(DB数据总线)的间接寻址方式的类型; Ymod定义了用于访问Ymem操作数(CB数据总线)的间接寻址方式的类型; Xar用于确定包含Xmem地址的辅助寄存器; Yar用于确定包含Ymem地址的辅助寄存器。 两位的Xar和Yar域对辅助寄存器的选择为: Xar或Yar 辅助寄存器 00 AR2 01 AR3 10 AR4 1

20、1 AR5 Xmod和Ymod域对双数据存储器操作数寻址的类型的确定如表5-3所示。 6.存储器映射寄存器寻址:存储器映射寄存器寻址: 存储器映射寄存器(MMR)寻址用来修改存储器映射寄存器而不影响当前数据页指针(DP)或堆栈指针(SP)的值。当采用直接寻址直接寻址方式时,高9位数据存储器地址被置0,而不管当前的DP或SP为何值,利用指令中的低位地址访问MMR。 当采用间接寻址方式时,高9位数据存储器地址被置0,按照当前辅助寄存器中的低位地址访问MMR。访问MMR后,寻址操作完成后辅助寄存器的高9位被强迫置0。n例如,用AR1来指向一个存储器映射寄存器,其包含的值为FF25H,其低7位是25H

21、。而地址为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)中的数值。它也能用来

22、保护现场或传送参数。 C54x的堆栈是从高地址向低地址方向生长,并用一个16位存储器映象寄存器堆栈指针(SP)来管理堆栈,SP始终指向堆栈中所存放的最后一个数据,即SP指针始终指向栈顶。在压入操作时,先减小SP的值,再将数据压入堆栈;在弹出操作时,先从堆栈弹出数据,再增加SP的值。 采用堆栈寻址的指令有4条: PSHD: 将数据寄存器中的 一个数压入堆栈; PSHM: 将一个MMR中的值压入椎栈; POPD: 从堆栈弹出一个数至 数据存储单元; POPM: 从堆栈弹出一个数至MMR。第二节第二节 程序寻址程序寻址 程序地址是由程序地址生成器(PAGEN)生成的,并加载到程序地址总线总线(PAB

23、)上。C54x的寻址能力为64K字的程序空间,C548和C549多了7根地址线,可寻址外部128个64K字页,总计程序空间为8192K。程序地址指出程序存储器的位置,程序存储器中存放着应用程序的代码、系数表以及立即操作数。 程序地址生成器(PAGEN)由程序计数器(PC)、重复计数器(RC)、块重复计数器(BRC)、块重复起始地址寄存器(RSA)和块重复结束地址寄存器(REA)构成。 C548和C549中还有一个扩展的程序计数器(XPC),以寻址扩展的程序存储空间。 程序计数器(PC)是一个16位计数器,内中保存的是某个内部或外部程序存储器的地址,而在这个地址中存放的则是即将取指的某条指令、即

24、将访问的某个16位立即操作数或系数表在程序存储器中的地址。 将程序存储器地址加载到程序计数器的途径如表5-4所示。 表5-4中的部分加载PC的方法解释如下: 1.分支转移操作: 对C54x而言有两种分支转移形式,即条件分支转移和无条件分支转移,两者都可以带延迟操作(指令助记符带后缀D)和不带延迟操作。 条件分支转移与无条件分支转移操作上的差别仅在于前者需在规定的条件得到满足时才执行,否则不执行。当条件满足时,用分支转移的第2个字(分支转移地址)加载PC,并从这个地址继续执行程序。 无条件分支转移指令有两条: BD 用指令中所给出的地址加载PC. BACCD 用所指定的累加器的低16位作为地址加

25、载PC。 条件分支转移指令有两条: BCD 如果指令中所规定的条件得到满足,就用指令中所给出的地址加载PC; BANZD 如果当前辅助寄存器不等于0,就用指令中所规定的地址加载PC。nBD指令: 助记符方式 表达式方式 BD pmad goto pmad执行过程: pmad PC 指令指针指向指定的程序存储器地址( pmad),该地址可以是一个符号或一个数字。如果是延迟转移,紧接着转移的两条单字指令或双字指令从程序存储器中取出先执行。nBACCD指令: 助记符方式 表达式方式 BACCD src goto src( dgoto src)执行过程: (src(15-0) PC 程序指针PC指向s

26、rc的低位所确定的16-bit地址。如果是延迟转移,紧接着转移的两条单字指令或双字指令从程序存储器中取出先执行。nBANZD指令: 助记符方式 表达式方式BANZD 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。nBCD指令: 助记符方式 BCD pmad,condcond,cond 表达式方式 if(condcond,cond ) dgoto

27、mad执行过程: If (cond(s)) Then pmad PC Else (PC+2) PC 如果满足特定的条件,程序指针转移到指定的程序存储器地址( pmad);否则PC指针加2。分支转移指令对流水线影响:后面的两个指令字已经被取指。带延迟的分支转移,双字指令或两条单字指令被执行后再进行分支转移;如果是在不带延迟的分支转移后,就将已被读入的一条双字指令或两条单字指令从流水线中清除,不予执行,立即进行分支转移。 2.调用和返回: 分无条件调用与返回和有条件调用与返回,并且两者都可能带延迟和不带延迟操作。远分支转移、远调用和远返回: C548和C549 ,有一个7位的程序计数器扩展寄存器(

28、XPC),用来选择当前的64K字页程序存储器。转移前,原程序的下条指令的地址被压入堆栈,而在返回时则将这个地址弹出至PC,使被中断了的原程序能继续执行。 无条件调用与返回指令有如下几种: CALLD:将返回地址压入堆栈,用指令 所规定的地址加载PC; CALAD:将返回地址压入堆栈,用指定累加器的低16位加载PC; RETD: 用栈顶的返回地址加载PC; RETED:用栈顶的返回地址加载PC并开放中断; RETFD:用快速返回寄存器RTN中的 返回地址加载PC,并开放中断。 条件调用与返回指令有两种: CCD:如果指令中所规定的条件得到满足,则先将返回地址压入堆栈,然后用所指定的地址加载PC。

29、 RCD:如果指令中所规定的条件得到满足,则将堆栈顶部的返回地址加载PC。n 3.条件指令中的条件判断: 前面提到的条件分支转移和条件调用与返回指令中,所涉及的条件列于表5-5中。 当指令需要多重条件判断时,如: BC pmad,cond,cond,cond 必须所有的条件得到满足时,程序才能转移到pmad。由于有的条件是相斥的,因此在一条指令中,不是所有的条件都能选用的,只能进行部分组合。如表5-6所示。 表5-6中将各种可能的条件分成了两种,每组可以构成一种组合。其组合方法为: 第1组:可以从A类中选一个条件,同时可以从B类中选择一个条件。但是不能从同一类中选择两个条件。另外,两种条件测试

30、的累加器必须是同一个。例如,可以同时测试AGT和AOV,但不能同时测试AGT和BGT。 第2组:可以在A、B、C三类中各选择一个条件,但不能从同一类中选择两个条件。例如可以同时测试TC、C和BIO,但不能同时测试NTC、C和NC。n 4.重复操作: C54x具有重复执行下一条指令和重复执行一个程序块若干指令的功能。 重复执行单条指令: 可重复操作指令,可以使乘法/累加和数据块传送这类多周期指令在执行一次之后变成单周期指令,从而大大提高这些指令的执行速度。一旦重复指令被取指、译码,直到重复循环完成以前,对所有的中断(包括NMI,但不包括RS)均不响应。在执行重复操作期间,若C54x响应保持输入H

31、OLD信号,重复操作是否执行则取决于状态寄存器ST1的HM。若HM=0,则继续操作,否则暂停操作。nHLOD:输入。保持输入信号。 HLOD低电平有效时,表示外部电路请求控制地址、数据和控制信号线。当C54x响应时,这些线均变成高阻状态。nHM:保持方式位。当处理器响应信号时,HM指示处理器是否继续执行内部操作。 HM=0 处理器从内部程序存储器取指,继续执行内部操作,而将外部接口置成高阻状态。 HM=1 处理器暂停内部操作。 实现重复操作:16位的重复计数器(RC)和两条能对其下条指令进行重复操作的指令RPT和RPTZ。重复执行的次数等于(RC)+1。RC只能由重复指令(RPT和RPTZ)中

32、的操作数加载。 RC在执行减1操作时不能被访问。 该循环内不能套用循环。 nRPT指令: 助记符方式 表达式方式 RPT Smem repert(Smem) RPT #k repeat(#k) RPT #lk RPT #lk执行过程: (Smem) RC k RC lk RCnRPTZ指令: 助记符方式 表达式方式 RPTZ dst,#k repert(#lk),dst=0执行过程: 0 dst lk RC 当RPTZ指令执行时,对目的累加器dst清0,循环执行下一条指令n+1次。RC的值是一个16位常数1k。 操作数n的最大值为65 535(216),因此重复执行单条指令的最大次数为65 5

33、36。 块重复操作:块重复操作: 利用块重复计数器(BRC,加载值可为065535)、块重复起始地址寄存器(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

34、NEXT-1 ;对下条指令至标号 为NEXT前的程序 块执行 ;重复操作 NEXT:. ;重复程序块以外的 指令 执行上述程序过程:执行上述程序过程:1.先将99加载到BRC中,即对程序块重复执行99+1=100次。2.执行RPTB指令时将(PC)+2RSA,将NEXT-1REA,同时将1BRAF(状态寄存器ST1中的块重复操作标志位),表示正在进行块重复操作。每执行一次程序块重复操作,BRC减1,直到BRC减到0,将0BRAF,块重复操作全部完成。 在程序块重复操作过程中,可以响应中断。n状态寄存器1(ST1)的结构如下:n nBRAF:块重复标志位。指示块重复是否处于激活状态。 BRAF=

35、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处理器

36、工作方式状态寄存器(PMST)的结构如下:IPTR:中断向量指针。9位地址指向128字的中断向量所在的程序页。用户可以为引导操作将中断向量指针重新定义到RAM。复位时,这9位全都置1;复位向量总是驻留在程序存储器空间的地址FF80h。RESET指令不影响这个字段。复位值为1FFh。nMP/MC 微处理器/微型计算机工作方式位。 MP/MC=0,允许使能并寻址片内ROM; MP/MC =1,不能利用片内ROM。 将PC置成FF80h。将扩展的程序计数器XPC寄存器清0(仅C548和C549)。 无论MP/MC状态如何,将FF80h加到地址总线。 数据总线变成高阻状态。控制线均处于无效状态。 产生

37、中断响应信号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,则处理器从片内

38、ROM开始执行程序,否则,它将从片外程序存储器开始执行程序。第三节第三节 汇编语言格式汇编语言格式 TMS320C54x是TMS320系列中的一种定点数字信号处理器,它的指令系统分助记符形式和代数式形式两种。共有指令129条,由于操作数的寻址方式不同,派生至205条。 汇编语言程序的编写方法汇编语言程序的编写方法 TMS320C54x汇编语言源程序由包括汇编语言指令、汇编指令(伪指令)和注释的语句组成。(1)语句的开头只能是标号、空格、星号或分号。(2)标号是可选项。如果使用,必须从第一列开始。(3)每个域必须由一个或多个空格分开。(4)注释是可选项。开始于第一列的注释用星号(*)或分号(;)

39、来标明,开始于其它列的注释用分号开头。 汇编语言源程序以.asm为扩展名,程序的每一行由4个部分组成,其句法格式为: 标号: 助记符 操作数 ;注释 -n SUM: STM #a,AR3 ; AR3指向an STM #x,AR4 ; AR4指向xn RPTZ A,#3 ;累加器清0,n ;然后后一语句循环4次n*加法操作 标号域:供本程序的其它部分或其它程序调用。标号是任选项,标号后面可以加也可以不加冒号“:”。 引用标号时,标号的大小写必须一致。标号的值就是SPC(段程序计数器)的值。如果不用标号,则第一个字母必须为空格、分号或星号(*)。 指令域: 助记符指令、汇编指令、宏指令和宏调用:

40、作为助记符指令,一般用大写; 汇编命令和宏命令,以句号“.”开始,且为小写。 汇编指令汇编指令可以形成常数和变量,当用它控制汇编和链接过程时,可以不占存储空间。指令和汇编命令都不能写在第1列。 操作数:指令中的操作数或汇编命令中定义的内容。操作数之间必须用逗号“,”分开。有的指令无操作数,如NOP,RESET。注释:注释从分号“;”开始,可以放在指令或汇编命令的后面,也可以放在单独的一行或数行,注释是任选项。(如果注释从第1列开始,也可以用“*”号。) 汇编语言程序中的数据型式有下列几种: 二进制:如1110001b或1111001B; 八进制:226q或572Q; 十进制:1234或+123

41、4或-1234(缺省型) 十六进制:0A40h或0A40H或0 xA40 浮点数:1.623e-23(仅C语言程序中能用,汇编程序不能用) 字符:D 字符串:“this is a string”汇编伪指令n汇编伪指令(伪指令)是用来为程序提供数据和控制汇编进程的。 C54x汇编器共有64条汇编命令。 将代码和数据汇编到特定的段中。 为未初始化的变量保留存储器空间。 控制展开列表的形式。 存储器初始化。 汇编条件块。 定义全局变量。n(1)段定义指令 .bss 在.bss段中为未初始化的变量保留存储器空间 .date 通常包含了初始化的数据。 .sect 定义初始化的带命名的段,并将紧接着的代码

42、或数据并入该段。 .text 该段中包含了可执行的代码 .usect 在一个未初始化的有命名的段中保留空间n(2)常数初始化指令 .bes和 .space 在当前段保留确定数目的位。 当在.space 段使用了标号时,它指向保留位的第一个字;当在.bes 段使用了标号时,它指向保留位的最后一个字。 .byte 把一个或多个8位值放入当前段的连续字中。 .filed 把一个数放入当前字的特定数目的位中。 .float和 .xloat 计算以IEEE格式表示的单精度(32位)浮点数,并存放在当前段的连续字中,高位字先存。.int和 .word 把一个或多个16位数存放在当前段的连续字中。.long

43、和 .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/

44、.mnolist .option .page .title .sslist/ .ssnolistn(5)引用其他文件的指令 .copy/ .include 告诉汇编器器开始从其他文件中读源语言。 .def 确认一个在当前模块中定义的且被其他模块使用的符号。 .global 声明一个外部符号,使其他模块在连接的时候可以使用它。 .mlib 向汇编器提供一个包含宏定义的文档库的名称。 .ref 确认一个在当前段中使用但在其它段中定义的符号。n(6)条件汇编指令 .if/ .elseif/.else/ .endif 告诉汇编器根据表达式的值条件汇编一块代码。 .loop/ .break/.endlo

45、op 告诉汇编器按照表达式的值循环汇编一块代码。 .loop expression 标注一块循环代码的开始。 .break expression 告诉汇编器当表达式为假时,继续循环汇编;当表达式为真时,立即转到.endloop 后面懂得代码去。n(7)汇编时的符号指令 使有意义的符号名与常数值或字符串相等同。 .asg 规定一个字符串与一个替代符号相等,并将其存放在替代符号表中。 .eval 计算一个表达式的值并把结果传送到与一个替代符号等同的字符串中。 .label 定义一个专门的符号以表示当前段内装入时的地址而不是运行时的地址。 .set/ .equ 把一个常数值等效成一个符号,存放在符号

46、表中且不能被清除。n(8)其他方面的汇编指令 .algebraic .end .mmregs .newblock .sblock .version 第四节第四节 指令系统指令系统 TMS320C54x是TMS320系列中的一种定点数字信号处理器,它的指令系统分助记符形式和代数式形式两种。共有指令129条,由于操作数的寻址方式不同,派生至205条。 nTMS320C54x指令系统的主要特点是:n可同时读入2或3个操作数;n支持双精度运算的32位长操作数指令;n可进行单条指令重复和块指令重复操作;n有块存储器传送指令和并行操作(如并行存储和加载、并行存储和加/减法、并行存储和乘法、并行加载和乘法)

47、指令;n设有条件存储指令及延迟操作指令、有从中断快速返回指令;n有为特殊用途设计的指令(如支持FIR滤波、最小均方算法LSM、多项式计算以及浮点运算);有为省电安排的空转指令。基本类型n算术指令 加法、减法、乘法、32位操作数、特殊用途 n逻辑指令 与、或、异或和移位、测试n程序控制指令 跳转、调用、中断、返回、重复、栈操作和复杂控制n装入和存储指令 载入、存储、条件存储、并行载入存储、并行载入乘法、并行存储加减、并行存储乘法和复杂载入存储n加减运算: (1)ST1中符号扩展模式位SXM: SXM=0,符号不扩展; SXM=1,符号扩展。 (2)ALU运算模式位C16: C16=0,双精度(3

48、2位)运算; 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-#9ACDH16 ;A=00 6532 36AB hB=#0C69Eh ;B=FF FFFF C69E hB=A-*AR5 ;B=00 6531 B6AC hSXM=0A=#07ab8h16 ;A=00 7ab8 0000hA=A+#4adeh ;A=

49、00 7ab8 4adehA=A=#8ADEH16 ;A=FF EFDA 4ADEh;-C16-SXM=1C16=0/长操作数A=A+*AR312 ;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 hA=A-*AR5-BORROW ;A=FF B979 CDDFhA=A+UNS(*AR5+) ;A=FF B979 CDDFh+uns(FF FFFF A866h) =

50、FF B97A 7645hT=#1234H ;T=1234HB=DADST(*AR5,T) ;B=FF BA9A 4358 hC16=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=*AR3116-B ;A=FF F14D 7654 hn逻辑运算:AR2=#3000h A=#1234h*A=#6789hA=A&*AR2-B=#8

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com