iTop-4412 裸机程序(十九)- 按键中断

news2025/3/10 10:58:40

目录

  • 0.源码
  • 1.异常向量表
    • 1.1 原理
    • 1.2 异常种类
    • 1.3 ARMv7 规定的异常向量表
  • 2. 中断
    • 2.1 iTop-4412 中使用的中断相关寄存器


上篇博文介绍了按键的轮询处理方式,本篇介绍按键的中断方式。

0.源码

GitHub:https://github.com/Kilento/4412NoOS

1.异常向量表

1.1 原理

ARM 的异常向量表是一个存储在特定内存地址的表格,用于存储不同类型异常的处理程序的入口地址。当ARM处理器遇到异常时,它会自动跳转到异常向量表中对应的入口地址,以执行相应的异常处理程序。

1.2 异常种类

ARM的异常向量表通常包含以下几种类型的异常:

  • Reset : 当 ARM 处理器上电或复位时,会产生复位异常
  • Undefined Instructions : 处理器无法识别指令的异常。处理器执行的指令是有规范的, 如果 尝试执行不符合要求的指令, 就会进入到该异常指令对应的地址中;
  • Software Interrupt (SWI) : 软中断, 软件中需要去打断处理器工作, 可以使用软中断来执行 ;
  • Prefetch Abort (Instruction Fetch Memory Abort) : 预取指令失败。ARM 在执行指令的过程中, 要先去预取指令准备执行, 如果预取指令失败, 就会产生该异常;
  • Data Abort (Data Access Memory Abort) : 读取数据失败异常
  • IRQ (Interrupt) : 当 ARM 处理器接收到外部中断信号时,会产生中断异常
  • FIQ (Fast Interrupt) : 当 ARM 处理器执行特定的指令(如软件中断指令 SVC)时,会产生快速中断

1.3 ARMv7 规定的异常向量表

ARM 的异常向量表通常由硬件设计者在系统设计时预定义,一般无需使用者进行修改。但在一些特殊情况下,例如需要自定义异常处理程序时,可以通过修改异常向量表来实现。
Exynos4412 架构是基于 ARMv7 指令集架构的处理器,ARM 规定了 ARMv7 指令集架构的异常向量表如下所示(参考手册ARM Architecture Reference Manual ARMv7-A and ARMv7-R edition)
在这里插入图片描述

2. 中断

在嵌入式系统中,初始化中断通常包括以下几个步骤:

  • 中断向量表的设置:在中断向量表中,每个中断都有一个对应的中断服务程序入口地址。在系统初始化阶段,需要将每个中断的处理函数地址填入中断向量表中。
  • 中断控制器的配置:对于一些高级的嵌入式处理器,中断控制器通常负责中断的管理和分发。在初始化阶段,需要配置中断控制器的寄存器,以启用和配置各个中断源。
  • 中断服务程序的编写:为每个可能发生的中断编写对应的中断服务程序。中断服务程序通常包括保存上下文、处理中断事件、清除中断标志等步骤。
  • 全局中断使能:在初始化阶段,需要设置全局中断使能位,以允许处理器响应中断。

2.1 iTop-4412 中使用的中断相关寄存器

1. ICDDCR
在这里插入图片描述
2. ICDISER_CPU
在这里插入图片描述
3. ICCPMR_CPUn
在这里插入图片描述
4. ICCICR_CPUn

在这里插入图片描述
5. ICCIAR_CPUn
在这里插入图片描述
6. ICCEOIR_CPUn
在这里插入图片描述

2024年02月13日

Kilento

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1446772.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《Java 简易速速上手小册》第4章:Java 中的异常处理(2024 最新版)

文章目录 4.1 异常类型和错误 - 遇见你的小怪兽4.1.1 基础知识4.1.2 重点案例:文件读取处理4.1.3 拓展案例 1:处理空指针异常4.1.4 拓展案例 2:捕获多个异常 4.2 异常处理机制 - 穿上你的超级英雄斗篷4.2.1 基础知识4.2.2 重点案例&#xff1…

SpringCloud-Feign:负载均衡(基于服务端)

7.Feign:负载均衡(基于服务端) 7.1 Feign简介 Feign是一个开源的声明式HTTP客户端,它可以简化HTTP API的调用过程。Feign的设计目标是使得使用者可以像调用本地方法一样调用远程服务,使得编写和维护HTTP客户端变得更加简单。类似controller…

2016-2022年哨兵影像的在线底图

有一个欧洲初创公司对哨兵影像进行了去云处理,制作了一个2016年-2022年的全球哨兵底图。目前底图通过wmts发布,可免费使用,无需搭梯子。 该数据的特点是: 很少的云覆盖,较少的条纹,色彩平衡 底图切片的网…

推荐高端资源素材图库下载平台整站源码

推荐高端图库素材下载站的响应式模板和完整的整站源码,适用于娱乐网资源网。该模板支持移动端,并集成了支付宝接口。 演示地 址 : runruncode.com/tupiao/19692.html 页面设计精美,不亚于大型网站的美工水准,并且用户…

如何对研究成果进行有效的专利布局

一、背景 研究成果通常是研究者、学者或创新者智力劳动的产物,如专利技术、设计、算法、新药物、研究方法等。通过专利申请、版权法、商标法、商业秘密等方式对其进行法律保护,确保研究者拥有对其成果的专有权,可以独享经济利益和控制权。 …

