【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 中断服务函数里面去查找并运行的具体的外设中断服务函数。
相关推荐
哲Zheᗜe༘35 分钟前
了解学习Python编程之python基础
开发语言·python·学习
大聪明-PLUS1 小时前
关于新的 Linux 内核接口 gpio uapi 的说明
linux·嵌入式·arm·smarc
youliroam1 小时前
成语接龙学习
学习·golang·uniapp·成语接龙
玉树临风江流儿1 小时前
Linux驱动开发总结速记
linux·运维·驱动开发
cccyi71 小时前
Linux 进程信号机制详解
linux·signal·volatile
gd63213742 小时前
银河麒麟 aarch64 linux 里面的 qt 怎么安装kit
linux·服务器·qt
A-花开堪折2 小时前
Qemu 嵌入式Linux驱动开发
linux·运维·驱动开发
磊灬泽2 小时前
【Linux驱动开发】PWM子系统-servo
linux·运维·算法
摇滚侠3 小时前
Spring Boot 3零基础教程,Spring Boot 日志的归档与切割,笔记22
spring boot·redis·笔记
wan5555cn3 小时前
当代社会情绪分类及其改善方向深度解析
大数据·人工智能·笔记·深度学习·算法·生活