GD32如何配置中断优先级分组以及中断优先级

使用GD32 MCU的过程中,大家可能会有以下疑问:中断优先级如何配置和使用?

本文将会为大家解析中断优先级分组以及中断优先级的配置使用:

  • 中断优先级分组配置

一个GD32 MCU系统需要大家明确系统中使用的中断优先级分组,避免中断优先级配置越界导致一些不符合预期的中断现象。

中断优先级分组可采用以下函数接口,其中有4个bit可用于中断优先级分组,如果全用于抢占优先级,则可以配置0-15的优先级,如果2位用于抢占,2位用于次优先级,则抢占优先级可以配置0-3,此优先级可以配置0-3。

C
/*!
    \brief      set the priority group
    \param[in]  nvic_prigroup: the NVIC priority group
      \arg        NVIC_PRIGROUP_PRE0_SUB4:0 bits for pre-emption priority 4 bits for subpriority
      \arg        NVIC_PRIGROUP_PRE1_SUB3:1 bits for pre-emption priority 3 bits for subpriority
      \arg        NVIC_PRIGROUP_PRE2_SUB2:2 bits for pre-emption priority 2 bits for subpriority
      \arg        NVIC_PRIGROUP_PRE3_SUB1:3 bits for pre-emption priority 1 bits for subpriority
      \arg        NVIC_PRIGROUP_PRE4_SUB0:4 bits for pre-emption priority 0 bits for subpriority
    \param[out] none
    \retval     none
*/
void nvic_priority_group_set(uint32_t nvic_prigroup)
{
    /* set the priority group value */
    SCB->AIRCR = NVIC_AIRCR_VECTKEY_MASK | nvic_prigroup;
}

注意:如果中断优先级配置为2位抢占和2位此优先级的话,抢占优先级配置为4(二进制为100b),优先级配置越界,实际配置进去的优先级为0,最高优先级,因而明确中断优先级分组非常重要。

  • 中断优先级配置

中断优先级配置采用以下函数。

C
/*!
    \brief      enable NVIC request
    \param[in]  nvic_irq: the NVIC interrupt request, detailed in IRQn_Type
    \param[in]  nvic_irq_pre_priority: the pre-emption priority needed to set
    \param[in]  nvic_irq_sub_priority: the subpriority needed to set
    \param[out] none
    \retval     none
*/
void nvic_irq_enable(uint8_t nvic_irq, uint8_t nvic_irq_pre_priority, 
                     uint8_t nvic_irq_sub_priority)
{
    uint32_t temp_priority = 0x00U, temp_pre = 0x00U, temp_sub = 0x00U;
    /* use the priority group value to get the temp_pre and the temp_sub */
    if(((SCB->AIRCR) & (uint32_t)0x700U)==NVIC_PRIGROUP_PRE0_SUB4){
        temp_pre=0U;
        temp_sub=0x4U;
    }else if(((SCB->AIRCR) & (uint32_t)0x700U)==NVIC_PRIGROUP_PRE1_SUB3){
        temp_pre=1U;
        temp_sub=0x3U;
    }else if(((SCB->AIRCR) & (uint32_t)0x700U)==NVIC_PRIGROUP_PRE2_SUB2){
        temp_pre=2U;
        temp_sub=0x2U;
    }else if(((SCB->AIRCR) & (uint32_t)0x700U)==NVIC_PRIGROUP_PRE3_SUB1){
        temp_pre=3U;
        temp_sub=0x1U;
    }else if(((SCB->AIRCR) & (uint32_t)0x700U)==NVIC_PRIGROUP_PRE4_SUB0){
        temp_pre=4U;
        temp_sub=0x0U;
    }else{
        nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2);
        temp_pre=2U;
        temp_sub=0x2U;
    }
    /* get the temp_priority to fill the NVIC->IP register */
    temp_priority = (uint32_t)nvic_irq_pre_priority << (0x4U - temp_pre);
    temp_priority |= nvic_irq_sub_priority &(0x0FU >> (0x4U - temp_sub));
    temp_priority = temp_priority << 0x04U;
    NVIC->IP[nvic_irq] = (uint8_t)temp_priority;
    /* enable the selected IRQ */
    NVIC->ISER[nvic_irq >> 0x05U] = (uint32_t)0x01U << (nvic_irq & (uint8_t)0x1FU);
}

 nvic_irq为中断号,中断号可以通过gd32f30x.h获取,如下图所示,nvic_irq_pre_priority为抢占优先级配置,nvic_irq_sub_priority为此优先级配置,注意优先级配置要根据优先级分组进行配置,不要越界哦。

