当前位置: 首页 > news >正文

中断向量控制器(NVIC)

1. 什么是中断

在处理器中,中断是一个过程,即CPU在正常执行程序的过程中,遇到外部/内部的紧急事件需要处理,暂时中止当前程序的执行,转而去为处理紧急的事件,待处理完毕后再返回被打断的程序处继续往下执行。

在发送中断时。要打断CPU正在做的事情。要保护现场,接着根据中断向量跳转到中断服务函数执行。执行完要恢复现场。CPU继续从打断时的状态运行。 

举个列子:当前正在看书(CPU执行),突然客厅的电话响了(中断请求)。打断看书(保存现场,当前看到第几页)。去处理打电话(中断服务函数)。打完电话后继续看书(恢复 现场)从打断的页继续看

2. 什么是中断嵌套以及中断优先级

1. 中断优先级

比如CPU正在运行有两个中断请求。这时总有一个先后。这时就看这两个中断的优先级(程序来设置)。

2. 中断嵌套

当前正在看书(CPU执行),突然客厅的电话响了(中断请求)。打断看书(保存现场,当前看到第几页)。去处理打电话(中断服务函数)。这时水壶开了(水壶比打电话优先级高)。

这时打断电话去处理水壶开。这就是中断嵌套。当然在处理这前也会有保存现场(打电话)。去处理水壶请求。水壶处理完在处理打电话。打完电话后继续看书(恢复 现场)从打断的页继续看

3. 抢占优先级与子响应优先级

1.抢占式优先级

望文知义,就是优先级高的可以抢占优先级的中断。

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

2. 子优先级(响应式优先级)


望文知义,就是当两个抢占式优先级同时来时,先处理响应式优先级高的(谁优先级高先响应谁)。

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

总结下便是:抢占式优先级>响应优先级>中断表中的排位顺序

如下函数设置中断分组:

void nvic_priority_group_set(uint32_t nvic_prigroup)

 

 

 

 

3. 什么是异常 

内核里的中断就叫异常(滴答定时器)。外部发送的就叫中断(定时器溢出中断,串口接收数据中断)

4. 什么是事件 

 

5. 帮助CPU专门处理中断的助手NVIC(在内核里) 

它可以屏蔽中断,判断中断优先级,处理中断向量。

  

6. 查找手册可以看到底有多少内部中断与外部中断。

 

内部中断:如下图:有16个。优先级一次往下。一般不允许改。

 

外部中断:(查当前芯片有68个)下面只是其中一部分。

 

7. 外部中断(EXIT)

上图:中断流程如下:

 

EXTI 包含多达 20 个相互独立的边沿检测电路并且可以向处理器产生中断请求或事件唤醒。
EXTI 提供 3 种触发类型:上升沿触发,下降沿触发和任意沿触发。 EXTI 中每个边沿检测电路都
可以分别予以配置或屏蔽。
EXTI 触发源包括来自 I/O 管脚的 16 根线以及来自内部模块的 4 根线。 ( 包括 LVD RTC 闹钟、 USB
唤醒、以太网唤醒 ) 。通过配置 GPIO 模块的 AFIO_EXTISSx 寄存器,所有的 GPIO 管脚都可以被
选作 EXTI 的触发源。(注意外部中断线选择PA0,那么PB0,PC0....就不能选择因为都接在外部中断0.每次选择一个触发。其它外部引脚也一样)

 

8.程序设计 

1. 触摸按键的原理介绍。

原理:触摸按键接在TTP223-BA6的输入I引脚,Q是输出接在OUT_4上。芯片引脚PA3上。

当手触摸按键时会有感应电容与C41并联(电容变大)Q输出0,  

当手松开触摸按键时会没有感应电容。只有C41(电容变小)Q输出1。

程序设计:当一按触摸按键就会产生一个下降沿。把PA3设置为外部中断3。并且下降沿触发。来翻转LED1。

9. 程序代码实现

EXTI.h

#ifndef _EXTI_H
#define _EXTI_H#include "gd32f10x.h"
#include <stdio.h>void EXTI_Init(void);
void EXTI3_IRQHandler(void);#endif

EXTI.c

#include "EXTI.h"
#include "LED.h"// 外部中断的初始化函数
void EXTI_Init(void){/* 使能复用时钟 */rcu_periph_clock_enable(RCU_AF);/* 使能中断,并设置中断优先级 *//* 参数1:中断类型 参数2:抢占优先级 参数3:子优先级 */nvic_irq_enable(EXTI3_IRQn, 2U, 2U);// 初始化EXTI线,并设置中断触发方式/* 参数1:中断线 参数2:中断模式 参数3:中断类型 */exti_init(EXTI_3, EXTI_INTERRUPT, EXTI_TRIG_FALLING);/* 清除中断发生的标志 */exti_interrupt_flag_clear(EXTI_3);/* 选择中断源 */gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOA, GPIO_PIN_SOURCE_3);
}// EXTI3(按键D)过来的中断的服务函数
void EXTI3_IRQHandler(void){LED2_Toggle();exti_interrupt_flag_clear(EXTI_3); /* 清除中断发生的标志 */
}

