2_Apollo4BlueLite中断控制器NVIC

1.概述

Apollo4BlueLite 的中断控制器是采用 ARM Cortex-M4 内核,并集成了 NVIC(Nested Vectored Interrupt Controller,嵌套向量中断控制器)作为其中断控制器。

NVIC 是 ARM Cortex-M 系列处理器中常用的中断控制器,它具有以下基本特征和功能:

(1)中断优先级和优先级分组:NVIC 支持配置和管理中断的优先级,可以根据需求将不同的中断分配到不同的优先级组中。这样可以确保高优先级的中断得到更及时的响应。

(2)中断向量表:NVIC 使用中断向量表来管理中断。每个中断对应一个唯一的中断向量,在中断触发时,NVIC 会根据中断向量找到相应的中断服务程序(Interrupt Service Routine,ISR)来进行中断处理。

(3)中断使能和禁用:NVIC 提供了使能和禁用中断的功能,允许根据需要控制特定中断的触发和处理。

(4)中断嵌套和自动优先级切换:NVIC 支持中断的嵌套和自动优先级切换,可以在处理当前中断时响应更高优先级的中断请求,从而提高系统的灵活性和响应性。

(5)快速和低延迟的中断触发:NVIC 能够快速检测和触发中断,减少中断处理的延迟,提高系统的实时性和响应能力。

2. Apollo4BlueLite NVIC和cortex-M4 NVIC

NVIC 是嵌套向量中断控制器,控制着整个Apollo4BlueLite芯片中断相关的功能,它跟Cortex-M4内核紧密联系,是内核里面的一个外设。但是各个芯片厂商在设计芯片的时候会对Cortex-M4内核里面的 NVIC 进行裁剪,把不需要的部分去掉,所以说 Apollo4BlueLite 的 NVIC 是 Cortex-M 4 的 NVIC 的一个子集。

3.NVIC寄存器

(1)在配置中断的时候我们一般只用 ISER、ICER 和 IP 这三个寄存器,ISER 用来使能中断,ICER 用来清除中断,IP 用来设置中断优先级。

(2)寄存器表

  • ISER寄存器(Interrupt Set-enable Registers)

根据官方文档介绍:The NVIC_ISER0-NVIC_ISER7 registers enable interrupts, and show which interrupts are enabled.

可以看到ISER寄存器一共有8组,共计256bit,该寄存器可读可写,那么当需要使能对应中断时,需要配置对应bit位为1,也可以通过读寄存器来确认对应中断状态为使能或使能。

  • ICER寄存器(Interrupt Clear-enable Registers)

根据官方文档介绍:The NVIC_ICER0-NVIC_ICER7 registers disable interrupts, and show which interrupts are enabled.

注意直接写ISER寄存器为0不会禁止对应中断,必须通过ICER寄存器来实现禁止中断的功能。ICER实现的和ISER相反的功能。

  • ISPR寄存器(Interrupt Set-pending Registers)

根据官方文档介绍:The NVIC_ISPR0-NVIC_ISPR7 registers force interrupts into the pending state, and show which interrupts are pending.

这个寄存器用来挂起中断,对应bit设置为1时中断控制器会将正在进行的中断挂起,写0无效。

当高优先级的中断正在执行时,低优先级的中断发生了,这时CPU会将低优先级的中断临时挂起,等待高优先级的中断完成后,再去处理低优先级的中断。

  • ICPR寄存器(Interrupt Clear-pending Registers)

根据官方文档介绍:The NVIC_ICPR0-NCVIC_ICPR7 registers remove the pending state from interrupts, and show which interrupts are pending.

其作用与ISPR相反,对应位也和ISER是一样的。通过设置1,可以将挂起的中断解挂。

  • IABR寄存器(Interrupt Active Bit Registers)

根据官方文档介绍:The NVIC_IABR0-NVIC_IABR7 registers indicate which interrupts are active.

A bit reads as one if the status of the corresponding interrupt is active or active and pending.

该寄存器只读,如果为1,则表示该位所对应的中断正在被执行或者执行期间被挂起。在中断执行完了由硬件自动清零。

  • IPR寄存器(Interrupt Priority Registers)

