美文网首页
第十七章 GPIO 中断试验(原理)

第十七章 GPIO 中断试验(原理)

作者: 昨天剩下的一杯冷茶 | 来源:发表于2019-12-13 11:21 被阅读0次

Cortex-A7 中断系统简介

向量地址 中断类型 中断模式
0X00 复位中断(Rest) 特权模式(SVC)
0X04 未定义指令中断(Undefined Instruction) 未定义指令中止模式(Undef)
0X08 软中断(Software Interrupt,SWI) 特权模式(SVC)
0X0C 指令预取中止中断(Prefetch Abort) 中止模式
0X10 数据访问中止中断(Data Abort) 中止模式
0X14 未使用(Not Used) 未使用
0X18 IRQ 中断(IRQ Interrupt) 外部中断模式(IRQ)
0X1C FIQ 中断(FIQ Interrupt 快速中断模式(FIQ)

GIC 控制器简介

1、 GIC接收众多的外部中断,最终只有4个信号报给ARM内核。
VFIQ:虚拟快速 FIQ。
VIRQ:虚拟快速 IRQ
FIQ:快速中断 IRQ。
IRQ:外部中断 IR
2、GICV2 总体框图

image.png
①SPI是共享中断,所有Core共享的中断,这个是最常见的,那些外部中断都属于SPI中断。比如按键中断、串口中断等等。
②PPI是私有中断,我们说了GIC是支持多个核的,每个核肯定有自己独有的中断。
③SGI是软件中断,由软件触发引起的中断,通过向寄存器GICD_SGIR写入数据来触发,系统会使用SGI中断来完成多核之间的通讯。
④中断ID
ID0~ID15分配给SGI。
ID16~ID31分配给PPI。
ID32~ID1019分配给SPI
⑤GIC逻辑分块
Distributor(分发器端)
此逻辑块负责处理各个中断时间的分发问题,也就是中断事件应该发送到哪个CPU Interface上去。分发器收集所有的中断源,可以控制每个中断的优先级,它总是将优先级最高的中断事件发送到CPU接口端。分发器端要做的主要工作如下:
a.全局中断使能控制。
b.控制每一个中断的使能或者关闭。
c.设置每个中断的优先级
d.设置每个中断的目标处理器列表
e.设置每个外部中断的触发模式:电平触发或者边沿触发。
f.设置每个中断属于组0还是组1
CPU Interface(CPU 接口端)
CPU接口端就是分发器和CPU Core之间的桥梁,CPU接口端主要工作如下:
a.使能或者关闭发送到CPU Core的中断请求信号。
b.应答中断
c.通知中断处理完成
d.设置优先级掩码,通过掩码来设置哪些中断不需要上报给CPU Core
e.定义抢占策略
f.当多个中断到来的时候,选择优先级最高的中断通知给CPU Core

CP15协处理器

主要是使能或者禁止MMU、I/D Cache等

中断使能

IRQ和FIQ总中断使能

指令 描述
cpsid i 禁止IRQ中断
cpsie i 使能IRQ中断
cpsid f 禁止FIQ中断
cpsie f 使能FIQ中断

ID0~ID1019中断使能和禁止
GIC寄存器GICD_ISENABLERn和GICD_ICENABLERn用来完成外部中断的使能和禁止,对于Cortex-A7内核来说中断ID只能使用512个。一个bit控制一个中断ID的使能,那么就需要512/32=16个GICD_ISENABLERn寄存器来完成中断的使能。同理,也需要16个GICD_ICENABLERn寄存器来完成中断的禁止。其中GICD_ISENABLERn的bit[15:0]对应ID15~0de SGI中断,GICD_ISENABLERn的bit[31:16]对应ID31~16的PPI中断。剩下的GICD_ISENABLERn就是控制SPI中断的。

中断优先级设置

优先级数配置
GICC_PMR寄存器只有低8位有效,这个8位最多可以设置256个优先级,其他优先级数设置如下表

image.png image.png

抢占优先级和子优先级位数设置
抢占优先级和子优先级各占多少位是由寄存器GICC_BPPR来决定的,GICC_BPR寄存器结构如下:

image.png

GICC_BPR只有低3位有效,其值不同,抢占优先级和子优先级占用的位数也不同,配置如下:


image.png

为了简单起见,一般将所有的中断优先级位都配置为抢占优先级,比如6U的优先级位数为5(32个优先级),所以可以设置Binary poin为2,表示5个优先级位全部为抢占优先级。

优先级设置
Cortex-A7使用了512个中断ID,每个中断ID配有一个优先级寄存器,所以一共有512个D_IPRIORITYR寄存器。如果优先级个数为32的话,使用寄存器D_IPRIORITYR的bit7:4来设置优先级。
优先级设置主要有三部分:
①设置寄存器GICC_PMR,配置优先级个数,比如I.MX6U支持32级优先级
②设置抢占优先级和子优先级位数,一般为了简单起见,会将所有的位数都设置为抢占优先级
③设置指定中断的ID的优先级,也就是设置外设优先级

简单总结:
1、 6U有8中中断类型
2、 GIC控制器有三类中断源,SPI、PPI、SGI;能设置中断优先级,抢占优先级和子优先级。
3、 CP15协处理器是开关I/D cache、MMU、获取GIC寄存器

相关文章

网友评论

      本文标题:第十七章 GPIO 中断试验(原理)

      本文链接:https://www.haomeiwen.com/subject/twkewctx.html