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

Cortex-A7的GIC(全局中断控制器)使用方法(7):基于stm32MP135的GIC配置中断效果测试

0 参考资料

STM32MP13xx参考手册.pdf(RM0475)
ARM Generic Interrupt Controller Architecture version 2.0 - Architecture Specification.pdf

1 GIC配置中断效果测试

前面我们已经实现了GIC的配置,为了验证GIC是否配置有效,本例使用软件触发EXTI中断,来测试这些GIC配置的优先级位数、主优先级位数是否有效。

1.1 优先级位数测试

测试方法(测试优先级位数是否有效):
初始化GIC优先级位数为5,主优先级个数也为5,这样配置以后主优先级0-30(大于31)的中断都会响应。配置外部中断EXTI0的主优先级为0,配置外部中断EXTI1的主优先级为30,同时触发这2个软件中断查看能否正常响应。
(1)测试代码

void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin)
{switch (GPIO_Pin){case GPIO_PIN_0:printf("EXTI0 Rising\r\n");break;case GPIO_PIN_1:printf("EXTI1 Rising\r\n");break;}
}void EXTI0_IRQHandler(void)
{HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
}void EXTI1_IRQHandler(void)
{HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_1);
}void gic_test_example(void)
{int ret;ret = gic_init(5, 5);printf("gic init : %s\r\n", ret == 0 ? "ok" : "fail");ret = gic_prio_config(EXTI0_IRQn, 0, 0);printf("gic prio config 0 : %s\r\n", ret == 0 ? "ok" : "fail");ret = gic_prio_config(EXTI1_IRQn, 30, 0);printf("gic prio config 1 : %s\r\n", ret == 0 ? "ok" : "fail");SET_BIT(EXTI->SWIER1, 1);HAL_Delay(100);SET_BIT(EXTI->SWIER1, 2);HAL_Delay(100);
}

(2)测试结果
在这里插入图片描述
0-30的抢占优先级中断均能响应。

1.2 主优先级测试

测试方法(测试高主优先级中断能否抢占低主优先级中断,前面代码分析已经得出结论:无法抢占):
初始化GIC优先级位数为5,主优先级个数也为5,这样配置以后主优先级在0-30(大于31)的中断都会响应。配置外部中断EXTI0的主优先级为30,配置外部中断EXTI1的主优先级为0,首先生成外部中断EXTI0,然后在EXTI0中生成外部中断EXTI1,查看EXTI1能否抢占EXTI0执行。相关测试代码如下:
(1)测试代码

void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin)
{switch (GPIO_Pin){case GPIO_PIN_0:imx_printf("EXTI0 Rising 1\r\n");SET_BIT(EXTI->SWIER1, 2);HAL_Delay(10);imx_printf("EXTI0 Rising 2\r\n");break;case GPIO_PIN_1:imx_printf("EXTI1 Rising\r\n");break;}
}void EXTI0_IRQHandler(void)
{HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
}void EXTI1_IRQHandler(void)
{HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_1);
}void gic_test_example(void)
{int ret;ret = gic_init(5, 5);imx_printf("gic init : %s\r\n", ret == 0 ? "ok" : "fail");ret = gic_prio_config(EXTI0_IRQn, 10, 0);imx_printf("gic prio config 0 : %s\r\n", ret == 0 ? "ok" : "fail");ret = gic_prio_config(EXTI1_IRQn, 0, 0);imx_printf("gic prio config 1 : %s\r\n", ret == 0 ? "ok" : "fail");SET_BIT(EXTI->SWIER1, 1);HAL_Delay(100);
}

(2)测试结果
在这里插入图片描述
受限于目前STM32MP135对中断的处理方式,高抢占优先级中断无法抢占已经在执行的低抢占优先级中断。

1.2 子优先级测试

测试方法(测试主优先级相同情况下,子优先级更高的能否先响应):
初始化GIC优先级位数为5,主优先级个数为3。配置外部中断EXTI0的主优先级为5、子优先级为1,配置外部中断EXTI1的主优先级为5、子优先级为0。同时生成软件中断EXTI0、EXTI1,查看EXTI1能否先于EXTI0执行。
(1)测试代码

void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin)
{switch (GPIO_Pin){case GPIO_PIN_0:imx_printf("EXTI0 Rising\r\n");break;case GPIO_PIN_1:imx_printf("EXTI1 Rising\r\n");break;}
}void EXTI0_IRQHandler(void)
{HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
}void EXTI1_IRQHandler(void)
{HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_1);
}void gic_test_example(void)
{int ret;__disable_irq();ret = gic_init(5, 3);imx_printf("gic init : %s\r\n", ret == 0 ? "ok" : "fail");ret = gic_prio_config(EXTI0_IRQn, 5, 1);imx_printf("gic prio config 0 : %s\r\n", ret == 0 ? "ok" : "fail");ret = gic_prio_config(EXTI1_IRQn, 5, 0);imx_printf("gic prio config 1 : %s\r\n", ret == 0 ? "ok" : "fail");SET_BIT(EXTI->SWIER1, 3);__enable_irq();HAL_Delay(100);
}