根据官方文档介绍:The NVIC_IPR0-NVIC_IPR59 registers provide an 8-bit priority field for each interrupt and each register holds four priority fields. These registers are byte-accessible.

中断优先级寄存器,该寄存器只能以字节访问。每个中断占用8位,所以每个寄存器可以表示4个中断优先级,如下图所示

这里一共可以表示60*4=240个中断的中断优先级,每个中断优先级占用1个字节。

ARM的中断优先级分两种,抢占优先级和响应优先级。

具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。

当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个(中断号小的先执行)。

(3)中断号

从Apollo4BlueLite的SDK中可以看到实际上只用了84个中断

4.NVIC 中断配置固件库

(1)固件库头文件 core_cm4.h 中,提供了 NVIC 的一些函数,这些函数遵循 CMSIS 规则,只要是 Cortex-M4 的处理器都可以使用,具体如下:

NVIC库函数

描述

void NVIC_EnableIRQ(IRQn_Type IRQn)

使能中断

void NVIC_DisableIRQ(IRQn_Type IRQn)

失能中断

void NVIC_SetPendingIRQ(IRQn_Type IRQn)

设置中断悬起位

void NVIC_ClearPendingIRQ(IRQn_Type IRQn)

清除中断悬起位

uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn)

获取悬起中断编号

void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)

设置中断优先级

uint32_t NVIC_GetPriority(IRQn_Type IRQn)

获取中断优先级

void NVIC_SystemReset(void)

系统复位

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

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

相关文章

算法(2)

二叉树 镜像二叉树 树轴对称 第一个节点的左子树与第二个节点的右子树同步递归对比,第一个节点的右子树与第二个节点的左子树同步递归比较。 二叉树序列化、反序列化 当然你也可以根据满二叉树结点位置的标号规律来序列化,还可以根据先序遍历和中序遍…

余切拉普拉斯算子推导 cotangent Laplace-Beltrami operator

欢迎关注更多精彩 关注我,学习常用算法与数据结构,一题多解,降维打击。 参考自polygon mesh proccessing这本书 基本思路及原理 余切拉普拉斯算子是一种考虑了网格底层几何联系的一种算子,在网格平滑,参数化等算法中…

Llama 2: Open Foundation and Fine-Tuned Chat Models

文章目录 TL;DRIntroduction背景本文方案 实现方式预训练预训练数据训练细节训练硬件支持预训练碳足迹 微调SFTSFT 训练细节 RLHF人类偏好数据收集奖励模型迭代式微调(RLHF)拒绝采样(Rejection Sampling)PPO多轮一致性的系统消息&…

2023 年第二届钉钉杯大学生大数据挑战赛 初赛 B:美国纽约公共自行车使用量预测分析 问题二Python代码分析

2023 年第二届钉钉杯大学生大数据挑战赛 初赛 B:美国纽约公共自行车使用量预测分析 问题二 相关链接 【2023 年第二届钉钉杯大学生大数据挑战赛】 初赛 B:美国纽约公共自行车使用量预测分析 问题一Python代码分析 【2023 年第二届钉钉杯大学生大数据挑…

Tensorflow学习

一、处理数据的结构 案例代码如下: import tensorflow.compat.v1 as tf tf.disable_v2_behavior() import numpy as np# create data x_data np.random.rand(100).astype(np.float32) y_data x_data*0.1 0.3# 创建结构(一维结构) Weights tf.Variable(tf.random.uniform(…

Megatron-LM、NVIDIA NeMo、model_optim_rng.pt 文件是什么?

本文涉及以下几个概念,分别是: Megatron和Megatron-LM-v1.1.5-3D_parallelism NVIDIA NeMo Megatron和Megatron-LM-v1.1.5-3D_parallelism是什么? Megatron是由NVIDIA开发的一种用于训练大规模语言模型的开源框架。它旨在提供高效的分布式…

安科瑞能源物联网以能源供应、能源管理、设备管理、能耗分析的能源流向为主线-安科瑞黄安南

摘要:随着科学技术的发展,我国的物联网技术有了很大进展。为了提升电力抄表服务的稳定性,保障电力抄表数据的可靠性,本文提出并实现了基于物联网的智能电力抄表服务平台,结合云计算、大数据等技术,提供电力…

