13 RT1052的中断应用概览

文章目录

  • 13.1 异常类型
  • 13.2 NVIC
    • 13.2.1 NVIC一些概念
    • 13.2.2 NVIC的SDK支持
    • 13.3 优先级的定义
      • 13.3.1 AIRCR
      • 13.3.2 优先级分组
    • 13.4 中断编程
      • 13.4.1 中断服务函数

RT1052 中断非常强大,每个外设都可以产生中断

13.1 异常类型

异常响应系统,分为系统异常和外部中断。

  • 其中系统异常有 10 个,外部中断有 160 个。
  • 有关具体的系统异常和外部中断可在 SDK 库文件 MINXRT1052.h 这个头文件查询到
  • 在 IRQn_Type 这个枚举类型里面包含了 RT1052 全部的异常声明。

13.2 NVIC

RT1052的 NVIC 是 Cortex-M7 的 NVIC 的一个子集。

13.2.1 NVIC一些概念

中断请求

  • 大多数外设都能够发送中断请求,一个引脚由低电平变为高电平、串口接收到数据、定时器计时完成等都可以向 CPU 发送中断请求。

中断号

  • 每个中断请求拥有一个固定的标号
  • CPU 通过中断号来区分不同的中断
  • 不同的中断请求可以拥有相同的中断号。
    • RT1052 拥有 151 个中断号,但是可以接收 240 个中断请求

中断优先级

  • 优先级数值越小,优先级越高。

中断优先级分组

  • 优先级分位两部分,分别为抢占优先级和子优先级
  • 如果一个中断正在执行,另外一个抢占优先级更高的中断发生了则打断底优先级的中断。
  • 如果两个中断请求的抢占优先级相同,子优先级不同则高优先级不能打断低优先级,但是如果两个中断请求同时发生并且抢占优先级相同,则根据子优先级决定谁先执行。
  • 抢占优先级和子优先级都相同的话,就比较他们的硬件中断编号,编号越小,优先级越高。

中断服务函数

  • 中断号对应的函数叫做中断向量表
  • 当中断的到相应时 CPU 就会执行中断服务函数里面的内容。

13.2.2 NVIC的SDK支持

有关 NVIC 的内容定义在 SDK 的 core_cm7.h 中
在这里插入图片描述SDK 为 NVIC 提供了这些库函数,涵盖了 NVIC 几乎所有功能使用

1 #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping
2 #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping
3 #define NVIC_EnableIRQ __NVIC_EnableIRQ
4 #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ
5 #define NVIC_DisableIRQ __NVIC_DisableIRQ
6 #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ
7 #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ
8 #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ
9 #define NVIC_GetActive __NVIC_GetActive
10 #define NVIC_SetPriority __NVIC_SetPriority
11 #define NVIC_GetPriority __NVIC_GetPriority
12 #define NVIC_SystemReset __NVIC_SystemReset

如:NVIC_SystemReset()

中断号(MIMXRT1052.h)

1 typedef enum IRQn {
2
3 CTI0_ERROR_IRQn = 17,
4 LPUART6_IRQn = 25,
5 LPUART7_IRQn = 26,
6 LPUART8_IRQn = 27,
7 LPI2C1_IRQn = 28,
8 LPI2C2_IRQn = 29,
9 LPI2C3_IRQn = 30,
10 .. .. ..
11 .. .. ..
12 .. .. ..
13
14 PWM4_3_IRQn = 150,
15 PWM4_FAULT_IRQn = 151,
16 Reserved168_IRQn = 152,
17 Reserved169_IRQn = 153,
18 Reserved170_IRQn = 154,
19 Reserved171_IRQn = 155,
20 Reserved172_IRQn = 156,
21 Reserved173_IRQn = 157,
22 SJC_ARM_DEBUG_IRQn = 158,
23 NMI_WAKEUP_IRQn = 159
24 } IRQn_Type

13.3 优先级的定义

NVIC 有一个专门的寄存器:应用程序中断和复位控制寄存器 AIRCR,详细请参考《armv7m_arm》参考手册第 B3.2.6 章节.

13.3.1 AIRCR

AIRCR[PRIGROUP] 用来配置外部中断的优先级分组,宽度为 3bit。
M 系列内核的中断优先级一样由 8 个 bit 位来表示,对于 RT1052 芯片,只使用其中 [7:4] 位。

  • 这四位再划分为抢占优先级和子优先级