main.c

#include "LED.h"#include "EXTI.h"int main(){LED_Init();EXTI_Init();while(1){}
}

 

 

相关文章:

中断向量控制器(NVIC)

1. 什么是中断 在处理器中&#xff0c;中断是一个过程&#xff0c;即CPU在正常执行程序的过程中&#xff0c;遇到外部/内部的紧急事件需要处理&#xff0c;暂时中止当前程序的执行&#xff0c;转而去为处理紧急的事件&#xff0c;待处理完毕后再返回被打断的程序处继续往下执行…...

QT配置FFmpeg出现错误原因

文章目录 QT配置ffmpeg出现&#xff1a; undefined reference to "avcodec_version"没有配置环境变量QT和FFmpeg的版本不对应直接添加FFmpeg的头文件没有在.pro文件添加路径 QT 程序异常退出没有在debug文件里面存放dll库 QT配置ffmpeg出现&#xff1a; undefined re…...

列出使用Typescript的一些优点?

使用Typescript有以下优点&#xff1a; 类型安全&#xff1a;Typescript是一种静态类型语言&#xff0c;它要求在编码阶段明确定义变量和函数的类型。这种类型安全可以减少在运行时出现错误的可能性&#xff0c;并提高代码的可读性和可维护性。代码可读性和可维护性&#xff1…...

如何做好测试?(四)集成测试(Integration Testing, IT)

1. 集成测试的详细介绍&#xff1a; 集成测试&#xff08;Integration Testing, IT&#xff09;&#xff0c;是一种软件测试方法&#xff0c;旨在验证不同组件、模块或子系统之间的交互和集成是否正常工作。它侧重于测试系统的组件之间的接口和数据传递&#xff0c;以确保它们…...

二叉树前序、中序、后序遍历(递归法、迭代法)

前序遍历&#xff1a;&#xff08;练习题&#xff09; 迭代法一&#xff1a; int TreeSize(struct TreeNode* root){return rootNULL?0:TreeSize(root->left)TreeSize(root->right)1; }int* preorderTraversal(struct TreeNode* root, int* returnSize){if(rootNULL){*…...

npm ,yarn 更换使用国内镜像源,淘宝源

背景 文章首发地址 在平时开发当中&#xff0c;我们经常会使用 Npm&#xff0c;yarn 来构建 web 项目。但是npm默认的源的服务器是在国外的&#xff0c;如果没有梯子的话。下载速度会特别慢。那有没有方法解决呢&#xff1f; 其实是有的&#xff0c;设置国内镜像即可&#x…...

真正理解浏览器渲染更新流程

浏览器渲染更新过程 文章目录 浏览器渲染更新过程帧维度解释帧渲染过程一些名词解释Renderer进程GPU进程rendering(渲染) vs painting(绘制)⭐位图纹理Rasterize(光栅化) 1. 浏览器的某一帧开始&#xff1a;vsync2. Input event handlers3. requestAnimationFrame4. 强制重排(可…...

市场调研的步骤与技巧:助你了解市场需求

在当今快速发展的市场中&#xff0c;进行有效的市场研究对于了解消费者的行为、偏好和趋势至关重要。适当的市场研究可以帮助公司获得对目标受众的有价值的见解&#xff0c;创造更好的产品和服务&#xff0c;并提高客户满意度。今天&#xff0c;小编和大家一起讨论一下怎么做市…...

ansible的个人笔记使用记录-个人心得总结

1.shell模块使用&#xff0c;shell模块------执行命令&#xff0c;支持特殊符 ansible all -m shell -a yum -y install nginx ansible all -m shell -a systemctl restart nginx ansible all -m shell -a systemctl stop nginx && yum -y remove nginx2. file模块…...

相机数据恢复!详细步骤解析(2023新版)

和朋友在外面旅游用相机拍了好多有意义的照片和视频&#xff0c;但是导入电脑后不知道是被我删除了还是什么原因&#xff0c;这些照片都不见了&#xff0c;请问有方法恢复吗&#xff1f;” 在数字摄影时代&#xff0c;我们依赖相机记录珍贵的瞬间。然而&#xff0c;相机数据丢失…...

LNK2001: unresolved external symbol __imp___std_init_once_begin_initialize 问题解决

