dsp第四章程序控制_第1页
dsp第四章程序控制_第2页
dsp第四章程序控制_第3页
dsp第四章程序控制_第4页
dsp第四章程序控制_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

1、第四章 程序控制和中断管理 程序控制程序控制是指是指CPUCPU对程序运行的控制对程序运行的控制通常程序是通常程序是顺序执行顺序执行的,即在的,即在连续的连续的程序存储器地址上程序存储器地址上取指并执行。但有时程序需要取指并执行。但有时程序需要转移到不连续转移到不连续的地址,然的地址,然后再连续执行新地址处的指令。后再连续执行新地址处的指令。TMS320C2000中影响程序控制操作的指令有:中影响程序控制操作的指令有:分支转移分支转移调用与返回调用与返回重复指令重复指令中断中断复位复位4.1 程序地址的产生程序地址的产生 在执行当前指令的同时,程序流要求处理器生成下一条指令的程序在执行当前指令

2、的同时,程序流要求处理器生成下一条指令的程序地址。它是顺序或非顺序的。地址。它是顺序或非顺序的。程序地址产生逻辑使用以下硬件:程序地址产生逻辑使用以下硬件:(1)程序计数器)程序计数器(PC)(PC): C2000C2000为为1616位位PCPC。(2)程序地址寄存器)程序地址寄存器(PAR)(PAR):驱动程序地址总线:驱动程序地址总线(PAB)(PAB),提供程序,提供程序的读、写地址。的读、写地址。(3)堆栈:)堆栈:1616位宽、位宽、8 8级硬件堆栈级硬件堆栈最多可保存最多可保存8 8个返回地址个返回地址。(4)微堆栈微堆栈(MSTACK)(MSTACK):1616位,位,1 1级

3、深的堆栈,用于保存一个返回地级深的堆栈,用于保存一个返回地址。址。(5)重复计数器)重复计数器(RPTC)(RPTC):1616位,与重复指令位,与重复指令(RPT)(RPT)一起,用来确定一起,用来确定RPTRPT后面的一条指令后面的一条指令重复执行一定次数。重复执行一定次数。一、程序计数器一、程序计数器(PC) 程序计数器程序计数器(PC)存放将被执行的下一条指令的地址。存放将被执行的下一条指令的地址。 影响影响PC加载方式的加载方式的程序控制操作程序控制操作: :(1)复位)复位 (2)顺序执行)顺序执行 (3)分支转移)分支转移 (4)由累加器转移)由累加器转移 (5)子程序调用与返回

4、)子程序调用与返回 (6)从累加器调用与返回)从累加器调用与返回 (7)软件或硬件中断)软件或硬件中断 加载到加载到PC的地址:的地址:PC 0000h (复位向量地址复位向量地址)一、程序计数器一、程序计数器(PC) 程序计数器程序计数器(PC)存放将被执行的下一条指令的地址。存放将被执行的下一条指令的地址。PC的加载方式的加载方式: :(1)复位)复位 (2)顺序执行)顺序执行 (3)分支转移)分支转移 (4)由累加器转移)由累加器转移 (5)子程序调用与返回)子程序调用与返回 (6)从累加器调用与返回)从累加器调用与返回 (7)软件或硬件中断)软件或硬件中断 加载到加载到PC的地址的地址

5、: : PC PC + 1例:例: PC 目标代码目标代码 指令指令0108 be42 CLRC OVM0109 bd00 LDP #0010a 一、程序计数器一、程序计数器(PC) 程序计数器程序计数器(PC)存放将被执行的下一条指令的地址。存放将被执行的下一条指令的地址。PC的加载方式的加载方式: :(1)复位)复位 (2)顺序执行)顺序执行 (3)分支转移)分支转移 (4)由累加器转移)由累加器转移 (5)子程序调用与返回)子程序调用与返回 (6)从累加器调用与返回)从累加器调用与返回 (7)软件或硬件中断)软件或硬件中断 加载到加载到PC的地址:的地址:PC = 转移指令之后转移指令之

6、后16位立即数位立即数例:例: B pma 一、程序计数器一、程序计数器(PC) 程序计数器程序计数器(PC)存放将被执行的下一条指令的地址。存放将被执行的下一条指令的地址。PC的加载方式的加载方式: :(1)复位)复位 (2)顺序执行)顺序执行 (3)分支转移)分支转移 (4)由累加器转移)由累加器转移 (5)子程序调用与返回)子程序调用与返回 (6)从累加器调用与返回)从累加器调用与返回 (7)软件或硬件中断)软件或硬件中断 加载到加载到PC的地址:的地址:PC = 累加器的低累加器的低16位值位值例:例: BACC一、程序计数器一、程序计数器(PC) 程序计数器程序计数器(PC)存放将被

7、执行的下一条指令的地址。存放将被执行的下一条指令的地址。PC的加载方式的加载方式: :(1)复位)复位 (2)顺序执行)顺序执行 (3)分支转移)分支转移 (4)由累加器转移)由累加器转移 (5)子程序调用与返回)子程序调用与返回 (6)从累加器调用与返回)从累加器调用与返回 (7)软件或硬件中断)软件或硬件中断 调用:调用:将将PC中下一条指令的地址压入中下一条指令的地址压入堆栈,堆栈, 将调用指令后的将调用指令后的16位立即数装入位立即数装入PC;返回:返回: 将返回地址从堆栈中弹回将返回地址从堆栈中弹回PC。例:例: PC 指令指令0100 CALL 01e0h0102 一、程序计数器一

