中断向量控制器(NVIC)

news2024/11/27 15:40:08

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){
	}
}

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring MVC 中的国际化和本地化

Spring MVC 中的国际化和本地化 国际化&#xff08;Internationalization&#xff0c;简称i18n&#xff09;和本地化&#xff08;Localization&#xff0c;简称l10n&#xff09;是构建多语言应用程序的重要概念。Spring MVC提供了丰富的支持&#xff0c;使开发人员能够轻松地处…

Python 笔记06(Mysql数据库)

一 基础 1.1 安装 MySQL下载参考&#xff1a;MySQL8.0安装配置教程【超级详细图解】-CSDN博客 测试是否安装并正确配置环境变量&#xff1a; 1.2 查看服务器是否正常运行 1.3 显示数据库 show databases; 1.4 退出 exit 1.5 python 连接 1.6 查主机IP ipconfig

2.springboot代理调用

1.概述 本文介绍在方法上开启声明式事务Transactional后(使用InfrastructureAdvisorAutoProxyCreator创建jdk动态代理)&#xff0c;springboot的调用该方法的过程&#xff1b; 2.结论(重点) 在方法开启声明式事务后&#xff0c;spring会为该对象创建动态代理。spring容器为该…

Android Jetpack组件架构:ViewModel的原理

Android Jetpack组件架构&#xff1a;ViewModel的原理 导言 本篇文章是关于介绍ViewModel的&#xff0c;由于ViewModel的使用还是挺简单的&#xff0c;这里就不再介绍其的基本应用&#xff0c;我们主要来分析ViewModel的原理。 ViewModel的生命周期 众所周知&#xff0c;一般…

聚观早报 | 2024款小鹏P5全新发布;华为发布13.2英寸MatePad Pro

【聚观365】9月26日消息 2024款小鹏P5全新发布 华为发布13.2英寸MatePad Pro 特斯拉发布人形机器人最新进展 百川智能发布Baichuan2-53B 软件行业仍将人才供不应求 2024款小鹏P5全新发布 继2024款小鹏G9问世仅一周&#xff0c;小鹏汽车再度发力新产品&#xff0c;2024款小…

【小沐学前端】Node.js实现UDP通信

文章目录 1、简介2、下载和安装3、代码示例3.1 HTTP3.2 UDP单播3.4 UDP广播 结语 1、简介 Node.js 是一个开源的、跨平台的 JavaScript 运行时环境。 Node.js 是一个开源和跨平台的 JavaScript 运行时环境。 它是几乎任何类型项目的流行工具&#xff01; Node.js 在浏览器之外…

2.4g无线收发芯片:Ci24R1(DFN8)

Ci24R1 采用GFSK/FSK数字调制与解调技术。数据传输速率与PA输出功率都可以调节&#xff0c;支持2Mbps, 1Mbps, 250Kbps三种数据速率。高的数据速率可以在更短的时间完成同样的数据收发&#xff0c;因此可以具有更低的功耗。 Ci24R1 是一颗工作在2.4GHz ISM频段&#xff0c;专为…

医疗实施-住院流程详解

住院就诊流程详解 1.病人入院登记2.病人进入病区3.医生操作病人4.医嘱录入与审核执行5. 医嘱收费前在对应业务系统的操作5.1.药物医嘱5.2.检查检验医嘱5.3.手术医嘱 6.住院医嘱费用的产生7. 医嘱收费后在对应业务系统的操作8. 病人出院 这篇文章是基于我的文章《医疗实施-住院就…

8.3Jmeter使用json提取器提取数组值并循环(循环控制器)遍历使用

Jmeter使用json提取器提取数组值并循环遍历使用 响应返回值例如&#xff1a; {"code":0,"data":{"totalCount":11,"pageSize":100,"totalPage":1,"currPage":1,"list":[{"structuredId":&q…

[React] 性能优化相关

文章目录 1.React.memo2.useMemo3.useCallback4.useTransition5.useDeferredValue 1.React.memo 当父组件被重新渲染的时候&#xff0c;也会触发子组件的重新渲染&#xff0c;这样就多出了无意义的性能开销。如果子组件的状态没有发生变化&#xff0c;则子组件是不需要被重新渲…