LNK2001: unresolved external symbol __imp___std_init_once_begin_initialize 解决 文章目录 问题背景方法一&#xff1a;使用预编译指令方法二&#xff1a;使用相同的环境 参考链接附录 问题背景 Visual Studio 2019 对 CMakeLists.txt 的支持不是很好&#xff0c;使用 “文…...

修改switch Nand无线区码 以支持高频5G 信道

环境&#xff1a;NS switch 问题&#xff1a;日版&#xff0c;港版无法连接大于44信道的5G WIFI 解决办法&#xff1a;修改PRODINFO.dec的WIFI 区域码 背景&#xff1a;我的switch是最早买的港版的一批&#xff0c;WIFI 只能连接日本的信道&#xff0c;家里的路由器是国行的&am…...

基于SpringBoot的课程答疑系统

目录 前言 一、技术栈 二、系统功能介绍 学生信息管理 科目类型管理 老师回答管理 我的收藏管理 学生问题 留言反馈 交流区 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息互联网信息的飞速发展&#xff0c;无纸化作业变成了一种趋势&#x…...

JAVA中的泛型

一、泛型的概念 泛型是JAVA中的一个重要的概念&#xff0c;它允许你在编译时指定数据类型&#xff0c;从而使得代码更加灵活&#xff0c;更加通用。通过泛型&#xff0c;你可以在通用代码上操作不同数据类型&#xff0c;使得代码更加具有通用性。 二、泛型的使用场景 1、泛型…...

日撸代码300行:第73天(固定激活函数的BP神经网络,训练与测试过程理解)

进一步梳理理解了一下正向和反向传播。Forward 是利用当前网络对一条数据进行预测的过程&#xff0c;BackPropagation 是根据误差进行网络权重调节的过程。 完整的代码在72天&#xff0c;这里只粘贴Forward和BackPropagation两个方法。 /*** *********************************…...

css中常用单位辨析

辨析 px&#xff1a;像素&#xff1b;css中最普遍最常用的单位&#xff0c;不管在何种设备或分辨率上&#xff0c;1px始终代表屏幕上的一个像素。 %&#xff1a;百分比&#xff1b;基于父元素相对属性的百分比。 em&#xff1a;当前字体大小的倍数&#xff1b;基于父元素字体…...

Unity 一些常用特性收集

常用的类的特性 特性效果[Serializable]可序列化&#xff0c;作为一个子属性显示在Inspector面板[RequireComponent(typeof(CoomponnetName))]该类挂载的游戏物体&#xff0c;需要要有对应的组件[DisallowMultipleComponent]不允许挂载多个该类或其子类[ExecuteInEditMode]允许…...

select实现服务器并发

select的TCP服务器代码 #include <stdio.h> #include <unistd.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h> #include <sys/select.h> #include…...

【Spring底层原理】BeanFactory的实现

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 容器实现 一、BeanFactory实现的特点1.1 Be…...

c++---I/o操作

5、文件操作 程序运行时产生的数据都属于临时数据&#xff0c;程序一旦运行结束都会被释放。 我们可以通过文件将数据持久化 C中对文件操作需要包含头文件 <fstream> 文件类型分为两种&#xff1a; 文本文件 - 文件以文本的ASCII码形式存储在计算机中二进制文件 - 文…...

UG\NX二次开发 用程序修改“用户默认设置”

文章作者:里海 来源网站:《里海NX二次开发3000例专栏》 简介 可以用程序修改“用户默认设置”吗?下面是用代码修改“用户默认设置->基本环境->用户界面->操作记录->操作记录语言”的例子。 效果 代码 #include <uf_defs.h> #include <NXOpen/NXExcept…...

什么是信号处理?如何处理信号?

C语言信号处理详解 第一部分&#xff1a;什么是信号&#xff1f; 信号是一种进程间通信的机制&#xff0c;用于通知进程发生了某种事件或异常情况。在C语言中&#xff0c;信号是一种软件中断&#xff0c;它可以被操作系统或其他进程发送给目标进程。每个信号都有一个唯一的数…...

谈谈 Redis 数据类型底层的数据结构?

谈谈 Redis 数据类型底层的数据结构? RedisObject 在 Redis 中&#xff0c;redisObject 是一个非常重要的数据结构&#xff0c;它用于保存字符串、列表、集合、哈希表和有序集合等类型的值。以下是关于 redisObject 结构体的定义&#xff1a; typedef struct redisObject {…...

九、GC收集日志

JVM由浅入深系列一、关于Java性能的误解二、Java性能概述三、了解JVM概述四、探索JVM架构五、垃圾收集基础六、HotSpot中的垃圾收集七、垃圾收集中级八、垃圾收集高级👋GC收集日志 ⚽️1. 认识GC收集日志 垃圾收集日志是一个重要的信息来源,对于与性能相关的一些悬而未决的…...

