合肥重点工程建设局,网站要素的优化设计,深圳建网页,企业咨询顾问服务协议目录 1 中断控制器
编辑
2 Exynos4412下的中断控制器
2.1 概述
2.2 特征
编辑
2.3 中断状态
2.4 中断类型
2.5 中断控制器GIC中断表
3 中断控制器寄存器详解
3.1 ICDDCR#xff08;Interrupt Controller Distributor Control Register#xff09;
3.2 ICDISER…目录 1 中断控制器
编辑
2 Exynos4412下的中断控制器
2.1 概述
2.2 特征
编辑
2.3 中断状态
2.4 中断类型
2.5 中断控制器GIC中断表
3 中断控制器寄存器详解
3.1 ICDDCRInterrupt Controller Distributor Control Register
3.2 ICDISER_CPU(Interrupt Controller Distributor Set-Enable Register for CPU)
3.3 ICDIPTR_CPUInterrupt Controller Distributor Interrupt Processor Targets Register for CPU
3.4 ICCICR_CPUn(Interrupt Controller CPU Interface Control Register for CPU n)
3.5 补充中断控制器优先级设置寄存器
4 GPIO中断编程
4.1 外设层次设置
4.2 中断控制器层次设置
4.3 程序代码 1 中断控制器
cpu本身是没办法区分中断来自哪个外设无法应对同时产生的中断等等许多问题。
三星公司设计了中断控制器来解决问题 中断控制器作用
多个中断同时产生时可对这些中断挂起排队然后按照优先级依次发送给CPU处理 可以为每一个中断分配一个优先级 一个中断正在处理时若又产生其它中断可将新的中断挂起待CPU空闲时再发送 可以为每一个中断选择一个CPU处理 可以为每一个中断选择一个中断类型FIQ或IRQ CPU接收到中断信号后并不能区分是哪个外设产生的此时CPU可查询中断控制器来获取当前的中断信号是由哪个硬件产生的然后再进行对应的处理 可以打开或禁止每一个中断 ... ... 2 Exynos4412下的中断控制器
中断控制器内容较多只进行简单分析实际开发很少去配置中断控制器因为crotex-A系列处理一般开发的时候会安装大型操作系统操作系统内部会把中断控制器相关代码会实现好。包括中断控制器寄存器的配置等我们只需要使用中断函数即可。
2.1 概述 2.2 特征 支持三种中断类型 软件生成中断SGI与之前SWI软中断指令不是一回事注意区分私有外围中断PPI只能发送给某一个特定的CPU共享外围中断SPI这类中断可以发送给任意一个CPU使用最多可编程中断使您能够设置 中断的安全状态。安全状态可以触发FIQ和IRQ非安全中断只能触发IRQ中断的优先级级别。中断的启用或禁用。 接收中断的处理器。
2.3 中断状态 2.4 中断类型 2.5 中断控制器GIC中断表
划分了0~159个中断号其中
0~15 SGI 代表了软中断,
16~31 PPI只能发送给一个特定的CPU
32~159 SPI 共享中断 串口 ID 84~87
WDT ID 75
外部中断如ID57 代表EINT[9]实验中使用较多 3 中断控制器寄存器详解
寄存器内容从9.5开始介绍 3.1 ICDDCRInterrupt Controller Distributor Control Register
中断控制器分发器控制寄存器(总开关 全局使能用于监视外设中断信号并将挂起中断转发给CPU接口。
0 GIC忽略所有外设中断信号不将挂起中断转发给CPU接口。
1 GIC监视外设中断信号并将挂起中断转发给CPU接口。
3.2 ICDISER_CPU(Interrupt Controller Distributor Set-Enable Register for CPU)
CPU的中断控制器分发器设置使能寄存器(小开关
这个寄存器用于设置每个CPU对应的中断使能位。通过设置该寄存器的特定位可以启用或禁用特定中断信号的传递给相应的CPU核心。具体的寄存器位定义和功能取决于使用的中断控制器的架构和规范。 [31:0] 只有32位我们总共需要管理160位所有使用了多个寄存器地址。每个中断ID对应寄存器参考下表 3.3 ICDIPTR_CPUInterrupt Controller Distributor Interrupt Processor Targets Register for CPU
即用于CPU的中断控制器分发器中断处理器目标寄存器。选择CPU 例如值为0x300000011表示待处理的中断将被发送到处理器0和1。对于三星CPU来说高4位无效。 中断信号需要1280位去管理160*8bit 1280bit一个寄存器只能管理32bit需要40个寄存器。
对应关系 例管理6号中断由CPU2来出来
那么寄存器如下图设置。 3.4 ICCICR_CPUn(Interrupt Controller CPU Interface Control Register for CPU n)
控制指定CPU核心的中断控制器CPU接口的行为包括使能和禁用中断处理、配置FIQ和IRQ中断的优先级等功能。中断控制器到CPU之间的开关 3.5 补充中断控制器优先级设置寄存器 4 GPIO中断编程
要求KEY3按下时产生中断来点亮LED
4.1 外设层次设置
让外部的硬件控制器产生一个中断信号发送给中断控制器 GPIO下降沿产生中断对应核心板GPX1_1 GPX与中断寄存器对应关系 中断控制寄存器 使能中断 这个寄存器一般不需要我们写中断发送即会置1 用于判断中断发生 4.2 中断控制器层次设置
让中断控制器接收外设产生的中断信号并对其进行管理然后再转发给CPU处理
ICDDCR置1打开全局中断使其能接收外设产生的中断信号并转发到CPU接口
ICDISER_CPU25位置1使能57号中断使中断控制器接收到57号中断后能将其转发到CPU接口
ICDIPTR14000000001选择CPU0来处理57号中断
ICCICR使能中断控制器和CPU0之间的接口使中断控制器转发的中断信号能够到达CPU0
4.3 程序代码
#include exynos_4412.hint main()
{/*外设层次 - 让外部的硬件控制器产生一个中断信号发送给中断控制器*//*将GPX1_1设置成中断功能*/GPX1.CON GPX1.CON | (0xF 4);/*设置GPX1_1的中断触发方式为下降沿触发*/EXT_INT41_CON EXT_INT41_CON (~(0x7 4)) | (0x2 4);/*使能GPX1_1的中断功能*/EXT_INT41_MASK EXT_INT41_MASK (~(1 1));/*中断控制器层次 - 让中断控制器接收外设产生的中断信号并对其进行管理然后再转发给CPU处理*//*全局使能中断控制器使其能接收外设产生的中断信号并转发到CPU接口*/ICDDCR ICDDCR | 1;/*在中断控制器中使能57号中断使中断控制器接收到57号中断后能将其转发到CPU接口*/ICDISER.ICDISER1 ICDISER.ICDISER1 | (1 25);/*选择由CPU0来处理57号中断*/ICDIPTR.ICDIPTR14 ICDIPTR.ICDIPTR14 (~(0xFF 8)) | (0X01 8);/*使能中断控制器和CPU0之间的接口使中断控制器转发的中断信号能够到达CPU0*/CPU0.ICCICR CPU0.ICCICR | 1;GPX2.CON GPX2.CON (~(0xF 28)) | (0x1 28);while(1){ /*点亮LED2*/GPX2.DAT GPX2.DAT | (1 7); /*延时*/Delay(1000000);/*熄灭LED2*/GPX2.DAT GPX2.DAT (~(1 7));/*延时*/Delay(1000000);} return 0;
}中断处理下一篇