8、、程序计数器(PC) 程序计数器程序计数器(PC)存放将被执行的下一条指令的地址。存放将被执行的下一条指令的地址。PC的加载方式的加载方式: :(1)复位)复位 (2)顺序执行)顺序执行 (3)分支转移)分支转移 (4)由累加器转移)由累加器转移 (5)子程序调用与返回)子程序调用与返回 (6)从累加器调用与返回)从累加器调用与返回 (7)软件或硬件中断)软件或硬件中断 调用:调用: 将将PC中下一条指令的地址压入堆中下一条指令的地址压入堆栈,栈,将累加器中的低将累加器中的低16位数装入位数装入PC; 返回:返回: 将返回地址从堆栈中弹回将返回地址从堆栈中弹回PC。例:例: PC 指令指令01

9、00 CALA 0101 1.一、程序计数器一、程序计数器(PC) 程序计数器程序计数器(PC)存放将被执行的下一条指令的地址。存放将被执行的下一条指令的地址。PC的加载方式的加载方式: :(1)复位)复位 (2)顺序执行)顺序执行 (3)分支转移)分支转移 (4)由累加器转移)由累加器转移 (5)子程序调用与返回)子程序调用与返回 (6)从累加器调用与返回)从累加器调用与返回 (7)软件或硬件中断)软件或硬件中断 将将PC压入堆栈,然后用适当的中断压入堆栈,然后用适当的中断向量单元地址装入向量单元地址装入PC。通常在该单元地址中存放一条转移指通常在该单元地址中存放一条转移指令,又将相应的中断

10、服务子程序地址令,又将相应的中断服务子程序地址装入装入PC。例:例: INT2 INT2 产生中断产生中断0004ff80B 1000h10000108be42CLRC OVM0109bd00LDP#0010a8b8fMAR*,AR7010bb93fLACL#3Fh响应中断响应中断PC=010ah压入堆栈压入堆栈一、程序计数器一、程序计数器(PC) 程序计数器程序计数器(PC)存放将被执行的下一条指令的地址。存放将被执行的下一条指令的地址。PC的加载方式的加载方式: :(1)复位)复位 (2)顺序执行)顺序执行 (3)分支转移)分支转移 (4)由累加器转移)由累加器转移 (5)子程序调用与返回

11、)子程序调用与返回 (6)从累加器调用与返回)从累加器调用与返回 (7)软件或硬件中断)软件或硬件中断 将将PC压入堆栈,然后用适当的中断压入堆栈,然后用适当的中断向量单元地址装入向量单元地址装入PC。通常在该单元地址中存放一条转移指通常在该单元地址中存放一条转移指令,又将相应的中断服务子程序地址令,又将相应的中断服务子程序地址装入装入PC。例:例: INT2 INT2 产生中断产生中断0004ff80B 1000h10000108be42CLRC OVM0109bd00LDP#0010a8b8fMAR*,AR7010bb93fLACL#3Fh 中断向量中断向量0004h装入装入PC一、程序计

12、数器一、程序计数器(PC) 程序计数器程序计数器(PC)存放将被执行的下一条指令的地址。存放将被执行的下一条指令的地址。PC的加载方式的加载方式: :(1)复位)复位 (2)顺序执行)顺序执行 (3)分支转移)分支转移 (4)由累加器转移)由累加器转移 (5)子程序调用与返回)子程序调用与返回 (6)从累加器调用与返回)从累加器调用与返回 (7)软件或硬件中断)软件或硬件中断 将将PC压入堆栈,然后用适当的中断压入堆栈,然后用适当的中断向量单元地址装入向量单元地址装入PC。通常在该单元地址中存放一条转移指通常在该单元地址中存放一条转移指令,又将相应的中断服务子程序地址令,又将相应的中断服务子程

13、序地址装入装入PC。例:例: INT2 INT2 产生中断产生中断0004ff80B 1000h10000108be42CLRC OVM0109bd00LDP#0010a8b8fMAR*,AR7010bb93fLACL#3Fh转移指令转移指令1000h装入装入PC二、堆栈二、堆栈 硬件堆栈区:硬件堆栈区:16位宽、位宽、8级深级深 用途:用途: 当调用子程序或发生中断时,程序地址产生逻辑利用该堆当调用子程序或发生中断时,程序地址产生逻辑利用该堆栈保存一个栈保存一个16位返回地址。位返回地址。当当CPU进入子程序或中断服务程序时,返回地址自动装入该进入子程序或中断服务程序时,返回地址自动装入该堆

14、栈的栈顶。堆栈的栈顶。当子程序或中断服务程序完成时,返回指令将返回地址从栈当子程序或中断服务程序完成时,返回指令将返回地址从栈顶传送到程序计数器顶传送到程序计数器PC。堆栈也可以用来保存数据或用于其他目的。堆栈也可以用来保存数据或用于其他目的。 有两组访问堆栈的指令:有两组访问堆栈的指令:1)PUSH和和POP: PUSH:把累加器把累加器(32位位)的低半部分的低半部分(低低16位位)拷贝到栈顶。拷贝到栈顶。 POP: 把栈顶的值拷贝到累加器的低半部分把栈顶的值拷贝到累加器的低半部分2)PSHD和和POPD: 当子程序或中断嵌套超过当子程序或中断嵌套超过8级时,可利用这两条指令在数据存级时,

