0 参考资料
STM32MP13xx参考手册.pdf(RM0475)
ARM Generic Interrupt Controller Architecture version 2.0 - Architecture Specification.pdf
1 GIC(通用中断控制器)介绍
有关Cortex-A7的GIC(通用中断控制器)的介绍文档为ARM ArchitectureReference Manual ARMv7-A and ARMv7-R edition.pdf,相关内容有214页之多,本例仅介绍开发过程中必须使用到的几个寄存器。
1.1 中断优先级掩码寄存器GICC_PMR
中断优先级掩码寄存器GICC_PMR作为中断优先级筛选器,只有优先级高于此寄存器值的中断才会向处理器发出中断信号(可以理解为这个寄存器用来设置支持的中断优先级数,例如寄存器值为31,优先级大于31的中断(优先级为0-30)都会被响应)。寄存器描述如下:
Cortex-A7支持最多256个中断优先级,通常芯片厂商不会使用这么多的优先级。以STM32MP13xx为例,其只使用到了5位,也就是支持最多31个中断优先级:
这是GIC和NVIC不一样的地方,NVIC通常固定优先级设置为为4bit,也就是支持最多16个中断优先级。
1.2 中断抢占优先级和响应优先级配置寄存器GICC_BPR
GICC_BPR寄存器可以用来配置中断抢占优先级和响应优先级各自所占的位数。寄存器描述如下:
只有低三位有效,设置值对应的中断抢占优先级和响应优先级分配情况如下:
例如我们需要3位做抢占优先级,2位做响应优先级,只需要将GICC_BPR寄存器值设置为4即可。
以STM32MP13xx为例,其GICC_BPR寄存器也只使用最后3位:
1.3 中断优先级配置寄存器GICD_IPRIORITYRn
中断优先级配置寄存器用于设置中断对应的中断优先级,寄存器描述如下:
以STM32MP13xx为例,其GICD_IPRIORITYRn寄存器也只使用了其中5位:
1.4 中断使能寄存器GICD_ISENABLERn
中断使能寄存器决定是否响应中断,该寄存器写1将使能中断,写0无动作。读取该寄存器值为1表示中断使能,为0表示中断失能。
以STM32MP13xx为例,其GICD_ISENABLERn寄存器描述如下:
1.5 中断失能寄存器GICD_ICENABLERn
中断失能寄存器写1将失能中断,写0无动作。读取该寄存器值为1表示中断使能,为0表示中断失能。
以STM32MP13xx为例,其GICD_ICENABLERn寄存器描述如下: