STM32MP157按键中断实验

按键配置

#include "key_it.h"
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_gic.h"
#include "stm32mp1xx_exti.h"
#include "stm32mp1xx_rcc.h"void key_it_config()
{/* RCC使能GPIOF时钟 */RCC->MP_AHB4ENSETR |= (1<<5);/* 设置PF9 PF7 PF8输入 */GPIOF->MODER &= (~(0x3 << 14));GPIOF->MODER &= (~(0x3 << 16));GPIOF->MODER &= (~(0x3 << 18));/* 设置PF9 PF7 PF8产生EXTI事件 EXTI_EXTICRx */EXTI->EXTICR2 &= ~(0xff<<24);EXTI->EXTICR2 |= (0x05<<24);EXTI->EXTICR3 &= ~(0xff);EXTI->EXTICR3 |= (0x05);EXTI->EXTICR3 &= ~(0xff<<8);EXTI->EXTICR3 |= (0x05<<8);/* 设置事件触发方式为下降沿触发EXTI_FISR1 */EXTI->FTSR1 |= (1<<7);EXTI->FTSR1 |= (1<<8);EXTI->FTSR1 |= (1<<9);/* 设置EXTI事件触发不屏蔽XITI_IMR1 */EXTI->C1IMR1 |= (1<<7);EXTI->C1IMR1 |= (1<<8);EXTI->C1IMR1 |= (1<<9);/* 使能中断能转发到特定的CPU接口层GICD_ISENABLERx */GICD->ISENABLER[3] |= (1<<3);GICD->ISENABLER[3] |= (1<<2);GICD->ISENABLER[3] |= (1<<1);/* GICD_IPPIORITYRx设置中断优先级 */GICD->IPRIORITYR[24] &= ~(0x1f<<27);GICD->IPRIORITYR[24] &= ~(0x1f<<19);GICD->IPRIORITYR[24] &= ~(0x1f<<11);/* 设置当前终端被转发到哪一个CPU处理GIC_ITARGETSRx */GICD->ITARGETSR[24] &= ~(0x03<<24);GICD->ITARGETSR[24] |= (0x01<<24);GICD->ITARGETSR[24] &= ~(0x03<<16);GICD->ITARGETSR[24] |= (0x01<<16);GICD->ITARGETSR[24] &= ~(0x03<<8);GICD->ITARGETSR[24] |= (0x01<<8);/* 使能组0转发终端GICD_CTLR */GICD->CTRL |= 0x1;/* 设置中断优先级掩码GICC_PMR */GICC->PMR |= (0x1f<<3);/* 使能CPU可以处理组0转发的终端GICC_CTLR */GICC->CTRL |= 0x1;}

中断实现

#include "stm32mp1xx_gic.h"
#include "stm32mp1xx_exti.h"
#include "beep.h"#define EXTI9_IRQ 99
#define EXTI8_IRQ 98
#define EXTI7_IRQ 97extern void printf(const char *fmt, ...);
unsigned int i = 0;
void do_irq(void) 
{/* 保存终端号 */int irqno;irqno = GICC->IAR & 0x3ff;if(irqno == EXTI9_IRQ){delay(1000);if(irqno == EXTI9_IRQ){/* KEY1中断处理 */printf("KEY1 pressed!\n\r");/* 蜂鸣器 */hal_gpio_write(GPIOB, 6, !hal_gpio_read(GPIOB, 6));/* 清除挂起中断标志位GICD_ICPENDRx */GICD->ICPENDR[3] |= (1<<3);	/* 清除终端触发标志EXTI_FRR1 */EXTI->FPR1 |= (1<<9);}}else if(irqno == EXTI8_IRQ){delay(1000);if(irqno == EXTI8_IRQ){/* KEY3中断处理 */printf("KEY3 pressed!\n\r");/* 风扇 */hal_gpio_write(GPIOE, 8, !hal_gpio_read(GPIOE, 8));/* 清除挂起中断标志位GICD_ICPENDRx */GICD->ICPENDR[3] |= (1<<2);/* 清除终端触发标志EXTI_FRR1 */EXTI->FPR1 |= (1<<8);}}else if(irqno == EXTI7_IRQ){delay(1000);if(irqno == EXTI7_IRQ){/* KEY2中断处理 */printf("KEY2 pressed!\n\r");/* LED灯 */hal_gpio_write(GPIOE, 9, !hal_gpio_read(GPIOE, 9));/* 清除挂起中断标志位GICD_ICPENDRx */GICD->ICPENDR[3] |= (1<<1);/* 清除终端触发标志EXTI_FRR1 */EXTI->FPR1 |= (1<<7);}}/* 清除处理完的中断号GICC_EOIR */GICC->EOIR = irqno;}