13.3.2 优先级分组

优先级的分组由内核外设 SCB 的应用程序中断及复位控制寄存器 AIRCR 的 PRIGROUP[10:8] 位决定。
根据 PRIGROUP 优先级分组的值对应于优先级 [7:0] 位的划分方式
在这里插入图片描述1052 芯片只用到 [7:4] 位,所以在 8 种分组下要另外去掉无效的 bit 位后来看主优先级和子优先级分别占多少位。

  • 当优先级分组取 0b000、0b001、0b010、0b011 时都只有主优先级。

在这里插入图片描述
设置优先级分组可调用库函数 NVIC_SetPriorityGrouping 实现

13.4 中断编程

使用 NVIC_SetPriorityGrouping(uint32_t PriorityGroup) 函数配置中断优先级分组。
使用 uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) 函数配置具体外设中断通道的抢占优先级和子优先级。
使用 NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) 函数设置中断编号的优先级
使用 NVIC_EnableIRQ(IRQn_Type IRQn) 函数使能中断请求

13.4.1 中断服务函数

在启动文件 startup_MIMXRT1052.s 中我们预先为每个中断都写了一个中断服务函数,只是这些中断函数都是为空,为的只是初始化中断向量表。

  • 关于中断服务函数的函数名必须跟启动文件里面预先设置的一样
  • 系统就在中断向量表中找不到中断服务函数的入口,直接跳转到启动文件里面预先写好的空函数,并且在里面无限循环,实现不了中断。

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

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

相关文章

【c语言指针详解】复杂数据结构的指针用法

目录 一、动态内存分配 1.1 使用malloc和free函数进行内存的动态分配和释放 1.2 内存泄漏和野指针的概念和解决方法 二、复杂数据结构的指针用法 2.1 结构体指针和成员访问操作符 2.2 指针数组和指向指针的指针 2.2.1 指针数组 2.2.2 指向指针的指针 2.3 动态内存分配与结构体指…

React面试题(1)

1、什么是React? React是一个用于构建用户界面的JavaScript库。 2、React的特点是什么? React的主要特点包括: 组件化虚拟DOM单向数据流JSX语法高效的性能生态系统丰富 3、什么是JSX? JSX是一种JavaScript的语法扩展&#x…

C语言数据结构-----二叉树(1)认识数、二叉树、堆及堆的代码实现

前言 本篇文章讲述数、、二叉树、堆的基本概念和知识,以及堆的代码实现。 文章目录 前言1.树概念及结构1.1 树的定义1.2 树的基本概念1.3 如何区分树?1.4 二叉树1.5 二叉树的分类1.6 二叉树的存储结构 2.堆2.1 堆的基本概念2.2 堆的代码实现2.2.1 堆的…

【计算机网络】URL概念及组成

目录 前言 一. URL是什么 二. URL的组成 三. encode和decode 结束语 前言 本系列文章是计算机网络学习的笔记,欢迎大佬们阅读,纠错,分享相关知识。希望可以与你共同进步。 本篇讲解使用浏览器不可或缺的部分——URL 一. URL是什么 域…

前端使用视频作为背景图的方法

实现思路 通过 video source 引入视频&#xff0c;并对视频播放属性进行设置&#xff0c;再通过 css 使视频覆盖背景即可。 代码 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>有开发问题可联系作者</title>…

小白学java栈的经典算法问题——第四关白银挑战

内容1.括号匹配问题2.最小栈3.最大栈 1.括号匹配问题 栈的典型题目还是非常明显的&#xff0c;括号匹配、表达式计算等等几乎都少不了栈&#xff0c;本小节我们就看两个最经典的问题 首先是LeetCode20,链接 本道题还是比较简单的&#xff0c;其中比较麻烦的是如何判断两个符…

LeetCode刷题--- 求根节点到叶节点数字之和

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏&#xff1a;http://t.csdnimg.cn/ZxuNL http://t.csdnimg.cn/c9twt 前言&#xff1a;这个专栏主要讲述递归递归、搜索与回溯算法&#xff0c;所以下面题目主要也是这些算法做的 我讲述…

正则表达式:字符串处理的瑞士军刀

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

C++ Qt开发:字符串QString容器

