首页 理论教育 中断源和操作流程的分析介绍

中断源和操作流程的分析介绍

时间:2023-06-24 理论教育 版权反馈
【摘要】:图4-13 PIE中断源和外部中断3~75)修改PIE向量表,使其重新映射到正确的外设中断服务程序。使用PIEIER禁止中断如果用户想使用PIEIER寄存器来使能中断然后禁止中断,则应遵循下面两种操作方法。3)修改PIE向量表将相应的外设中断映射到一个临时的空中断服务程序,这个空的服务程序仅仅进行一个中断返回操作。7)CPU识别中断并且自动保护中断现场、清除IER、置位INTM及清除EALLOW。

中断源和操作流程的分析介绍

图4-12和图4-13分别给出了中断源及其复用情况。

PIE模块让8个外设或外部引脚中断复用一个CPU中断,这些中断又被分成12个组(PIE分组1~12)。每一分组都有对应的PIEIER和PIEIFR寄存器,这些寄存器可用来控制向CPU发送中断请求。当中断发生时,CPU也可以通过这些寄存器内容进行解码来判断响应哪一个中断。

978-7-111-49650-2-Chapter04-68.jpg

图4-12 PIE中断源和外部中断1~2

1.PIEIERPIEIFR

当对PIEIER和PIEIFR寄存器进行相关操作时,需要注意几点。

(1)不要软件清零PIEIFR位

当对PIEIFR寄存器进行写或读—修改—写操作指令时,可能会丢失产生的中断。如果要将PIEIFR位清零,则须等当前的中断服务程序被执行。若用户想通过清除PIEIFR标志位使CPU不执行正常的中断服务程序,则应采用如下操作步骤:

1)将EALLOW置位,允许用户修改PIE向量表。

2)修改PIE向量表,使对应外设中断的向量指向一个临时的中断服务程序(ISR)。这个临时的服务程序仅仅实现一个中断返回操作(IRET)。

3)使能中断,则CPU将会响应中断,并执行该临时中断服务程序。

4)临时的中断服务程序执行完毕后,PIEIFR位将被自动清零。

978-7-111-49650-2-Chapter04-69.jpg

图4-13 PIE中断源和外部中断3~7

5)修改PIE向量表,使其重新映射到正确的外设中断服务程序。

6)清除EALLOW位。

(2)软件设置中断优先级

1)CPU级IER寄存器用来设置全局中断优先级,各个PIEIER寄存器用来设置每一分组中的中断优先级。在这种情况下,PIEIER寄存器只能在同组的中断服务程序中修改,因为此时可以通过PIEACK位来阻止CPU响应同组中的其他中断。

2)在响应某一PIE分组的中断时,不要禁止其他PIE分组的PIEIER位。

(3)使用PIEIER禁止中断

如果用户想使用PIEIER寄存器来使能中断然后禁止中断,则应遵循下面两种操作方法。

方法1:使用PIEIERx寄存器禁止中断并且保持相应的PIEIFRx标志位。

1)禁止全局中断(INTM=1)。

2)清零PIEIERx.y,禁止相应外设中断。

3)等待5个指令周期。这个等待是为了保证已向CPU发出中断请求的中断能将CPU IFRx寄存器的相应位置位。

4)清除相应PIE分组的CPUIFRx标志位(对CPUIFR操作为安全操作)。

5)清除相应PIE分组的PIEACKx位。

6)使能全局中断(INTM=0)。

方法2:使用PIEIERx寄存器禁止中断并清除相应的PIEIFRx标志位。

1)禁止全局中断(INTM=1)。(www.xing528.com)

2)置位EALLOW。

3)修改PIE向量表将相应的外设中断映射到一个临时的空中断服务程序(ISR),这个空的服务程序仅仅进行一个中断返回操作(IRET)。这是清除PIEIFRx.y的安全方法,可以保证不丢失同一分组的其他外设中断。

4)在外设相应寄存器中禁止外设中断。

5)使能全局中断(INTM=0)。

6)等待外设中断服务程序执行完毕(执行空ISR)。

7)禁止全局中断(INTM=1)。

8)修改PIE向量表使相应外设中断映射到原始ISR。

9)清除EALLOW位。

10)禁止与给定外设相对应的PIEIER位。

11)清除与给定外设相对应的CPU IFR标志位(对CPU IFR操作为安全操作)。

12)清除相应PIE分组的PIEACK位。

13)使能全局中断。

2.CPU响应外设复用中断请求流程

图4-14描述了复用的中断请求从外设产生到CPU响应的一个流程,其具体步骤如下。

978-7-111-49650-2-Chapter04-70.jpg

图4-14 复用中断请求流程

1)PIE分组中的外设或外部引脚产生中断请求。如果外设模块中使能了对应的中断,那么该中断请求将送至PIE模块。

2)PIE模块将识别出中断的来源(第x分组中的第y个中断,即INTx.y),且相应的PIE中断标志位PIEIFRx.y锁存为1。

3)为使中断请求能够从PIE传送至CPU,需要同时满足以下两个条件:

①相应的PIE中断使能位必须置位(PIEIERx.y=1)。

②PIEACKx位必须被清除。

4)若步骤3的两个条件都满足,则中断请求将被传送至CPU,并且对应的应答位再次被置位(PIEACKx=1)。PIEACKx将保持置位状态直到被手动清零。手动清零该位后,该PIE分组其他中断产生的中断请求便可以由PIE传送至CPU。

5)相应的CPU级中断标志位被置位(IFRx=1),表明CPU有一个中断挂起。

6)若使能了CPU中断(CPU IERx=1)并且全局中断屏蔽位被清除(INTM=0),则CPU将响应该中断INTx。

7)CPU识别中断并且自动保护中断现场、清除IER、置位INTM及清除EALLOW。所有的步骤CPU都按顺序执行。

8)CPU请求PIE提供相应的中断向量

9)对于复用的中断源,PIE模块根据寄存器PIEIERx和PIEIFRx的当前值来解码、确定CPU所需要的中断向量地址

CPU进入中断后会自动清除PIEIFRx.y位。需要注意的是,PIEIERx寄存器用来决定哪一个中断向量被用来作为跳转地址,所以在清除PIEIERx时必须谨慎。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