在这里插入图片描述

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

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

相关文章

ubuntu20.04 nerf Instant-ngp (下) 复现,自建数据集,导出mesh

参考链接 Ubuntu20.04复现instant-ngp&#xff0c;自建数据集&#xff0c;导出mesh_XINYU W的博客-CSDN博客 GitHub - NVlabs/instant-ngp: Instant neural graphics primitives: lightning fast NeRF and more youtube上的一个博主自建数据集 https://www.youtube.com/watch…

es6(二)——常用es6说明

ES6的系列文章目录 es6&#xff08;一&#xff09;——var和let和const的区别 文章目录 ES6的系列文章目录一、变量的结构赋值1.数组的结构赋值2.对象的结构赋值 二、模板字符串三、扩展运算符1.字符串的使用2.数组的使用 四、箭头函数1.普通函数的定义2.箭头函数的定义3.箭头…

uniapp app获取keystore等一系列常用数据

https://blog.csdn.net/deepdfhy/article/details/88698492 参考文章 一、获取安卓证书keystore的SHA1和SHA256值 参数上面引用链接 window r : $ cmd $ D: 进入D盘 $ keytool -genkey -alias testalias -keyalg RSA -keysize 2048 -validity 36500 -keystore 项目名称.ke…

[GXYCTF2019]BabyUpload - 文件上传+绕过(后缀文件类型文件内容.htaccess)

[GXYCTF2019]BabyUpload 解题流程 解题流程 1、上传一句话&#xff0c;提示“后缀不允许ph” 2、修改后缀为jpg&#xff0c;提示“上传类型也太露骨了吧&#xff01;” 3、修改类型为image/jpeg&#xff0c;提示“诶&#xff0c;别蒙我啊&#xff0c;这标志明显还是php啊” 4、…

【Linux 安装Kibana 及 Es 分词器安装】

一、客户端Kibana安装 Kibana是一个开源分析和可视化平台&#xff0c;旨在与Elasticsearch协同工作。参考文档 1. 下载并解压缩Kibana 下载路径 选择的版本是和 ElasticSearch 对应&#xff08;7.17.3&#xff09; 下载后上传到Linux 系统中&#xff0c;并放在 /root/ 下&a…

Linux编译FFmpeg

Linux编译FFmpeg 1. 下载FFmpeg源码 FFmpeg源码下载地址&#xff1a;http://ffmpeg.org/download.html 在下面选择版本 2. 解压并创建生成目录 tar xvf ffmpeg-snapshot.tar.bz2 // 解压下载的FFmpeg源码 makedir /root/ffmpeg // 创建生成目录3. 编译FFmpeg 进入FF…

Transformer模型 | 基于Spatial-Temporal Transformer的城市交通流预测

交通预测已成为智能交通系统的核心组成部分。然而,由于交通流的高度非线性特征和动态的时空依赖性,及时准确的交通预测,尤其是长时交通流预测仍然是一个开放性的挑战。在这篇文章中,作者提出了一种新的时空Transformer网络(STTNs)模型,该模型联合利用了动态有向的空间依…

centos安装redis教程

centos安装redis教程 安装的版本为centos7.9下的redis3.2.100版本 1.下载地址 Index of /releases/ 使用xftp将redis传上去。 2.解压 tar -zxvf 文件名.tar.gz 3.安装 首先&#xff0c;确保系统已经安装了GCC编译器和make工具。可以使用以下命令进行安装&#xff1a; sudo y…

配置XP虚拟机和Win 10宿主机互相ping通

文章目录 一、关闭虚机和宿主机的防火墙1、关闭虚拟机的防火墙1.1方式一1.2方式二 2、关闭宿主机的防火墙 二、设置XP和宿主机VMnet8的IP地址、网关和DNS1、获取VMWare的虚拟网络配置信息2、设置XP的VMnet8的IP地址、网关和DNS3、设置宿主机VMnet8的IP地址、网关和DNS 三、获取…

