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.mfbz.cn/a/385919.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序(四十四)鉴权组件插槽-登入检测

注释很详细,直接上代码 新增内容: 1.鉴权组件插槽的用法 2.登入检测示范 源码: app.json {"usingComponents": {"auth":"/components/auth/auth"} }app.js App({globalData:{//定义全局变量isLoad:false} })…

C++ Qt框架开发 | 基于Qt框架开发实时成绩显示排序系统(1)

目标:旨在开发一个用户友好的软件工具,用于协助用户基于输入对象的成绩数据进行排序。该工具的特色在于,新输入的数据将以红色高亮显示,从而直观地展现出排序过程中数据变化的每一个步骤。 结果展示: 本程序是一个基于…

在Ubuntu22.04上部署FoooCUS2.1

Fooocus 是一款基于 Gradio的图像生成软件,Fooocus 是对 Stable Diffusion 和 Midjourney 设计的重新思考: 1、从 Stable Diffusion 学习,该软件是离线的、开源的和免费的。 2、从 Midjourney 中学到,不需要手动调整,…

嵌入式Qt 计算器界面设计代码重构

一.计算器界面设计代码重构 计算器界面设计:嵌入式Qt 计算器界面设计-CSDN博客 重构的概念: 代码实现与代码重构的不同: 软件开发过程: 什么样的代码需要重构: 计算器界面代码重构的框架设计: 实验&#…

理解JAVA命名和目录接口(JNDI)

理解JAVA命名和目录接口(JNDI) 考虑访问网站的场景,Web用户要求记住四字节的IP地址而不是有意义的名称。例如,假设Web用户用123.23.3.123而不是hotmail.com访问hotmail网站。在这种情形下,Web用户难以记住不同的IP地址来访问不同的网站。因此,要使其变得对Web用户简单方…

Unity下使用Sqlite

sqlite和access类似是文件形式的数据库,不需要安装任何服务,可以存储数据,使用起来还是挺方便的。 首先需要安装DLL 需要的DLL 我们找到下面两个文件放入Plugins目录 Mono.Data.Sqlite.dll System.Data.dll DLL文件位于Unity的安装目录下的…

分布式文件系统 SpringBoot+FastDFS+Vue.js

分布式文件系统 SpringBootFastDFSVue.js 一、分布式文件系统1.1.文件系统1.2.什么是分布式文件系统1.3.分布式文件系统的出现1.3.主流的分布式文件系统1.4.分布式文件服务提供商1.4.1.阿里OSS1.4.2.七牛云存储1.4.3.百度云存储 二、fastDFS2.1.fastDSF介绍2.2.为什么要使用fas…

第4讲 小程序首页实现

首页 create.vue <template><view class"vote_type"><view class"vote_tip_wrap"><text class"type_tip">请选择投票类型</text><!-- <text class"share">&#xe739;分享给朋友</text&g…

如何在C# Windows Forms应用程序中实现控件之间的连接线

帮我实现绘图工具多个控件连接线&#xff0c;请用c#代码实现 实现绘图工具中多个控件之间的连接线功能&#xff0c;可以通过以下几个步骤来进行&#xff1a; 定义连接线的数据模型&#xff1a;首先需要定义一个模型来表示连接线&#xff0c;这个模型应该包含起点和终点的坐标。…

JavaScript中有哪些不同的数据类型

在 JavaScript 中&#xff0c;数据类型是一种用来表示数据的分类&#xff0c;它决定了我们可以对这个数据类型执行哪些操作。在 JavaScript 中有以下几种不同的数据类型&#xff1a; 基本数据类型 字符串 (String)&#xff1a;表示一组字符&#xff0c;可以使用引号&#xff08…

Pytorch的可视化

1 使用 wandb进行可视化训练过程 本文章将从wandb的安装、wandb的使用、demo的演示进行讲解。 1.1 如何安装wandb&#xff1f; wandb的安装比较简单&#xff0c;在终端中执行如下的命令即可&#xff1a; pip install wandb在安装完成之后&#xff0c;我们需要&#xff0c;去…

华为机考入门python3--(13)牛客13-句子逆序

分类&#xff1a;列表 知识点&#xff1a; 列表逆序&#xff08;和字符串逆序是一样的&#xff09; my_list[::-1] 题目来自【牛客】 def reverse_sentence(sentence): # 将输入的句子分割words sentence.split() # 将单词逆序排列 words words[::-1] # 将单词用空…

DarkSide针对VMware EXSI系统进行加密

前言 最近黑客组织利用DarkSide勒索病毒对Colonial Pipeline 发起勒索攻击&#xff0c;国内外各大安全厂商和安全媒体也都有相关报道&#xff0c;DarkSide勒索软件是从2020年8月出现&#xff0c;并以(RAAS)勒索即服务的商业模式进行运作&#xff0c;此勒索病毒不仅可以部署基于…

【Chrono Engine学习总结】5-sensor-5.1-sensor基础并创建一个lidar

由于Chrono的官方教程在一些细节方面解释的并不清楚&#xff0c;自己做了一些尝试&#xff0c;做学习总结。 1、Sensor模块 Sensor模块是附加模块&#xff0c;需要单独安装。参考&#xff1a;【Chrono Engine学习总结】1-安装配置与程序运行 Sensor Module Tutorial Sensor …

MySQL数据库⑧_索引(概念+理解+操作)

目录 1. 索引的概念和价值 1.1 索引的概念 1.2 索引的价值 2. 磁盘的概念 2.1 磁盘的结构 2.2 操作系统与磁盘交互的基本单位 2.3 MySQL与磁盘交互的基本单位 3. 索引的理解 3.1 主键索引现象和推导 3.2 索引采用的数据结构&#xff1a;B树 3.3 聚簇索引和非聚簇索引…

Java并发基础:DelayQueue全面解析!

内容概要 DelayQueue类专为处理延迟任务设计&#xff0c;它允许开发者将任务与指定的延迟时间关联&#xff0c;并在任务到期时自动处理&#xff0c;从而避免了不必要的轮询和资源浪费&#xff0c;此外&#xff0c;DelayQueue内部基于优先队列实现&#xff0c;确保最先到期的任…

蓝桥杯每日一题------背包问题(三)

前言 之前求的是在特点情况下选择一些物品让其价值最大&#xff0c;这里求的是方案数以及具体的方案。 背包问题求方案数 既然要求方案数&#xff0c;那么就需要一个新的数组来记录方案数。动态规划步骤如下&#xff0c; 定义dp数组 第一步&#xff1a;缩小规模。考虑n个物品…

ubuntu22.04@laptop OpenCV Get Started: 007_color_spaces

ubuntu22.04laptop OpenCV Get Started: 007_color_spaces 1. 源由2. 颜色空间2.1 RGB颜色空间2.2 LAB颜色空间2.3 YCrCb颜色空间2.4 HSV颜色空间 3 代码工程结构3.1 C应用Demo3.2 Python应用Demo 4. 重点分析4.1 interactive_color_detect4.2 interactive_color_segment4.3 da…

【MySQL】学习约束和使用图形化界面创建表

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-iqtbME2KmWpQFQSt {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

调用讯飞火星AI大模型WebAPI

调用讯飞火星AI大模型 记录一次调用讯飞AI大模型的过程 官方文档 首先&#xff0c;去官网申请资格&#xff0c;获得必要秘钥等 再编写url&#xff0c;该url存在编码要求&#xff0c;具体看官网url编写 具体代码如下&#xff1a; getWebsocketUrl() {return new Promise((resol…
最新文章