15、可利用这两条指令在数据存储区中建立一个堆栈。储区中建立一个堆栈。 即把堆栈区延伸到数据存储区。即把堆栈区延伸到数据存储区。 PSHD dma ; ;将数据存储器中的值压入栈顶。将数据存储器中的值压入栈顶。 POPD dma ; 将栈项的值弹出到数据存储器。将栈项的值弹出到数据存储器。 每当一个数值压入栈顶每当一个数值压入栈顶 ,堆栈中每级的内容都下移一级,堆栈中每级的内容都下移一级,栈底栈底(第第8级级)的内容则丢失。的内容则丢失。 PSHD dma 弹出操作把堆栈中每一级的值都拷贝到较高的下一级。弹出操作把堆栈中每一级的值都拷贝到较高的下一级。 操作与压入操作相反,操作与压入操作相反, PO

16、PD dma 三、微堆栈三、微堆栈(MSTACK)微堆栈共有微堆栈共有1 1级深、级深、1616位宽,与堆栈位宽,与堆栈不同,它的操作是不可见的。不同,它的操作是不可见的。 执行下列指令时,程序地址产生逻辑,执行下列指令时,程序地址产生逻辑,利用微堆栈保存返回地址。利用微堆栈保存返回地址。块传送块传送 BLDD BLPD乘且累加乘且累加 MAC、MACD 表读写表读写 TBLD、TBLW 例:例:RPT#9BLDD #lk, *+ 源地址源地址 目的地址目的地址操作过程:操作过程: 执行执行 PC+1,然后,然后(PC)(MSTACK) lk(源地址)(源地址) PC PC (源地址源地址)

17、(目的地址)(目的地址) PC+1 PC 利用重复指令,进行数据块传送,利用重复指令,进行数据块传送,直到重复计数器直到重复计数器(RPTC)=0;(MSTACK) (PC)四、流水线操作四、流水线操作 TMS320C2000的流水线有的流水线有4个独立的阶段:个独立的阶段: 取指令取指令 指令译码指令译码 取操作数取操作数 执行指令执行指令 由于这由于这4个操作阶段是独立的,因此,这些操作可以重叠进行。在任个操作阶段是独立的,因此,这些操作可以重叠进行。在任意的指定周期内,意的指定周期内,1 - 4个不同的指令均被激活,每一条被激活的指令个不同的指令均被激活,每一条被激活的指令均处于一个不同

18、的完成阶段。均处于一个不同的完成阶段。 对于单字、单周期指令对于单字、单周期指令(无等待状态无等待状态),4级流水线的操作示意图如下:级流水线的操作示意图如下:4.2 转移、调用和返回转移、调用和返回 转移、调用和返回将改变指令流的顺序,转到新的地址单元去执行指令。转移、调用和返回将改变指令流的顺序,转到新的地址单元去执行指令。转移:仅使程序控制转换到新的地址单元。转移:仅使程序控制转换到新的地址单元。 采用跳转指令采用跳转指令调用:调用: 子程序调用子程序调用 中断服务程序中断服务程序 要将返回地址保存到硬件堆栈的栈顶。要将返回地址保存到硬件堆栈的栈顶。 被调用的子程序或中断服务程序都以返回

19、指令结束。被调用的子程序或中断服务程序都以返回指令结束。转移、调用和返回指令的类型:转移、调用和返回指令的类型:无条件转移、调用和返回无条件转移、调用和返回 有条件转移、调用和返回有条件转移、调用和返回 一、无条件指令一、无条件指令无条件转移指令无条件转移指令 B pma ;用指令中给定的地址;用指令中给定的地址pma 装载装载PC BACC ;用累加器中低;用累加器中低16位数值位数值ACC(015)装载)装载PC无条件调用指令无条件调用指令 CALL pma ;将返回地址压入堆栈,用;将返回地址压入堆栈,用pma 装载装载PC CALA ;将返回地址压入堆栈,用;将返回地址压入堆栈,用AC

20、C(015)装载)装载PC无条件返回指令无条件返回指令 RET ;将栈顶的值;将栈顶的值(返回地址返回地址)加载到加载到PC二、有条件指令二、有条件指令 有条件指令指仅当某些指定的条件满足时才执行。有条件指令指仅当某些指定的条件满足时才执行。 条件及符号条件及符号 条件的组合:条件的组合:在条件指令的操作数中可以有多个条件。在条件指令的操作数中可以有多个条件。注意:注意:某些条件只有组合才是有意义的。某些条件只有组合才是有意义的。 对于每一种组合,必须按如下规则从组对于每一种组合,必须按如下规则从组1和组和组2中选择条件。中选择条件。 同一类的条件不能组合。同一类的条件不能组合。 有条件指令有

21、条件指令 条件转移指令条件转移指令 BCND pma,cond1,cond2, ; ;条件条件cond1, ,cond2都满足时转移。都满足时转移。例例: BCND PGM1,LEQ, OV BANZ pma ;当前;当前AR0时,转移。时,转移。条件调用指令条件调用指令 CC pma,cond1,cond2,; ;条件条件cond1, ,cond2都满足时调用。都满足时调用。例例: CC 00BFh,LEQ, OV条件返回指令条件返回指令 RETC cond1,cond2, ; ;条件条件cond1, ,cond2都满足时返回。都满足时返回。4.3 4.3 重复指令重复指令 重复指令重复指令