SimpleCG动画示例--汉诺塔动画演示

前言 SimpleCG的使用方法在前面已经介绍了许多&#xff0c;有兴趣的同学如果有去动手&#xff0c;制作一些简单动画应该没多大问题的。所以这次我们来演示一下简单动画。我们刚学习C语言的递归函数时&#xff0c;有一个经典例子相信很多同学都写过&#xff0c;那就是汉诺塔。那…...

反弹shell脚本(php-reverse-shell)

平时经常打靶机 这里贴一个 反弹shell的脚本 <?php // php-reverse-shell - A Reverse Shell implementation in PHP // Copyright (C) 2007 pentestmonkeypentestmonkey.net // // This tool may be used for legal purposes only. Users take full responsibility // f…...

XSS-labs

XSS常见的触发标签_xss标签_H3rmesk1t的博客-CSDN博客 该补习补习xss漏洞了 漏洞原理 网站存在 静态 和 动态 网站 xss 针对的网站 就是 动态网站 动态网站会根据 用户的环境 与 需求 反馈出 不同的响应静态页面 代码写死了 只会存在代码中有的内容 通过动态网站 用户体…...

C++简单实现AVL树

目录 一、AVL树的概念 二、AVL树的性质 三、AVL树节点的定义 四、AVL树的插入 4.1 parent的平衡因子为0 4.2 parent的平衡因子为1或-1 4.3 parent的平衡因子为2或-2 4.3.1 左单旋 4.3.2 右单旋 4.3.3 先左单旋再右单旋 4.3.4 先右单旋再左单旋 4.4 插入节点完整代码…...

UE4 Cesium 与ultra dynamic sky插件天气融合

晴天&#xff1a; 雨天&#xff1a; 雨天湿度&#xff1a; 小雪&#xff1a; 中雪&#xff1a; 找到该路径这个材质&#xff1a; 双击点开&#xff1a; 将Wet_Weather_Effects与Snow_Weather_Effects复制下来&#xff0c;包括参数节点 找到该路径这个材质&#xff0c;双击点开&…...

SpringCloud Gateway--Predicate/断言(详细介绍)下

&#x1f600;前言 本篇博文是关于SpringCloud Gateway–Predicate/断言&#xff08;详细介绍&#xff09;下&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以…...

手机网站触屏版/百度集团股份有限公司

先赞后看&#xff0c;养成好习惯&#xff01;这里讲的分区&#xff0c;此“区”非彼“区”&#xff0c;这里讲的分区的意思是指将同一表中不同行的记录分配到不同的物理文件中&#xff0c;几个分区就有几个.idb文件。一.InnoDB逻辑存储结构首先要先介绍一下InnoDB逻辑存储结构和…...

男女做羞羞的视频网站/宁波优化seo软件公司

导读&#xff1a; 现在的web和移动开发&#xff0c;常常会调用服务器提供restful接口进行数据请求&#xff0c;为了调试&#xff0c;一般会先用工具进行测试&#xff0c;通过测试后才开始在开发中使用。这里介绍一下如何在chrome浏览器利用postman应用进行restful api接口请求测…...

怎样推广自己做的网站/链接怎么做

1.显示语法规范 show ( [ speed, [easing], [fn]]) hide ( [ speed, [easing], [fn]]) toggle ( [ speed, [easing], [fn]]) 显示参数 (1)参数都可以省略&#xff0c;无动画直接显示。 (2) speed:三种预定速度之一 的字符串( "slow" &#xff0c;"normal" …...

可以做哪些网站有哪些内容吗/semicircle

在安装包后面加两个参数--nodeps --force 举例&#xff1a;rpm -ivh download.rpm --nodeps --force 其作用为不再分析包之间的依赖关系而直接安装...

怒江网站制作/深圳品牌seo

我有一个滑块(flexslider)&#xff0c;我用来显示在下面的jsfiddle的形式的图像…我优化了滑块&#xff0c;以便它提取图像(其中使用数字例如&#xff1a;12364&#xff0c;50046)动态从一个某些目录基于其名称。提取图像的代码&#xff1a;function get_slide_images($folder,…...

昆明做网站建设的公司哪家好/seo快排技术教程

首先获取两个 nginx 源码包nginx-1.4.7.tar.gznginx-1.6.2.tar.gz------------安装nginx----------# yum install -y gcc gcc-c make //安装gcc由于实验环境缺少编译工具# yum install -y pcre-devel zlib-devel // nginx rewrite gzip 需要依赖的库解压nginx# tar -xzvf n…...