中断控制部分的原理和SDK函数以及中断的试验
上一视频
(视频 17)介绍了中断处理的情景,从 IRQ中断向量表转跳到中断服
务程序保存现场后直接驱动小灯反转。为了凸显其中断处理过程,那个试验实际
忽略很多中断设置细节,在这一个视频我们给大家详细展开。
看
PDF中中断部分两个图。
中断来源分成三大类
SPI Shared Peripheral Interrupts)),PPI CPU Private Peripheral Interrupts)),SGI Software Generated Interrupts 总共 96个 ID号的中
断,这 96个中断要按照不同的优先级分配到两个处理器 (CPU0 CPU1)上,这就需
要对中断进行管理:首先要想一下要我们自己来做一个管理这么多输入的中断给
2个处理器核的中断控制器需要设置一些什么样的控制器寄存器。首先必须有全
局使能,而具体到每一个中断的 ID号,要设置是否使能(是否真的产生处理器
中断),以及优先级(也就是同时发生先 响 应谁),还要指 定中断信号发送给哪个
处理器。基本也就这些了,我们通过来看 UG585来关注这几个寄存器。
ICDDCR 开启或者关闭中断设置。(全局)
ICDICFR 配置中断触发模式。( 2BIT))[一位表示触发类型,一位表示是否仅 CPU0接受中断 ]
ICDIPR 中断优先级设置。( 8BIT))[数值越低优先级级别越高 ]对应有一个 ICCPMR设置接受中断的优先级门限。
ICDIPTR 相应处理器选择。( 8BIT))[if(bit0) select CPU0 if (bit1) select CPU1]为什么
留 8位是预留更多核。
ICDICER 中断屏蔽寄存器。( 1BIT
ICDISER 中断使能寄存器。( 1BIT
ICDICPR 清除中断标志位。( 1BIT
ICCIAR 读之得到正在发生的中断请求是什么 ID号发出的( 10BIT ),要求哪个处
理器执行的 (3BIT)。一个读的操作同时清除了所读到 中断号的标志位。 [读可以得
到数,并且赋予了读这个动作本身有意义 ]
ICCPMR 可执行中断优先级 默认是 F0,也就说从 0到 EF的优先级都被允许中
断 .
ICCICR 是 FIQ或者是 IRQ.
通过以上分析我们可以具体的设置某一个中断
ID所对应的中断处理信息,我们
来看一下 SDK给我们提供了什么样的库函数可以直接调用,并一起来看看其实现
过程。
接下来我给大家讲讲实际中断的情景
,以及对应的 SDK函数操作。
STEP 1,首先要中断向量要转跳到 IRQ的服务程序。对应一下函数:
STEP 2, 有几十方式可以产生 IRQ (ID号 96个 ),所以我们要知道具体是哪个发生
了中断号发生了 IRQ中断。找到后对应调用相应的处理程序。
STEP 3,找到具体是哪个 ID号的中断,下面步骤就是要对应再处理,可能要进行
再细分(比如要 118个 GPIO可以产生 52号中断要判断出具体哪一位)。以及进
行其他相应处理。
这里我们就进行一个试验。
(本课程重在理解实验原理, 过程略,看视频讲解 )