22、(RPT)允许紧跟在允许紧跟在RPT后的那一条指令重复执行后的那一条指令重复执行N+1。 N为为RRT指令中的一个操作数。指令中的一个操作数。在执行在执行RPT时,计数值时,计数值N被装入重复计数器被装入重复计数器(RPTC),然后,被重复的,然后,被重复的指令每执行一次,指令每执行一次,RPTC就减就减1,直至,直至RPTC为为0。 例:例:指令执行前寄存器状态:指令执行前寄存器状态: ARP = 1;AR1 = 300h执行指令:执行指令: RPT#9 ;下一条指令执行;下一条指令执行10次次 BLDD#320h, *+上面的指令执行结果上面的指令执行结果: 将数据存储器将数据存储器: 0

23、320h032Ah单元的内容单元的内容-0300h030Ah中中4.4 中断中断中断是由软件或硬件产生一个信号,该信号引起中断是由软件或硬件产生一个信号,该信号引起CPUCPU挂起主程序,并转而挂起主程序,并转而执行一个子程序,即中断服务子程序。执行一个子程序,即中断服务子程序。一、概述一、概述 1)中断信号的产生:)中断信号的产生: C2000支持软件和硬件两种中断。支持软件和硬件两种中断。 软件中断:软件中断: 由中断指令由中断指令 INTR,NMI 或或 TRAP 请求。请求。 硬件中断:硬件中断: 外部中断外部中断由外部中断引脚上的信号触发,如由外部中断引脚上的信号触发,如: RS ,

24、 NMI 内部中断内部中断由片内外设的信号触发。由片内外设的信号触发。2) 中断优先级中断优先级硬件中断可能同时产生,硬件中断可能同时产生,CPU依据中断源的优先级顺序而执行相应的中断服依据中断源的优先级顺序而执行相应的中断服务子程序。务子程序。C240XC240X的硬件中断分为两级:的硬件中断分为两级: CPUCPU中断(中断(8 8个)(核心级、一级)个)(核心级、一级) 外设中断外设中断 (4646个),分别挂在个),分别挂在CPUCPU中断中中断中 6 6个个 可屏蔽中断之下。(二级)可屏蔽中断之下。(二级)CPUCPU中断优先级为中断优先级为1-RESET1-RESET;复位中断;复

25、位中断2-2-保留保留3-NMI3-NMI;不可屏蔽中断;不可屏蔽中断4-INT1 4-INT1 ;可屏蔽中断;可屏蔽中断5-INT2 5-INT2 ;可屏蔽中断;可屏蔽中断6-INT3 6-INT3 ;可屏蔽中断;可屏蔽中断7-INT4 7-INT4 ;可屏蔽中断;可屏蔽中断8-INT5 8-INT5 ;可屏蔽中断;可屏蔽中断9-INT6 9-INT6 ;可屏蔽中断;可屏蔽中断3)可屏蔽中断与不可屏蔽中断)可屏蔽中断与不可屏蔽中断 可屏蔽中断:指可以用软件设置使它们禁止可屏蔽中断:指可以用软件设置使它们禁止(屏蔽屏蔽)或允许(不屏蔽或允许(不屏蔽)的的中断,中断,可屏蔽中断均为硬件中断。可屏

26、蔽中断均为硬件中断。(C240X(C240X硬件中断分两级中断)硬件中断分两级中断) C240XC240X的可屏蔽中断为的可屏蔽中断为INT1INT6 INT1INT6 (CPUCPU中断,中断, 即一级中断)即一级中断) 这些中断源下面挂着外设和外部引脚,如:这些中断源下面挂着外设和外部引脚,如: ADCADC、SPISPI、SCISCI、事件管理器等。、事件管理器等。 (外设中断,(外设中断, 即二级中断)即二级中断) 不可屏蔽中断:包括:不可屏蔽中断:包括: 所有的软件中断所有的软件中断 两种外部硬件中断:(两种外部硬件中断:( RS , NMI )。对于不可屏蔽中断,对于不可屏蔽中断,

27、CPU总是要响应,并从主程序转移到相应中断服总是要响应,并从主程序转移到相应中断服务程序。务程序。 4)中断矢量)中断矢量 中断矢量指中断矢量指CPU响应中断响应中断后,后,PC装载的地址装载的地址 。MS320C2000MS320C2000器件器件CPUCPU中断的中断的中断矢量表中断矢量表安排在程序存安排在程序存储器地址为储器地址为0000h003Fh0000h003Fh的的6464个单元个单元。每个每个CPUCPU中断分配了两个地中断分配了两个地址单元,用以存放一条两址单元,用以存放一条两个字的转移指令。个字的转移指令。外设中断外设中断(二级中断)(二级中断)的的中断矢量放在外设中断矢中

28、断矢量放在外设中断矢量寄存器量寄存器(PIVR) (PIVR) 中中中断名称中断矢量RESET复位0000h保留位0026hNMI0024hINT10002hINT20004hINT30006hINT40008hINT5000AhINT6000Ch保留位000EhTRAP0022hINT8-INT160010h-0020hINT20-INT310028h-003Fh5)中断操作步骤)中断操作步骤TMS320C2000管理中断分为管理中断分为3个主要阶段:个主要阶段: (1)接受中断请求:接受中断请求: 来自程序代码的来自程序代码的软件中断软件中断请求、来自请求、来自引脚引脚或或片内设备硬件片内

29、设备硬件中断请求到中断请求到达达CPU 时,该中断挂起,或说在等待响应。时,该中断挂起,或说在等待响应。 (2)响应中断:响应中断: 如果是可屏蔽中断,则必须满足一定的条件时如果是可屏蔽中断,则必须满足一定的条件时CPU才会响应;对非屏才会响应;对非屏蔽中断则立即响应。蔽中断则立即响应。 (3)执行中断服务程序:执行中断服务程序: 一旦中断被响应,一旦中断被响应,CPU就根据放在中断矢量地址中的转移指令,按就根据放在中断矢量地址中的转移指令,按照要求转移到相应的中断服务程序中去执行。执行结束后返回。照要求转移到相应的中断服务程序中去执行。执行结束后返回。 对于中断的管理,对于中断的管理,TMS

