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

ARM开发(cortex-A7核中断实验)

1.实验目的:实现KEY1/LEY2/KE3三个按键,中断触发打印一句话,并且灯的状态取反;

key1 ----> LED3灯状态取反;

key2 ----> LED2灯状态取反;

key3 ----> LED1灯状态取反;

2.分析框图:

 3.代码:

---key.h头文件---
#ifndef __KEY_H__
#define __KEY_H__#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_gic.h"
#include "stm32mp1xx_exti.h"typedef enum
{FALLING_TRI,  //下降沿触发方式RISING_TRI,  //上升沿触发方式
}trigger_t;//中断RCC章节初始化 PF9 7 8
void hal_interrupt_rcc_init();//EXTI初始化函数
//EXTI编号 GPIO组号 触发方式
void hal_exti_init(unsigned int extix,unsigned int groupx,trigger_t trix);//GIC初始化函数
//中断号,中断优先级
void hal_gic_init(unsigned int interruptx,unsigned int priority);//led初始化函数
void led_init(gpio_t* gpiox,unsigned int pin);#endif
---key.c函数实现---
#include "key.h"//中断RCC章节初始化 PF9 7 8
void hal_interrupt_rcc_init()
{//RCC章节初始化 PF9 [5]=1RCC->MP_AHB4ENSETR |= (0x1 << 5);}//EXTI初始化函数
//EXTI编号 GPIO组号 触发方式
void hal_exti_init(unsigned int extix,unsigned int groupx,trigger_t trix)
{//GPIO章节初始化 设置三个按键为输入模式GPIOF->MODER &= (~(0x3 << 2*extix));//EXTI章节初始化,引脚信号与EXTI连接//1.EXIT_EXTICR组 0x05EXTI->EXTICR[extix/4] &= (~(0xff << ((extix%4)*8)));EXTI->EXTICR[extix/4] |= (groupx << ((extix%4)*8));//2.EXTI_FTSR1 设置下降沿触发方式if(trix == FALLING_TRI)EXTI->FTSR1 |= (0x1 << extix);elseEXTI->RTSR1 |= (0x1 << extix);//3.EXTI_IMR1 设置中断不屏蔽 =1EXTI->C1IMR1 |= (0x1 << extix);}//GIC初始化函数
//中断号,中断优先级
void hal_gic_init(unsigned int interruptx,unsigned int priority)
{//GICD初始化//1.GICD_CTRL 使能组0 [0]=1GICD->CTRL |= (0x1 << 0);//2.GICD_ISENABLER组 设置GICD层中断使能GICD->ISENABLER[interruptx/32] |= (0x1 << (interruptx % 32));//3.GICD_IPRIORITYR组 设置中断优先级  操作高5位GICD->IPRIORITYR[interruptx/4] &= (~(0x1f << (interruptx % 4 * 8 + 3)));GICD->IPRIORITYR[interruptx/4] |= (priority << (interruptx % 4  * 8 + 3));//4.GICD_ITARGETSR组 设置中断目标分配给CPU0GICD->ITARGETSR[interruptx/4] &= (~(0x3 << (interruptx % 4 * 8)));GICD->ITARGETSR[interruptx/4] |= (0x1 << (interruptx % 4 * 8));//GICC初始化//1.GICC_CTRL 设置GICC层组0使能 [0]=1GICC->CTRL |= (0x1 << 0);//2.GICC_PMR 设置GICC层中断优先级 GICC->PMR |= ((priority+1) << 3);
}//led灯初始化
//参数1:GPIO组号
//参数2:引脚编号
void led_init(gpio_t* gpiox,unsigned int pin)
{//1输出模式 gpiox->MODER &= ~(0x3 << (pin*2));gpiox->MODER |= (0x1 << (pin*2));//2输出类型gpiox->OTYPER &= (~(0x1 << pin));//3输出速率gpiox->OSPEEDR &= ~(0x3 << (pin*2));//4拉电阻gpiox->PUPDR &= ~(0x3 << (pin*2));
}
---do_irq.c终端处理函数---
#include "key.h"extern void printf(const char *fmt, ...);//中断处理函数
void do_irq(void) 
{//1获取中断号 IAR[9:0]unsigned int num = 0;num = GICC->IAR & 0x3ff;//2判断中断号,并且打印一句话switch(num){case 99:printf("KEY1按键中断,LED3灯取反\n");//led3灯状态取反GPIOE->ODR ^= (0x1 << 8);//3清除EXTI层中断挂起标志位 [9]=1//EXTI_FDR1 [9]=1EXTI->FPR1 |= (0x1 << 9);//4清除GICD层中断挂起标志位//GICD_ICPENDR3 [3]=1GICD->ICPENDR[3] |= (0x1 << 3);break;case 97:printf("KEY2按键中断,LED2灯取反\n");//led2灯状态取反GPIOF->ODR ^= (0x1 << 10);//清除EXTI层中断挂起标志位 [9]=1EXTI->FPR1 |= (0x1 << 7);GICD->ICPENDR[3] |= (0x1 << 1);break;case 98:printf("KEY3按键中断,LED1灯取反\n");	//led1灯状态取反GPIOE->ODR ^= (0x1 << 10);EXTI->FPR1 |= (0x1 << 8);GICD->ICPENDR[3] |= (0x1 << 2);break;}//5清楚获取到的中断号GICC->EOIR = num;}
---main.c测试文件---
#include "key.h"extern void printf(const char *fmt, ...);void delay_ms(int ms){int i,j;for(i = 0; i < ms;i++)for (j = 0; j < 1800; j++);
}#define GPIO_PIN10 10  //引脚编号
#define GPIO_PIN8 8
#define EXTI9 9   //EXTI编号
#define EXTI7 7
#define EXTI8 8
#define GPIOF_GROUP 0x05   //GPIOF组号
#define KEY1_ID 99   //中断号
#define KEY2_ID 97
#define KEY3_ID 98
#define KEY1_PRIORITY 9   //中断优先级
#define KEY2_PRIORITY 7
#define KEY3_PRIORITY 8int main()
{//使能三盏灯PE10 PF10 PE8RCC->MP_AHB4ENSETR |= (0x3 << 4);//led初始化函数led_init(GPIOE,GPIO_PIN10);led_init(GPIOF,GPIO_PIN10);led_init(GPIOE,GPIO_PIN8);//中断RCC章节初始化 PF9 7 8hal_interrupt_rcc_init();//EXTI初始化函数hal_exti_init(EXTI9,GPIOF_GROUP,FALLING_TRI);hal_exti_init(EXTI7,GPIOF_GROUP,FALLING_TRI);hal_exti_init(EXTI8,GPIOF_GROUP,FALLING_TRI);//GIC初始化函数hal_gic_init(KEY1_ID,KEY1_PRIORITY);hal_gic_init(KEY2_ID,KEY2_PRIORITY);hal_gic_init(KEY3_ID,KEY3_PRIORITY);while(1){}return 0;}

4.实验现象: 

相关文章:

ARM开发(cortex-A7核中断实验)

1.实验目的&#xff1a;实现KEY1/LEY2/KE3三个按键&#xff0c;中断触发打印一句话&#xff0c;并且灯的状态取反&#xff1b; key1 ----> LED3灯状态取反&#xff1b; key2 ----> LED2灯状态取反&#xff1b; key3 ----> LED1灯状态取反&#xff1b; 2.分析框图: …...

关于融合项目点云pointpillars检测不显示三维检测框问题的解决

这个问题主要还是launch文件中出现了一些偏差。 launch文件的第26行 这里原先是0.6&#xff0c;在检测kitti的时候是0.6&#xff0c;由于kitti是64线激光雷达&#xff0c;我个人用的是16线激光雷达&#xff0c;所以把0.6降到了0.2.出现了三维检测框&#xff0c;问题解决...

spring复习:(57)PropertyOverrideConfigurer用法及工作原理

一、属性配置文件 dataSource.urljdbc:mysql://xxx.xxx.xxx.xxx/test dataSource.usernameroot dataSource.passwordxxxxxx dataSource.driverClassNamecom.mysql.jdbc.Driver #dataSource.typecom.alibaba.druid.pool.DruidDataSource二、spring配置文件 <?xml version&…...

在axios中获取文件上传进度

1.在axios 全局配置的文件中加入一个postFile 方法在上传文件时调用。 export function postFile(url, params,config) {return new Promise((resolve, reject) > {axios.post(url, params,config).then(res > {resolve(res);}).catch(err > {reject(err);})}) } 2.…...

黑马头条-kafka配置

生产者配置 NAMEDESCRIPTIONTYPEDEFAULTVALID VALUESIMPORTANCEbootstrap.servershost/port列表&#xff0c;用于初始化建立和Kafka集群的连接。列表格式为host1:port1,host2:port2,…&#xff0c;无需添加所有的集群地址&#xff0c;kafka会根据提供的地址发现其他的地址&…...

PMP P-01 Basic Knowledge

PMP基础知识...

java八股文面试[数据结构]——ArrayList和LinkedList区别

ArrayList和LinkedList的异同 二者的线程都不安全&#xff0c;相对线程安全的Vector,执行效率高。此外&#xff0c;ArrayList时实现了基于动态数组的数据结构&#xff0c;LinkedList基于链表的数据结构&#xff0c;对于随机访问get和set&#xff0c;ArrayList觉得优于LinkedLis…...

OpenCV中QR二维码的生成与识别(CIS摄像头解析)

1、QR概述 QR(Quick Response)属于二维条码的一种&#xff0c;意思是快速响应的意思。QR码不仅信息容量大、可靠性高、成本低&#xff0c;还可表示汉字及图像等多种文字信息、其保密防伪性强而且使用非常方便。更重要的是QR码这项技术是开源的&#xff0c;在移动支付、电影票、…...

常见排序集锦-C语言实现数据结构

目录 排序的概念 常见排序集锦 1.直接插入排序 2.希尔排序 3.选择排序 4.堆排序 5.冒泡排序 6.快速排序 hoare 挖坑法 前后指针法 非递归 7.归并排序 非递归 排序实现接口 算法复杂度与稳定性分析 排序的概念 排序 &#xff1a;所谓排序&#xff0c;就是使一串记录&#…...

css 实现四角边框样式

效果如图 此图只实现 左下与右下边角样式 右上与左上同理 /* 容器 */ .card-mini {position: relative; } /* 左下*/ .card-mini::before {content: ;position: absolute;left: 0;bottom: 0;width: 20px;height: 20px;border-bottom: 2px solid #253d64;border-left: 2px so…...

机器学习深度学习——自注意力和位置编码(数学推导+代码实现)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——注意力分数&#xff08;详细数学推导代码实现&#xff09; &#x1f4da;订阅专栏&#xff1a;机器学习…...

02.案列项目Demo

1.创建项目 1. 创建项目 用pycharm 选择对应的编译器&#xff0c;输入对应的文件名&#xff0c;点击创建项目。删除默认外层生成的template和DIRS 配置项&#xff1a; 2. 创建App 创建appo1的命令&#xff1a; python manage.py startapp app01 如果使用pycharm>tool>…...

PDF校对:追求文档的精准与完美

随着数字化时代的到来&#xff0c;PDF已经成为了多数机构和个人首选的文件格式&#xff0c;原因在于它的稳定性、跨平台特性以及统一的显示效果。但是&#xff0c;对于任何需要公开或正式发布的文档&#xff0c;确保其内容的准确性是至关重要的&#xff0c;这就是PDF校对显得尤…...

低代码解放生产力,助力企业高效发展

近年来&#xff0c;随着数字化转型的推进&#xff0c;企业对于软件开发的需求日益显著。然而&#xff0c;传统的软件开发模式通常需要耗费大量时间和资源&#xff0c;限制了企业的快速响应能力。为了解决这一难题&#xff0c;低代码开发平台应运而生&#xff0c;成为企业和开发…...

【前端从0开始】CSS——9、浮动

1. 浮动&#xff08;float&#xff09; 1.1 定义 float 属性定义元素向哪个方向浮动。之前这个属性应用于图像&#xff0c;使文本围绕在图像周围&#xff0c;不过在 CSS 中&#xff0c;任何元素都可以浮动。浮动元素会生成一个块级框&#xff0c;不论它本身是何种元素。 取值…...

如何在Moonriver网络上向社区代表委托投票权利

我们之前介绍了「社区代表」这一概念&#xff0c;想必大家对社区代表在治理中扮演的角色和地位有了一定的了解。 本文将介绍如何将您的投票权利委托给社区代表。请注意&#xff0c;在委托Token给社区代表这一过程中&#xff0c;并非将您的Token转移给任何人&#xff0c;而且此…...

时序预测 | MATLAB实现基于CNN-GRU卷积门控循环单元的时间序列预测-递归预测未来(多指标评价)

时序预测 | MATLAB实现基于CNN-GRU卷积门控循环单元的时间序列预测-递归预测未来(多指标评价) 目录 时序预测 | MATLAB实现基于CNN-GRU卷积门控循环单元的时间序列预测-递归预测未来(多指标评价)预测结果基本介绍程序设计参考资料 预测结果 基本介绍 MATLAB实现基于CNN-GRU卷积…...

【李群李代数】李群控制器(lie-group-controllers)介绍——控制 SO(3) 空间中的系统的比例控制器Demo...

李群控制器SO(3)测试 测试代码是一个用于控制 SO(3) 空间中的系统的比例控制器。它通过计算控制策略来使当前状态逼近期望状态。该控制器使用比例增益 kp 进行参数化&#xff0c;然后进行一系列迭代以更新系统状态&#xff0c;最终检查状态误差是否小于给定的阈值。这个控制器用…...

DP读书:鲲鹏处理器 架构与编程(六)PCI Express 总线

处理器与服务器&#xff1a;PCI Express 总线 PCI Express 总线1. PCI Express 总线的特点a. 高速差分传输b. 串行传输c. 全双工端到端连接d. 基于多通道的数据传输方式e. 基于数据包的传输 2. PCI Express 总线的组成与拓扑结构a. 根复合体b. PCI Express桥c. 功能单元 3. PCI…...

Pyqt5-开源工具分解功能(文本拖拽)

开源第四篇:功能实现之拖拽功能与配置文件。 写这个功能的初衷,是因为,每次调试我都要手动敲命令,太麻烦了,想偷个懒,所以直接给这功能加上了,顺便衍生出了另一个想法,配置文件自动填写相关数据。 先看个简单的拖拽功能: 很明显吧,还是比较便捷的。所以我们本章,就在…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...