一款新的webshell管理工具

Alien 项目简介 语言 C# .NET Framework V4.8 功能 File Manager &#xff08;可显示图片&#xff0c; 可SearchFile&#xff09; 虚拟终端 数据库 注册表 监控 截图 系统信息 项目描述 一句话木马 一句话木马是在渗透测试中用来控制服务器的工具 强大之处在于木…

使用telnet+nc工具测试网络连通性

背景&#xff1a; 正常情况下使用ping命令即可测试网络的连通性&#xff0c;但如果做了内网穿透(端口转发)&#xff0c;则需要指定网络端口&#xff0c;此时ping命令无法实现ipport的连通性测试。则可以使用telnetnc测试网络连通性。 环境&#xff1a; 两台服务器都是按照的De…

[Machine learning][Part4] 多维矩阵下的梯度下降线性预测模型的实现

目录 模型初始化信息&#xff1a; 模型实现&#xff1a; 多变量损失函数&#xff1a; 多变量梯度下降实现&#xff1a; 多变量梯度实现&#xff1a; 多变量梯度下降实现&#xff1a; 之前部分实现的梯度下降线性预测模型中的training example只有一个特征属性&#xff1a…

hive3.1核心源码思路

系列文章目录 大数据主要组件核心源码解析 文章目录 系列文章目录大数据主要组件核心源码解析 前言一、HQL转化为MR 核心思路二、核心代码1. 入口类&#xff0c;生命线2. 编译代码3. 执行代码 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 对大…

LeetCode-144-二叉树的前序遍历

题目描述&#xff1a; 题目链接&#xff1a;LeetCode-144-二叉树的前序遍历 递归法 解题思路&#xff1a; 方法一&#xff1a;递归。 要先清楚前序遍历的顺序&#xff1a;先根节点&#xff0c;再左子树&#xff0c;再右子树。 然后是递归三部曲&#xff1a; 确定递归函数的参数…

C# .net创建一个MVC框架工程

二、C# .net创建一个MVC框架工程 1.步骤 首先打开VS &#xff0c;然后点击创建新项目 在三个选项框中输入我们需要的项目条件 最后一步创建完毕 创建会在资源解决方案生成如图&#xff1a;

FreeRTOS学习笔记——四、任务的定义与任务切换的实现

FreeRTOS学习笔记——四、任务的定义与任务切换的实现 0 前言1 什么是任务2 创建任务2.1 定义任务栈2.2 定义任务函数2.3 定义任务控制块2.4 实现任务创建函数2.4.1 任务创建函数 —— xTaskCreateStatic()函数2.4.2 创建新任务——prvInitialiseNewTask()函数2.4.3 初始化任务…

基于Cucumber的行为驱动开发(BDD)实例

本篇介绍 Cucumber 的基本使用&#xff0c; 因为Cucumber是BDD的工具&#xff0c; 所以首先需要弄清楚什么是BDD&#xff0c;而在介绍BDD之前&#xff0c;先看看常见的软件开发方法。 常见的软件开发方法 面向过程开发&#xff08;Procedural Development&#xff09;&#x…

相交链表Java

给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 nu11。 以下有两种解决方法: 一种是用Map,利用其key值唯一的方法去判断(也可以使用set,set在add时,已存在的元素会返回false,不存在的返回…

Compose 编译器版本和Kotlin版本对应关系

使用了最新的kotlin版本&#xff0c;compose报错&#xff0c;不兼容&#xff0c;在这里记录一下版本对应关系 值得注意的是Compose Kotlin 编译器扩展 (androidx.compose.compiler) 未关联到 Compose 库版本。相反&#xff0c;它会关联到 Kotlin 编译器插件的版本&#xff0c;…

并不止于表面理论和简单示例——《Python数据科学项目实战》

Python 现在可以说是运用最广泛的编程语言之一&#xff0c;使用 Python 的人不只局限在计算机相关专业的从业者,很多来自金融领域、医疗领域以及其他我们无法想象的领域的人,每天都在使用 Python处理各种数据、使用机器学习进行预测以及完成各种有趣的工作。 长久以来&#xff…