[LeetCode周赛复盘] 第 384 场周赛20240211

[LeetCode周赛复盘] 第 384 场周赛20240211 一、本周周赛总结100230. 修改矩阵1. 题目描述2. 思路分析3. 代码实现 100219. 回文字符串的最大数量1. 题目描述2. 思路分析3. 代码实现 100198. 匹配模式数组的子数组数目 II1. 题目描述2. 思路分析3. 代码实现 参考链接 一、本周…

GPT4:你是故意的吧!

请问下面选项中哪个是中文? A.Chinese B.英文 这是一个关于语言识别的问题。我们需要分析并确定所给选项中哪个表示中文。 对于选项A.Chinese:这个词本身表示“中文”或“中国的”。在多种语境中,它经常被用来指代中国的语言,即中…

京东组件移动端库的使用 Nut-UI

1.介绍 NutUI NutUI-Vue 组件库,基于 Taro,使用 Vue 技术栈开发小程序应用,开箱即用,帮助研发快速开发用户界面,提升开发效率,改善开发体验。 特性 🚀 80 高质量组件,覆盖移动端主…

Spring Boot 笔记 007 创建接口_登录

1.1 登录接口需求 1.2 JWT令牌 1.2.1 JWT原理 1.2.2 引入JWT坐标 1.2.3 单元测试 1.2.3.1 引入springboot单元测试坐标 1.2.3.2 在单元测试文件夹中创建测试类 1.2.3.3 运行测试类中的生成和解析方法 package com.geji;import com.auth0.jwt.JWT; import com.auth0.jwt.JWTV…

Spring Boot 笔记 010 创建接口_更新用户头像

1.1.1 usercontroller中添加updateAvatar,校验是否为url PatchMapping("updateAvatar")public Result updateAvatar(RequestParam URL String avatarUrl) {userService.updateAvatar(avatarUrl);return Result.success();} 1.1.2 userservice //更新头像…

BYTEVALUE 百为流控路由器远程命令执行漏洞

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

洛谷: P9749 [CSP-J 2023] 公路

思路: 贪心思想指的是在对问题求解的时候,总是能做出在当前看来是最好的选择,也就是说,如果要得到整个问题的最优答案,那么要求每一步都能做出最好的选择(feihua)。 在这道题里面,我们希望在来到第i站的时…

【十七】【C++】stack的简单实现、queue的常见用法以及用queue实现stack

stack的简单实现 #include <deque> #include <iostream> using namespace std; namespace Mystack {template<class T, class Container std::deque<T>>class stack {public:stack(): _c(){}void push(const T& data) {_c.push_back(data);}void …

论文阅读-One for All : 动态多租户边缘云平台的统一工作负载预测

论文名称&#xff1a;One for All: Unified Workload Prediction for Dynamic Multi-tenant Edge Cloud Platforms 摘要 多租户边缘云平台中的工作负载预测对于高效的应用部署和资源供给至关重要。然而&#xff0c;在多租户边缘云平台中&#xff0c;异构的应用模式、可变的基…

动态内存管理、柔性数组

动态内存分配的由来 我们已经掌握的内存开辟的方式&#xff1a; int val 20;//在栈空间上开辟四个字节 char arr[10] {0};//在栈空间上开辟10个字节的连续空间 上面开辟的空间大小是固定不可变的数组申请的大小也是确定了之后就不能改变 这里就引入了动态内存的开辟&#x…

FT2232调试记录(1)

FT2232调试记录 &#xff08;1&#xff09;获取当前连接的FTDI设备通道个数:&#xff08;2&#xff09;获取当前连接的设备通道的信息:&#xff08;3&#xff09;配置SPI的通道:&#xff08;4&#xff09;如何设置GPIO:&#xff08;5&#xff09;DEMO测试&#xff1a; #参考文档…

电路设计(15)——篮球赛24秒违例倒计时报警器的proteus仿真

1.设计要求 设计、制作一个篮球赛24秒违例倒计时报警器。要求&#xff1a; &#xff08;1&#xff09;具有倒计时功能。可完整实现从“24”秒开始依序倒计时并显示倒计时过程&#xff0c;显示时间间隔为1秒。 &#xff08;2&#xff09;具有消隐功能。当“24”秒倒计时…

网络安全的今年:量子、生成人工智能以及 LLM 和密码

尽管世界总是难以预测&#xff0c;但网络安全的几个强劲趋势表明未来几个月的发展充满希望和令人担忧。有一点是肯定的&#xff1a;2024 年将是非常重要且有趣的一年。 近年来&#xff0c;人工智能&#xff08;AI&#xff09;以令人难以置信的速度发展&#xff0c;其在网络安全…

LC 987. 二叉树的垂序遍历

987. 二叉树的垂序遍历 难度 : 困难 题目大意&#xff1a; 给你二叉树的根结点 root &#xff0c;请你设计算法计算二叉树的 垂序遍历 序列。 对位于 (row, col) 的每个结点而言&#xff0c;其左右子结点分别位于 (row 1, col - 1) 和 (row 1, col 1) 。树的根结点位于 …

C++ :内存管理 newdelete

目录 内存区域划分 C的动态内存的管理方式 new new的基本使用方法 【注意事项】 delete 【注意】 new和delete操作自定义类型 operator new 和 operator delete 【关于自定义类型new申请内存】 【原理】 【调用顺序】 【连续开辟空间问题】 malloc/free和…