30、320C2000系列中不同型号的芯片有许多不同系列中不同型号的芯片有许多不同之处。以下以之处。以下以LC/LF240X为例。为例。二、可屏蔽中断二、可屏蔽中断 1结构结构 LF/LC240XLF/LC240X器件的器件的CPUCPU提供了提供了6 6个可屏个可屏蔽中断,蔽中断,INT1-INT1-INT6INT6。 利用这利用这6 6个中断级,个中断级,通过扩展设计,使通过扩展设计,使得得C240XC240X器件能够器件能够管理管理4646个可屏蔽中个可屏蔽中断请求。断请求。2中断管理寄存器中断管理寄存器 两级中断管理:两级中断管理: CPU中断寄存器中断寄存器 外设中断寄存器外设中断寄存器1

31、)CPU中断寄存器:中断寄存器: 用于管理用于管理CPU中断中断INT1-INT6: : 中断标志寄存器中断标志寄存器(IFR) 中断屏蔽寄存器中断屏蔽寄存器(IMR) CPU中断标志寄存器中断标志寄存器(IFR)地址地址0006h 用于识别和清除挂起的中断,当用于识别和清除挂起的中断,当INT1-INT6中某一个中断向中某一个中断向CPU发出中发出中断请求时,该寄存器中相应的位被置断请求时,该寄存器中相应的位被置1。 读取读取IFR可以识别挂起的中断,而向相应的位写可以识别挂起的中断,而向相应的位写1清除己挂起的中断。清除己挂起的中断。 CPU响应中断或器件复位都能将响应中断或器件复位都能将

32、IFR标志清除。标志清除。 CPU中断屏蔽寄存器中断屏蔽寄存器(IMR)地址地址0004h向向IMR中某位写中某位写0,则屏蔽相应的中断级,写,则屏蔽相应的中断级,写1则使能该中断则使能该中断级。级。 2)外设中断寄存器:)外设中断寄存器: 用于管理挂在内核级中断用于管理挂在内核级中断 INT1-INT6 下的下的46个外设中断。个外设中断。 包括包括: : 一个外设中断矢量寄存器一个外设中断矢量寄存器 (PIVR)、 三个外设中断请求寄存器三个外设中断请求寄存器 (PIRQR0/1/2) 三个外设中断应答寄存器三个外设中断应答寄存器 (PIACKR0/1/2) 外设中断矢量寄存器外设中断矢量

33、寄存器(PIVR)地址地址701Eh 用于存放最近一次被响应的外设中断的矢量地址。用于存放最近一次被响应的外设中断的矢量地址。 (二级中断矢量地址)(二级中断矢量地址)2)外设中断寄存器:)外设中断寄存器: 用于管理挂在内核级中断用于管理挂在内核级中断 INT1-INT6 下的下的46个外设中断。个外设中断。 包括包括: : 一个外设中断矢量寄存器一个外设中断矢量寄存器 (PIVR)、 三个外设中断请求寄存器三个外设中断请求寄存器 (PIRQR0/1/2) 三个外设中断应答寄存器三个外设中断应答寄存器 (PIACKR0/1/2) 外设中断请求寄存器外设中断请求寄存器0/1/2(PIRQR0/1

34、/2)地址地址7010h7012h 用于存放外设中断请求标志:用于存放外设中断请求标志: 1-表明相应的中断请求被挂起表明相应的中断请求被挂起 0-表明相应的中断请求未被挂起。表明相应的中断请求未被挂起。 向某位写入向某位写入1将发出将发出个中断请求到器件个中断请求到器件CPU,写入,写入0没影响。没影响。2)外设中断寄存器)外设中断寄存器: 用于管理挂在内核级中断用于管理挂在内核级中断 INT1-INT6 下的下的46个外设中断。个外设中断。 包括包括: : 一个外设中断矢量寄存器一个外设中断矢量寄存器 (PIVR)、 三个外设中断请求寄存器三个外设中断请求寄存器 (PIRQR0/1/2)

35、三个外设中断应答寄存器三个外设中断应答寄存器 (PIACKR0/1/2) 外设中断应答寄存器外设中断应答寄存器0/1/2(PIACKR0/1/2)地址:地址:7014h7016h 用于存放外设中断应答信号:用于存放外设中断应答信号:向某位写向某位写1,将引起相应的外设中断应答被插入,从而将相应的外设,将引起相应的外设中断应答被插入,从而将相应的外设中断请求位清中断请求位清0,但不改变外设矢量寄存器,但不改变外设矢量寄存器(PIVR)的内容。的内容。2)外设中断寄存器)外设中断寄存器: 用于管理挂在内核级中断用于管理挂在内核级中断 INT1-INT6 下的下的46个外设中断。个外设中断。 包括包

