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

ARM开发,stm32mp157a-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开发,stm32mp157a-A7核中断实验(实现按键中断功能)

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

kafka常用命名

kafka服务启动 $KAFKA_HOME/bin/kafka-server-start.sh -daemon config/server.properties 创建Topic $KAFKA_HOME/bin/kafka-topics.sh --create --topic test0--zookeeper 127.0.0.1:2181 --config max.message.bytes12800000 --config flush.messages1 --partitions 5 …...

华为云开发工具CodeArts IDE for C/C++ 开发使用指南

简介 CodeArts IDE是一个集成开发环境&#xff08;IDE&#xff09;&#xff0c;它提供了开发语言和调试服务。本文主要介绍CodeArts IDE for C/C的基本功能。 1.下载安装 CodeArts IDE for C/C 已开放公测&#xff0c;下载获取免费体验 2.新建C/C工程 CodeArts IDE for C/…...

如何选择最适合你的SOLIDWORKS版本 硕迪科技

SOLIDWORKS是一款广泛应用于工程设计领域的三维计算机辅助设计&#xff08;CAD&#xff09;软件&#xff0c;因其强大的功能和易学易用的界面而备受工程师们的青睐。面对众多的SOLIDWORKS版本&#xff0c;比如SW专业版、白金版&#xff0c;租赁订阅版&#xff0c;以及solidwork…...

通过双层负载均衡实现HTTPS代理的高并发处理和容错能力

在互联网应用中&#xff0c;HTTPS代理服务器是承担用户请求的重要角色。当网站面临高并发请求时&#xff0c;单一的服务器可能无法满足需求&#xff0c;会导致性能下降和容错能力不足。为了解决这个问题&#xff0c;我们可以通过双层负载均衡技术来实现高并发处理和容错能力的提…...

Redis 整合中 Redisson 的使用

大家好 , 我是苏麟 , 今天带来 Redisson 使用 . 官方文档 : GitHub - redisson/redisson: Redisson - Easy Redis Java client with features of In-Memory Data Grid. Sync/Async/RxJava/Reactive API. Over 50 Redis based Java objects and services: Set, Multimap, Sorte…...

数据结构(5)

堆 堆可以看作一颗完全二叉树的数组对象。 特性&#xff1a; 1.堆是完全二叉树&#xff0c;除了树最后一层不需要满&#xff0c;其余层次都需要满&#xff0c;如果最后一层不是满的&#xff0c;那么要求左满右不满 2.通常使用数组实现&#xff0c;将二叉树结点依次放入数组中…...

R语言实现网状Meta分析(1)

#R语言实现网状Meta library(gemtc) help(package"gemtc") data<-gemtc::smoking #注意按照实例格式编写数据 net<-mtc.network(data$data.ab) #网状图 plot(net,mode"circle",displaylabelsT,boxed.labelF) summary(net) #网状model model<-mtc…...

Reactor 第十篇 定制一个生产的WebClient

1 为什么要用 WebClient 刚开始尝试使用 Spring WebFlux 的时候&#xff0c;很多人都会使用 Mono.fromFuture() 将异步请求转成 Mono 对象&#xff0c;或者 Mono.fromSupplier() 将请求转成 MOno 对象&#xff0c;这两种方式在响应式编程中都是不建议的&#xff0c;都会阻塞当…...

桃子叶片病害识别(Python代码,pyTorch框架,深度卷积网络模型,很容易替换为其它模型,带有GUI识别界面)

1.分为三类 健康的桃子叶片 &#xff0c;251张 桃疮痂病一般&#xff0c;857张 桃疮痂病严重&#xff0c;770 张 2. GUI界面识别效果和predict.py识别效果如视频所示桃子叶片病害识别&#xff08;Python代码&#xff0c;pyTorch框架&#xff0c;深度卷积网络模型&#xff0…...

matlab使用教程(21)—求函数最值

1. 求函数最优值 1.1求一元函数的最小值 如果给定了一个一元数学函数&#xff0c;可以使用 fminbnd 函数求该函数在给定区间中的局部最小值。例如&#xff0c;请考虑 MATLAB 提供的 humps.m 函数。下图显示了 humps 的图。 x -1:.01:2; y humps(x); plot(x,y) xlabel(x)…...

Redis中 为什么Lua脚本可以保证原子性?

Redis中 为什么Lua脚本可以保证原子性&#xff1f;...

tda4 videnc-test-app: CONTINUOUS and STEPWISE FRAMEINTERVALS not supported

/* videnc-test-app */ https://git.ti.com/cgit/jacinto7_multimedia/ git clone https://git.ti.com/git/jacinto7_multimedia/videnc-test-app.git // 编译 ./autogen.sh ./configure --enable-maintainer-mode --buildi386-linux --hostaarch64-none-linux CC/home/share…...

