| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 【中断篇】中断控制器及中断检测时序 -> 正文阅读 |
|
[嵌入式]【中断篇】中断控制器及中断检测时序 |
GIC-500控制器支持GICv3架构,具有以下中断类型:
GIC-500始终支持多达57344个LPI,有一个缓存用于保存最频繁中断的设置。ITS和LPI的设置存储在主存储器中,因此一个高速缓存的缺失可能会导致多达三次的内存往返。第一个LPI的ID号是8192。 LPI通常用于产生基于消息的中断的外围设备。一个LPI在一个给定的时间内只针对一个内核。当外设写到ITS(中断映射服务)时就会产生LPI,ITS(中断映射服务)也持有控制LPI产生和维护的寄存器。ITS(中断映射服务)提供中断ID转换,如果系统MMU也存在于这些外设中,则允许外设直接由虚拟机拥有。因此LPI更适合虚拟机。 GIC的一般架构GIC控制器由仲裁单元、再分配单元、中断映射单元和CPU接口模块组成。仲裁单元为每一个中断源维护了一个状态机,状态包含inactive、pending、active和active and pending。
SPI中断检测流程
中断优先级抢占GIC控制器支持中断优先级抢占功能。对于优先级高的中断A,如果有一个低优先级且处于pending状态的中断B,GIC会做出裁决,让A去抢占B,优先将A的中断请求发送给CPU。CPU也会应答高优先级中断。 下图是GIC400中的时序图。假设M和N都是SPI类型的中断并通过FIQ来处理,高电平触发,N比M优先级高,它们的目标CPU相同。 工作流程如下: T1GIC的仲裁单元检测到中断输入M的引脚电平出现了电平变化, T2此时仲裁单元设置中断M得状态为pending。 T17经过tph个时钟后,CPU interface会拉低nFIQCPU[n]信号(在中断M变成pending后,大概需要15个周期来拉低nFIQCPU[n]信号),仲裁单元需要这15个周期来判断pending状态下哪个中断优先级最高。 T42仲裁单元检测到另一个优先级更高的中断N。 T43接着T42,仲裁单元用中断N替换中断M为当前pending状态下优先级最高的中断,并且设置中断N的状态的pending。 T58CPU interface在nFIQCPU[n]信号低的状态下,更新GICC_IAR寄存器中的Interrupt ID域,将该域的值变为中断N的硬件中断号。 T61CPU(Linux中的中断服务程序)读取GICC_IAR寄存器,即软件响应了中断。这时仲裁单元又会把中断N的状态从pending设置为active and pending。 T61~T131:Linux处理中断N的中断服务程序T64时刻,在中断N被Linux内核响应后的3个时钟内,CPU interface模块完成了对nFIQCPU[n]信号的deasserts,即拉高了nFIQCPU[n]信号。 T126时刻外设也deassert了该中断N; T128时刻移除了该中断N的pending状态; T131时刻,Linux中的内核中断服务程序将中断N的ID号写入GICC_EOIR寄存器完成中断N的全部处理过程。 T146、T211和T214在将中断N的ID号写入GICC_EOIR寄存器后的tph个时钟后,仲裁单元会选择下一个最高优先级的中断M,发送中断请求给CPU interface模块。CPU interface模块会拉低nFIQCPU[n]信号来向CPU报告这个中断M。 T211时刻,Linux中的内核中断服务程序读取GICC_IAR寄存器来响应中断,仲裁单元将中断M设置为active and pending。 T214时刻,在CPU响应中断后的3个时钟内,CPU interface模块会拉高nFIQCPU[n]信号来完成更多动作。 总结对于中断时序来说,如果出现更高优先级的中断,仲裁单元会优先处理,将其设置为优先级最高的pending状态。 对于pending状态的处理,大致流程是:
|
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 0:31:25- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |