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 …...
13.3补充-层次风格-SOA
一、层次架构风格 00:00 1. CS架构 00:45 1)两层C/S架构 基本结构:由表示层(客户端)和数据层(服务器)组成,两层都具备业务处理功能工作流程: 客户端接收用户…...
Golang怎么实现SSE服务端推送事件_Golang如何用Server-Sent Events实时推送数据【教程】
Go 的 http.ResponseWriter 能多次写入,但需禁用缓冲、手动刷新并防止中间件断连;SSE 需设正确 header、定时心跳、严格格式输出、绕过干扰中间件,并配置反向代理。Go 的 http.ResponseWriter 为什么不能直接写多次?因为 SSE 要求…...
开源大模型实战:StructBERT中文句子相似度工具在舆情监测中的关键词语义泛化应用
开源大模型实战:StructBERT中文句子相似度工具在舆情监测中的关键词语义泛化应用 1. 引言 你有没有遇到过这样的问题?在社交媒体上,用户对同一个产品功能,会用完全不同的词语来表达。比如,有人说“手机电池很耐用”&…...
SecGPT-14B环境部署:双4090显卡下tensor_parallel_size=2稳定运行配置
SecGPT-14B环境部署:双4090显卡下tensor_parallel_size2稳定运行配置 1. 环境准备与快速部署 在开始部署SecGPT-14B之前,我们需要确保硬件环境满足要求。本教程基于双NVIDIA RTX 4090显卡(24GB显存x2)配置,采用tenso…...
Graphormer效果展示:金属配合物氧化还原电位预测与循环伏安图拟合
Graphormer效果展示:金属配合物氧化还原电位预测与循环伏安图拟合 1. 模型概述 Graphormer是微软研究院开发的基于纯Transformer架构的图神经网络模型,专门为分子图(原子-键结构)的全局结构建模与属性预测而设计。与传统的图神经…...
Zig : 关于@Vector,slice,array,arraylist实例
最近在看Zig,是一个有意思的语言。以一个字符串容器为例,来尝试了解一下Zig和其它语言有什么不同。 一、代码 const std import("std"); const print std.debug.print; pub fn main() !void {try print_arraylist();_ print_array();_ pri…...
探索信息获取新维度:突破信息茧房的智能工具实践指南
探索信息获取新维度:突破信息茧房的智能工具实践指南 你是否曾在海量信息中迷失方向?当打开浏览器面对无数标签页却找不到真正需要的内容时,当花费数小时筛选资料却发现质量参差不齐时,当重要信息被层层付费壁垒阻隔时——这种普遍…...
如果AI已经会了,我们为什么还要学?
学习从来不是为了记忆知识,而是为了建立判断力。AI 时代,记忆的价值在降,理解的价值在涨。这个问题本身藏着一个假设:学习的目的是"掌握知识"。 如果这个假设成立,那确实,AI 已经把你能背的都背完…...
Openblocks部署教程:快速构建企业内部应用
👉 推荐使用 莱卡云服务器 搭建 Openblocks 低代码平台,能够提供稳定的运行环境与良好的访问体验,适合企业内部系统长期部署与扩展。一、什么是 Openblocks?Openblocks 是一个开源低代码平台,旨在帮助开发者通过可视化…...
《Nature》:单细胞时空组学解析人类母胎界面
母胎界面是母体与胎儿细胞镶嵌共存的关键区域,其细胞、分子和空间细胞组成结构尚未完全明确。近日,《Nature》期刊发表了一项题为“Single-cell spatiotemporal dissection of the human maternal–fetal interface”的论文。该研究整合了配对的snRNA-se…...
