当前位置: 首页 > news >正文

008.S3C2440中断分析|千篇笔记实现嵌入式全栈/裸机篇

1. 流程

S3C2440中断流程如下,

发生中断时,[SUB]SRCPND源挂起寄存器对应的bit位会置位,

然后[SUB]MASK屏蔽寄存器对应的bit位会卡一下,决定中断流要不要继续,

也就是说不管中断有没有被屏蔽,源挂起寄存器对应的bit位都会先置位,

最后经过优先级相关寄存器进行优先级排序,输入进ARM920T内核,并通过INTPND挂起寄存器对应的bit位体现

⚠️和[SUB]SRCPND源挂起寄存器不同,INTPND挂起寄存器每个时刻只能有1bit位置位,就说处理完当前的,才能再次触发置位其他的中断bit位

2. 关键寄存器

寄存器说明
SUBSRCPND/SRCPND
[sub]源挂起寄存器哪个中断触发了,对应的bit位就会置位,可以有多个bit位同时置位
SUBMASK/MASK
[sub]屏蔽寄存器中断对应的bit位置位后,此中断就会被屏蔽
INTPND
挂起寄存器最终的挂起展示,哪个中断最终给到ARM920T内核,对应的bit位就置位,
但是同一时刻只能有一个bit置位
INTOFFSET
偏移寄存器用于辅助判断INTPND对应的哪个中断源,1 < < I N T O F F S E T = I N T P N D 1 << INTOFFSET = INTPND1<<INTOFFSET=INTPND

优先级目前不重要,暂不研究也不会用到~

关于外部中断,有额外的寄存器配置,

|EXTINTn

外部中断控制寄存器用于控制对应的中断触发方式的,比如边沿触发还是电平触发
EINTMASK
外部中断屏蔽寄存器顾名思义
EINTPEND
外部中断挂起寄存器对应的bit置位表示相关中断挂起触发

3. CPU内核层面

深入到CPU内核,其实还有一道最后的关卡,那就是CPSR寄存器的控制域字段的I标志位

此标志位置位后将disable中断在CPU的触发

参考

006.寄存器&工作模式杂谈|千篇笔记实现嵌入式全栈/裸机篇

这一章节,我们知道IRQ触发后,

  • CPU自动切换到IRQ工作模式

  • 使用独立的SP_irq栈空间

  • 切换工作模式时,CPU自动将CPSR备份至SPSR_irq

  • 将(PC值+8)自动赋给LR
    ARM的流水线设计:取指 > 译码 > 执行
    因此,发生IRQ异常时刻,其实PC值已经快进了两步(+4+4 = 8)

4. 程序怎么写

4.1 CPU层面

对于CPU层面,我们需要:

  • 通过CPSR_c和I标志位控制全局中断开关

  • 手动切换到IRQ模式去设置此模式下的栈指针SP_irq

  • IRQ触发时,要做一定的包装处理,比如:

    • 计算实际的返回地址

    • 压栈保护相关的寄存器

    • 处理中断

    • 处理完中断后,还要恢复现场和地址跳转

4.2 SOC层面

对于S3C2440, 我们需要:

  • 通过相关的MASK寄存器设置需要的屏蔽中断源

  • 在处理中断时,通过挂起寄存器或者偏移寄存器确定中断源

  • 如果有次级中断,通过相关模块的挂起寄存器判断具体的次级中断源
    比如对于外部中断,要在EINTPEND中进一步确定具体的外部中断源

  • 如果有次级中断,还要通过相关模块的配置寄存器进行额外的配置
    比如对于外部中断,还有配置相关的触发方式、屏蔽等

  • 中断处理时,需要手动清除相关的挂起寄存器,挂起寄存器特性是写1清除

下一章节是具体的代码实践~

http://www.jsqmd.com/news/600782/

相关文章:

  • SDMatte商业级抠图案例展示:电商平台海量商品图处理实录
  • 对RNN(循环神经网络),LSTM(长短期记忆网络),BiLSTM(双向长短期记忆网络)等算法的一些介绍
  • CSS Grid布局如何控制网格轨道数量_利用repeat函数简化设置
  • VibeVoice-TTS-Web-UI在内容创作中的应用:自动生成播客节目
  • AcousticSense AI优化升级:如何提升识别准确率和响应速度
  • Android 11 Settings功能裁剪实战:从PreferenceController到XML配置的完整流程解析
  • AI手势识别为何不用GPU?高效CPU推理实战指南
  • ANIMATEDIFF PRO应用案例:如何制作具有电影感的日落海滩动态壁纸
  • 2026海安代理记账机构专业度深度评测报告:海安代办营业执照/海安公司注销代办/海安工商代办/海安工商变更/选择指南 - 优质品牌商家
  • 别再手动部署了!用Jenkins Pipeline + K8s + Harbor 实现Spring Boot项目自动化发布(保姆级教程)
  • PCIe总线-RK3588 ATU配置与地址转换机制深度解析(十二)
  • 跨平台文件同步:OpenClaw+Qwen3-4B自动归类NAS中的文档
  • AD20拼板太麻烦?华秋DFM一键搞定Gerber导入与拼板(附详细避坑指南)
  • 百度PaddleOCR-VL-WEB效果实测:识别精度超高,多语言支持
  • 【力扣100题】13.合并两个有序链表
  • SDMatte多模态应用初探:结合CLIP实现以文搜图与智能裁剪
  • CYBER-VISION零号协议场景解析:如何用AI分割技术重构视障者导航体验?
  • Qwen3-4B-Instruct-2507新手入门:从零开始搭建AI对话服务
  • AI识图新体验:万物识别中文镜像快速部署与实战演示
  • 读2025世界前沿技术发展报告34海洋信息技术
  • 识别越强,越接近失败?——为什么没有空间坐标的AI,永远无法控制真实世界
  • 计算机毕业设计:Python网约车运营数据智能分析系统 Django框架 可视化 数据大屏 数据分析 大数据 机器学习 深度学习(建议收藏)✅
  • 图图的嗨丝造相-Z-Image-Turbo部署教程:使用systemd守护Xinference服务实现7×24小时稳定运行
  • Lychee-Rerank惊艳效果:支持表格型文档输入与结构化匹配展示
  • AXURE RP 9中继器实战:5分钟搞定商品列表页(附完整数据集配置)
  • Spine动画在Unity中的高级应用:事件监听与动态切换Attachment
  • 2026宜宾白酒加盟公司优质推荐指南:白酒招商代理/缺陷酒修复/苦味酒处理/调味酒优选/酒体提质/选择指南 - 优质品牌商家
  • 科研党福音:OpenClaw+Qwen3-14b_int4_awq自动整理文献笔记
  • Mac开发者必备:OpenClaw与Qwen3.5-9B的5种开发提效场景
  • Ubuntu服务器运维指南:霜儿-汉服-造相Z-Turbo模型服务的监控与高可用保障