GD32MCU技术交流群:859440462

更多GD32 MCU相关咨询:单片机开发板_国产mcu视频_GD32 - 苏州聚沃电子科技有限公司

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

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

相关文章

linux中xterm窗口怎么调整字体大小

需求&#xff1a;打开的xterm窗口字体比较小&#xff0c;怎么才能调整字体大小&#xff0c;打开的大写&#xff1a; 解决方法&#xff1a; 在home目录下搞一个设置文件 .Xresource&#xff0c;里面内容如下 然后把设置文件添加到 .tcshrc 文件中生效 这样重新打开的xterm字…

11C++常用函数

C学习笔记 文章目录 C学习笔记1.C 迭代器1.1emplace_back()1.1.1用法同push_back()1.1.2emplace_back() 2.erase()3.to_string()4.vector容器的resize()和reserve()6.for(auto x : num) 语法6.1关于是否要加 & 7.内联函数7.1为什么要用内联函数?7.2将内联函数放入头文件7.…

袋鼠云产品功能更新报告10期|智能进化,近百项功能升级加速数智化转型

欢迎查阅袋鼠云第10期产品功能更新报告。本期&#xff0c;我们精心推出了72项新增和优化功能&#xff0c;致力于在数字化浪潮中为您提供更高效、更智能的服务。我们相信&#xff0c;这些新特性将为您的业务注入新活力&#xff0c;确保您在数字化转型的每一步都坚实而有力。 以…

大模型学习之菜鸟的进阶道路---工程迭代

我们的大模型学习开始了新篇章&#xff0c;这一章还是比较基础的调用api&#xff0c;有些朋友建议直接搞构造大模型&#xff0c;很显然这是很不科学的&#xff0c;我们先从基础学习&#xff0c;大模型本来就是很晦涩难懂的东西&#xff0c;并且知识体系十分庞大&#xff0c;所以…

618数码产品有什么推荐?四大2024“宝藏”数码产品推荐!

随着618购物节的热情逐渐升温&#xff0c;你是否在繁多且诱人的商品海洋中迷失方向&#xff0c;难以找到那最心仪的宝贝&#xff1f;团团在此特别为你精心挑选了一系列经过亲身体验的优质好物。这些推荐不仅时尚前沿&#xff0c;更贴合你的日常生活需求&#xff0c;确保实用与品…

电脑ip地址查询:快速定位你的网络位置(4种方法)

在互联网的浩瀚海洋中&#xff0c;每台联网的电脑都有一个独特的身份标识&#xff0c;那就是IP地址。无论是进行网络通信、定位问题还是安全防护&#xff0c;了解自己或他人的电脑IP地址都是非常关键的。那么&#xff0c;电脑ip地址查询怎么操作呢&#xff1f;本文将为你提供一…

RabbitMQ消息的发布确认机制详解

RabbitMQ发布确认机制确保消息从生产者成功传输到交换机和队列&#xff0c;提高系统可靠性。在Spring Boot项目中&#xff0c;通过配置publisher-confirm-type和publisher-returns&#xff0c;启用发布确认和消息返回机制。配置RabbitTemplate的确认回调和返回回调&#xff0c;…

黑龙江等保测评流程

黑龙江的等保测评过程是一个系统严谨的过程&#xff0c;目的在于保证信息系统的安全与机密性符合国家规定的要求。下面将详细介绍黑龙江等保测评的流程&#xff1a; 一、定级与备案 首先&#xff0c;企业要依据自身的业务特点、信息系统的重要性和所承载的信息的敏感程度&…

MyEclipse新手使用介绍

目录 1.MyEclipse诞生背景 2.作用 3.版本历史 4.优缺点 5.应用场景 6.如何使用 6.1.下载与安装 6.2.MyEclipse 菜单及其菜单项 7.创建和发布一个 Java 程序 7.1.创建 Java 程序 7.2.发布 Java 程序 8.示例 8.1. Hello World 示例 8.2. 简单Spring Boot 应用 8.3…

手动安装Nvidia驱动和CUDA Toolkit