(2)测试结果
在这里插入图片描述
在相同抢占优先级情况下,响应优先级更高的中断先响应。

1.3 相同主、子优先级下谁先响应测试

如果中断主、子优先级均相同,则比较中断编号(ID),中断编号(ID)越小优先级越高。
在这里插入图片描述
EXTI0的中断编号比EXTI0小,应该先执行。
初始化GIC优先级位数为5,主优先级个数为3。配置外部中断EXTI0的主优先级为5、子优先级为0,配置外部中断EXTI1的主优先级为5、子优先级为0。同时生成软件中断EXTI0、EXTI1,查看EXTI0能否先于EXTI1执行。
在这里插入图片描述
EXTI0比EXTI1早响应,结论成立。

2 结论

(1)当前stm32MP135的中断处理方式无法实现中断抢占。
(2)主优先级更高的中断更先响应;主优先级一致则子优先级更高的中断优先响应;主优先级和子优先级都一致的中断编号(ID)更小的中断优先响应。

相关文章:

Cortex-A7的GIC(全局中断控制器)使用方法(7):基于stm32MP135的GIC配置中断效果测试

0 参考资料 STM32MP13xx参考手册.pdf(RM0475) ARM Generic Interrupt Controller Architecture version 2.0 - Architecture Specification.pdf 1 GIC配置中断效果测试 前面我们已经实现了GIC的配置,为了验证GIC是否配置有效,本例…...

c++动态数组new和delete

文章目录 动态数组的使用大全1. **基本创建和初始化**2. **动态调整大小**3. **动态数组的使用与标准库 std::vector**4. **动态数组作为函数参数**输出 5. **使用动态数组存储用户输入** 动态数组的使用大全 1. 基本创建和初始化 示例&#xff1a; #include <iostream&g…...

Redis热点知识速览(redis的数据结构、高性能、持久化、主从复制、集群、缓存淘汰策略、事务、Pub/Sub、锁机制、常见问题等)

Redis是一个开源的、使用内存作为存储的、支持数据结构丰富的NoSQL数据库。它的高性能、灵活性和简单易用使其在许多场景下成为首选的缓存解决方案。以下是Redis的常见和热点知识总结。 数据结构 Redis支持五种基本数据结构&#xff1a; String&#xff1a;字符串是Redis中最…...

【C++浅析】lambda表达式:基本结构 使用示例

