DSP 第三章程序控制.ppt_第1页
DSP 第三章程序控制.ppt_第2页
DSP 第三章程序控制.ppt_第3页
DSP 第三章程序控制.ppt_第4页
DSP 第三章程序控制.ppt_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

第3章程序控制和中断管理,是指CPU对程序运行的控制通常程序是顺序执行的,即在程序存储器地址上取指并执行。但有时程序需要转移到不连续的地址,然后再连续执行新地址处的指令。TMS320C2000中影响程序控制操作的指令有:分支转移调用与返回重复指令中断复位,4.1程序地址的产生,在执行当前指令的同时,程序流要求处理器生成下一条指令的程序地址。它是顺序或非顺序的。程序地址产生逻辑使用以下硬件:(1)程序计数器(PC):C2000为16位PC。(2)程序地址寄存器(PAR):驱动程序地址总线(PAB),提供程序的读、写地址。(3)堆栈:16位宽、8级硬件堆栈最多可保存8个返回地址。(4)微堆栈(MSTACK):16位,1级深的堆栈,用于保存一个返回地址。(5)重复计数器(RPTC):16位,与重复指令(RPT)一起,用来确定RPT后面的一条指令重复执行次数。,一、程序计数器(PC),程序计数器(PC)存放将被执行的下一条指令的地址。影响PC加载方式的程序控制操作:(1)复位(2)顺序执行(3)分支转移(4)由累加器转移(5)子程序调用与返回(6)从累加器调用与返回(7)软件或硬件中断,加载到PC的地址:PC=0000h(复位向量地址),一、程序计数器(PC),程序计数器(PC)存放将被执行的下一条指令的地址。PC的加载方式:(1)复位(2)顺序执行(3)分支转移(4)由累加器转移(5)子程序调用与返回(6)从累加器调用与返回(7)软件或硬件中断,加载到PC的地址:PC=PC+1例:PC目标代码指令0108be42CLRCOVM0109bd00LDP#0010a,一、程序计数器(PC),程序计数器(PC)存放将被执行的下一条指令的地址。PC的加载方式:(1)复位(2)顺序执行(3)分支转移(4)由累加器转移(5)子程序调用与返回(6)从累加器调用与返回(7)软件或硬件中断,加载到PC的地址:PC=转移指令之后16位立即数例:Bpma,一、程序计数器(PC),程序计数器(PC)存放将被执行的下一条指令的地址。PC的加载方式:(1)复位(2)顺序执行(3)分支转移(4)由累加器转移(5)子程序调用与返回(6)从累加器调用与返回(7)软件或硬件中断,加载到PC的地址:PC=累加器的低16位值例:BACC,一、程序计数器(PC),程序计数器(PC)存放将被执行的下一条指令的地址。PC的加载方式:(1)复位(2)顺序执行(3)分支转移(4)由累加器转移(5)子程序调用与返回(6)从累加器调用与返回(7)软件或硬件中断,调用:将PC中下一条指令的地址压入堆栈,将调用指令后的16位立即数装入PC;返回:将返回地址从堆栈中弹回PC。例:PC指令0100CALL01e0h0102,一、程序计数器(PC),程序计数器(PC)存放将被执行的下一条指令的地址。PC的加载方式:(1)复位(2)顺序执行(3)分支转移(4)由累加器转移(5)子程序调用与返回(6)从累加器调用与返回(7)软件或硬件中断,调用:将PC中下一条指令的地址压入堆栈,将累加器中的低16位数装入PC;返回:将返回地址从堆栈中弹回PC。例:PC指令0100CALA0101,一、程序计数器(PC),程序计数器(PC)存放将被执行的下一条指令的地址。PC的加载方式:(1)复位(2)顺序执行(3)分支转移(4)由累加器转移(5)子程序调用与返回(6)从累加器调用与返回(7)软件或硬件中断,将PC压入堆栈,然后用适当的中断向量单元地址装入PC。通常在该单元地址中存放一条转移指令,又将相应的中断服务子程序地址装入PC。例:INT2产生中断0004ff80B1000h10000108be42CLRCOVM0109bd00LDP#0010a8b8fMAR*,AR7010bb93fLACL#3Fh,响应中断PC=010ah压入堆栈,一、程序计数器(PC),程序计数器(PC)存放将被执行的下一条指令的地址。PC的加载方式:(1)复位(2)顺序执行(3)分支转移(4)由累加器转移(5)子程序调用与返回(6)从累加器调用与返回(7)软件或硬件中断,将PC压入堆栈,然后用适当的中断向量单元地址装入PC。通常在该单元地址中存放一条转移指令,又将相应的中断服务子程序地址装入PC。例:INT2产生中断0004ff80B1000h10000108be42CLRCOVM0109bd00LDP#0010a8b8fMAR*,AR7010bb93fLACL#3Fh,中断向量0004h装入PC,一、程序计数器(PC),程序计数器(PC)存放将被执行的下一条指令的地址。PC的加载方式:(1)复位(2)顺序执行(3)分支转移(4)由累加器转移(5)子程序调用与返回(6)从累加器调用与返回(7)软件或硬件中断,将PC压入堆栈,然后用适当的中断向量单元地址装入PC。通常在该单元地址中存放一条转移指令,又将相应的中断服务子程序地址装入PC。例:INT2产生中断0004ff80B1000h10000108be42CLRCOVM0109bd00LDP#0010a8b8fMAR*,AR7010bb93fLACL#3Fh,转移指令1000h装入PC,二、堆栈,硬件堆栈区:16位宽、8级深。用途:当调用子程序或发生中断时,程序地址产生逻辑利用该堆栈保存一个16位返回地址。当CPU进入子程序或中断服务程序时,返回地址自动装入该堆栈的栈顶。当子程序或中断服务程序完成时,返回指令将返回地址从栈顶传送到程序计数器PC。堆栈也可以用来保存数据或用于其他目的。,有两组访问堆栈的指令:1)PUSH和POP:PUSH:把累加器(32位)的低半部分(低16位)拷贝到栈顶。POP:把栈顶的值拷贝到累加器的低半部分2)PSHD和POPD:当子程序或中断嵌套超过8级时,可利用这两条指令在数据存储区中建立一个堆栈。即把堆栈区延伸到数据存储区。PSHDdma;将数据存储器中的值压入栈顶。POPDdma;将栈项的值弹出到数据存储器。,每当一个数值压入栈顶,堆栈中每级的内容都下移一级,栈底(第8级)的内容则丢失。PSHDdma,弹出操作把堆栈中每一级的值都拷贝到较高的下一级。操作与压入操作相反,POPDdma,三、微堆栈(MSTACK),微堆栈共有1级深、16位宽,与堆栈不同,它的操作是不可见的。执行下列指令时,程序地址产生逻辑,利用微堆栈保存返回地址。块传送BLDDBLPD乘且累加MAC、MACD表读写TBLD、TBLW,例:RPT#9BLDD#lk,*+源地址目的地址操作过程:执行PC+1,然后(PC)(MSTACK)lk(源地址)PC(源地址)(目的地址)PC+1PC利用重复指令,进行数据块传送,直到重复计数器(RPTC)=0;(MSTACK)(PC),四、流水线操作,TMS320C2000的流水线有4个独立的阶段:取指令指令译码取操作数执行指令由于这4个操作阶段是独立的,因此,这些操作可以重叠进行。在任意的指定周期内,1-4个不同的指令均被激活,每一条被激活的指令均处于一个不同的完成阶段。对于单字、单周期指令(无等待状态),4级流水线的操作示意图如下:,4.2转移、调用和返回,转移、调用和返回将改变指令流的顺序,转到新的地址单元去执行指令。转移:仅使程序控制转换到新的地址单元。采用跳转指令调用:子程序调用中断服务程序要将返回地址保存到硬件堆栈的栈顶。被调用的子程序或中断服务程序都以返回指令结束。转移、调用和返回指令的类型:无条件转移、调用和返回有条件转移、调用和返回,一、无条件指令,无条件转移指令Bpma;用指令中给定的地址pma装载PCBACC;用累加器中低16位数值ACC(015)装载PC无条件调用指令CALLpma;将返回地址压入堆栈,用pma装载PCCALA;将返回地址压入堆栈,用ACC(015)装载PC无条件返回指令RET;将栈顶的值(返回地址)加载到PC,二、有条件指令,有条件指令指仅当某些指定的条件满足时才执行。条件及符号,条件的组合:在条件指令的操作数中可以有多个条件。注意:某些条件只有组合才是有意义的。对于每一种组合,必须按如下规则从组1和组2中选择条件。同一类的条件不能组合。,有条件指令条件转移指令BCNDpma,cond1,cond2,;条件cond1,cond2都满足时转移。例:BCNDPGM1,LEQ,OVBANZpma;当前AR0时,转移。条件调用指令CCpma,cond1,cond2,;条件cond1,cond2都满足时调用。例:CC00BFh,LEQ,OV条件返回指令RETCcond1,cond2,;条件cond1,cond2都满足时返回。,4.3重复指令,重复指令(RPT)允许紧跟在RPT后的那一条指令重复执行N+1。N为RRT指令中的一个操作数。在执行RPT时,计数值N被装入重复计数器(RPTC),然后,被重复的指令每执行一次,RPTC就减1,直至RPTC为0。例:指令执行前寄存器状态:ARP=1;AR1=300h执行指令:RPT#9;下一条指令执行10次BLDD#320h,*+上面的指令执行结果:将数据存储器:0320h032Ah单元的内容-0300h030Ah中,4.4中断中断是由软件或硬件产生一个信号,该信号引起CPU挂起主程序,并转而执行一个子程序,即中断服务子程序。,一、概述1)中断信号的产生:C2000支持软件和硬件两种中断。软件中断:由中断指令INTR,NMI或TRAP请求。硬件中断:外部中断由外部中断引脚上的信号触发,如:RS,NMI内部中断由片内外设的信号触发。,2)中断优先级硬件中断可能同时产生,CPU依据中断源的优先级顺序而执行相应的中断服务子程序。C240X的硬件中断分为两级:CPU中断(8个)(核心级)外设中断(46个),分别挂在CPU中断中6个可屏蔽中断之下。CPU中断优先级为1-RESET;复位中断2-保留3-NMI;不可屏蔽中断4-INT1;可屏蔽中断5-INT2;可屏蔽中断6-INT3;可屏蔽中断7-INT4;可屏蔽中断8-INT5;可屏蔽中断9-INT6;可屏蔽中断,3)可屏蔽中断与不可屏蔽中断,可屏蔽中断:指可以用软件设置使它们禁止(屏蔽)或允许(不屏蔽)的中断,可屏蔽中断均为硬件中断。C240X的可屏蔽中断为INT1INT6,这些中断源下面挂着外设和外部引脚,如:ADC、SPI、SCI、事件管理器等。不可屏蔽中断:包括:所有的软件中断两种外部硬件中断:(RS,NMI)。对于不可屏蔽中断,CPU总是要响应,并从主程序转移到相应中断服务程序。,4)中断矢量,中断矢量指CPU响应中断后,PC装载的地址。MS320C2000器件CPU中断的中断矢量表安排在程序存储器地址为0000h003Fh的64个单元。每个CPU中断分配了两个地址单元,用以存放一条两个字的转移指令。外设中断的中断矢量放在外设中断矢量寄存器(PIVR)中,5)中断操作步骤,TMS320C2000管理中断分为3个主要阶段:(1)接受中断请求:来自程序代码的软件中断请求、来自引脚或片内设备硬件中断请求到达CPU时,该中断挂起,或说在等待响应。(2)响应中断:如果是可屏蔽中断,则必须满足一定的条件时CPU才会响应;对非屏蔽中断则立即响应。(3)执行中断服务程序:一旦中断被响应,CPU就根据放在中断矢量地址中的转移指令,按照要求转移到相应的中断服务程序中去执行。执行结束后返回。对于中断的管理,TMS320C2000系列中不同型号的芯片有许多不同之处。以下以LC/LF240X为例。,二、可屏蔽中断,1结构LF/LC240X器件的CPU提供了6个可屏蔽中断,INT1-INT6。利用这6个中断级,通过扩展设计,使得C240X器件能够管理46个可屏蔽中断请求。,2中断管理寄存器CPU中断寄存器外设中断寄存器,1)CPU中断寄存器:用于管理CPU中断INT1-INT6:中断标志寄存器(IFR)中断屏蔽寄存器(IMR)CPU中断标志寄存器(IFR)地址0006h用于识别和清除挂起的中断,当INT1-INT6中某一个中断向CPU发出中断请求时,该寄存器中相应的位被置1。,读取IFR可以识别挂起的中断,而向相应的位写1清除己挂起的中断。CPU响应中断或器件复位都能将IFR标志清除。,CPU中断屏蔽寄存器(IMR)地址0004h向IMR中某位写1,则屏蔽相应的中断级,写1则使能该中断级。,2)外设中断寄存器:,用于管理挂在内核级中断INT1-INT6下的46个外设中断。包括:一个外设中断矢量寄存器(PIVR)、三个外设中断请求寄存器(PIRQR0/1/2)三个外设中断应答寄存器(PIACKR0/1/2),外设中断矢量寄存器(PIVR)地址701Eh用于存放最近一次被响应的外设中断的矢量地址。(二级中断矢量地址),2)外设中断寄存器:,用于管理挂在内核级中断INT1-INT6下的46个外设中断。包括:一个外设中断矢量寄存器(PIVR)、三个外设中断请求寄存器(PIRQR0/1/2)三个外设中断应答寄存器(PIACKR0/1/2),外设中断请求寄存器0/1/2(PIRQR0/1/2)地址7010h7012h用于存放外设中断请求标志:1-表明相应的中断请求被挂起0-表明相应的中断请求未被挂起。只能对其测试(可读),不能对其编程(不可写)向某位写入1将发出个中断请求到器件CPU,写入0没影响。,2)外设中断寄存器:,用于管理挂在内核级中断INT1-INT6下的46个外设中断。包括:一个外设中断矢量寄存器(PIVR)、三个外设中断请求寄存器(PIRQR0/1/2)三个外设中断应答寄存器(PIACKR0/1/2),外设中断应答寄存器0/1/2(PIACKR0/1/2)地址:7014h7016h用于存放外设中断应答信号只能对其测试(可读),不能对其编程(不可写)向某位写1,将引起相应的外设中断应答被插入从而将相应的外设中断请求位清0,但不改变外设矢量寄存器(PIVR)的内容。,3)外设中断控制寄存器(2个),用来控制和监视两个外部引脚XINTl和XINT2的状态。外设中断l控制寄存器(XINTlCR)一地址7070h控制和监视外部引脚XINT1的状态。外设中断2控制寄存器(XINT2CR)一地址7071h控制和监视外部引脚XINT2的状态。,D15XINT1flagXINTl标志位:该位指示在XINTl引脚上是否检测到个眺变0未检测到引脚跳变1检测到引脚跳变,3)外设中断控制寄存器(2个),用来控制和监视两个外部引脚XINTl和XINT2的状态。外设中断l控制寄存器(XINTlCR)一地址7070h控制和监视外部引脚XINT1的状态。外设中断2控制寄存器(XINT2CR)一地址7071h控制和监视外部引脚XINT2的状态。,D2XINT1polarityXINT1极性,选择在XINT1引脚产生中断的信号极性。0在下降沿(由高到低跳变)产生中断1在上升沿(由低到高跳变)产生中断,3)外设中断控制寄存器(2个),用来控制和监视两个外部引脚XINTl和XINT2的状态。外设中断l控制寄存器(XINTlCR)一地址7070h控制和监视外部引脚XINT1的状态。外设中断2控制寄存器(XINT2CR)一地址7071h控制和监视外部引脚XINT2的状态。,D1XINTlpriorityXINT1优先级。该位决定XINT1引脚中断的优化级。0-高优先级,1-低优先级注意:优先级不同,所挂的CPU中断不同高优先级:INT1中断向量0002h低优先级:INT6中断向量000Ch但外设中断向量相同:XINTl:0001hXINT2:0011h,3)外设中断控制寄存器(2个),用来控制和监视两个外部引脚XINTl和XINT2的状态。外设中断l控制寄存器(XINTlCR)一地址7070h控制和监视外部引脚XINT1的状态。外设中断2控制寄存器(XINT2CR)一地址7071h控制和监视外部引脚XINT2的状态。,D0XINTlenableXINTl使能位。该位使能或屏蔽外部中断XINT10屏蔽中断1使能中断,3)外设中断控制寄存器(2个),用来控制和监视两个外部引脚XINTl和XINT2的状态。外设中断l控制寄存器(XINTlCR)一地址7070h控制和监视外部引脚XINT1的状态。外设中断2控制寄存器(XINT2CR)一地址7071h控制和监视外部引脚XINT2的状态。,外设中断2控制寄存器(XINT2CR)用于控制和监视外部引脚XINT2的状态。各位的定义同(XINT1CR),3可屏蔽中断的响应流程,1)响应可屏蔽中断,条件:(1)INTM=0,使能所有末屏蔽的中断;(2)中断屏蔽寄存器(IMR)中相应位为1;使能相应的中断;(3)若有多个中断请求,优先级高的中断源先相应。2)将PC压入堆栈,用相应的CPU中断矢量单元地址装载到PC;3)CPU从相应中断矢量单元中取出一条用户设定的转移指令,然后转入执行这一CPU中断的通用中断服务程序(GISRx)。例:INT2上有一外设中断请求被响应,其中断矢量单元地址为0004h,则在0004h单元放置一条转移指令:0004hBGISR2,3可屏蔽中断的响应流程,4)在GISRx中完成必要的现场保护后,从外设中断矢量寄存器(PIVR)中读取相应外设中断矢量。通常并将其左移一个预定的值,再加上偏移量,所得到的值就是这个外设中断事件的中断服务程序(SISR)的入口地址。在SISR中执行对该外设中断事件的服务。5)执行SISR,直到一条返回指令,结束该中断服务程序。6)从栈顶弹出返回地址到PC。,例:典型中断服务程序代码假设:挂在INT2之下的EVA通用定时器1的周期中断INT2的中断矢量为0004hEVA通用定时器1周期中断的中断矢量(PIV)为0027h(存放在PIVR),地址汇编语言代码;CPU中断矢量表0000hRSVECT:BSTART;复位矢量0002hINT1:BGISR1;转移到INT1的通用中断服务子程序GISR10004hINT2:BGISR2;转移到INT2的通用中断服务子程序GISR2;CPU其他中断矢量,地址汇编语言代码GISR1:;其他中断的通用中断服务子程序GISR2:;保存必要的上、下文LACCPIVR,1;将中断矢量寄存器(PIVR)的值移位(2)后装;入累加器ADDoffset;累加器的值加一个偏移量后,即为特定的中断;服务子程序SISRx的地址BACC;转移到累加器指示的地址中(2PIV+offset);外设中断矢量表2PIV+offsetBSISR1;转移到中断事件的特定中断服务子程序SISR中2PIV+offset+2BSISR2BSISRxSISRx:;外部事件中断服务程序RET;返回,三、非屏蔽中断,1硬件非屏蔽中断两个引脚产生硬件非屏蔽中断:RS(复位):CPU停止程序流程,使处理器回到一个初始状态,然后从地址0000h开始执行。NMI:当该信号被激活时(NMI引脚变低或NMI指令),CPU使程序控制转向0024h矢量地址,同时可屏蔽中断被禁止(NTM=1)。NMI也可用做软件复位,与硬件复位不同,其不影响器件任何模式,也不终止当前有效指令或存储器的操作。LF240 x芯片没有NMI引脚,当器件访问一个无效地址时,将产生非屏蔽中断请求,2软件非屏蔽中断,3条指令可引起软件非屏版中断:INTRKNMITRAP,该指令允许启动中断,指令操作数K表示CPU将转移到哪个中断矢量单元。例INTR10当响应INTR中断时,INTM=1禁止可屏蔽中断。注意:INTR指令不影响IFR标志。,2软件非屏蔽中断,3条指令可引起软件非屏版中断:INTRKNMITRAP,该指令使程序转移到中断矢量地址24h。与不可屏蔽硬件中断NMI使用同一单元。,2软件非屏蔽中断,3条指令可引起软件非屏版中断:INTRKNMITRAP,该指令使CPU转移到中断矢量单元22h,该指令不禁止任何可屏蔽中断,即INTM不被置1,非屏蔽中断流程图,四、中断服务程序(ISR)的现场保护与中断嵌套,CPU得到中断请求并响应之后,就根据中断矢量转移到相应的中断服务程序ISR中,ISR在为中断所要求的任务服务前需要保存和恢复寄存器的值,并且还要管理中断嵌套。,1保存和恢复寄存器值CPU进入中断服务程序(ISR)之前,硬件只将增量后的程序计数器的值自动保存起来,所以在中断服务程序中要用软件对一些重要寄存器的值进行保存和恢复。例如:如果ISR需要执行一次乘法运算,那么它就需要使用乘法寄存器(PREG)。如果先前的PREG值要求在执行完ISR之后仍保存在PREG中,则ISR必须先保存该值,再执行新的乘法运算,当乘法运算执行完后,中断服务程序返回之前,再重新装载原来那个PREG值。在大多数中断服务程序中,都需要对某些寄存器进行保护,所以,常常备份个通用的保存和恢复程序,供中断服务程序调用。,2中断服务程序(ISR)嵌套的管理,C2000硬件堆栈允许中断嵌套,但须注意:1)如果希望一个可屏蔽中断能够中断ISR,那么,该ISR必须不屏蔽这个中断,可在中断服务程序中,通过对IMR中的相应位设置和执行允许中断指令(CLRCINTM)来解除该中断屏蔽。2)8级硬件堆栈。每进行一次中断服务或进入子程序都要将返回地址压入堆栈,以提供返回的途径,所以最多允许中断或子程序嵌套8级。如果软件需要的堆栈超过8级,可以利用POPD和PSHD指令将堆栈有效地扩展到数据存储空间。,3)C2000具有防止意外嵌套的功能。因为在执行完中断的服务程序返回之前,总要先允许中断,即执行CLRCINTMRET假如在执行CLRCINTM时发生了意外中断,CPU总是先完成CLRCINTM指令及其后面的那条指令后才去处理已挂起的中断。如果希望在中断服务程序中实现中断嵌套,应在返回(RET)指令前至少两条指令的位置上插入CLRCINTM指令,即CLRCINTM.RET,五、中断等待时间,中断等待时间是指提出中断请求到响应请求之间的时间,其长短取决于许多因素。在执行个软件中断之前CPU总是要完成流水线操作中的所有指令,不可屏蔽中断最小等待时间为4个周期。一个外部可屏蔽硬件中断,其最小等待时间为8个周期。LF/LC240 x中断等待时间包括外设同步接口时间、CPU响应时间、ISR转移时间。外设同步接口时间是指外设中断事件发生中断请求,经PIE识别、判优、转换后将请求发送至CPU的时间。CPU响应时间是指CPU识别出已经被使能的中断、响应中断、清除流水线,到从CPU的中断矢量表中取出转移指令的时间。ISR转移时间是指CPU执行通用中断服务程序,对外部事件的中断矢量进行转换处理,然后转移到外设中

温馨提示

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

评论

0/150

提交评论