雷达信号处理自学总结(持续更新)

傅里叶变换的频率分辨率 频率分辨率 采样频率 信号长度 频率分辨率 \frac{采样频率 }{信号长度} 频率分辨率信号长度采样频率​ 可用numpy模块的fft.fftfreq函数求出傅里叶变换的频率分辨率。 https://numpy.org/doc/stable/reference/generated/numpy.fft.fftfreq.html

opencv 图像距离变换 distanceTransform

图像距离变换:计算图像中每一个非零点距离离自己最近的零点的距离,然后通过二值化0与非0绘制图像。 #include "iostream" #include "opencv2/opencv.hpp" using namespace std; using namespace cv;int main() {Mat img, dst, dst…

关于position:fixed定位的位置不对的问题(即没有按照浏览器的窗口进行定位)

问题: 今天在开发过程中发现元素使用 position: fixed 时位置有问题,位置跟我写的位置对不上,后面在 MDN 上面找到了答案,下面是关于 position: fixed 的描述: fixed: 元素会被移出正常文档流,并…

通过Vue-cli解决前端跨域问题

1、找到vue.config.js 在vue.config.js当中增加如下配置 devServer: {port: 3001,proxy: {/agent: {target: http://10.8.50.250:6666,ws: false, //true,开启ws, 如果是http代理此处可以不用设置changeOrigin: true, // 如果接口跨域,需要进行这个参…

Rust之包、单元包及模块

包:一个用于构建、测试并分享单元包的Cargo功能;单元包:一个用于生成库或可执行文件的树形模块结构;模块及use关键字:被用于控制文件结构、作用域及路径的私有性;路径:一种用于命名条目的方法&a…

【电商小知识】7个步骤让你快速了解跨境电商!

近几年来,随着互联网的发展,国内外的商业贸易越来越流畅,直播电商的火爆也带动着一大批相关的产业链发展,其中跨境电商就是尤为突出的一个。尽管在国内做跨境电商的企业数量非常之多,但仍有许多新人争相入局&#xff0…

安防监控视频汇聚平台EasyCVR修改录像计划等待时间较长是什么原因?

安防监控视频EasyCVR视频融合汇聚平台基于云边端智能协同,支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发等。音视频流媒体视频平台EasyCVR拓展性强,视频能力丰富,具体可实现视频监控直播、视频轮播、视频录像、云存储、回放与检…

Ceph部署方法介绍

Ceph部署方法介绍 Installing Ceph — Ceph Documentation Ceph环境规划 admin是一个部署节点

计算机视觉:图像质量评价指标之 PSNR 和 SSIM

1. PSNR (Peak Signal-to-Noise Ratio) 峰值信噪比 由上可见,PSNR相对MSE多了一个峰值,MSE是绝对误差,再加上峰值是一个相对误差指标 一般地,针对 uint8 数据,最大像素值为 255,;针对浮点型数据&#xff…

低代码开发重要工具:jvs-flow(流程引擎)审批功能配置说明

流程引擎场景介绍 流程引擎基于一组节点与执行界面,通过人机交互的形式自动地执行和协调各个任务和活动。它可以实现任务的分配、协作、路由和跟踪。通过流程引擎,组织能够实现业务流程的优化、标准化和自动化,提高工作效率和质量。 在企业…

Python(Web时代)——初识flask

flask简介 介绍 Flask是一个用Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务。它是BSD授权的,一个有少量限制的免费软件许可。它使用了 Werkzeug 工具箱和 Jinja2 模板引擎。 Flask 的设计理念是简单、灵活、易于扩展&a…

Java后端程序员不得不知道的 API 接口常识

说实话,我非常希望自己能早点看到本篇文章,大学那个时候懵懵懂懂,跟着网上的免费教程做了一个购物商城就屁颠屁颠往简历上写。 至今我仍清晰地记得,那个电商教程是怎么定义接口的: 管它是增加、修改、删除、带参查询&…

【Hammerstein模型的级联】快速估计构成一连串哈默斯坦模型的结构元素研究(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 💥1 概述 在许多振动应用中,所研究的系统略微非线性。Hammerstein模型的级联可以方便地描述这样的系统。Hammerstein提供了一种基于指数正弦…