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