基本结构 [捕获列表](参数列表) -> 返回类型 { // 函数体 } 捕获列表 ([ ]): 用于指定外部变量的捕获方式。可以&#xff1a; 通过值捕获&#xff1a;[x]通过引用捕获&#xff1a;[&x]捕获所有变量通过值&#xff1a;[]捕获所有变量通过引用&#xff1a;[&]自…...

利用Redis获取权限的多种方式

更多实战内容&#xff0c;可前往无问社区查看http://www.wwlib.cn/index.php/artread/artid/10333.html Redis是我们在实战中经常接触到的一款数据库&#xff0c;因其在前期打点中被利用后可直接影响服务器安全所以在攻防过程中也备受红队关注&#xff0c;在本文中会重点分享一…...

LeetCode - LCR 146- 螺旋遍历二维数组

LCR 146题 题目描述&#xff1a; 给定一个二维数组 array&#xff0c;请返回「螺旋遍历」该数组的结果。 螺旋遍历&#xff1a;从左上角开始&#xff0c;按照 向右、向下、向左、向上 的顺序 依次 提取元素&#xff0c;然后再进入内部一层重复相同的步骤&#xff0c;直到提取完…...

如何获取Bing站长工具API密钥

Bing站长工具近期悄然上线了网站URL推送功能&#xff0c;似乎有意跟随百度的步伐。这个新功能允许站长通过API向Bing提交链接数据&#xff0c;当然也可以通过Bing站长工具手动提交。 本文将详细介绍如何通过Bing站长工具生成用于网站链接推送的API密钥。 首先&#xff0c;访问…...

NC 调整数组顺序使奇数位于偶数前面(一)

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 输入一个长度…...

Unity异步把图片数据从显存下载到内存(GPU->CPU)

Unity异步把图片数据从显存下载到内存&#xff08;GPU->CPU&#xff09; 1.c#核心代码 using System.Collections; using System.Collections.Generic; using Unity.Collections; using UnityEditor.PackageManager.Requests; using UnityEngine; using UnityEngine.Rende…...

【MySQL】C/C++连接MySQL客户端,MySQL函数接口认知,图形化界面进行连接

【MySQL】C/C引入MySQL客户端 安装mysqlclient库mysql接口介绍初始化mysql_init链接数据库mysql_real_connect下发mysql命令mysql_query获取出错信息mysql_error获取执行结果mysql_store_result获取结果行数mysql_num_rows获取结果列数mysql_num_fields判断结果列数mysql_field…...

Wireshark分析工具

简单用例 首先打开软件&#xff0c;左上角点文件&#xff0c;选中要分析的文件列表。 导入用tcpdump抓的包后进行分析&#xff0c;这里要输入过滤条件&#xff0c;对网络包进行一定的过滤处理。&#xff08;这里172网段是阿里云的地址&#xff0c;用自己写的python2脚本对阿里…...

linux网络配置脚本

通过脚本&#xff0c;设置静态ip以及主机名 因为企业9的网络配置文件和企业7的不一样所以&#xff0c;我们以rhel9和rhel7为例 rhel7/centos7/openeuler #!/bin/bash cat > /etc/sysconfig/network-scripts/ifcfg-$1 << EOF DEVICE$1 ONBOOTyes BOOTPROTOnone IPAD…...

IT管理:我与IT的故事4

首先&#xff0c;宣布一个“坏消息”。最近Herry童鞋的办公邮箱似乎有些“抽抽”了&#xff0c;所以邮件出现了延迟、拒收、被拒收、甚至是石沉大海的现象。为了能够更好的和大家进行沟通&#xff0c;大家如果发邮件到我办公邮箱的时候&#xff0c;若不嫌麻烦&#xff0c;可以抄…...

短链接系统设计方案

背景 需要设计一个短链接系统&#xff0c;主要功能主要有如下几点&#xff1a; ToB&#xff1a; 输入一个长链接&#xff0c;转换成短链接。这个短链接有时效性&#xff0c;可以设定指定过期时间。这个系统的每天会生成千万级别的短链接。数据具备可分析功能。 ToC&#xf…...

Cisco交换机SSH使用RSA公钥免密登录(IOS与Nexus,服务器以RHEL8为例)

目录 需求实验步骤0. 实验环境1. Linux2. CiscoIOS基础设置保存密钥登陆测试 3. CiscoNexus基础配置保存密钥登陆测试 需求 在实际工作中&#xff0c;常会遇到自动化的需求&#xff0c;那么在自动采集、配置等对网络设备的自动化需求中&#xff0c;不可避免的会遇到需要登录-&…...

QT判断操作系统类型和CPU架构

一、判断操作系统类型 1.在.pro文件中判断 macx { # mac only } unix:!macx{ # linux only } win32 { # windows only }2.在代码中判断 可以包含QGlobal头文件&#xff0c;判断预定义宏 #include <QtGlobal> ... #ifdef Q_OS_MAC // mac #endif#ifdef Q_OS_LINUX // …...

input[type=checkbox]勾选框自定义样式

效果图&#xff1a; <template> <input class"rule-checkbox" type"checkbox" checked v-model"isChecked" /> </template><script setup lang"ts"> import { ref } from vue; const isChecked ref(); </…...

鼠害监测系统:科技守护农业安全

在农业生产中&#xff0c;鼠害一直是威胁作物安全、影响产量的重要因素。然而&#xff0c;随着科技的飞速发展&#xff0c;鼠害监测系统正逐步成为现代农业防治鼠害的重要利器。 鼠害监测系统巧妙融合了现代光电、数控及物联网技术&#xff0c;实现了诱鼠、投喂鼠药、鼠情监测及…...

Ubuntu20.04如何安装配置JDK

资源准备 官方下载地址&#xff08;根据自己的系统版本选择不同版本进行下载即可&#xff09;&#xff1a;Java Downloads | Oracle 如无特殊需要可直接移步至下方JDK1.8安装包 https://download.csdn.net/download/qq_43439214/89646731 安装步骤 创建Java目录 sudo mkdir …...

Python3网络爬虫开发实战(9)代理的使用 (需补充代理池的构建)

文章目录 一、代理的设置1.1 urllib 的代理设置1.2 requests 的代理设置1.3 httpx 的代理设置1.4 aiohttp 的代理设置1.4 Selenium 的代理设置1.6 Playwright 的代理设置 二、代理池的构建和维护2.1 代理池的模块构成2.2 代理池的实现 网站为了避免爬虫采集数据可能会采取一些反…...

科技晚报|2026年5月15日:AI 代理开始补协作、编排和护栏

科技晚报&#xff5c;2026年5月15日&#xff1a;AI 代理开始补协作、编排和护栏 一句话导读&#xff1a;今晚更值得看的&#xff0c;不是哪家模型榜单又变了&#xff0c;而是几家平台同时在补 AI 代理真正进生产前最缺的三块能力&#xff1a;跨 IDE 共享状态、团队级可观测&…...

DsHidMini:让PS3手柄在Windows上重获新生的终极指南

DsHidMini&#xff1a;让PS3手柄在Windows上重获新生的终极指南 【免费下载链接】DsHidMini Virtual HID Mini-user-mode-driver for Sony DualShock 3 Controllers 项目地址: https://gitcode.com/gh_mirrors/ds/DsHidMini 还在为闲置的索尼DualShock 3手柄寻找新的用途…...

基于ChatGee框架的KakaoTalk ChatGPT机器人部署与定制指南

1. 项目概述&#xff1a;一个为KakaoTalk量身定制的ChatGPT机器人 如果你在韩国工作、生活&#xff0c;或者你的用户群体主要在韩国&#xff0c;那么KakaoTalk&#xff08;카카오톡&#xff09;这款国民级即时通讯应用&#xff0c;你一定不陌生。它几乎覆盖了韩国所有的智能手…...

基于帕尔贴效应的智能冷饮机制作:从热电制冷原理到嵌入式控制实践

1. 项目概述与核心思路在炎热的夏天&#xff0c;没有什么比一杯冰镇饮料更让人舒爽的了。但传统的加冰方式往往会稀释饮料的风味&#xff0c;而市面上的小型制冷设备要么体积庞大&#xff0c;要么价格不菲。作为一名热衷于将电子技术与生活创意结合的爱好者&#xff0c;我一直在…...

别再只当CANoe/CANape的‘眼睛’了!VN1640A的I/O通道实战:手把手教你采集电压和开关信号

VN1640A硬件接口深度开发&#xff1a;从电压采集到PWM控制的工程实践 在汽车电子测试领域&#xff0c;Vector的VN系列接口设备早已成为行业标准配置。大多数工程师对CAN/LIN通道的应用驾轻就熟&#xff0c;却常常忽略设备上那个不起眼的9针I/O接口——这个被低估的硬件通道实际…...

我靠技术博客,从无人问津到拿到硅谷offer

在软件测试这个领域&#xff0c;我们常常自嘲是“质量守门员”&#xff0c;却很少把自己当作技术的创造者与传播者。三年前&#xff0c;我和大多数测试同行一样&#xff0c;每天重复着用例设计、手工执行、提交缺陷的循环&#xff0c;偶尔写点自动化脚本&#xff0c;也仅止于“…...

Windows内核级硬件指纹伪装终极指南:EASY-HWID-SPOOFER深度解析

Windows内核级硬件指纹伪装终极指南&#xff1a;EASY-HWID-SPOOFER深度解析 【免费下载链接】EASY-HWID-SPOOFER 基于内核模式的硬件信息欺骗工具 项目地址: https://gitcode.com/gh_mirrors/ea/EASY-HWID-SPOOFER 在数字隐私日益重要的今天&#xff0c;硬件指纹识别技术…...

Saga状态机设计失效导致订单丢失?DeepSeek内部SRE团队紧急修复的7个隐性陷阱,你中了几个?

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Saga状态机设计失效导致订单丢失&#xff1f;DeepSeek内部SRE团队紧急修复的7个隐性陷阱&#xff0c;你中了几个&#xff1f; Saga 模式在分布式事务中被广泛采用&#xff0c;但 DeepSeek SRE 团队在一…...

短路保护+过流保护+过热保护:MP9447GL-Z的车规级电源可靠性分析

MP9447GL-Z&#xff1a;36V/5A同步降压转换器的高密度电源方案在工业设备、通信基站以及消费电子电源适配器等应用中&#xff0c;电源管理单元需要同时满足宽输入电压、大输出电流和高转换效率的多重要求。传统的分立方案往往需要在PCB面积、BOM成本和散热设计之间做出权衡。MP…...

CodMate:基于上下文感知的智能代码伴侣设计与实践

1. 项目概述&#xff1a;一个为开发者量身定制的代码伴侣如果你和我一样&#xff0c;每天大部分时间都在和代码编辑器、终端以及各种文档打交道&#xff0c;那你一定对“效率”这个词有很深的执念。我们总是在寻找能让自己写代码更快、调试更准、理解项目更轻松的工具。今天要聊…...