IMX6ULL-IRQ中断之添加中断向量表

news2025/1/18 20:14:56

一.  中断向量表

中断向量表是存放中断向量的表。中断服务程序的入口地址或存放中 断服务程序的首地址成为中断向量,因此中断向量表是一系列中断服务程序入口地址组成的表。

当有中断事件发生时,处理器通过中断向量表进入相关的中断服务程序处理事件。

二.  添加中断向量表

1.  start.S 文件添加中断向量表

通过正点原子提供的 ARM ArchitectureReference Manual ARMv7-A and ARMv7-R edition.pdf 文档。该文档在参考资料目录下。

找到中断向量表如下:

我们根据以上的中断向量的顺序,在汇编文件 start.S 中添加中断向量表。

start.S 汇编文件中添加的中断向量表如下:


.global _start
.global _bss_start
_bss_start:
    .word _bss_start
.global _bss_end
_bss_end:
    .word _bss_end

_start:
	ldr pc, =Reset_Handler		/* 复位中断  */	
	ldr pc, =Undefined_Handler	/* 未定义中断 	*/
	ldr pc, =SVC_Handler		/* SVC(Supervisor)中断 */
	ldr pc, =PrefAbort_Handler	/* 预取终止中断 */
	ldr pc, =DataAbort_Handler	/* 数据终止中断 */
	ldr	pc, =NotUsed_Handler	/* 未使用中断 */
	ldr pc, =IRQ_Handler		/* IRQ中断 	*/
	ldr pc, =FIQ_Handler		/* FIQ(快速中断)未定义中断 */

2.  start.S 文件添加中断服务函数

这一篇文章暂时对中断服务函数不做实现。中断服务函数内部暂时都为循环执行。中断服务函数也是汇编实现,也是添加到 start.S 汇编文件中。

如下为添加到 start.S 文件的中断服务函数:

/* 复位中断服务函数 */	
Reset_Handler:     //暂时写为循环执行
    ldr r0, =Reset_Handler
    bx r0

/* 未定义中断服务函数 */
Undefined_Instruction_Handler:
    ldr r0, =Undefined_Instruction_Handler
    bx r0

/* SVC中断服务函数 */
SVC_Handler:
    ldr r0, =SVC_Handler
    bx r0

/* 预取终止中断服务函数 */
Prev_Abort_Handler:
    ldr r0, =Prev_Abort_Handler
    bx r0

/* 数据终止中断 */
Data_Abort_Handler:
    ldr r0, =Data_Abort_Handler
    bx r0

/* 未使用的中断 */
Not_Used_Handler:
    ldr r0, =Not_Used_Handler
    bx r0

/* IRQ中断!重点!!!!! */
IRQ_Handler:
    ldr r0, =IRQ_Handler
    bx r0

/* FIQ中断 */
FIQ_Handler:
    ldr r0, =FIQ_Handler
    bx r0

以上写好了中断服务函数的框架。

重点是设置中断向量偏移操作,复位中断服务函数 和 IRQ中断服务函数的具体实现。

复位中断服务函数大体需要做的工作如下:

(1)  关闭 I-Cache,D-Cache MMU

关闭以上的模块需要用到 CP15 协处理器的一些指令操作。

(2)  设置处理器的 9 种工作模式下对应的SP指针。

(3)  清除 bss段。

(4)  跳到 C 函数,也就是 main() 函数。

接下来的博文说明设置中断向量偏移操作,复位中断服务函数 和 IRQ中断服务函数的具体实现。

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

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

相关文章

自动化测试(二):QTP验证点

1 、程序自带验证点 自带验证点:图形界面insert -> checkpoint Standard Checkpoint 标准验证:用于检查测试对象的属性 Text Checkpoint 文本验证:用于检查文本字符串是否在应用程序中的适当位置出现 Text Area Checkpoint文本区域验…

饮用水中的六价铬去除工艺详解

铬是人体必需的微量元素,天然水不含铬,海水中铬的平均浓度为0.05μg/L,饮用水中铬含量更低。 铬在水中主要以三价和六价形式存在,三价的铬是对人体有益的元素,而六价铬是有毒的。由于其毒性之高,已被国家列…

Smith预估器

Smith预估器主要针对存在大滞后的系统,作用延迟和反馈延迟环节的控制,Smith预估器的另一篇文章,请参看下面的博客文章: 博途1200/1500PLC Smith预估器(补偿器)算法实现(FB)_RXXW_Dor的博客-CSDN博客在写这篇文章之前写过一篇"大林控制算法",大家可以参看下面这…

免费的包噪音网站分享

免费的包噪音网站分享 现代生活中,噪音扰人,影响健康和情绪。白噪音可以为人们提供放松心情、提高睡眠质量和专注力的帮助。 现在有很多免费的白噪音网站可以任意使用和分享,包括海浪声、雨声、蝉鸣声等等,非常适合在办公室、家里…

windows 下安装 ffmpeg

介绍一下我的环境及开发软件版本 windows phpstudy php7.3 进入安装步骤 1.下载windows系统的FFMpeg 下载链接: http://ffmpeg.org/download.html ps: 这里有各种版本了 (未使用这个版本)git地址:https://github.com/BtbN/…

