Cortex-M --- 中断向量表

2024-09-04 11:20
文章标签 cortex 中断向量

本文主要是介绍Cortex-M --- 中断向量表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        昨天在浏览STM32数据手册的时候在中断这一章看到了Vector table中断向量表,本文介绍一下对于向量表的理解,包括中断向量表何时执行如何执行存放的是什么存放的大小

话不多说先放图

图1 中断向量表

        可以看到在M4内核的中断向量表中共包含了91+4,默认情况下95个中断优先级,而且需要注意的是中断优先级可以是负数,例如在这里REST中断的优先级就是-3,秉承优先级数字越小,优先级越高的道理,复位中断是最高优先级的中断且不可设置(fixed)。

        而且从程序运行的顺序就可以看出确实是这样,在 MCU启动过程中,在获取到SP指针,指向堆栈顶部,然后使得PC指针指向复位中断的入口(在这里是 0x0000 0004 ),和第一个运行的就是复位中断并且在复位中断中设置堆栈内存,初始化时钟,根据BOOT引脚映射中断向量表到指定位置(Flash/RAM)等操作。

        可以看到在复位中断的后面分别是:
        系统时钟中断(NMI)

        硬件错误中断(HardFault)

        内存管理中断(MemManage)

        总线错误中断((BusFault)

        等等,并且从内存分布来看

图2 中断向量内存分布

         各个函数入口地址的的大小为4字节,也正是对应了一个指针的大小,所以在这里存放的是指向函数入口地址的指针。

需要注意的是

        默认情况下滴答定时器中断总是比其他外设中断优先级要高 

        1.滴答定时器中断是操作系统用来维持时间基准的重要手段,它用于调度任务和处理延迟操作。为了保证系统的实时响应能力,滴答定时器中断必须能够及时处理,否则会影响系统的稳定性和响应时间。

        2. 任务调度:操作系统依赖滴答定时器中断来定期检查是否有更高优先级的任务需要运行。如果滴答定时器的中断被长时间阻塞,那么高优先级的任务就无法得到及时调度,从而可能导致系统性能下降甚至死锁。

        3. 系统时钟同步:滴答定时器还用于维护系统时钟,确保所有任务按照预定的时间间隔运行。如果滴答定时器中断被频繁打断,可能会导致系统时钟的不准确性,进而影响整个系统的时序安排。

        4. 资源管理:滴答定时器中断还可以用于管理系统的资源,比如超时检测、定时关闭某些硬件设备以节省功耗等。这些功能都需要定时器中断能够及时响应。

 关于何时CPU要查询中断向量表

1. 中断请求:当某个硬件设备或外部事件触发了一个中断请求时,它会发送一个信号给CPU。

2. 中断识别:CPU接收到中断请求后,会识别中断类型,并获取一个与该中断相关的中断类型号(Interrupt Type Number)。

3. 查询中断向量表:CPU使用中断类型号作为索引去查询中断向量表。中断向量表中存储了每一个可能中断的中断服务程序的地址。因此,CPU通过中断类型号乘以一定的偏移来计算出中断向量在中断向量表中的位置。

4. 执行中断服务程序:一旦找到对应的中断向量,CPU就会跳转到该地址开始执行相应的中断服务程序。在执行中断服务程序之前,CPU通常会保存当前的上下文(如程序计数器和其他寄存器的值),以便在中断处理完成后能够正确返回到中断发生前的状态。

5. 恢复现场:中断服务程序执行完毕后,CPU会恢复之前的上下文,并返回到中断前的指令继续执行。

这篇关于Cortex-M --- 中断向量表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1135883

相关文章

Cortex-A7:ARM官方推荐的嵌套中断实现机制

0 参考资料 ARM Cortex-A(armV7)编程手册V4.0.pdf ARM体系结构与编程第2版 1 前言 Cortex-M系列内核MCU中断硬件原生支持嵌套中断,开发者不需要为了实现嵌套中断而进行额外的工作。但在Cortex-A7中,硬件原生是不支持嵌套中断的,这从Cortex-A7中断向量表中仅为外部中断设置了一个中断向量可以看出。本文介绍ARM官方推荐使用的嵌套中断实现机

基于IMX6ULL的Cortex-A中断原理讲解,以及编写其中断向量表

首先借助STM32我们需要了解中断系统是如何构成的         会有一个中断源,也就是能够向CPU发出中断请求的设备或事件。中断源不分硬件和软件,也就是产生中断信号,就会执行中断服务函数         但是CPU是如何知道中断源产生后就找到对应的中断服务函数呢,这个时候就要引入中断向量表,它的主要功能是描述中断对应的中断服务函数,每个中断源都有一个唯一的中断号(也称向量号),

Cortex-M3架构学习

本学习参照 “Cortex-M3权威指南”学习,需要详细学习,建议自行观看。 Cortex-M3基础  CM3介绍 Cortex-M3 处理器内核其实就是单片机的中央处理单元( CPU )。 完整的基于 CM3 的 MCU 还需要很多其它组件,如下, Cortex-M3 是一个 32 位处理器内核; 内部的数据路径是 32 位的,寄存器是 3

cortex-m4系列绝对地址函数跳转问题

一、环境:         cortex-m4,IAR,J-LINK。 二、问题:         1)、首先, 我将另一个程序中的函数扣出来,通过j-flash-lite下载到MCU的一个固定地址Flash中。         2)、然后, 声明一个变量为函数指针,同时将这个常量经过强转后赋值给该变量。         3)、接着, 用该变量做函数跳转。         形如:

