【ARM】Exynos 4412 中断控制器相关计算
来源:互联网 发布:萧山华数传媒网络号码 编辑:程序博客网 时间:2024/05/21 07:08
由于引入了GIC,在设置中断控制器的时候不免产生各种计算,各种寄存器编号换算比较繁琐,在此提供一种计算方式。
GIC处理中断的流程
GIC中由成百上千的寄存器,要理清寄存器的设置思路,必须要理解GIC是如何处理中断源发来的中断信号的。
首先,GIC有一个全局开关——ICDDCR。这个寄存器决定了GIC是否会处理外围的中断信号,因此必须先将它打开。
中断信号到来后,第一个要面对的是GIC的中断源屏蔽,这里GIC提供了两种策略:白名单——ICDISER_CPU,以及黑名单—— ICDICER_CPU。
在白名单中,相应的中断源位置1表示允许这个中断;在黑名单中,相应的中断源位置1表示禁止这个中断。一般情况下,我们都是使用白名单。
OK,现在许多的中断信号都被允许进入GIC了,接下来中断信号们面对的是GIC的优先级处理系统。这个优先级的处理简单的说就是:谁的优先级高,就先响应谁;低于最低优先级的中断信号将被阻止。
经过了两轮过滤,剩下的中断信号都将交给CPU处理。那么又出现了一个先后顺序的问题。FIQ优先级高于IRQ这是一定的,另外,在GIC中可以设置每一个中断源的优先级,GIC将根据优先级高低,依次将信号传送给CPU。
对于一个将要传送给CPU的中断信号,我们是要将它给哪个CPU呢?因为多核处理器有很多的CPU。仍然是通过寄存器来设置。
到了最后一关,前面只是中断信号自己“一厢情愿”的想要交给CPUn处理,但是CPUn就一定要处理吗?不一定!在这里我们仍然可以操作寄存器将中断信号阻断在从GIC到CPUn的路上,不过这个操作会导致CPUn无法接受到任何中断信号,具有全局属性。
相关计算
在设置GIC之前,你要先知道你要使用的中断的SPI Port No或者PPI Port No,以及ID,可以在GIC Interrupt Table中找到。如下图:
下面,以EINT[9]为例,看一下配置寄存器时涉及到的一些计算。
SPI Port NO: 25ID : 57
中断使能寄存器 ICDISER
可以看到,共有5个寄存器管理了160个中断信号的使能。第一个寄存器负责SGI和PPI,后面四个寄存器负责SPI。
由于我们的SPI号是25,并且SPI编号从0开始,所以应该对应的是第一个寄存器的第26位:
ICDISER1 |= 1<<25;//寄存器的位编号也从0开始
CPU目标选择寄存器 ICDIPTR
从下面的图可以看出,对于每个中断源,使用8位来标识将其送给哪个CPU。因此一个寄存器可以管理4个中断源,160个中断源需要40个寄存器。
下面的图展示了不同的中断源的寄存器分配情况,SPI中断是从第九个寄存器(ICDIPTR8)开始的。那么怎样算出我们的EINT9中断源在第几个寄存器的第几位呢?下面来分析一下。
因为EINT9的SPI编号是25,所以应该是第26个SPI中断源。并且每个寄存器管理4个中断源,做以下计算:
26 ÷ 4 = 6 ~ 2
那么,如果只看管理SPI的寄存器,EINT9所在的寄存器前面应该有6个寄存器,第一个是ICDIPTR8,所以EINT9所在的寄存器就是8+6=14,即ICDIPTR14的第二个字节。
ICDIPTR14[15:8]
- 【ARM】Exynos 4412 中断控制器相关计算
- 【ARM】Exynos 4412 中断理论分析
- Exynos 4412 看门狗定时器中断
- ARM通用中断控制器
- ARM中断控制器
- ARM GIC中断控制器介绍
- ARM GIC中断控制器介绍
- ARM之GIC中断控制器
- ARM体系结构之中断控制器
- ARM GIC中断控制器介绍
- ARM 中断处理和中断控制器
- Exynos 4412处理器IIC总线控制器(包括协议)
- exynos 4412
- 【ARM】Exynos 4412 IIC(I2C)总线详解
- ARM中断及相关寄存器
- Exynos 4412开发板
- Exynos 4412--BLOCK DIAGRAM
- Exynos 4412 bootloader分析
- hdu 5688 2016"百度之星"
- c# 三目运算&foreach语句
- R语言-RC系统
- CacheUtil(loadingCache)
- MyEclipse快捷键大全
- 【ARM】Exynos 4412 中断控制器相关计算
- 51nod 1284 2 3 5 7的倍数
- Maven资源仓库配置
- 【转】【NGN学习笔记】6 代理(Proxy)和背靠背用户代理(B2BUA)
- 查看Spark进程的JVM配置及内存使用
- Java怎么把输入的字符转换成16进制 菜鸟一个才刚刚接触Java没多久
- Python3:UnicodeEncodeError: 'gbk' codec can't encode character '\ubxxx'问题
- 网路营销seo站群策略
- C#获取系统时间