36、括: : 一个外设中断矢量寄存器一个外设中断矢量寄存器 (PIVR)、 三个外设中断请求寄存器三个外设中断请求寄存器 (PIRQR0/1/2) 三个外设中断应答寄存器三个外设中断应答寄存器 (PIACKR0/1/2) 外设中断请求寄存器和外设中断请求寄存器和外设中断应答寄存器外设中断应答寄存器都属于外设中断扩展模都属于外设中断扩展模块用来向块用来向CPU产生产生INT1-INT6中断请求的内部寄存器,用于测试,编中断请求的内部寄存器,用于测试,编程时可忽略。程时可忽略。3)外设中断控制寄存器()外设中断控制寄存器(2个)个) 用来控制和监视两个外部引脚用来控制和监视两个外部引脚XINTl和和X

37、INT2的状态。的状态。 外设中断外设中断l控制寄存器控制寄存器(XINTlCR)一地址一地址7070h 控制和监视外部引脚控制和监视外部引脚XINT1的状态。的状态。 外设中断外设中断2控制寄存器控制寄存器(XINT2CR)一地址一地址7071h 控制和监视外部引脚控制和监视外部引脚XINT2的状态。的状态。 D15 XINT1 flag XINTl标志位:标志位: 该位指示在该位指示在XINTl引脚上是否检测到引脚上是否检测到个眺变个眺变 0 未检测到引脚跳变未检测到引脚跳变 1 检测到引脚跳变检测到引脚跳变3)外设中断控制寄存器()外设中断控制寄存器(2个)个) 用来控制和监视两个外部引

38、脚用来控制和监视两个外部引脚XINTl和和XINT2的状态。的状态。 外设中断外设中断l控制寄存器控制寄存器(XINTlCR)一地址一地址7070h 控制和监视外部引脚控制和监视外部引脚XINT1的状态。的状态。 外设中断外设中断2控制寄存器控制寄存器(XINT2CR)一地址一地址7071h 控制和监视外部引脚控制和监视外部引脚XINT2的状态。的状态。 D2 XINT1 polarity D2 XINT1 polarity XINT1XINT1极性,极性, 选择在选择在XINT1XINT1引脚产生中断的信号极性。引脚产生中断的信号极性。 0 0 在下降沿在下降沿( (由高到低跳变由高到低跳变

39、) )产生中断产生中断 1 1 在上升沿在上升沿( (由低到高跳变由低到高跳变) )产生中断产生中断3)外设中断控制寄存器()外设中断控制寄存器(2个)个) 用来控制和监视两个外部引脚用来控制和监视两个外部引脚XINTl和和XINT2的状态。的状态。 外设中断外设中断l控制寄存器控制寄存器(XINTlCR)一地址一地址7070h 控制和监视外部引脚控制和监视外部引脚XINT1的状态。的状态。 外设中断外设中断2控制寄存器控制寄存器(XINT2CR)一地址一地址7071h 控制和监视外部引脚控制和监视外部引脚XINT2的状态。的状态。 D1 XINTl priority D1 XINTl pri

40、ority XINT1 XINT1优先级。优先级。 该位决定该位决定XINT1XINT1引脚中断的优化级。引脚中断的优化级。 0 - 0 - 高优先级高优先级, l - l - 低优先级低优先级注意:优先级不同,所挂的注意:优先级不同,所挂的CPU 中断不同中断不同 高优先级:高优先级: INT1 中断向量中断向量 0002h 低优先级:低优先级: INT6 中断向量中断向量 000Ch 但外设中断向量相同但外设中断向量相同 : XINTl: XINTl: 0001h XINT2: XINT2: 0011h 3)外设中断控制寄存器()外设中断控制寄存器(2个)个) 用来控制和监视两个外部引脚用

41、来控制和监视两个外部引脚XINTl和和XINT2的状态。的状态。 外设中断外设中断l控制寄存器控制寄存器(XINTlCR)一地址一地址7070h 控制和监视外部引脚控制和监视外部引脚XINT1的状态。的状态。 外设中断外设中断2控制寄存器控制寄存器(XINT2CR)一地址一地址7071h 控制和监视外部引脚控制和监视外部引脚XINT2的状态。的状态。 D0 XINTl enable D0 XINTl enable XINTl XINTl使能位。使能位。 该位使能或屏蔽外部中断该位使能或屏蔽外部中断XINT1XINT1 0 0 屏蔽中断屏蔽中断 1 1 使能中断使能中断3)外设中断控制寄存器()

42、外设中断控制寄存器(2个)个) 用来控制和监视两个外部引脚用来控制和监视两个外部引脚XINTl和和XINT2的状态。的状态。 外设中断外设中断l控制寄存器控制寄存器(XINTlCR)一地址一地址7070h 控制和监视外部引脚控制和监视外部引脚XINT1的状态。的状态。 外设中断外设中断2控制寄存器控制寄存器(XINT2CR)一地址一地址7071h 控制和监视外部引脚控制和监视外部引脚XINT2的状态。的状态。 外设中断外设中断2控制寄存器控制寄存器(XINT2CR)用于控制和监视外用于控制和监视外部引脚部引脚XINT2的状态。的状态。 各位的定义同各位的定义同(XINT1CR) 3 可屏蔽中断

43、的响应流程可屏蔽中断的响应流程1)响应可屏蔽中断条件:)响应可屏蔽中断条件: (1)INTM = 0 ,使能所有末屏蔽的中断;,使能所有末屏蔽的中断; (2)中断屏蔽寄存器)中断屏蔽寄存器(IMR)中相应位为中相应位为1;使能相应的中断;使能相应的中断; (3)若有多个中断请求,优先级高的中断源先相应。)若有多个中断请求,优先级高的中断源先相应。2)将)将PC压入堆栈,用相应的压入堆栈,用相应的CPU中断矢量单元地址装载到中断矢量单元地址装载到PC;3)CPU从相应中断矢量单元中取出一条用户设定的转移指令,然后从相应中断矢量单元中取出一条用户设定的转移指令,然后转入执行这一转入执行这一CPU中

