【Linux-I.MX6ULL裸机学习】中断向量表

代码来自于正点原子阿尔法Linux开发板光盘


比如在中断向量表中规定了:在某个地址0x80000A对应着某个中断服务函数,那么在产生这个中断时,就会从0x80000A这个地址去读取中断服务函数,并执行。

如果想改变这个地址,也就是要设置地址偏移。具体要做的:需要修改SCB的 VTOR 寄存器为新的中断向量表起始地址。

ARM-A7 的中断向量表:

你可能会问了:啊?!我的那些外设所需要的外部中断就只有"IRQ interrupt"这一个中断吗?这够吗?

诶别急啊,Cortex-A 内核 CPU 的所有外部中断都属于这个 IRQ 中断,当任意一个外部中断发生的时候都会触发 IRQ 中断。在 IRQ 中断服务函数里面就可以读取指定的寄存器来判断发生的具体中断是什么。这些外部中断和 IRQ 中断的关系如下图:

Cortex-A7 中断系统

  1. 中断向量表
    Cortex-A 中断向量表它有8个中断,其中重点关注 IRQ。Cortex-A 的中断向量表需要用户自己去定义(见下图)。

  2. 中断向量偏移
    我们的裸机例程都是从 0x87800000开始的,因此要设置向量偏移。
  3. GIC 中断控制器
    同NVIC(stm32的中断控制器)一样,GIC 用于管理 Cortex-A 的中断。GIC提供了开关中断,设置中断优先级。
  4. IMX6U 中断号
  5. 中断服务函数的编写
    一个是IRQ 中断服务函数的编写,另一个就是在 IRQ 中断服务函数里面去查找并运行的具体的外设中断服务函数。
相关推荐
孙严Pay9 分钟前
网关支付:在线交易的安全核心枢纽
笔记·科技·计算机网络·其他·微信
代码游侠10 分钟前
应用——Linux Framebuffer 图形库显示
linux·运维·服务器·数据库·笔记·算法
m0_6265352012 分钟前
下班之后学习一会儿英语
学习
会飞的小新13 分钟前
Linux PCI 设备查看工具 lspci 的工作机制与使用方法
linux
xingzhemengyou114 分钟前
LINUX modprobe 智能加载和卸载内核模块
linux·服务器·前端
laplace012316 分钟前
Part 1. 大模型RAG入门基础架构介绍
笔记·语言模型·langchain·rag
【上下求索】16 分钟前
学习笔记097——Ubuntu系统中如何通过service服务的方式启动 jar 包?
java·笔记·学习·ubuntu
xingzhemengyou118 分钟前
Linux who指令查询和显示当前登录系统的用户信息
linux·服务器·网络
wadesir20 分钟前
Linux MySQL Sysbench一键部署与压测实战教程
linux·mysql·adb
Nan_Shu_61420 分钟前
学习:Redis (1)
数据库·redis·学习