在Qt框架中&#xff0c;QString 是一个强大而灵活的字符串容器&#xff0c;专为处理 Unicode 字符而设计。它提供了许多方便的方法来操作和处理字符串&#xff0c;使得在跨平台开发中能够轻松地进行文本操作。QString 是 Qt 开发中不可或缺的一部分&#xff0c;它的灵活性和强大…

Java9及之后关于类加载器的新特性

为了保证兼容性&#xff0c;JDK9没有从根本上改变三层类加载器的架构和双亲委派模型&#xff0c;但为了模块化系统的顺利运行&#xff0c;仍然发生了一些值得被注意的变动。 一、变动1 由于引入了模块化概念&#xff0c;所以不同的类加载器回去加载属于不同模块的类 启动类加…

打工人副业变现秘籍,某多/某手变现底层引擎-Stable Diffusion简介

Stable Diffusion是2022年发布的深度学习文本到图像生成模型,它主要用于根据文本的描述产生详细图像,尽管它也可以应用于其他任务,如

使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题

文章目录 一、 篇头二、 操作步骤2.1 编译AOSP AS工程文件2.2 将AOSP导入Android Studio2.3 切到Project试图2.4 等待index结束2.5 下载缺失的JDK 1.82.6 导入完成 三、 导入AS的好处3.1 本文案例演示源码编译错误AS对比同文件其余地方的调用AS错误提示依赖AS做错误修正 一、 篇…

字符串函数strtok

1.调用格式&#xff1a; 2.调用形式&#xff1a;char*strtok(char*p1,const char*p2),其中第二个是由分隔符组成的字符串&#xff0c;第一个为需要分隔的字符串 3.调用目的&#xff1a;将分隔符之间的字符串取出 4.调用时一般将源字符串拷贝后调用&#xff0c;因为此函数会将…

键盘打字盲打练习系列之循序渐进——4

一.欢迎来到我的酒馆 盲打&#xff0c;循序渐进&#xff01; 目录 一.欢迎来到我的酒馆二.继续练习二.矫正坐姿 二.继续练习 前面的章节&#xff0c;我们重点向大家介绍了主键盘区指法和键盘键位。经过一个系列的教程学习&#xff0c;相信大家对盲打这项技能已经掌握得差不多了…

金融量化交易:使用Python实现遗传算法

大家好&#xff0c;遗传算法是一种受自然选择过程启发的进化算法&#xff0c;用于寻找优化和搜索问题的近似解决方案。本文将使用Python来实现一个用于优化简单交易策略的遗传算法。 1.遗传算法简介 遗传算法是一类基于自然选择和遗传学原理的优化算法&#xff0c;其特别适用…

数据分析实例:基于电力大数据的中小型企业运营发展分析

前不久&#xff0c;帆软发起了【2023BI数据分析大赛】的活动&#xff0c;老李我也是这个大赛的评委。   今天跟大家分享的是基于电力大数据的中小型企业运营发展分析。 当我们去解读一份数据分析报告时&#xff0c;首先要了解这份报告的主要目的是什么&#xff0c;作者通过分…

mapbox使用v3版本,v2的样式切换不同时间段

创建DayAndNight.js /*** 使用方式* const dayNight new DayAndNight({ map: map // map 地图对象}) * 修改类型* dayNight.setConfigProperty(value)*/ class DayAndNight {constructor (sdMap) {this.map sdMap.mapthis.initStyle()}// 初始化时添加必要样式initStyle () {…

vue中设置滚动条的样式

在vue项目中&#xff0c;想要设置如下图中所示滚动条的样式&#xff0c;可以采用如下方式&#xff1a; ​// 直接写在vue.app文件中 ::-webkit-scrollbar {width: 3px;height: 3px; } ::-webkit-scrollbar-thumb { //滑块部分// border-radius: 5px;background-color: #1890ff;…

excel数据重复率怎么计算【保姆教程】

大家好&#xff0c;今天来聊聊excel数据重复率怎么计算&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff1a; excel数据重复率怎么计算 在Excel中计算数据重复率可以通过以下步骤实现&#xff1a; 1. 确定重复…

Java并发编程-synchronized、volatile、AQS解析

Java并发编程 synchronized 如何保证线程安全 JDK1.6 之前&#xff0c;synchronized 是一个重量级锁相比于JUC的锁显得非常笨重&#xff0c;存在性能问题 JDK1.6 及之后&#xff0c;Java 对 synchronized 进行的了一系列优化&#xff0c;性能与 JUC 的锁不相上下 synchroni…