首页 理论教育 S3C444B0X中断控制器的特殊功能寄存器

S3C444B0X中断控制器的特殊功能寄存器

时间:2023-11-23 理论教育 版权反馈
【摘要】:一般是通过对中断控制器的特殊功能寄存器的设置来完成相应的中断功能,包括是否使能中断、选择什么样的中断方式、是否中断挂起、是否屏蔽哪个中断以及中断优先级的设定等。表6.39中断控制寄存器注意:FIQ 模式不支持矢量中断模式。IRQ 向量模式相关寄存器S3C44B0X 中的优先级产生模块包含5 个单元,1 个主单元和4 个从单元。表6.47当前IRQ 主群优先级寄存器IRQ 中断服务挂起寄存器IRQ 中断服务挂起寄存器见表6.48,表示了当前正在被响应的中断。

S3C444B0X中断控制器的特殊功能寄存器

一般是通过对中断控制器的特殊功能寄存器的设置来完成相应的中断功能,包括是否使能中断、选择什么样的中断方式、是否中断挂起、是否屏蔽哪个中断以及中断优先级的设定等。 下面将分别对各个寄存器进行介绍。

(1)中断控制寄存器(INTCON)

中断控制器见表6.39,从表中可以看出,INTCON 寄存器的位[0]为FIQ 中断使能位,位[1]为IRQ 中断使能位,位[2]是选择IRQ 中断为矢量中断模式还是普通模式。

表6.39 中断控制寄存器(INTCON)

注意:FIQ 模式不支持矢量中断模式。

(2)中断挂起寄存器(INTPND)

中断挂起寄存器见表6.40,共有26 位,每一位对应着一个中断源,当中断请求产生时,相应的位会被设置“1”。 中断服务程序中必须加入对I_ISPC 和F_ISPC 写“1”的操作来清除挂起条件。

如果有几个中断源同时发出中断请求,那么无论它们有没有被屏蔽,它们相应的挂起位都会置“1”。 只是优先级寄存器会根据它们的优先级高低来响应当前优先级最高的中断。

表6.40 中断挂起寄存器(INTPND)

(3)中断模式寄存器(INTMOD)

中断模式寄存器见表6.41,共有26 位,每一位对应着一个中断源,当中断源的模式位设置为“1”时,对应的中断会由ARM7TDMI 内核以FIQ 模式来处理;相反地,当模式位设置为“0”时,中断会以IRQ 模式来处理。

表6.41 中断模式寄存器(INTMOD)

(4)中断屏蔽寄存器(INTMSK)

在中断屏蔽寄存器中,除了全局屏蔽位外,其余的26 位都分别对应一个中断源,见表6.42。 当屏蔽位为“1”时,对应的中断被屏蔽;当屏蔽位为“0”时,该中断可以正常执行。 如果全局屏蔽位被设置为“1”,则所有的中断都不执行。

如果使用了矢量中断模式,在中断服务程序中改变了中断屏蔽寄存器的值,这时并不能屏蔽相应的中断过程,因为该中断在中断屏蔽寄存器之前已经被中断挂起寄存器锁定了。 要解决这个问题,就必须在改变中断屏蔽寄存器后再清除相应的挂起位。

表6.42 中断屏蔽寄存器(INTMSK)

注意:①只有当相应的中断没有发出请求时,INTMSK 寄存器才能被屏蔽;②如果需要屏蔽所有的中断,可以应用MSR、MRS 指令来设置CPSR 中的I/F 位。 当任何中断出现时,CPSR 中的I/F 位也能被屏蔽。

(5)IRQ 向量模式相关寄存器

S3C44B0X 中的优先级产生模块包含5 个单元,1 个主单元和4 个从单元。 每个从优先级产生单元管理6 个中断源。 主优先级产生单元管理4 个从单元和2 个中断源。

每一个从单元有4 个可编程优先级中断源(sGn)和2 个固定优先级中断源(kn)。 这4 个中断源的优先级是由I_PSLV 寄存器决定的,另外2 个固定优先级中断源在6 个中断源中的优先级最低。

主单元可以通过IRQ 向量模式相关寄存器来决定4 个从单元和2 个中断源的优先级,见表6.43。 这2 个中断源INT_RTC 和INT_ADC 在26 个中断源中的优先级最低。

如果几个中断源同时发出中断请求,这时I_ISPR 寄存器可以显示当前具有最高优先级的中断源。

表6.43 IRQ 向量模式相关寄存器

(6)IRQ 从群优先级寄存器(I_PSLV)(www.xing528.com)

IRQ 从群优先级寄存器见表6.44,它决定了在每个从群中4 个中断源的中断优先级。

表6.44 IRQ 从群优先级寄存器(I_PSLV)

注意:即使相应的中断源没有用到,I_PSLAVE 中的各项也必须配置不同的优先级。

(7)IRQ 主群优先级寄存器(I_PMST)

IRQ 主群优先级寄存器见表6.45,决定了4 个从群的中断优先级。

表6.45 IRQ 主群优先级寄存器(I_PMST)

注意:即使相应的中断源没有用到,I_PMST 中的各项也必须配置不同的优先级。

(8)当前IRQ 从群优先级寄存器(I_CSLV)

当前IRQ 从群优先级寄存器见表6.46,表示在从群中各中断源当前的优先级状态。 如果应用轮询模式,I_CSLV 可能不同于I_PSLV。

表6.46 当前IRQ 从群优先级寄存器(I_CSLV)

(9)当前IRQ 主群优先级寄存器(I_CMST)

当前IRQ 主群优先级寄存器见表6.47,表示了各从群当前的优先级状态。

表6.47 当前IRQ 主群优先级寄存器(I_CMST)

(10)IRQ 中断服务挂起寄存器(I_ISPR)

IRQ 中断服务挂起寄存器见表6.48,表示了当前正在被响应的中断。 虽然有多个中断挂起位都被打开,但只有[1]位发生作用。

表6.48 IRQ 中断服务挂起寄存器(I_ISPR)

(11)IRQ/FIQ 中断挂起清零寄存器(I_ISPC/F_ISPC)

IRQ/FIQ 中断挂起清零寄存器见表6.49,主要用来清除中断挂起位(INTPND)。 I_ISPC/F_ISPC 也表明了相应ISR(中断服务程序)末尾的中断控制器。 在ISR(中断服务程序)的末尾,相应的挂起位必须被清除。

通过对I_ISPC/F_ISPC 相应的位写“1”来清除中断挂起位(INTPND)。 这一特点减小了清除INTPND 的代码大小。 相应的INTPND 位被I_ISPC/F_ISPC 自动清除。 INTPND 寄存器不能直接被清除。

表6.49 IRQ/FIQ 中断挂起清零寄存器(I_ISPC/F_ISPC)

注意:为了清除I_ISPC/F_ISPC,须遵守以下两个原则:①在ISR(中断服务程序)中,I_ISPC/F_ISPC 寄存器的存取只能进行一次;②I_ISPR/INTPND 寄存器中的挂起位应该通过I_ISPC 寄存器来清除。
如果这两个原则都不满足,即使中断已经发出请求,I_ISPR 和INTPND 寄存器也可能是“0”。

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

我要反馈