DSP第四章 DSP程序流程控制
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
I单元的IBQ从32位的程序总线读取32比特的指令代码。 译码器从IBQ中读取48比特的指令进行译码,将指令和立即数 分派到相应的单元执行。
第四章 程序流程控制 一、跳转(分支)
跳转:通过跳转指令改变PC的值,使程序跳到指令指定的分
支地址执行。跳转指令可以是有条件的,也可以是无条件的。 1、条件跳转 判断条件cond,如果条件成立则将目标地址装入PC,完成 跳转。
第四章 程序流程控制
举例:RPTADD CSR, T1 MOV *AR0+, T0 ;重复 CSR + 1次后,T1的值加到CSR中。 执行流水线分为8个环节:F/,D, AD,AC1,AC2,R,X,W 2、有条件单重复指令 RPTCC k8,cond;当条件为真时,下一条指令重复K8+1次 每次重复在流水线的执行(X)阶段检查cond定义的条件,当 条件不满足时,停止单指令重复。最大重复执行次数为2^8-
第四章 程序流程控制
(3) 中断可分为可屏蔽中断和非屏蔽中断两类。 可屏蔽中断:用软件将其设置为禁止中断或允许中断。 非屏蔽中断:不能被禁止,一旦产生,CPU立即响应中断。 2、中断处理的四个步骤 (1) CPU接收中断请求,挂起当前程序; (2) 响应中断请求:可屏蔽中断须满足某些条件,非屏蔽中断立 即响应。 (3) 准备中断服务程序 CPU完成当前的指令执行,清除流水线中未译码的指令。 在数据堆栈和系统堆栈中保存相关寄存器的内容, 从中断矢量表中取出中断矢量,中断矢量指针(IVPD、IVPH) 指向中断服务程序。
RPTBLOCAL和RPTB区别
RPTBLOCAL被定义为指令缓冲队列(IBQ)的本地循环,即直接 从IBQ中获取循环体指令,这样可以减少功率消耗,但是循环 体指令的字数不能超过56个字节。 当循环体指令超过56个字节时,使用RPTB块循环。
第四章 程序流程控制 支持两层块循环 一层循环(外循环):BRC0, RSA0, REA0; 二层循环(内循环): BRC1, RSA1, REA1,BRS1;
主机中断矢量指针(IVPH)
指向包含主机中断矢量的256字节的程序页。主机中断矢量序号 是16~23,这些矢量可以被映射到分配给DSP和主机共享的存储 空间。 若IVPD和IVPH内容相同,则32个中断矢量均位于相同的256字
节程序页中。
第四章 程序流程控制
DSP的硬件复位:使这两个指针都指向FFFFh,即指向 0xFFFF00的地址,软件复位对这两个指针没有影响。 一般在程序初始化时设定中断矢量指针的值,防止取非法指令 代码,在修改中断矢量指针(IVPD,IVPH)前应当确定:
四、中 断
中断是为DSP具有对外界异步事件的处理能力而设置的。当 DSP的外界异步事件发生时,CPU暂停当前的工作去处理外界 异步事件,当处理完成后,再回到原来被中断的地方,继续执 行原来的工作。 1、中断 (1)由硬件或软件信号产生的,它使DSP暂停当前程序转而去执 行中断服务程序(ISR),从而可以实时的进行事件处理。 (2) TMS320C5509支持32个ISR,有的即可以用软件触发也可 以由硬件触发,有的只能由软件触发。 软件中断:由程序指令产生,如:INTR、TRAP、RESET 硬件中断:由设备的信号产生,可以是外部引脚信号(外部中 断),也可以是片内外设信号(内部中断)。
……
OuterLoop: NOP ;外循环块的结束地址。
第四章 程序流程控制
三、条件执行 条件执行:即有条件的执行下一条指令。 执行流水线分为8个环节:F/,D, XCC label, cond AD,AC1,AC2,R,X,W XCCPART label, cond 注:使用这两条指令时,必须注意条件作用的流水线阶段不同。 例1:如果T0=0 AR指针的修改是在流水线的寻址阶段 XCCPART label,T0!=#0 (AD)发生的,而使用XCCPART从流水 ADD *AR2+, AC0 线的寻址阶段(AD)到读操作数(R)阶段 都是无条件的,只有在流水线执行(X)阶 label: 段才是有条件的。故无论条件T0!=#0 MOV *AR2, AC0
举例: 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
Debug Interrupt Enable Registers (DBIER0, DBIER1)
中断矢量指针(IVPD,IVPH)
均为16比特的寄存器,指向程序空间的中断矢量(中断服务表IST 的基地址)。
第四章 程序流程控制
DSP中断矢量指针(IVPD) 指向包含DSP中断矢量的256字节的程序页,DSP中断矢量序号 是0~15,24~31,这些矢量可以被映射到只分配给DSP的存储 空间。
第四章 程序流程控制
4、中断管理寄存器 C55x芯片有8个中断管理寄存器。 Interrupt Vector Pointers (IVPD, IVPH) Interrupt Flag Registers (IFR0, IFR1)
Interrupt Enable Registers (IER0, IER1)
内循环完成后跳到外循环执行。如果再次进入内循环, 则不需要初始化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
(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: ….
(2) 由RPTB或RPTBLOCAL定义块的开始地址,并放入到块重
复起始地址寄存器(RSA)中。 (3) 由RPTB或RPTBLOCAL后面的标号(label)定义块的结束地址, 并放到块重复结束地址寄存器(REA)中。
第四章 程序流程控制 特点:
(1)由于BRC0或BRC1是16比特计数器,所以最大重复次数是 64k,在初始化块重复计数器时,其值应为实际重复次数减1。 (2)一个循环体内的最小执行周期为2个机器周期。
第四章 程序流程控制
程序流程:指的是指令的执行顺序。 C55x中影响指令执行顺序的主要有: 程序跳转(分支) 指令重复执行 条件执行 中断
程序调用
程序的流程控制主要与指令缓冲单元(I单元)和程序流程单元(P 单元)有关。
第四章 程序流程控制
P单元产生24位的程序地址,并放到PAB总线上。
成立与否,AR2都会被修改。 条件满足:即T0!=#0,执行ADD指令, AR2被修改 条件不满足:执行MOV指令,但在执行该指令前, AR2指针已被修改了。
第四章 程序流程控制
例2: XCC label,T0!=#0 ADD *AR2+, AC0 label: MOV *AR2,AC1 使用XCC指令时,从流水线的寻址(AD)到执行(X)阶段都是 有条件的。所以只有当条件满足时,AR2和AC0的值才能被修 改。本例中,条件不满足,所以AR2和AC0的值没有被修改。
假设AR0的值为3000,AR0的值不等于0 ,条件为真,跳转到 标号为branch处执行,这时PC=00F05A
Hale Waihona Puke Baidu
第四章 程序流程控制
2、无条件跳转 不需要满足任何条件,直接将目标地址装入PC。 (1) B ACx ;把ACx的低24位的值装入到PC中 (2) B L7 ;7比特长相对PC的有符号偏移 (3) B L16 ;16比特长相对PC的有符号偏移 (4) B P24 ;24比特的绝对地址
RPTB ;块重复 CALL ;子程序调用
RPT ;单指令重复 INTR ;中断陷阱 XCC ;条件执行 RET ;从子程序返回
第四章 程序流程控制
3、块重复:同时重复多条指令。 块重复(块循环)的语法形式为: (1) RPTBLOCAL label (2) RPTB label
执行步骤:
(1) 重复执行次数由块重复计数器(BRC0或BRC1)定义。
第四章 程序流程控制
二、指令重复 指令重复:指重复执行一定次数的一条或者一段指令。包括无条 件单指令重复,有条件单指令重复,块重复三种形式。 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次后,CSR-k4->CSR
中断标志寄存器(IFR)和中断使能寄存器(IER) 它们包含所有的可屏蔽中断的标志位和使能位。
IFR0和IER0寄存器
IFR1和IER1寄存器
第四章 程序流程控制
当CPU接收到一个可屏蔽中断请求时,CPU将IFR中的相应标 志位置1,表明此中断被挂起或等待CPU响应,因此可以通过读 IFR来识别挂起中断。 中断标识寄存器的修改 可以写入0来清除挂起中断 响应硬件中断请求能清除IFR中相应的标志位; RESET能清除所有IFR中的标志位。
(1) 禁止所有的可屏蔽中断(ST1_55): BSET INTM
(2) 要求每个硬件非屏蔽中断对新旧IVPD值分别有一个中断矢量
和一个中断服务程序。
第四章 程序流程控制
中断矢量地址的形成 CPU将16比特的中断矢量指针与5比特的中断矢量序号级联然后
左移三位形成中断矢量地址。
第四章 程序流程控制
1=255
举例: RPTCC #7, AC1 > #0 ADD #1,AC0 ;AC0=AC0+1
第四章 程序流程控制
以下指令不能用做单指令循环体: B ;跳转 IDLE ;空闲指令 RPTBLOCAL ;块重复 RESET;软件复位 MOV RPTC, TAx ;RPTC单指令重复计数器
TRAP ;软件陷阱 MOV dbl(Lmem), RETA
第四章 程序流程控制
vector: (4) 执行中断服务程序 rs b _c_int00 nop ISR包含中断返回指令,当中断返回时,自动恢复以前保存 nop nmi b __ret 在寄存器中的内容。 nop nop 3、中断矢量及其优先级 int0 b __ret CPU接受和响应中断请求后,产生一个中断矢量地址,地址 nop nop 指向相关中断服务程序的中断矢量。书中表4-2。 . 多个中断同时发生时,CPU按照事先定义的优先级进行处理。 . . 优先级为0的优先权最高,随着优先级数的逐步增加,优先 dmac5 b __ret 权逐步减小。 nop nop
第四章 程序流程控制 一、跳转(分支)
跳转:通过跳转指令改变PC的值,使程序跳到指令指定的分
支地址执行。跳转指令可以是有条件的,也可以是无条件的。 1、条件跳转 判断条件cond,如果条件成立则将目标地址装入PC,完成 跳转。
第四章 程序流程控制
举例:RPTADD CSR, T1 MOV *AR0+, T0 ;重复 CSR + 1次后,T1的值加到CSR中。 执行流水线分为8个环节:F/,D, AD,AC1,AC2,R,X,W 2、有条件单重复指令 RPTCC k8,cond;当条件为真时,下一条指令重复K8+1次 每次重复在流水线的执行(X)阶段检查cond定义的条件,当 条件不满足时,停止单指令重复。最大重复执行次数为2^8-
第四章 程序流程控制
(3) 中断可分为可屏蔽中断和非屏蔽中断两类。 可屏蔽中断:用软件将其设置为禁止中断或允许中断。 非屏蔽中断:不能被禁止,一旦产生,CPU立即响应中断。 2、中断处理的四个步骤 (1) CPU接收中断请求,挂起当前程序; (2) 响应中断请求:可屏蔽中断须满足某些条件,非屏蔽中断立 即响应。 (3) 准备中断服务程序 CPU完成当前的指令执行,清除流水线中未译码的指令。 在数据堆栈和系统堆栈中保存相关寄存器的内容, 从中断矢量表中取出中断矢量,中断矢量指针(IVPD、IVPH) 指向中断服务程序。
RPTBLOCAL和RPTB区别
RPTBLOCAL被定义为指令缓冲队列(IBQ)的本地循环,即直接 从IBQ中获取循环体指令,这样可以减少功率消耗,但是循环 体指令的字数不能超过56个字节。 当循环体指令超过56个字节时,使用RPTB块循环。
第四章 程序流程控制 支持两层块循环 一层循环(外循环):BRC0, RSA0, REA0; 二层循环(内循环): BRC1, RSA1, REA1,BRS1;
主机中断矢量指针(IVPH)
指向包含主机中断矢量的256字节的程序页。主机中断矢量序号 是16~23,这些矢量可以被映射到分配给DSP和主机共享的存储 空间。 若IVPD和IVPH内容相同,则32个中断矢量均位于相同的256字
节程序页中。
第四章 程序流程控制
DSP的硬件复位:使这两个指针都指向FFFFh,即指向 0xFFFF00的地址,软件复位对这两个指针没有影响。 一般在程序初始化时设定中断矢量指针的值,防止取非法指令 代码,在修改中断矢量指针(IVPD,IVPH)前应当确定:
四、中 断
中断是为DSP具有对外界异步事件的处理能力而设置的。当 DSP的外界异步事件发生时,CPU暂停当前的工作去处理外界 异步事件,当处理完成后,再回到原来被中断的地方,继续执 行原来的工作。 1、中断 (1)由硬件或软件信号产生的,它使DSP暂停当前程序转而去执 行中断服务程序(ISR),从而可以实时的进行事件处理。 (2) TMS320C5509支持32个ISR,有的即可以用软件触发也可 以由硬件触发,有的只能由软件触发。 软件中断:由程序指令产生,如:INTR、TRAP、RESET 硬件中断:由设备的信号产生,可以是外部引脚信号(外部中 断),也可以是片内外设信号(内部中断)。
……
OuterLoop: NOP ;外循环块的结束地址。
第四章 程序流程控制
三、条件执行 条件执行:即有条件的执行下一条指令。 执行流水线分为8个环节:F/,D, XCC label, cond AD,AC1,AC2,R,X,W XCCPART label, cond 注:使用这两条指令时,必须注意条件作用的流水线阶段不同。 例1:如果T0=0 AR指针的修改是在流水线的寻址阶段 XCCPART label,T0!=#0 (AD)发生的,而使用XCCPART从流水 ADD *AR2+, AC0 线的寻址阶段(AD)到读操作数(R)阶段 都是无条件的,只有在流水线执行(X)阶 label: 段才是有条件的。故无论条件T0!=#0 MOV *AR2, AC0
举例: 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
Debug Interrupt Enable Registers (DBIER0, DBIER1)
中断矢量指针(IVPD,IVPH)
均为16比特的寄存器,指向程序空间的中断矢量(中断服务表IST 的基地址)。
第四章 程序流程控制
DSP中断矢量指针(IVPD) 指向包含DSP中断矢量的256字节的程序页,DSP中断矢量序号 是0~15,24~31,这些矢量可以被映射到只分配给DSP的存储 空间。
第四章 程序流程控制
4、中断管理寄存器 C55x芯片有8个中断管理寄存器。 Interrupt Vector Pointers (IVPD, IVPH) Interrupt Flag Registers (IFR0, IFR1)
Interrupt Enable Registers (IER0, IER1)
内循环完成后跳到外循环执行。如果再次进入内循环, 则不需要初始化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
(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: ….
(2) 由RPTB或RPTBLOCAL定义块的开始地址,并放入到块重
复起始地址寄存器(RSA)中。 (3) 由RPTB或RPTBLOCAL后面的标号(label)定义块的结束地址, 并放到块重复结束地址寄存器(REA)中。
第四章 程序流程控制 特点:
(1)由于BRC0或BRC1是16比特计数器,所以最大重复次数是 64k,在初始化块重复计数器时,其值应为实际重复次数减1。 (2)一个循环体内的最小执行周期为2个机器周期。
第四章 程序流程控制
程序流程:指的是指令的执行顺序。 C55x中影响指令执行顺序的主要有: 程序跳转(分支) 指令重复执行 条件执行 中断
程序调用
程序的流程控制主要与指令缓冲单元(I单元)和程序流程单元(P 单元)有关。
第四章 程序流程控制
P单元产生24位的程序地址,并放到PAB总线上。
成立与否,AR2都会被修改。 条件满足:即T0!=#0,执行ADD指令, AR2被修改 条件不满足:执行MOV指令,但在执行该指令前, AR2指针已被修改了。
第四章 程序流程控制
例2: XCC label,T0!=#0 ADD *AR2+, AC0 label: MOV *AR2,AC1 使用XCC指令时,从流水线的寻址(AD)到执行(X)阶段都是 有条件的。所以只有当条件满足时,AR2和AC0的值才能被修 改。本例中,条件不满足,所以AR2和AC0的值没有被修改。
假设AR0的值为3000,AR0的值不等于0 ,条件为真,跳转到 标号为branch处执行,这时PC=00F05A
Hale Waihona Puke Baidu
第四章 程序流程控制
2、无条件跳转 不需要满足任何条件,直接将目标地址装入PC。 (1) B ACx ;把ACx的低24位的值装入到PC中 (2) B L7 ;7比特长相对PC的有符号偏移 (3) B L16 ;16比特长相对PC的有符号偏移 (4) B P24 ;24比特的绝对地址
RPTB ;块重复 CALL ;子程序调用
RPT ;单指令重复 INTR ;中断陷阱 XCC ;条件执行 RET ;从子程序返回
第四章 程序流程控制
3、块重复:同时重复多条指令。 块重复(块循环)的语法形式为: (1) RPTBLOCAL label (2) RPTB label
执行步骤:
(1) 重复执行次数由块重复计数器(BRC0或BRC1)定义。
第四章 程序流程控制
二、指令重复 指令重复:指重复执行一定次数的一条或者一段指令。包括无条 件单指令重复,有条件单指令重复,块重复三种形式。 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次后,CSR-k4->CSR
中断标志寄存器(IFR)和中断使能寄存器(IER) 它们包含所有的可屏蔽中断的标志位和使能位。
IFR0和IER0寄存器
IFR1和IER1寄存器
第四章 程序流程控制
当CPU接收到一个可屏蔽中断请求时,CPU将IFR中的相应标 志位置1,表明此中断被挂起或等待CPU响应,因此可以通过读 IFR来识别挂起中断。 中断标识寄存器的修改 可以写入0来清除挂起中断 响应硬件中断请求能清除IFR中相应的标志位; RESET能清除所有IFR中的标志位。
(1) 禁止所有的可屏蔽中断(ST1_55): BSET INTM
(2) 要求每个硬件非屏蔽中断对新旧IVPD值分别有一个中断矢量
和一个中断服务程序。
第四章 程序流程控制
中断矢量地址的形成 CPU将16比特的中断矢量指针与5比特的中断矢量序号级联然后
左移三位形成中断矢量地址。
第四章 程序流程控制
1=255
举例: RPTCC #7, AC1 > #0 ADD #1,AC0 ;AC0=AC0+1
第四章 程序流程控制
以下指令不能用做单指令循环体: B ;跳转 IDLE ;空闲指令 RPTBLOCAL ;块重复 RESET;软件复位 MOV RPTC, TAx ;RPTC单指令重复计数器
TRAP ;软件陷阱 MOV dbl(Lmem), RETA
第四章 程序流程控制
vector: (4) 执行中断服务程序 rs b _c_int00 nop ISR包含中断返回指令,当中断返回时,自动恢复以前保存 nop nmi b __ret 在寄存器中的内容。 nop nop 3、中断矢量及其优先级 int0 b __ret CPU接受和响应中断请求后,产生一个中断矢量地址,地址 nop nop 指向相关中断服务程序的中断矢量。书中表4-2。 . 多个中断同时发生时,CPU按照事先定义的优先级进行处理。 . . 优先级为0的优先权最高,随着优先级数的逐步增加,优先 dmac5 b __ret 权逐步减小。 nop nop