2024.3.22 ARM
实现三个按键的中断
main.c :主函数初始化
#include "key_inc.h"
#include "uart4.h"
//封装延时函数
void delay(int ms)
{int i, j;for (i = 0; i < ms; i++){for (j = 0; j < 2000; j++);}
}
int main()
{char *s = "hello world";//串口初始化uart4_init();//按键中断的初始化all_key_init();key1_it_config();key2_it_config();key3_it_config();while (1){puts(s);delay(1000);}return 0;
}
do_irq.c :处理中断信号
#include "stm32mp1xx_gic.h"
#include "stm32mp1xx_exti.h"
#include "uart4.h"
extern void printf(const char *fmt, ...);
unsigned int i = 0;void do_irq(void)
{//获取要处理的中断的中断号unsigned int irqno = GICC->IAR & 0x3ff;switch (irqno){case 99:puts("key1_intc");//清除GICD中断排队标志GICD->ICPENDR[3] |= (0X1 << 3);//清除EXTI中断触发标志EXTI->FPR1 |= (0X1 << 9);break;case 98:puts("key3_intc");//清除GICD中断排队标志GICD->ICPENDR[3] |= (0X1 << 2);//清除EXTI中断触发标志EXTI->FPR1 |= (0X1 << 8);break;case 97:puts("key2_intc");//清除GICD中断排队标志GICD->ICPENDR[3] |= (0X1 << 1);//清除EXTI中断触发标志EXTI->FPR1 |= (0X1 << 7);break;default:break;}//清除IAR寄存器中的中断号GICC->EOIR |= irqno;
}
key_inc.c :配置key
#include "key_inc.h"void all_key_init()
{//使能GPIOF外设时钟RCC->MP_AHB4ENSETR |= (0x1 << 5);
}void key1_it_config()
{//将PF9设置为输入模式GPIOF->MODER &= (~(0x3 << 18));//设置由PF9管脚产生EXTI9事件EXTI->EXTICR3 &= (~(0XFF << 8));EXTI->EXTICR3 |= (0X05 << 8);//通过下降沿检测EXTI9事件是否产生EXTI->FTSR1 |= (0x1 << 9);//取消EXTI9中断屏蔽EXTI->C1IMR1 |= (0x1 << 9);//设置EXTI9中断全局使能GICD->ISENABLER[3] |= (0x1 << 3);//设置中断优先级GICD->IPRIORITYR[24] &= (~(0x1f << 27));//设置CPU0处理当前中断GICD->ITARGETSR[24] |= (0x1 << 24);//设置组0中断可以被转发到GICC层GICD->CTRL |= 0X1;//设置中断优先级掩码GICC->PMR |= (0x1f << 3);//设置组0中断交给指定处理器处理GICC->CTRL |= 0x1;
}
void key2_it_config()
{//将PF7设置为输入模式GPIOF->MODER &= (~(0x3 << 14));//设置由PF7管脚产生EXTI7事件EXTI->EXTICR2 &= (~(0XFF << 24));EXTI->EXTICR2 |= (0X05 << 24);//通过下降沿检测EXTI7事件是否产生EXTI->FTSR1 |= (0x1 << 7);//取消EXTI7中断屏蔽EXTI->C1IMR1 |= (0x1 << 7);//设置EXTI7中断全局使能GICD->ISENABLER[3] |= (0x1 << 1);//设置中断优先级GICD->IPRIORITYR[24] &= (~(0x1f << 11));//设置CPU0处理当前中断GICD->ITARGETSR[24] |= (0x1 << 8);//设置组0中断可以被转发到GICC层GICD->CTRL |= 0X1;//设置中断优先级掩码GICC->PMR |= (0x1f << 3);//设置组0中断交给指定处理器处理GICC->CTRL |= 0x1;
}void key3_it_config()
{//将PF8设置为输入模式GPIOF->MODER &= (~(0x3 << 16));//设置由PF8管脚产生EXTI8事件EXTI->EXTICR3 &= (~(0XFF << 0));EXTI->EXTICR3 |= (0X05 << 0);//通过下降沿检测EXTI8事件是否产生EXTI->FTSR1 |= (0x1 << 8);//取消EXTI7中断屏蔽EXTI->C1IMR1 |= (0x1 << 8);//设置EXTI7中断全局使能GICD->ISENABLER[3] |= (0x1 << 2);//设置中断优先级GICD->IPRIORITYR[24] &= (~(0x1f << 19));//设置CPU0处理当前中断GICD->ITARGETSR[24] |= (0x1 << 16);//设置组0中断可以被转发到GICC层GICD->CTRL |= 0X1;//设置中断优先级掩码GICC->PMR |= (0x1f << 3);//设置组0中断交给指定处理器处理GICC->CTRL |= 0x1;
}
key_inc.h
#ifndef __KEY_INC_H__
#define __KEY_INC_H__#include "stm32mp1xx_gic.h"
#include "stm32mp1xx_exti.h"
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.h"void all_key_init();
void key1_it_config();
void key2_it_config();
void key3_it_config();#endif
相关文章:
2024.3.22 ARM
实现三个按键的中断 main.c :主函数初始化 #include "key_inc.h" #include "uart4.h" //封装延时函数 void delay(int ms) {int i, j;for (i 0; i < ms; i){for (j 0; j < 2000; j);} } int main() {char *s "hello world"…...