[已解决] libGL error: MESA-LOADER: failed to open swrast

在新的服务器中配置好虚拟环境后&#xff0c;利用已有的预训练模型test后&#xff0c;可视化时遇到&#xff1a; libGL error: MESA-LOADER: failed to open swrast: /usr/lib/dri/swrast_dri.so: cannot open shared object file: No such file or directory (search paths /u…...

JVM及垃圾回收机制

文章目录 1、JVM组成&#xff1f;各部分作用&#xff1f;1.1 类加载器&#xff08;Class Loaders&#xff09;1.2 运行时数据区&#xff08;Runtime Data Area&#xff09;1.3 执行引擎&#xff08;Execution Engine&#xff09;1.4 本地方法接口&#xff08;Native Interface&…...

windows11不允许安装winpcap4.1.3

问题&#xff1a;下载安装包后在安装时显示与电脑系统不兼容&#xff0c;不能安装。 原因&#xff1a;winpcap是一个用于Windows操作系统的网络抓包库&#xff0c;有一些安全漏洞&#xff0c;存在被黑客攻击的风险。Windows11为了加强系统安全而禁用了这个库&#xff0c;因此不…...

matlab使用教程(23)—优化函数的参数

本博客向您介绍如何存储或访问向 MATLAB 复合函数&#xff08;如 fzero 或 integral&#xff09;传递的数学函数的额外参数。 MATLAB 复合函数基于某个值范围计算数学表达式。这些函数之所以称为复合函数是因为它们是接受函数句柄&#xff08;函数的指针&#xff09;作为输入…...

基于“互联网+ 服务供应链”的汽车道路救援系统对策分析

1。 建立“互联网服务供应链”背景下汽车道路救援系统 基于互联网的汽车道路救援&#xff0c;两级服务供应链结构是由服务提供商、服务 集成商和客户组成。“互联网服务供应链”背景下汽车道路救援系统组成&#xff0c; 它是一种 B2B2C 的形式&#xff0c;与前述传统汽车道路…...

浅谈泛在电力物联网在电力设备状态在线监测中的应用

安科瑞 华楠 摘要&#xff1a;随着信息化水平的不断发展&#xff0c;泛在电力物联网的建设提上日程&#xff0c;这对提升变电站电力设备在线监测水平&#xff0c;推动智能电网发展具有重要的指导意义。对基于物联网的电力设备状态监测系统进行了研究&#xff0c;概括了泛在电力…...

低通滤波器和高通滤波器

应用于图像低通滤波器和高通滤波器的实现 需要用到傅里叶变换 #include <opencv2/opencv.hpp> #include <Eigen> #include <iostream> #include <vector> #include <cmath> #include <complex>#define M_PI 3.14159265358979323846…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

Unity VR/MR开发-VR开发与传统3D开发的差异

视频讲解链接&#xff1a;【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...

大模型——基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程

基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程 下载安装Docker Docker官网:https://www.docker.com/ 自定义Docker安装路径 Docker默认安装在C盘,大小大概2.9G,做这行最忌讳的就是安装软件全装C盘,所以我调整了下安装路径。 新建安装目录:E:\MyS…...

起重机起升机构的安全装置有哪些?

起重机起升机构的安全装置是保障吊装作业安全的关键部件&#xff0c;主要用于防止超载、失控、断绳等危险情况。以下是常见的安全装置及其功能和原理&#xff1a; 一、超载保护装置&#xff08;核心安全装置&#xff09; 1. 起重量限制器 功能&#xff1a;实时监测起升载荷&a…...

【Qt】控件 QWidget

控件 QWidget 一. 控件概述二. QWidget 的核心属性可用状态&#xff1a;enabled几何&#xff1a;geometrywindows frame 窗口框架的影响 窗口标题&#xff1a;windowTitle窗口图标&#xff1a;windowIconqrc 机制 窗口不透明度&#xff1a;windowOpacity光标&#xff1a;cursor…...

基于谷歌ADK的 智能产品推荐系统(2): 模块功能详解

在我的上一篇博客&#xff1a;基于谷歌ADK的 智能产品推荐系统(1): 功能简介-CSDN博客 中我们介绍了个性化购物 Agent 项目&#xff0c;该项目展示了一个强大的框架&#xff0c;旨在模拟和实现在线购物环境中的智能导购。它不仅仅是一个简单的聊天机器人&#xff0c;更是一个集…...

【大厂机试题解法笔记】矩阵匹配

题目 从一个 N * M&#xff08;N ≤ M&#xff09;的矩阵中选出 N 个数&#xff0c;任意两个数字不能在同一行或同一列&#xff0c;求选出来的 N 个数中第 K 大的数字的最小值是多少。 输入描述 输入矩阵要求&#xff1a;1 ≤ K ≤ N ≤ M ≤ 150 输入格式 N M K N*M矩阵 输…...