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

目录

  • 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.mzph.cn/news/680667.shtml

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

相关文章

常见范数介绍

在线性代数中,符号 ( ||x|| ) 表示向量 ( x ) 的范数(Norm)。范数是一个将向量映射到非负值的函数,它衡量了向量的大小或长度。范数可以是多种类型,其中最常见的有: 欧几里得范数(L2范数&#x…

力扣题目训练(8)

2024年2月1日力扣题目训练 2024年2月1日力扣题目训练404. 左叶子之和405. 数字转换为十六进制数409. 最长回文串116. 填充每个节点的下一个右侧节点指针120. 三角形最小路径和60. 排列序列 2024年2月1日力扣题目训练 2024年2月1日第八天编程训练,今天主要是进行一些…

如何制作一款3D FPS游戏

制作一款3D FPS游戏是一个复杂的过程,需要涵盖多个方面,包括游戏设计、游戏引擎选择、模型制作、音效制作、关卡设计等。下面是一个关于如何制作一款3D FPS游戏的超长文章。 游戏设计 首先,你需要确定游戏的整体设计和核心玩法。这包括游戏的…

人工智能能产生情绪吗?

此图片来源于网络 一、人情绪的本质是什么? 人的情绪本质是一个复杂的现象,涉及到生理、心理和社会的多个层面。以下是关于情绪本质的几种观点: 情绪的本质是生命能量的表达。情绪被认为是生命能量的一种体现,通过情绪的体验和…

web前端(第一天HTML)

前端是什么? 网页? 将数据以各种方式(如:表格、饼图、柱状图等)呈现给用户,我们就可以称之为前端。 做前端所需要的工具? notepad 、 editplus 、 notepad 、 vscode 、 webstorm 等&#x…

搜索+哈希/平衡树,LeetCode 987. 二叉树的垂序遍历

目录 一、题目 1、题目描述 2、接口描述 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 给你二叉树的根结点 root ,请你设计算法计算二叉树的 垂序遍历 序列。 对位于 (row, col) 的每个结点而言,其左右子结…

Netty应用——通过WebSocket编程实现服务器和客户端长连接(十八)

Http协议是无状态的,浏览器和服务器间的请求响应一次,下一次会重新创建连接要求:实现基于webSocket的长连接的全双工的交互改变Http协议多次请求的约束,实现长连接了, 服务器可以发送消息给浏览器客户端浏览器和服务器端会相互感知…

【python】Fraction类详解及生成分数四则运算“试卷”

文章目录 一、前言实验所需的库终端指令Fraction类1. Fraction(numerator, denominator):2. Fraction(numerator)3. Fraction()4. 分数作参数5. 负分数作参数6. 字符串作参数7. 小数作参数8. 科学计数法9. 浮点数作参数10. 浮点数精度问题11. Decimal对象作参数 二、…

新年快乐(水)

首先,祝大家新年快乐,龙年大吉! 然后我来大概解释一下春晚上两个魔术的原理吧。切,要不是我电脑坏了才不看春晚呢。 第一个魔术根数学没多大关系,主要就是换了一副牌,然后假洗。至于计时器吗,那基本就是后…

【Java程序设计】【C00264】基于Springboot的原创歌曲分享平台(有论文)

基于Springboot的原创歌曲分享平台(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的原创歌曲分享平台 本系统分为平台功能模块、管理员功能模块以及用户功能模块。 平台功能模块:在平台首页可以查看首…

Linux系统安全——iptables相关总结

在使用iptables时注意要先关闭firewalld(systemctl stop firewalld.service) 1.查看iptables规则 iptables -vnL 选项含义-v查看时显示更多详细信息-n所有字段以数字形式显示-L查看规则列表 例,拒绝来自192.168.241.22的源地址 直接丢弃 …

可视化工具:将多种数据格式转化为交互式图形展示的利器

引言 在数据驱动的时代,数据的分析和理解对于决策过程至关重要。然而,不同的数据格式和结构使得数据的解读变得复杂和困难。为了解决这个问题,一种强大的可视化工具应运而生。这个工具具有将多种数据格式(包括JSON、YAML、XML、C…

Swift Combine 用 Future 来封装异步请求 从入门到精通十一

Combine 系列 Swift Combine 从入门到精通一Swift Combine 发布者订阅者操作者 从入门到精通二Swift Combine 管道 从入门到精通三Swift Combine 发布者publisher的生命周期 从入门到精通四Swift Combine 操作符operations和Subjects发布者的生命周期 从入门到精通五Swift Com…

16 亚稳态原理和解决方案

1. 亚稳态原理 亚稳态是指触发器无法在某个规定的时间段内到达一个可以确认的状态。在同步系统中,输入总是与时钟同步,因此寄存器的setup time和hold time是满足的,一般情况下是不会发生亚稳态情况的。在异步信号采集中,由于异步…

【C++】STL之string 超详解

目录 1.string概述 2.string使用 1.构造初始化 2.成员函数 1.迭代器 2.容量操作 1.size和length 返回字符串长度 2.resize 调整字符串大小 3.capacity 获得字符串容量 4.reserve 调整容量 5.clear 清除 6.empty 判空 3.string插入、追加 、拼接 1.运算…

DataBinding源码浅析---初始化过程

作为Google官方发布的支持库,DataBinding实现了UI组件和数据源的双向绑定,同时在Jetpack组件中,也将DataBinding放在了Architecture类型之中。对于DataBinding的基础使用请先翻阅前两篇文章的详细阐述。本文所用代码也是建立在之前工程基础之…

利用Windows10漏洞破解密码(保姆级教学)

前言: 本篇博客只是技术分享并非非法传播知识,实验内容均是在虚拟机中进行,并非真实环境 正文: 一.windows10电脑密码破解 1)开启windows10虚拟机,停留在这个页面 2)按5次Shift键,出现这个粘滞键,如果没有出现的,则说明漏洞已经修复 3)重新启动,在这个页面的时候…

conda 相关命令

创建并激活环境:打开终端,并创建一个新的conda环境,以确保安装的软件与M1芯片兼容。运行以下命令: conda create -n myenv python这将创建一个名为"myenv"的新环境,并安装Python。然后,激活该环境…

只用cin和cout

ios::sync_with_stdio(false); ——> 在c中之所以cin,cout效率低,是因为先把要输出的东西存入缓冲区,再输出,导致效率降低,而这段语句可以来打消iostream的输入和输出缓存,可节省时间&#…

P1928 外星密码

网址如下&#xff1a; P1928 外星密码 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) C的string真的是太好用辣&#xff01; 思路就是用一个函数来递归翻译 代码如下&#xff1a; #include<iostream> #include<string> #include<cctype> using namespace…