【Linux】信号的处理{信号处理的时机/了解寄存器/内核态与用户态/信号操作函数}
文章目录 0.对于信号捕捉的理解1.信号处理的时机1.1 何时处理信号?1.2 内核态和用户态1.3 内核态和用户态的切换 2.了解寄存器3.信号捕捉的原理4.信号操作函数4.1sighandler_t signal(int signum, sighandler_t handler);4.2int sigaction(int signum, const struct…...

webgl浏览器渲染设置
在浏览器中程序图形化webgl渲染时,有时候发现代码没有问题,但是就是无法渲染或者渲染报错,此时可以尝试如下的设置: 通过在chrome浏览器输入chrome://flags打开扩展 设置一(webgl开发者扩展) 设…...

【国家计算机二级C语言】高分笔记
二叉树 参考 http://t.csdnimg.cn/ozVwT 数据库 SQL程序语言有四种类型,对数据库的基本操作都属于这四类,它们分别为;数据定义语言(DDL)、数据查询语言(DQL)、数据操纵语言(DML)、数据控制语言…...

Java项目:71 ssm基于ssm+vue的外卖点餐系统+vue
作者主页:源码空间codegym 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 系统功能 系统分为前台订餐和后台管理: 1.前台订餐 用户注册、用户登录、我的购物车、我的订单、商品列表 2.后台管理 商品管理&…...

Alibaba spring cloud Dubbo使用(基于Zookeeper或者基于Nacos+泛化调用完整代码一键启动)
Quick Start Dubbo!用更优雅的方式来实现RPC调用吧 - 掘金 dubbozookeeper demo 项目结构: RpcService 仅仅是提供服务的接口: public interface HelloService {String sayHello(String name); }DubboServer pom: <?xm…...

Word为图表设置图注并在图表清单中自动生成
1如果需要自动插入题注,请不要自己为文件增加新的标题样式或删除自带的标题1样式 2章节大标题最好是标题1,2,3而不要设置标题一、二、三,否则图例在自动生成时会显示 图一 -1,调整起来会非常不方便 若实在要使用大写中文标题&…...
新建maven项目中遇到的问题
#新建maven项目中遇到的问题 用的是eclipse Version: 2022-12 (4.26.0) tomcat 8.5 java 1.8 ##1、新建完之后,直接有报错,index报错 除了在build config path中加入server runtime和java sdk之外,还有在project property 中project facet中j…...
【剑指offer】24. 机器人的运动范围(java选手)
题目链接 题目链接 题目描述 地上有一个 m 行和 n列的方格,横纵坐标范围分别是 0∼m−1 和 0∼n−1。 一个机器人从坐标 (0,0) 的格子开始移动,每一次只能向左,右,上,下四个方向移动一格。 但是不能进入行坐标和列…...

CMU 10-414/714: Deep Learning Systems --hw3
实现功能 在ndarray.py文件中完成一些python array操作 我们实现的NDArray底层存储就是一个一维向量,只不过会有一些额外的属性(如shape、strides)来表明这个flat array在维度上的分布。底层运算(如加法、矩阵乘法)都…...
前端小白的学习之路(lessscss)
提示:less,sass&scss 目录 一、less 1.变量 2.嵌套规则 3.混合 4.针对属性值进行操作的函数 5.循环 6.拓展语法 二、scss&sass 1.sass 2.scss 一、less 是一个开源的、基于 CSS 的预处理器,它使得编写和维护 CSS 更加简单和高效。通…...
算法体系-15 第十五节:贪心算法(下)
一 、贪心算法的解题套路实战 贪心的算法和排序和堆有关 1.1 描述 一些项目要占用一个会议室宣讲,会议室不能同时容纳两个项目的宣讲。 给你每一个项目开始的时间和结束的时间 你来安排宣讲的日程,要求会议室进行的宣讲的场次最多。 返回最多的宣讲场次…...
2.10 模型评估的方法有哪些?优缺点
2.10 模型评估的方法有哪些?优缺点? 场景描述 在机器学习中,我们通常把样本分为训练集和测试集,训练集用于训练模型,测试集用于评估模型。在样本划分和模型验证的过程中,存在着不同的抽样方法和验证方法。…...

Linux centos7安装nginx-1.24.0并且实现自启动
1.安装之前的操作 ps -ef|grep nginx 查看是否有运行 如果有就杀掉 kill -9 pid find / -name nginx 查看nginx文件 rm -rf file /usr/local/nginx* 通通删掉删掉 yum remove nginx 限载一下服务 1.2.下载安装包 地址 nginx: download 2.减压文件 tar…...
001-Windows下PyTorch极简开发环境配置(上)
本节介绍Windows系统下配置一套基于Pytorch框架的极简深度学习开发环境。 目录 0.1 缘起 0.1 缘起 其实大概在2016就开始接触深度学习的相关知识,但一直到2018年左右,还停留在门外汉的状态太,原因很简单,感觉学习的门槛过高。…...

分布式Raft原理详解,从不同角色视角分析相关状态
分布式Raft原理详解,从不同角色视角分析相关状态 1. CAP定理2.Raft 要解决的问题3. Raft的核心逻辑3.1. Raft的核心逻辑2.1. 复制状态机2.2. 任期 Term2.3. 任期的意义:逻辑时钟2.4 选举定时器 3. Leader选举逻辑4. 从节点视角查看Leader选举4.1. Follow…...
大数据的实时计算和离线计算你理解吗?
不管是实时计算还是离线计算,都有着同样的业务目标,那就是根据业务要求把数据源计算处理成业务需要的直接可用的数据结果。 如果把数据源比作是水龙头里的水,把数据计算比作是生产纯净水的过程;那么实时计算就是用一根水管接在水龙…...
OS Package Manager
Windows Package Manager winget chocolatey Mac homebrew Linux apt-get apt snap yum 使用wget和curl拉取相关工具的shell脚本执行安装...

【滑动窗口、矩阵】算法例题
目录 三、滑动窗口 30. 长度最小的子数组 ② 31. 无重复字符的最长子串 ② 32. 串联所有单词的子串 ③ 33. 最小覆盖子串 ③ 四、矩阵 34. 有效的数独 ② 35. 螺旋矩阵 ② 36. 旋转图像 ② 37. 矩阵置零 ② 38. 生命游戏 ② 三、滑动窗口 30. 长度最小的子数组 ② 给…...
【事务】开发用到的事务,TransactionDefinition实例详解,事务的传播机制
【事务】开发中用到的事务,TransactionDefinition实例详解 一、TransactionDefinition 介绍1、隔离级别(Isolation Level):2、传播行为(Propagation Behavior):3、超时设置(Timeout …...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...

高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...

Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...

并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...