欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    DSP原理及应用PPT教程第四章 程序流程控制.ppt

    • 资源ID:2240153       资源大小:2.93MB        全文页数:46页
    • 资源格式: PPT        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    DSP原理及应用PPT教程第四章 程序流程控制.ppt

    第四章 程序流程控制,程序流程:指的是指令的执行顺序。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!=#0004056 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 nopnmi b _ret nop nopint0 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,即指向0 xFFFF00的地址,软件复位对这两个指针没有影响。一般在程序初始化时设定中断矢量指针的值,防止取非法指令代码,在修改中断矢量指针(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 0 x02C8,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,即指向0 xFFFF00的地址,软件复位对它们没有影响。,第四章 程序流程控制,五、程序调用 当一个子程序被调用时,正在指令缓冲单元中译码的指令地址被保存到RETA寄存器或堆栈中,该地址用于返回时继续执行子程序调用前的指令。1、无条件程序调用 程序执行到下列指令时就调用子程序。CALL ACx:子程序的地址由ACx(230)值决定 CALL L16:16比特长相对于PC的有符号的偏移量。CALL P24:24比特长的绝对地址。,堆栈生长方向,0 x0FF*,0 x0000,堆栈生长方向,(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 100ssp_stack_len.set 100sp_stack.usect“stack”,sp_stack_len ssp_stack.usect“stack”,ssp_stack_len.textAMOV#(sp_stack+sp_stack_len),XSPMOV#(ssp_stack+sp_stack_len),SSP,第四章 程序流程控制,3、自动前后关系转换(1)程序调用的快速返回关系转换调用前 开始执行被调用程序之前SP和SSP指针值减1,将CFCT和RETA并行压入系统堆栈和数据堆栈 然后将返回地址,循环关系标志分别保存到RETA和CFCT中 返回时强迫CPU按相反顺序恢复保存的值,即先从RETA和CFCT中返回PC的值,再从堆栈中返回RETA和CFCT的值,堆栈指针加1。,第四章 程序流程控制,(2)中断的快速返回关系转换调用时:将状态寄存器(ST0_55,ST1_55,ST2_55),调试状态寄存器(DBSTAT)以及CFCT和RETA并行压入系统堆栈和数据堆栈,每次压栈之前SP和SSP指针值减1。将返回地址,循环关系标志分别保存到RETA和CFCT中返回时:CPU按相反顺序恢复保存的值,先从RETA和CFCT中返回PC的值,再从堆栈中依次返回CFCT和RETA,调试状态寄存器(DBSTAT)以及状态寄存器(ST0_55,ST1_55,ST2_55)的值,每次弹出数据时堆栈指针加1。,第四章 程序流程控制,(3)程序调用的慢速返回关系转换:调用子程序之前,CPU自动将返回地址(PC)和循环关系标志并行压入系统堆栈和数据堆栈,每次压栈之前SP和SSP指针值减1。返回时:强迫CPU从堆栈弹出返回地址到PC并恢复循环关系标志,在数据弹出堆栈后堆栈指针加1。,第四章 程序流程控制,(4)中断的慢速返回关系转换:调用时:将状态寄存器(ST0_55,ST1_55,ST2_55),调试状态寄存器(DBSTAT)以及返回地址(PC)和循环关系标志并行压入系统堆栈和数据堆栈,每次压栈之前SP和SSP指针值减1。返回时:CPU从堆栈弹出返回地址到PC并恢复循环关系标志,再从堆栈中依次返回调试状态寄存器(DBSTAT)以及状态寄存器(ST0_55,ST1_55,ST2_55)的值,每次弹出数据时堆栈指针加1。,

    注意事项

    本文(DSP原理及应用PPT教程第四章 程序流程控制.ppt)为本站会员(仙人指路1688)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开