百度网盘的扩容

百度网盘的扩容怎么扩 百度网盘的扩容通常需要购买额外的存储空间。以下是扩容百度网盘存储空间的一般步骤&#xff1a; 登录百度网盘&#xff1a;首先&#xff0c;在您的计算机或移动设备上打开百度网盘&#xff0c;并使用您的百度账号登录。 选择扩容选项&#xff1a;一旦登…

数据结构题型12-链式队列

#include <iostream> //引入头文件 using namespace std;typedef int Elemtype;#define Maxsize 5 #define ERROR 0 #define OK 1typedef struct LinkNode {Elemtype data;struct LinkNode* next; }LinkNode;typedef struct {LinkNode* front;LinkNode* rear; }LinkQ…

java项目之小说阅读网站(ssm源码+文档)

项目简介 小说阅读网站实现了以下功能&#xff1a; 管理员&#xff1a;首页、个人中心、读者管理、作者管理、小说信息管理、小说分类管理、余额充值管理、购买小说管理、下载小说管理、系统管理。读者&#xff1a;个人中心、余额充值管理、购买小说管理、下载小说管理、我的…

黑豹程序员-架构师学习路线图-百科:Java

1、简介 Java是Sun公司推出的一门面向对象的编程语言&#xff0c;它是一种通过解释方式来执行的语言。 它出身名门&#xff0c;简化C而来&#xff0c;但并未照搬。继承了C语言各种优点&#xff0c;却摒弃了C里的多继承、指针等概念&#xff0c;因此Java语言具有功能强大和简单…

编码规范、git 规范

1、eslint配置&#xff0c;让代码变得更加规范&#xff0c;就是定义一些规则&#xff0c;开发人员要去遵守 该文件也是推荐在根目录下使用 2、prettier 就是格式化开发人员的代码 1、vscode 安装 prettier 插件 在项目根目录下创建一个 .prettierrc文件 然后去prettier 官网…

数据可视化项目管理软件推荐:提升团队效率的利器

项目管理是一个复杂的学科&#xff0c;实际工作中&#xff0c;即使项目计划做得再好&#xff0c;项目工作中也难免会出现一些意料之外的情况。 可视化程度低就是项目风险不易控、项目问题频发的一个原因。而数据可视化项目管理软件可以解决这些问题&#xff0c;帮助项目团队管控…

uniapp快速入门系列(1)- 概述与基础知识

章节三&#xff1a;抖音小程序页面开发 第1章&#xff1a;概述与基础知识1.1 uniapp简介1.1.1 什么是uniapp&#xff1f;1.1.2 为什么选择uniapp&#xff1f;1.1.3 uniapp与微信小程序的关系 1.2 HBuilderX介绍与安装1.2.1 什么是HBuilderX&#xff1f;1.2.2 HBuilderX的安装1.…

第1篇 目标检测概述 —(4)目标检测评价指标

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。目标检测评价指标是用来衡量目标检测算法性能的指标&#xff0c;可以分为两类&#xff0c;包括框级别评价指标和像素级别评价指标。本节课就给大家重点介绍下目标检测中的相关评价指标及其含义&#xff0c;希望大家学习之后…

如何把word的页眉页脚改为图片

前言 亲戚A&#xff1a; 听说你是计算机专业&#xff1f; 沐风晓月&#xff1a; 是啊 亲戚A&#xff1a; 那正好&#xff0c;来看看我这个页眉怎么改成图片 沐风晓月&#xff1a; 一万匹马奔腾而过 亲戚B&#xff1a; 听说你是英语专业&#xff1f; 沐风晓月&#xff1a; 是啊…

迭代器,可迭代对象,生成器

目录 结论&#xff1a; 1&#xff1a;可迭代对象&#xff1a; 2&#xff1a;生成器&#xff1a;概念如下&#xff1a; 3&#xff1a;迭代器的定义&#xff1a;要同时满足以下三点 一&#xff1a;可迭代对象的分类 二&#xff1a;迭代器的意义和应用场景 1&#xff1a;迭代…