【Arm Cortex-X925】 -【第二章】-Cortex-X925 core简介

2. Cortex-X925 核心 Cortex-X925 核心是一款高性能、低功耗的产品,采用了 Armv9.2-A 架构。Armv9.2-A 架构在 Armv8‑A 架构的基础上进行了扩展,涵盖了 Armv8.7‑A。 Cortex-X925 核心集成在 DSU-120 DynamIQ™ 集群内。它连接到 DynamIQ™ Shared Unit-120,该单元作为一个完整的互连系统,包含

【Arm Cortex-X925】 -【第九章】-L2 内存系统

9. L2 内存系统 Cortex®-X925 核心的 L2 内存系统通过 CPU 桥接器将核心与 DynamIQ™ Shared Unit-120 连接。它包括私有的 L2 缓存。 L2 缓存是统一的,并且对集群中的每个 Cortex®-X925 核心都是私有的。 以下表格显示了 L2 内存系统的特点。 9.1 L2 缓存 集成的 L2 缓存处理来自指令和数据侧的指令和数据请求,以及

【Arm Cortex-X925】 -【第七章】-L1 指令内存系统

7. L1 指令内存系统 Cortex-X925 核心的 L1 指令内存系统负责提取指令和预测分支。它包括 L1 指令缓存和 L1 指令转换后备缓冲区 (TLB)。L1 指令内存系统向解码器提供指令流。为了提高整体性能和降低功耗,L1 指令内存系统采用了动态分支预测和指令缓存技术。 下表显示了 L1 指令内存系统的特点。 注意 L1 指令 TLB 也位于 L1 指令内存系统中。然而,它是

《ARM Cortex-R 学习指南》-【第十七章】-调试

快速链接: . 👉👉👉 ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈 付费专栏-付费课程 【购买须知】 个人博客笔记导读目录(全部) 第十七章 调试 调试是软件开发中的关键部分,通常被认为是最耗时(因此也最昂贵)的一部分。错误可能难以检测、重现和修复,并且很难预测解决缺陷所需的时间。当产品交付给客户时,解决问题的成本显著增加。在许多情况下,当产品的

《ARM Cortex-R 学习指南》-【第十四章】-为 Cortex-R 处理器编写代码

快速链接: . 👉👉👉 ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈 付费专栏-付费课程 【购买须知】 个人博客笔记导读目录(全部) 第十四章 为 Cortex-R 处理器编写代码 你可以针对功耗、速度、代码密度或内存占用来优化代码。许多 GNU GCC 和 ARM 编译器功能利用 Cortex-R 系列设计生成优化代码。 14.1 编译器优化

Cortex-A7支持的内存类型详解及配置举例

0 参考资料 Introduction to memory protection unit management on STM32 MCUs.pdf ARM ArchitectureReference Manual ARMv7-A and ARMv7-R edition.pdf 1 Cortex-A7支持的内存类型详解 1.1 内存类型 ARM架构处理器支持的内存类型分为三种,分别是