DSP原理及应用PPT教程-第四章 程序流程控制.ppt_第1页
DSP原理及应用PPT教程-第四章 程序流程控制.ppt_第2页
DSP原理及应用PPT教程-第四章 程序流程控制.ppt_第3页
DSP原理及应用PPT教程-第四章 程序流程控制.ppt_第4页
DSP原理及应用PPT教程-第四章 程序流程控制.ppt_第5页
免费预览已结束,剩余41页可下载查看

下载本文档

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

文档简介

第四章 程序流程控制,程序流程:指的是指令的执行顺序。 c55x中影响指令执行顺序的主要有: 程序跳转(分支) 指令重复执行 条件执行 中断 程序调用 程序的流程控制主要与指令缓冲单元(i单元)和程序流程单元(p单元)有关。,第四章 程序流程控制,p单元产生24位的程序地址,并放到pab总线上。 i单元的ibq从32位的程序总线读取32比特的指令代码。 译码器从ibq中读取48比特的指令进行译码,将指令和立即数分派到相应的单元执行。,第四章 程序流程控制,一、跳转(分支) 跳转:通过跳转指令改变pc的值,使程序跳到指令指定的分支地址执行。跳转指令可以是有条件的,也可以是无条件的。 1、条件跳转 判断条件cond,如果条件成立则将目标地址装入pc,完成跳转。 (1) bcc 14, cond ;4比特长相对pc的无符号偏移 (2) bcc l8, cond ;8比特长相对pc的有符号偏移 (3) bcc l16, cond ;16比特长相对pc的有符号偏移 (4) bcc p24, cond ;24比特的绝对地址。,第四章 程序流程控制,在指令流水线的读(r)环节判断条件cond; cond条件可以是寄存器acx,arx,tx与0值的比较,也可以是测试位tcx以及进位标志carry的值。 若条件为真,就把l4、l8、l16、p24指定的程序地址装入pc中,完成分支跳转。 跳转指令不能重复执行。 举例:,004055 bcc branch, *ar0 != #0 004056 00f05a branch: .,程序地址,假设ar0的值为3000,ar0的值不等于0 ,条件为真,跳转到标号为branch处执行,这时pc=00f05a,第四章 程序流程控制,2、无条件跳转 不需要满足任何条件,直接将目标地址装入pc。 (1) b acx ;把acx的低24位的值装入到pc中 (2) b l7 ;7比特长相对pc的有符号偏移 (3) b l16 ;16比特长相对pc的有符号偏移 (4) b p24 ;24比特的绝对地址,举例: mov #1,ac1 b branch ; address: 004042: mov #2, ac1 branch: ; address: 006047: mov #0, ac1,跳转前 pc 004042 ac1 00 0000 0001 跳转后 pc 006047 ac1 00 0000 0000,第四章 程序流程控制,二、指令重复 指令重复:指重复执行一定次数的一条或者一段指令。包括无条件单指令重复,有条件单指令重复,块重复三种形式。 1、无条件单指令重复: (1) rpt #n; 将下一条指令重复执行n+1次 (2) rpt csr; csr单重复寄存器,下一条指令重复csr+1次 (3) rptadd csr, tax;下一条指令重复csr+1次后,tax +csr-csr (4) rptadd csr, k4;下一条指令重复csr+1次后,csr+k4-csr (5) rptsub csr, k4;下一条指令重复csr+1次后,csrk4-csr,第四章 程序流程控制,举例:rptadd csr, t1 mov *ar0, t0 ;重复 csr + 1次后,t1的值加到csr中。 2、有条件单重复指令 rptcc k8,cond;当条件为真时,下一条指令重复k8+1次 每次重复在流水线的执行(x)阶段检查cond定义的条件,当条件不满足时,停止单指令重复。最大重复执行次数为28-1=255 举例: rptcc #7, ac1 #0 add #1,ac0 ;ac0=ac0+1,执行流水线分为8个环节:f/,d,ad,ac1,ac2,r,x,w,第四章 程序流程控制,以下指令不能用做单指令循环体: b ;跳转 idle ;空闲指令 rptblocal ;块重复 reset ;软件复位 mov rptc, tax ;rptc单指令重复计数器 trap ;软件陷阱 mov dbl(lmem), reta rptb ;块重复 call ;子程序调用 rpt ;单指令重复 intr ;中断陷阱 xcc ;条件执行 ret ;从子程序返回,第四章 程序流程控制,3、块重复:同时重复多条指令。 块重复(块循环)的语法形式为: (1) rptblocal label (2) rptb label 执行步骤: (1) 重复执行次数由块重复计数器(brc0或brc1)定义。 (2) 由rptb或rptblocal定义块的开始地址,并放入到块重 复起始地址寄存器(rsa)中。 (3) 由rptb或rptblocal后面的标号(label)定义块的结束地址,并放到块重复结束地址寄存器(rea)中。,第四章 程序流程控制,特点: (1)由于brc0或brc1是16比特计数器,所以最大重复次数是64k,在初始化块重复计数器时,其值应为实际重复次数减1。 (2)一个循环体内的最小执行周期为2个机器周期。 rptblocal和rptb区别 rptblocal被定义为指令缓冲队列(ibq)的本地循环,即直接从ibq中获取循环体指令,这样可以减少功率消耗,但是循环体指令的字数不能超过56个字节。 当循环体指令超过56个字节时,使用rptb块循环。,第四章 程序流程控制,支持两层块循环 一层循环(外循环):brc0, rsa0, rea0; 二层循环(内循环): brc1, rsa1, rea1,brs1; 内循环完成后跳到外循环执行。如果再次进入内循环,则不需要初始化brc1,块重复备份寄存器(brs1) 自动保存内循环块的重复次数。 任何一个块循环内都可以嵌套单指令重复。所以c55x可以支持三层指令循环。,第四章 程序流程控制,块重复举例 mov #31,brc0 ;对外循环块重复计数器brc0赋值,重复32次。 mov #127,brc1 ;对内循环块重复计数器brc1赋值,重复128次。 rptb outerloop ;定义外循环块的起始地址。 mov #0,ac0 rptb innerloop ;定义内循环块的起始地址。 mac *ar0,*cdp+,ac0 mov *ar3+,t0 innerloop: ;内循环块的结束地址。 sub #(127*2),ar0 outerloop: ;外循环块的结束地址。 nop,第四章 程序流程控制,三、条件执行 条件执行:即有条件的执行下一条指令。 xcc label, cond xccpart label, cond 注:使用这两条指令时,必须注意条件作用的流水线阶段不同。 例1:如果t0=0 xccpart label,t0!=#0 add *ar2+, ac0 label: mov *ar2, ac0,ar指针的修改是在流水线的寻址阶段(ad)发生的,而使用xccpart从流水线的寻址阶段(ad)到读操作数(r)阶段都是无条件的,只有在流水线执行(x)阶段才是有条件的。故无论条件t0!=#0成立与否,ar2都会被修改。,条件满足:即t0!=#0,执行add指令, ar2被修改 条件不满足:执行mov指令,但在执行该指令前, ar2指针已被修改了。,执行流水线分为8个环节:f/,d,ad,ac1,ac2,r,x,w,第四章 程序流程控制,例2: xcc label,t0!=#0 add *ar2+, ac0 label : mov *ar2,ac1 使用xcc指令时,从流水线的寻址(ad)到执行(x)阶段都是有条件的。所以只有当条件满足时,ar2和ac0的值才能被修改。本例中,条件不满足,所以ar2和ac0的值没有被修改。,中断是为dsp具有对外界异步事件的处理能力而设置的。当dsp的外界异步事件发生时,cpu暂停当前的工作去处理外界异步事件,当处理完成后,再回到原来被中断的地方,继续执行原来的工作。 1、中断 (1)由硬件或软件信号产生的,它使dsp暂停当前程序转而去执行中断服务程序(isr),从而可以实时的进行事件处理。 (2) tms320c5509支持32个isr,有的即可以用软件触发也可以由硬件触发,有的只能由软件触发。 软件中断:由程序指令产生,如:intr、trap、reset 硬件中断:由设备的信号产生,可以是外部引脚信号(外部中断),也可以是片内外设信号(内部中断)。,四、中 断,第四章 程序流程控制,(3) 中断可分为可屏蔽中断和非屏蔽中断两类。 可屏蔽中断:用软件将其设置为禁止中断或允许中断。 非屏蔽中断:不能被禁止,一旦产生,cpu立即响应中断。 2、中断处理的四个步骤 (1) cpu接收中断请求,挂起当前程序; (2) 响应中断请求:可屏蔽中断须满足某些条件,非屏蔽中断立即响应。 (3) 准备中断服务程序 cpu完成当前的指令执行,清除流水线中未译码的指令。 在数据堆栈和系统堆栈中保存相关寄存器的内容, 从中断矢量表中取出中断矢量,中断矢量指针(ivpd、ivph)指向中断服务程序。,第四章 程序流程控制,(4) 执行中断服务程序 isr包含中断返回指令,当中断返回时,自动恢复以前保存在寄存器中的内容。 3、中断矢量及其优先级 cpu接受和响应中断请求后,产生一个中断矢量地址,地址指向相关中断服务程序的中断矢量。书中表4-2。 多个中断同时发生时,cpu按照事先定义的优先级进行处理。 优先级为0的优先权最高,随着优先级数的逐步增加,优先权逐步减小。,vector: rs b _c_int00 nop nop nmi b _ret nop nop int0 b _ret nop nop . . . dmac5 b _ret nop nop,第四章 程序流程控制,4、中断管理寄存器 c55x芯片有8个中断管理寄存器。 interrupt vector pointers (ivpd, ivph) interrupt flag registers (ifr0, ifr1) interrupt enable registers (ier0, ier1) debug interrupt enable registers (dbier0, dbier1) 中断矢量指针(ivpd,ivph) 均为16比特的寄存器,指向程序空间的中断矢量(中断服务表ist的基地址)。,第四章 程序流程控制,dsp中断矢量指针(ivpd) 指向包含dsp中断矢量的256字节的程序页,dsp中断矢量序号是015,2431,这些矢量可以被映射到只分配给dsp的存储空间。 主机中断矢量指针(ivph) 指向包含主机中断矢量的256字节的程序页。主机中断矢量序号是1623,这些矢量可以被映射到分配给dsp和主机共享的存储空间。 若ivpd和ivph内容相同,则32个中断矢量均位于相同的256字节程序页中。,第四章 程序流程控制,dsp的硬件复位:使这两个指针都指向ffffh,即指向0xffff00的地址,软件复位对这两个指针没有影响。 一般在程序初始化时设定中断矢量指针的值,防止取非法指令代码,在修改中断矢量指针(ivpd,ivph)前应当确定: (1) 禁止所有的可屏蔽中断(st1_55): bset intm (2) 要求每个硬件非屏蔽中断对新旧ivpd值分别有一个中断矢量和一个中断服务程序。,第四章 程序流程控制,中断矢量地址的形成 cpu将16比特的中断矢量指针与5比特的中断矢量序号级联然后左移三位形成中断矢量地址。,第四章 程序流程控制,中断标志寄存器(ifr)和中断使能寄存器(ier) 它们包含所有的可屏蔽中断的标志位和使能位。,ifr0和ier0寄存器,ifr1和ier1寄存器,第四章 程序流程控制,当cpu接收到一个可屏蔽中断请求时,cpu将ifr中的相应标志位置1,表明此中断被挂起或等待cpu响应,因此可以通过读ifr来识别挂起中断。 中断标识寄存器的修改 可以写入0来清除挂起中断 响应硬件中断请求能清除ifr中相应的标志位; reset能清除所有ifr中的标志位。,第四章 程序流程控制,中断使能寄存器(ier0、ier1) 用于对可屏蔽中断的使能。 将中断使能寄存器中相应位置1,表示允许一个可屏蔽中断 置0表示禁止响应可屏蔽中断。 reset时全部置0,禁止所有可屏蔽中断。,mov 0x02c8,ier0,0000 0010 1100 1000,打开中断:int2、mcbsp1收、发中断和dmac1中断,第四章 程序流程控制,5、可屏蔽中断 可以通过软件禁止和允许的中断称为可屏蔽中断, 55x 的可屏蔽中断都是硬件中断。 (1)c55x的可屏蔽中断有: 序号2 23的中断矢量:这22个中断都可以通过dsp引脚或外设信号触发。,第四章 程序流程控制,(2) 设置一个可屏蔽中断用到的寄存器 st1_55中的intm(中断模式位)位:允许(intm 0)或禁止(intm 1)所有的可屏蔽中断 ier0 和ier1; ifr0 和ifr1; dbier0 和 dbier1;,第四章 程序流程控制,(3) 可屏蔽中断标准处理流程,cpu接受一个可屏蔽中断请求,cpu设置并锁存ifr0或ifr1中断相应位,ier0或ier1中断相应位为1,cpu才响应中断,intm=0时,允许所有的中断,cpu才响应中断,完成流水线译码阶段的指令,清除流水线中其它的指令 清除ifr0或ifr1中断相应位,表示中断已被响应。 自动保护中断现场 intm=1,dbgm=1,eallow=0(禁止访问非cpu仿真寄存器),isr最后的返回指令,执行自动现场恢复,第四章 程序流程控制,6、非屏蔽中断 cpu收到非屏蔽中断请求时,无条件响应并跳转到相应的中断服务程序(isr)。 非屏蔽中断包括 硬件复位中断: 将 reset_ 引脚电平置为低, 强制dsp复位并执行复位中断isr。 硬件nmi_中断:将nmi_引脚电平置为低, 强制cpu执行相应isr,它提供一个通用的无条件中断的硬件方式。 所有的软件中断:中断矢量序号为031中的任何一个软中断。,第四章 程序流程控制,(2) 产生软件中断的指令方式 intr #k5: k5的5比特可以指32个软件中断中的任何一个,在执行isr前自 动保护现场,并置intm=1。 trap #k5: 与intr #k5不同的是不置位intm reset:软件复位。,第四章 程序流程控制,(3) 非屏蔽中断标准处理流程,第四章 程序流程控制,7、dsp复位 复位是一种非屏蔽中断,任何时候都可以对dsp进行复位 硬件复位:cpu放弃所有操作,清空指令流水线,复位cpu的寄存器,然后按照非屏蔽中断的标准处理流程执行复位isr。 软件复位:由软件指令触发,复位时仅影响中断状态寄存器(ifr0,ifr1)和三个状态寄存器(st0_55,st1_55,st2_55)。 dsp的硬件复位使中断矢量指针(ivpd,ivph)的值为ffffh,即指向0xffff00的地址,软件复位对它们没有影响。,第四章 程序流程控制,五、程序调用 当一个子程序被调用时,正在指令缓冲单元中译码的指令地址被保存到reta寄存器或堆栈中,该地址用于返回时继续执行子程序调用前的指令。 1、无条件程序调用 程序执行到下列指令时就调用子程序。 call acx:子程序的地址由acx(230)值决定 call l16 :16比特长相对于pc的有符号的偏移量。 call p24 :24比特长的绝对地址。,堆栈生长方向,0x0ff*,0x0000,堆栈生长方向,(sp),栈底 栈顶,先压栈,后sp-1。 先sp+1,后出栈。,第四章 程序流程控制,子程序调用过程: (1)在流水线寻址阶段(ad)将数据堆栈(sp)指针减1(字),然后将reta的低16位压入数据堆栈。 (2)在流水线寻址阶段(ad)将系统堆栈(ssp)指针减1(字),然后将reta的高8位和cfct(控制流程关系寄存器,8位)的值压入系统堆栈。 (3)将调用子程序返回地址(call语句的下一条语句的地址)保存到reta中,当前循环标志保存到cfct中。 (4)将子程序的程序地址装入pc中,清除当前循环关系标志。 注意:循环关系指的是当前重复循环的类型和状态记录。,第四章 程序流程控制,2、无条件返回 ret ;执行无条件返回到主程序。 返回过程: (1)reta中的返回地址装入pc,从cfct中恢复循环关系标志; (2)从数据堆栈(sp)中恢复reta的低16位,sp指针加1; (2)从系统堆栈(ssp)恢复reta的高8位和cfct,ssp指针加1。,第四章 程序流程控制,3、条件程序调用 callcc l16,cond callcc p24,cond 子程序调用过程: 在流水线寻址阶段(ad)将数据堆栈(sp)指针减1(字),然后将reta的低16位压入数据堆栈。 在流水线寻址阶段(ad)将系统堆栈(ssp)指针减1(字),然后将reta的高8位和cfct的值压入系统堆栈。 将调用子程序返回地址保存到reta中,当前循环标志保存到cfct中。,在程序流水线的读(r)阶段对cond条件判断。条件为真时调用子程序。,第四章 程序流程控制,3、条件返回 retcc cond 返回过程: reta中的返回地址装入pc,从cfct中恢复循环关系标志。 从数据堆栈(sp)中恢复reta的低16位,sp指针加1; 从系统堆栈(ssp)恢复reta的高8位和cfct,ssp指针加1。,在程序流水线的读(r)阶段对cond条件判断。条件为真时返回到主程序。,第四章 程序流程控制,六、堆栈 当程序调用中断服务程序或子程序时,将程序计数器pc的值或一些重要寄存器的值进行压栈保护,以便程序返回时能从间断处正常继续执行。 1、数据堆栈和系统堆栈 c55x支持两个16比特的软件堆栈,分别被称为数据堆栈(用sp访问)和系统堆栈(用ssp访问),sp和ssp指针寄存器的高8位是公用的为sph,sph可以分别与sp和ssp级联构成23位地址。,扩展数据堆栈指针 扩展系统堆栈指针,第四章 程序流程控制,程序计数器pc的值是24位的,调用子程序时,通过压栈进行保护。 数据堆栈保存返回地址的低16位,系统堆栈保存高8位。,第四章 程序流程控制,2、堆栈配置 c55x提供三种堆栈配置方式,一种为快返回过程,另两种为慢返回过程。它们的区别在于保护和恢复pc和循环关系寄存器的方式不同。 (1)慢返回过程: 将返回地址和循环关系标志保存到堆栈,但cpu从中断服务程序或子程序返回时,其速度与存储器的存取速度有关; 具有慢速返回的双16比特堆栈: 数据堆栈和系统堆栈相互独立,当访问数据堆栈时修改sp但ssp不变,执行返回时不使用返回地址寄存器(reta)和流程控制寄存器(cfct)。,第四章 程序流程控制,具有慢速返回的32比特堆栈: 数据堆栈和系统堆栈被视为单一的32比特堆栈,当访问数据堆栈时用相同的增量修改sp和ssp,执行返回时不使用返回地址寄存器(reta)和流程控制寄存器(cfct)。 (2) 快返回过程: 将返回地址和循环关系标志保存到返回地址寄存器(reta)和流程控制寄存器(cfct)中,因而能够很快的恢复。 具有快速返回的双16比特堆栈: 数据堆栈和系统堆栈相互独立,当访问数据堆栈时修改sp但ssp不变,执行快速返回时使用返回地址寄存器(reta)和流程控制寄存器(cfct)。 注:上文说的循环关系寄存器和流程控制寄存器都指cfct,第四章 程序流程控制,例:堆栈定义步骤以及初始化 (1)声明具有适当长度的未初始化段 (2)将堆栈指针指向栈顶 (3)在连接命令文件(*.cmd)中,将堆栈段放入内部存储区内。 sp_stack_len .set 100 ssp_stack_len .set 100 sp_stack .usect “stack”, sp_stack_len ssp_stack .usect “

温馨提示

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

评论

0/150

提交评论