44、断的通用中断服务程序中断的通用中断服务程序(GISRx)。例:例:INT2上有一外设中断请求被响应,其中断矢量单元地址为上有一外设中断请求被响应,其中断矢量单元地址为0004h,则在则在0004h单元放置一条转移指令:单元放置一条转移指令: 0004h B GISR23 可屏蔽中断的响应流程可屏蔽中断的响应流程4)在)在GISRx中完成必要的现场保护后,从外设中断矢量寄行器中完成必要的现场保护后,从外设中断矢量寄行器(PIVR)中读取相应外设中断矢量。中读取相应外设中断矢量。 通常并将其左移一个预定的值,再加上偏移量,所得到的值就是通常并将其左移一个预定的值,再加上偏移量,所得到的值就是这个外

45、设中断事件的中断服务程序这个外设中断事件的中断服务程序(SISR) 的入口地址。的入口地址。 在在SISR中执行对该外设中断事件的服务。中执行对该外设中断事件的服务。5)执行)执行SISR,直到一条返回指令,结束该中断服务程序。,直到一条返回指令,结束该中断服务程序。6)从栈顶弹出返回地址到)从栈顶弹出返回地址到PC。例例: : 典型中断服务程序代码典型中断服务程序代码 假设:假设:挂在挂在INT2 之下的之下的EVA 通用定时器通用定时器1的的周期中断周期中断 INT2的中断矢量为的中断矢量为 0004h EVA 通用定时器通用定时器1 周期中断的中断矢量周期中断的中断矢量(PIV)为为 0

46、027h (存放在存放在PIVR) 地址地址 汇编语言代码汇编语言代码 ;CPU中断矢量表中断矢量表0000h RSVECT : B START ;复位矢量;复位矢量0002h INT1: B GISR1 ;转移到;转移到INT1的通用中断服务子程序的通用中断服务子程序GISR10004h INT2: B GISR2 ; 转移到转移到INT2的通用中断服务子程序的通用中断服务子程序GISR2; CPU其他中断矢量其他中断矢量地址地址 汇编语言代码汇编语言代码GISR1:; 其他中断的通用中断服务子程序其他中断的通用中断服务子程序 GISR2: ; 保存现场保存现场LACC PIVR, 1 ;

47、; 将中断矢量寄存器将中断矢量寄存器(PIVR)的值移位的值移位(2)后装后装; ; 入累加器入累加器ADD Offset ;累加器的值加一个偏移量后,即为特定的中断;累加器的值加一个偏移量后,即为特定的中断; ; 服务子程序服务子程序 SISRx的地址的地址BACC ;转移到累加器指示的地址中;转移到累加器指示的地址中(2PIV+offset)Offset:B SISR0; 外设中断矢量表外设中断矢量表20001+offsetB SISR1 ;转移到中断事件的特定中断服务子程序;转移到中断事件的特定中断服务子程序SISR中中20002+offsetB SISR22PIVR+offset B

48、SISRx SISRx:;外部事件中断服务程序;外部事件中断服务程序RET;返回;返回 三、三、 非屏蔽中断非屏蔽中断1硬件非屏蔽中断硬件非屏蔽中断 两个引脚产生硬件非屏蔽中断:两个引脚产生硬件非屏蔽中断:RS (复位复位): CPU停止程序流程,使处理器回到一个初始状态,然后从地停止程序流程,使处理器回到一个初始状态,然后从地址址0000h 开始执行。开始执行。NMI : 当该信号被激活时当该信号被激活时(NMI 引脚变低或引脚变低或NMI指令指令), CPU使程序控制转使程序控制转向向0024h矢量地址,同时可屏蔽中断被禁止矢量地址,同时可屏蔽中断被禁止(NTM = 1)。 NMI也可用做

49、软件复位,与硬件复位不同,其不影响器件任何模式。也可用做软件复位,与硬件复位不同,其不影响器件任何模式。 LF240 x芯片没有芯片没有NMI引脚,当器件访问一个无效地址时,将产生非引脚,当器件访问一个无效地址时,将产生非屏蔽中断请求屏蔽中断请求 RS2软件非屏蔽中断软件非屏蔽中断 3条指令可引起软件非屏蔽中断条指令可引起软件非屏蔽中断: INTR K NMI TRAP 该指令允许启动中断,指令操作数该指令允许启动中断,指令操作数K表示表示CPU将将转移到哪个中断矢量单元。转移到哪个中断矢量单元。 例例 INTR 10 当响应当响应INTR中断时,中断时,INTM=1禁止可屏蔽中断。禁止可屏蔽

50、中断。 注意:注意:INTR指令不影响指令不影响IFR标志。标志。2软件非屏蔽中断软件非屏蔽中断 3条指令可引起软件非屏蔽中断条指令可引起软件非屏蔽中断: INTR K NMI TRAP 该指令使程序转移到中断矢量地址该指令使程序转移到中断矢量地址24h。 与不可屏蔽硬件中断与不可屏蔽硬件中断NMI使用同一单元。使用同一单元。 2软件非屏蔽中断软件非屏蔽中断 3条指令可引起软件非屏蔽中断条指令可引起软件非屏蔽中断: INTR K NMI TRAP 该指令使该指令使CPU转移到中断矢量单元转移到中断矢量单元22h,该指令不禁止任何可屏蔽中断,即该指令不禁止任何可屏蔽中断,即INTM不被置不被置1