1、打开cuda-toolkit 网站 CUDA Toolkit Archive | NVIDIA Developer 根据自己需要选择CUDA Toolkit版本&#xff0c;这里选择12.0.0 2、点击链接跳转到下载页面&#xff0c;选择操作系统类型和安装包类型 3、下载CUDA Toolkit 安装包 4、执行下载命令 wget https://develo…

Sora简介与其对新媒体短视频行业的影响

Sora简介 官网&#xff1a;https://openai.com/sora 当大家还在沉浸在GPT各种大语言模型的时候&#xff0c;OpenAI 悄无声息地发布了文生视频&#xff08;text-to-video&#xff0c;简称 t2v&#xff09;模型 Sora&#xff0c;这又是一个对AI冲击很大的突破了。Sora可以根据文…

什么是广告联盟变现

广告联盟变现&#xff0c;作为一种连接广告主与各类媒体平台的机制&#xff0c;正展现出强大的生命力和影响力。它为拥有流量资源的一方提供了将其转化为实际经济收益的有效途径。通过广告联盟&#xff0c;媒体平台可以与众多广告主建立合作关系&#xff0c;获取多样化的广告内…

Ubuntu系统安装docker以及安装yg系统所能使用到的插件

Ubuntu系统安装docker以及安装yg系统所能使用到的插件 前言&#xff1a;建议大家使用ubuntu系统的时候&#xff0c;直接永久关闭防火墙目前我们处于学习状态&#xff0c;这样有利于提高开发效率。 文章目录 Ubuntu系统安装docker以及安装yg系统所能使用到的插件一、安装docker二…

docker 拉取不到镜像的问题:拉取超时

error pulling image configuration: download failed after attempts6: dial tcp 31.13.94.10:443: i/o timeout 首先设置国内的镜像源&#xff1a;复制下面直接执行 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF{"registry-mirrors"…

通过在idea上搭建虚拟hadoop环境使用MapReduce做词频去重

idea上的MapReduce ​ 一般在开发中&#xff0c;若是等到环境搭配好了再进行测试或者统计数据&#xff0c;数据处理等操作&#xff0c;那会很耽误时间&#xff0c;所以一般都是2头跑&#xff0c;1波人去在客户机上搭建环境&#xff0c;1波人通过在idea上搭建虚拟hadoop环境&am…

uni-app uni-swipe-action 滑动操作状态恢复

按照uni-app官方文档的写法 当前同一条滑动确认之后 页面列表刷新 但是滑动的状态还在 入下图所示&#xff1a; 我们需要在滑动确认之后 页面刷新 滑动状态恢复 那么我们就来写一下这部分的逻辑&#xff1a; 首先&#xff0c;配置一下:show"isOpened[item.id]" chan…

学习笔记——网络参考模型——TCP/IP模型(网络层)

三、TCP/IP模型-网络层 1、IPV4报头 (1)IPV4报文格式 IP Packet(IP数据包)&#xff0c;其包头主要内容如下∶ Version版本∶4 bit&#xff0c;4∶表示为IPv4; 6∶表示为IPv6。 Header Length首部长度∶4 bit&#xff0c;代表IP报头的长度(首部长度)&#xff0c;如果不带Opt…

传输协议TCP-原理部分

传输控制协议TCP&#xff08;Transmission Control Protocol&#xff09;一种基于连接的可靠的稳定的无重复的传输协议。 1、TCP头部信息 TCP协议头部信息如下&#xff1a; 一共占用20个字节 16位源端口号&#xff1a;发送进程的主机端口16位目的端口号&#xff1a;接收主机…

工作备忘录软件有哪些 记事备忘提醒三合一的备忘录

在工作中&#xff0c;我总是觉得自己脑子好像不够用&#xff0c;一会儿是这个项目的进度要跟踪&#xff0c;一会儿是那个会议的要点要记录。每天都在忙碌与混乱中度过&#xff0c;我甚至开始怀疑自己是否适合这份工作。 备忘录不仅是一个简单的记事工具&#xff0c;像敬业签这…

MyBatis总结(2)- MyBatis实现原理(一)

Mybatis实现原理&#xff1a; 概括一句话&#xff1a;约定配置参数mybatis-config.xml&#xff0c;映射关系JavaBean-mapper.xml&#xff0c;用SqlSessionFactoryBuilder构建应用程序运行期间需要的SqlSessionFactory实例对象&#xff0c;当请求或方法需要执行CURD操作时&…