arm (exti中断)
src/key_it.c
1 #include "key_it.h"2 3 //按键1中断配置4 void key1_config()5 {6 //RCC章节7 //1:使能gpio f8 RCC->MP_AHB4ENSETR |= (0x1<<5);9 //因为exti和gic属于芯片内部 所以无需使能10 11 //GPIO章节12 //1:将key1对应的pf9引脚模式设置为输入13 RCC->MODER &= (~(0x3<<18));14 15 //EXTI章节16 //1:设置PF9生成exti9事件17 //EXTI_EXTICR3:外部中断选择寄存器,选择和哪一个EXTI编号进行连接18 //EXTI编号 / 4 = 商...余数 9/4=2...119 //商+1:表示操作哪一个寄存器 编号3寄存器20 //余数*8:操作寄存器8位中的最低位 821 //每8位管理一个寄存器编号,所以长度为8位->[15:8]22 //pf9对应值为0x05 [15:8]->0x0523 EXTI->EXTICR3 &= (~(0xFF<<8));24 EXTI->EXTICR3 |= (0x05<<8);25 26 //2:设置下降沿检测EXTI9事件27 //EXTI_FTSR1:下降沿事件选择寄存器28 //设置EXTI编号为下降沿触发29 //每一位检测一个事件 写1使能30 EXTI->FTSR1 |= (0x1<<9);31 32 //3:取消exti的事件屏蔽33 //EXTI_IMR1:中断屏蔽寄存器 设置EXTI层中断是否屏蔽34 //设置1不屏蔽35 EXTI->C1IMR1 |= (0x1<<9);36 37 //4:EXTI_FPR1:下降沿挂起寄存器 清除EXTI层中断挂起标志位38 //置1清除39 //EXTI->FPR1 |= (0x1<<9);40 41 //GIC章节42 //GICD_CTLR:设置GICD层组0使能43 GICD->cTRL |= 0x1;44 45 //GICD_ISENABLERx(0 ~ 8):中断设置使能寄存器46 //设置对应的中断号使能47 //GIC层一共管理288个中断号48 //一个寄存器32位,每一位管理一个中断号,所以一个寄存器最多管理32个中断号49 //288 / 32 = 9 个中断设置使能寄存器GICD_ISENABLERx(0 ~ 8)50 //根据中断号,可以直接计算出操作哪一个寄存器,以及寄存器的位数51 //中断号 / 32 = 商........余数 99/32=3...352 //商:表示操作哪一个寄存器 3号寄存器53 //余数:操作寄存器位数 54 //KEY1==>PF9==>EXTI9编号=>事件9=>99中断号=99/32=3...3=>GICD_ISENABLER3[3]=155 GICD->ISENABLER[3] |= (0x1<<3);56 57 //GICD_IPRIORITYRx(0 ~ 71):中断优先级寄存器58 //设置GICD层中99号中断优先级59 //GIC层一共管理288个中断号(16个PPI,16个SGI,256个SPI)60 //寄存器32位,每八位管理一个中断号,所以一个寄存器最多管理4个中断号61 //288/4=72个寄存器62 //中断号 / 4 = 商........余数 99/4=24...363 //商:表示操作哪一个寄存器 第24个寄存器64 //余数*8+3:操作寄存器位数中五位中最低位 27 [31,27](8位空三位)65 GICD->IPRIORITYR[24] &= (~(0x1F<<27));//设置为0 数值越小表示优先级越高66 67 //GICD_ITARGETSRx(0 ~ 71):中断目标分配寄存器 设置GICD层中断分配给哪一个cpu68 //288个中断号69 //寄存器32位,每八位管理一个中断号,所以一个寄存器最多管理4个中断号70 //288/4=72 个中断优先级寄存器GICD_ITARGETSRx(0 ~ 71)71 //中断号 / 4 = 商........余数 99/4=26...372 //商:表示操作哪一个寄存器 2673 //余数*8:操作寄存器位数中五位中最低位 24 [25,24] 6位置空74 GICD->ITARGETSR[26] &= (~(0x3<<24));75 GICD->ITARGETSR[26] |= (0x1<<24); // 0b01 =====> 分配给cpu076 77 //GICD_ICPENDRx(0 ~ 8):清除GICD层中断挂起标志位78 //288个中断号,寄存器32位每一位管理一个中断号,一个寄存器最多管理32个中断号79 //288 / 32 = 980 //中断号 / 32 = 商........余数 99/32=3...381 //商:表示操作哪一个寄存器 382 //余数:操作寄存器位数 383 //GICD->ICPENDR[3] |= (0x1<<3);84 85 //GICC_CTLR:设置GICC层组0使能86 //GICC_CTLR[0] = 1 =======> 设置GICC层组0使能87 GICC->CTLR |= 0x1;88 89 //GICC_PMR:GICC层中断优先级屏蔽寄存器90 //GICC_PMR[7:3] = 设置优先级值91 //1)GICD层的优先级需要比GICC层优先级高92 // 2)数值越小表示优先级越高93 GICC->PMR |= (0x1F<<3);94 }
~
include/key_it.h
1 #ifndef wwe2 #define wwe3 4 #include "stm32mp1xx_gpio.h"5 #include "stm32mp1xx_rcc.h"6 #include "stm32mp1xx_exti.h"7 #include "stm32mp1xx_gic.h"8 9 void key1_config();10 void key2_config();11 void key3_config();12 13 #endif
do.c
1 #include "key_it.h"2 //中断处理函数3 extern void printf(const char *fmt,...);4 void do_irp(void)5 {6 //先获取中断号7 //GICC_IAR:获取中断号的值 将GICC_IAR[9:0]的值读出来8 unsigned int irpno=(GICC->IAR &= (~(0x3FF)));9 switch(irpno)10 {11 case 99://key1中断12 //中断处理13 printf("key1触发\n");14 //清除gicd中的中断排队标志15 //GICD_ICPENDRx(0 ~ 8):清除GICD层中断挂起标志位16 //288个中断号,寄存器32位每一位管理一个中断号,一个寄存器最多管理32个中断号17 //288 / 32 = 918 //中断号 / 32 = 商........余数 99/32=3...319 //商:表示操作哪一个寄存器 320 //余数:操作寄存器位数 321 GICD->ICPENDR[3] |= (0x1<<3);22 //清除exit中的事件挂起标志23 //EXTI_FPR1:下降沿挂起寄存器 清除EXTI层中断挂起标志位24 //置1清除25 EXTI->FPR1 |= (0x1<<9);26 break;27 28 }29 //清除iar保存的中断号30 //GICC_EOIR:GICC end of interrupt register 寄存器作用:清除中断号31 //将获取到的中断号(IAR)进行清除32 GICC->EOIR = irqno;33 }
main.c
1 #include "key_it.h"2 extern void printf(const char *fmt,...);3 4 //封装延时函数5 void delay(int ms)6 {7 int i,j;8 for(i=0,i<ms,i++)9 {10 for(j=0,j<2000,j++)11 {}12 }13 }14 int main()15 { 16 key1_config();17 while(1)18 {19 printf("main.c\n");20 delay(1000);21 22 23 }24 return 0;25 }
相关文章:
arm (exti中断)
src/key_it.c 1 #include "key_it.h"2 3 //按键1中断配置4 void key1_config()5 {6 //RCC章节7 //1:使能gpio f8 RCC->MP_AHB4ENSETR | (0x1<<5);9 //因为exti和gic属于芯片内部 所以无需使能10 11 //GPIO章节12 //1:将…...
触摸屏虚拟键盘组件 jQuery Virtual Keyboard使用 自定义键盘
如何在触摸设备上为输入域添加虚拟键盘? 一个插件可以解决这个问题,关键还支持高度自定义(git地址): GitHub - Mottie/Keyboard: Virtual Keyboard using jQuery ~ 官网地址:Virtual Keyboard 使用步骤&…...
面试题07-09
知道了 InnoDB 的索引实现后,就很容易明白为什么不建议使用过长的字段作为主键,因为所有辅助索引都引用主索引,过长的主索引会令辅助索引变得过大。再例如,用非单调的字段作为主键在 InnoDB 中不是个好主意,因为 InnoD…...
MySQL之binlog日志
原文链接:https://zhuanlan.zhihu.com/p/697078870 目录: binlog 是什么binlog 配置和查看binlog 的类型binlog 如何恢复数据binlog 是逻辑日志还是物理日志binlog 作用 注意:以下所有的操作都在 MySQL 8.0 版本实现。 1、binlog 是什么 …...
【大数据】什么是数据湖?一文揭示数据湖的本质
很多人跟我一样,对于数据湖充满好奇,也许还读了不少数据湖文章,但无论别人怎么说,你还是会觉得难以把握数据湖的本质。 有些人会望文生义说,数据湖嘛,就是什么东西都可以往里面扔,特别是对非结构…...
CSS【详解】文本相关样式(含 font 系列,文本排版,文本装饰,分散对齐,渐变色文本等)
文本风格 font-style font-style:italic 值描述normal默认值。浏览器显示一个标准的字体样式。italic加载对应字体的斜体字体文件,若找不到斜体字体文件,则进行物理上的倾斜。 标签默认font-style:italicoblique浏览器会显示一个倾斜的字体样式。 文本粗…...
加油卡APP系统开发,优惠加油收益
目前,汽车已经成为了不可或缺的出行工具,汽车加油更是成为了家家户户要做的事。不过随着油价的波动,车主急需能够进行优惠加油的渠道,因此,加油卡APP成为了大众汽车加油新的选择方式,用户在下载APP后即可享…...
el-scrollbar实现自动滚动到底部(AI聊天)
目录 项目背景 实现步骤 实现代码 完整示例代码 项目背景 chatGPT聊天消息展示滚动面板,每次用户输入提问内容或者ai进行流式回答时需要不断的滚动到底部确保展示最新的消息。 实现步骤 采用element ui 的el-scrollbar作为聊天消息展示组件。 通过操作dom来实…...
开源去除背景的项目:rembg 安装和部署
下载colne项目代码 git clone https://github.com/danielgatis/rembg.git安装依赖 pip install rembg pip install click pip install filetype pip install watchdog pip install aiohttp pip install gradio pip install asyncer测试使用 rembg i 照片.jpg zhaopian.jpg照…...
Docker 使用基础(1)—镜像仓库
🎬慕斯主页:修仙—别有洞天 ♈️今日夜电波:秒針を噛む—ずっと真夜中でいいのに。 0:34━━━━━━️💟──────── 4:20 🔄 ◀️ ⏸ …...
Git详细安装和使用教程
文章目录 准备工作-gitee注册认识及安装GitGit配置用户信息本地初始化Git仓库记录每次更新到仓库查看及切换历史版本Git忽略文件和查看文件状态Git分支-查看及切换Git分支-创建分支Git分支-合并及删除分支Git分支-命令补充Git分支-冲突需求: 准备工作-gitee注册 传送门: gite…...
LeetCode题练习与总结:反转字符串中的单词--151
一、题目描述 给你一个字符串 s ,请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 注意:输入字符串 s中可能会存在…...
2.pwn的linux基础(计算机内部数据结构存储形式)
linux基础 保护层级: 分为四个ring0-ring3 一般来说就两个,0和3 0为内核 3为用户 权限: 用户分为多个组 文件和目录等等的权限一般都是三个,即可读可写可执行。 读:R,写:W,执行:X 赋予一个可执行文件执行权限就是chmod x file…...
67.SAP FICO-凭证类型学习
目录 SAP凭证类型 凭证类型的作用 - OBA7 SAP默认的凭证类型更改 FI相应事务代码默认凭证类型 - OBU1 对FB50、60、70默认凭证类型的更改 - OBZO 后勤货物移动默认凭证类型 - OMBA 发货凭证类型 收货凭证类型 自动移动凭证类型 存货盘点凭证类型 发票默认的凭证类…...
井字游戏00
题目链接 井字游戏 题目描述 注意点 1 < board.length board[i].length < 100输入一定遵循井字棋规则 解答思路 如果某一方想要获胜,则其需要占满某一行或某一列或对角线,所以只需要根据第一行和第一列判断是否填充完某一行或某一列或对角线…...
GEE代码实例教程详解:地表温度与土地覆盖类型分析
简介 在本篇博客中,我们将使用Google Earth Engine (GEE) 对地表温度数据进行分析,并探究不同土地覆盖类型(特别是水体和城市区域)的地表温度变化。通过MODIS数据集,我们可以监测2001年至2024年间的数据。 背景知识 …...
RK3568------Openharmony 4.0-Release 浏览器部署安装
RK3568------Openharmony 4.0-Release 浏览器部署安装 文章目录 RK3568------Openharmony 4.0-Release 浏览器部署安装前言一、DevEco Studio开发工具安装与使用二、浏览器(Browser)样例代码编译三 、浏览器(Browser)部署四、遇到的问题五、效果展示总结 前言 上一篇文章讲解了…...
【kafka】可视化工具cmak(原kafka-manager)安装问题解决
众所周知(反正不管你知不知道),kafka-maneger更名了,现在叫cmak!原因是什么呢?据不可靠小道信息说,原kafka-manager这个名字涉及到kafka商标使用问题,应该是被律师函警告了ÿ…...
【转载】目标检测mAP的含义
转载自三叔家的猫 https://blog.csdn.net/qq_39056987 https://blog.csdn.net/qq_39056987/article/details/104348493 <div id"content_views" class"markdown_views prism-atom-one-light"><svg xmlns"http://www.w3.org/2000/svg" s…...
智慧校园行政办公-红头文件功能概述
在智慧校园的行政办公系统中,红头文件的管理功能是一项重要的组成部分,它极大地提升了文件处理的效率与规范性。该功能围绕文件的创建、审批、归档等关键环节,进行了全面的数字化改造。 首先,系统内置了多种标准化的红头文件模板&…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)
一、OpenBCI_GUI 项目概述 (一)项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台,其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言,首次接触 OpenBCI 设备时,往…...
在树莓派上添加音频输入设备的几种方法
在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...
Python 高效图像帧提取与视频编码:实战指南
Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
用递归算法解锁「子集」问题 —— LeetCode 78题解析
文章目录 一、题目介绍二、递归思路详解:从决策树开始理解三、解法一:二叉决策树 DFS四、解法二:组合式回溯写法(推荐)五、解法对比 递归算法是编程中一种非常强大且常见的思想,它能够优雅地解决很多复杂的…...