51、非屏蔽中断流程图四、中断服务程序(四、中断服务程序(ISR)的现场保护与中断嵌套)的现场保护与中断嵌套CPU得到中断请求并响应之后,就根据中断矢量转得到中断请求并响应之后,就根据中断矢量转移到相应的中断服务程序移到相应的中断服务程序ISR中,中,ISR在为中断所要求在为中断所要求的任务服务前需要保存和恢复寄存器的值,并且还要的任务服务前需要保存和恢复寄存器的值,并且还要管理中断嵌套。管理中断嵌套。1保存和恢复寄存器值保存和恢复寄存器值CPU进入中断服务程序进入中断服务程序(ISR)之前,硬件只将增量后的程序计数器的值之前,硬件只将增量后的程序计数器的值自动保存起来,所以在中断服务程序中要用软件

52、对一些重要寄存器的自动保存起来,所以在中断服务程序中要用软件对一些重要寄存器的值进行保存和恢复。值进行保存和恢复。例如:如果例如:如果ISR需要执行一次乘法运算,那么它就需要使用乘法寄存器需要执行一次乘法运算,那么它就需要使用乘法寄存器(PREG)。如果先前的。如果先前的PREG值要求在执行完值要求在执行完ISR之后仍保存在之后仍保存在PREG中,则中,则ISR必须先保存该值,再执行新的乘法运算,当乘法运算执行完必须先保存该值,再执行新的乘法运算,当乘法运算执行完后,中断服务程序返回之前,再重新装载原来那个后,中断服务程序返回之前,再重新装载原来那个PREG值。值。在大多数中断服务程序中,都需

53、要对某些寄存器进行保护,所以,常在大多数中断服务程序中,都需要对某些寄存器进行保护,所以,常常备份一个通用的保存和恢复程序,供中断服务程序调用。常备份一个通用的保存和恢复程序,供中断服务程序调用。GIRS2::; SST #ST0, ST0_save ; save status register ST0, ( dp=0)SST #ST1, ST1_save ; save status register ST1LDP #0 ; point to memory page 0SACL ACCL ;SACH ACCH . LDP #0 ; point to memory page 0LACC ACCH

54、 ,16;LACL ACCL ; restore ACCLST #ST1, ST1_save ; restore status register ST1LST #ST0, ST0_save ; restore status register ST0CLRC INTM ;RET ST0 .set 0 ; status register ST0ST1 .set 1 ; status register ST1ST0_save .set 060h ; saved status register ST0ST1_save .set 061h ; saved status register ST1ACCH

55、.set 062h ; saved accumulator highACCL .set 063h ; saved accumulator low保保存存和和恢恢复复寄寄存存器器值值举举例:例:2中断服务程序中断服务程序(ISR)嵌套的管理嵌套的管理 C2000硬件堆栈允许中断嵌套,但须注意:硬件堆栈允许中断嵌套,但须注意:1)如果希望一个可屏蔽中断能够中断)如果希望一个可屏蔽中断能够中断ISR,那么,该,那么,该ISR必须不屏蔽这个中断,可在中断服务程序中,通过对必须不屏蔽这个中断,可在中断服务程序中,通过对IMR中的相应位设置和执行允许中断指令中的相应位设置和执行允许中断指令(CLRC IN

56、TM)来解除该中断屏蔽。来解除该中断屏蔽。2)8级硬件堆栈。每进行一次中断服务或进入子程序都要级硬件堆栈。每进行一次中断服务或进入子程序都要将返回地址压入堆栈,以提供返回的途径,所以最多允将返回地址压入堆栈,以提供返回的途径,所以最多允许中断或子程序嵌套许中断或子程序嵌套8级。级。 3) C2000具有防止意外嵌套的功能。具有防止意外嵌套的功能。 因为在执行完中断的服务程序返回之前,总要先因为在执行完中断的服务程序返回之前,总要先允许中断,即执行允许中断,即执行 CLRC INTM RET 假如在执行假如在执行CLRC INTM时发生了意外中断,时发生了意外中断,CPU总总是先完成是先完成CL

57、RC INTM指令及其后面的那条指令后才去指令及其后面的那条指令后才去处理已挂起的中断。处理已挂起的中断。 如果希望在中断服务程序中实现中断嵌套,应在返回如果希望在中断服务程序中实现中断嵌套,应在返回(RET)指令前至少两条指令的位置上插入指令前至少两条指令的位置上插入CLRC INTM指令,即指令,即 CLRC INTM . . RET五、中断等待时间五、中断等待时间 中断等待时间是指提出中断请求到响应请求之间的时间,中断等待时间是指提出中断请求到响应请求之间的时间,其长短取决于许多因素。在执行一个软件中断之前其长短取决于许多因素。在执行一个软件中断之前CPU总是要完成流水线操作中的所有指令,总是要完成流水线操作中的所有指令, 不可屏蔽中断最小等待时间为不可屏蔽中断最小等待时间为4个周期。个周期。 一个外部可屏蔽硬件中断,其最小等待时间为一个外部可屏蔽硬件中断,其最小等待时间为8个周期。个周期。 LF/LC240 x中断等待时间包括:中断等待时间包括:外设同步接口时间外设同步接口时间CPU响应时间响应时间ISR转移时间。转移时间。五、中断等待时间五、中断等待时间 外设同步接口时间是指外设中断事件发生中断请求,经外设同步接口时间是指外设中断事件发生

温馨提示

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

评论

0/150

提交评论