数据结构初阶 - 汇总

-0- 数据结构前言 什么是数据结构 什么是算法 数据结构和算法的重要性-1- 时间复杂度和空间复杂度 👉数据结构 -1- 时间复杂度和空间复杂度 | C 算法效率 时间复杂度大O的渐进表示法eg 空间复杂度 常见复杂度对比OJ 消失的数组 轮转数组-2- 顺序表 与 链表 &am…

反射之构造方法和成员变量

什么是反射 反射允许对成员变量,成员方法和构造方法的信息进行编程访问。 Class类中获取构造方法的方法 Constructor getConstructors() Constructor getDeclaredConstructors() Constructor…

[STM32F103C8T6]看门狗

看门狗: 在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造 成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会 造成整个…

LeetCode 1206. 设计跳表

LeetCode 1206. 设计跳表 难度:hard\color{red}{hard}hard 题目描述 不使用任何库函数,设计一个 跳表 。 跳表 是在 O(log(n))O(log(n))O(log(n)) 时间内完成增加、删除、搜索操作的数据结构。跳表相比于树堆与红黑树,其功能与性能相当&am…

【区块链】【FISCO】WeIdentity

什么是 WeIdentity? 官方的说法:去中心化身份标识解决方案。其实说白了就是互联网上每个人都拥有自己数字身份,并且这个身份是唯一且不可篡改的。 WeIdentity要解决的问题就是用来解决数字身份验证的问题。传统互联网身份验证的方式通常用账…

将ip地址中的每一个字符串按照分隔符提取

1、算法思想 该题采用 c 中的 string 完成比较方便 对于字符串 string str1“hehehe:hahaha:xixixi:lalala” 定义 int pos 0,记录子串的初始位置 在循环语句中重复执行以下操作: (1)、定义 int ret str1.find(":",…

OpenAI-ChatGPT最新官方接口《聊天交互多轮对话》全网最详细中英文实用指南和教程,助你零基础快速轻松掌握全新技术(二)(附源码)

目录Chat completions Beta 聊天交互前言Introduction 导言Response format 提示格式Managing tokensCounting tokens for chat API calls 为聊天API调用标记计数Instructing chat models 指导聊天模型Chat vs Completions 聊天与完成FAQ 问与答其它资料下载Chat completions B…

27.Linux网络编程socket变成 tcp 高并发 线程池 udp

好,咱们开始上课了,从今天开始咱们连续讲 8 天的,网络编程这个还是在linux环境下去讲,咱们先看一下咱们这 8 天都讲什么东西,跟大家一块来梳理一下,你先有个大概的印象,这些你也不要记&#xff…

什么是以太坊

以太网是“世界的计算机”,这是以太坊平台的一种常见描述。这是什么意思呢?让我们首先从关注计算机科学的描述开始,然后对以太坊的功能和特性进行更实际的解读,并将其与比特币和其他分布式账本技术(简单起见&#xff0…

【学习笔记】unity脚本学习(三)(向量 Vector3)

目录向量复习高中向量基础【数学】向量的四则运算、点积、叉积、正交基叉乘公式叉乘运算定理向量、坐标系点积叉积Vector3 三维向量静态变量变量变量normalized 与 Normalize() 方法静态方法ClampMagnitudeCrossDistanceDotMoveTowards其他变换类似Lerp 在两个点之间进行线性插…

走出至暗时刻,手机“冲高”仍有新故事

随着数十年的发展变迁,智能手机行业已进入平稳发展期,在格局重塑的同时,也引来外界的质疑:出货量下滑,是否意味着行业开始进入至暗时刻? 事实上,这种质疑只看到表层的数据变化,没有…

[Java]Cookie机制

1.Session机制: Session机制https://blog.csdn.net/m0_71229255/article/details/130138826?spm1001.2014.3001.5501 2. 什么是cookie HTTP协议本身是无状态的。什么是无状态呢,即服务器无法判断用户身份。Cookie实际上是一小段的文本信息&#xff0…

优维可观测轴心产品大观:HyperInsight超融合持续可观测解决方案

随着Kubernetes得到越来越广泛的采用,企业软件系统正在向复杂的云原生架构进行革命性转变。应用形式呈现有Web、APP、小程序等多种形式,访问的网络有4G、5G、Wi-Fi等。企业用云也从单一云时代,逐渐来到混合多云时代。在这些庞大复杂的多云环境…

【接口测试】从0不到1的心路历程

我是一名做了三年测试的tester,2020年以功能测试工程师的身份入职北京一家医疗培训公司,入职后为了提高测试效率,接触到接口测试,以下是从零到现在 (还有很大完善的空间,所以不能算是1) 的一些心路历程。 做接口测试的…

李宏毅教程系列——增强学习

目录 0. 强化学习wiki 1. 介绍 2. Exploration vs Exploitation 探索与开发 3. 各类最优化方法 3.1 Brute force猛兽蛮力法(暴力搜索) 3.2 Value function estimation(价值函数估计) 3.2.1 Monte Carlo methods 蒙特卡洛方…