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…...
智慧校园行政办公-红头文件功能概述
在智慧校园的行政办公系统中,红头文件的管理功能是一项重要的组成部分,它极大地提升了文件处理的效率与规范性。该功能围绕文件的创建、审批、归档等关键环节,进行了全面的数字化改造。 首先,系统内置了多种标准化的红头文件模板&…...
BepInEx跨平台部署完全指南:从环境配置到性能优化
BepInEx跨平台部署完全指南:从环境配置到性能优化 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx 部署挑战自测表 在开始部署前,请先回答以下问题…...
小程序毕业设计基于微信小程序的校园跑腿小程序
前言 在校园生活节奏紧凑、同学们事务繁忙的当下,Spring Boot 基于微信小程序的校园跑腿小程序应运而生,为师生们提供了便捷高效的代劳服务,让校园生活更加从容有序。借助 Spring Boot 强大的后端支撑以及微信小程序无需安装、触手可及的优势…...
技术判断力之AI三问
回答老板关于是否投资AI创新项目的三个问题当下AI热度居高不下,企业该如何抉择?是大举投入布局,还是保持观望?我们借以下三个问题来展开思考。一、AI当下处在什么阶段?属于谁的机会?AI技术扩散曲线…...
OpenClaw多模型切换:GLM-4.7-Flash与Qwen混合使用指南
OpenClaw多模型切换:GLM-4.7-Flash与Qwen混合使用指南 1. 为什么需要多模型切换? 去年我在尝试用OpenClaw自动化处理技术文档时,发现单一模型很难满足所有需求。有些任务需要快速响应(如简单问答),有些则…...
春联生成模型-中文-base行业落地:新能源车企‘碳中和’‘智驾’等科技春联生成
春联生成模型-中文-base行业落地:新能源车企碳中和智驾等科技春联生成 1. 引言:当传统春联遇上现代科技 春节贴春联是千百年来的传统习俗,但传统的"福禄寿喜"已经难以完全表达现代企业的科技内涵。特别是新能源车企,既…...
低成本硬件在环方案:不用NI/dSPACE如何实现Simulink+Carsim实时仿真
低成本硬件在环方案:不用NI/dSPACE如何实现SimulinkCarsim实时仿真 在汽车电子和自动驾驶研发领域,硬件在环(HIL)测试是验证控制算法可靠性的关键环节。传统方案依赖NI或dSPACE等昂贵设备,动辄数十万的投入让中小团队望…...
OpenClaw跨平台对比:nanobot在Mac/Win/Linux的表现差异
OpenClaw跨平台对比:nanobot在Mac/Win/Linux的表现差异 1. 测试背景与实验设计 去年夏天我开始尝试用OpenClaw搭建个人自动化工作流时,发现不同操作系统下的表现差异远超预期。这次我选择了基于Qwen3-4B模型的nanobot镜像,在MacBook Pro M1…...
Comsol 仿真纳米孔超表面的手性响应:探索微观世界的光学奥秘
comsol仿真纳米孔超表面的手性响应在光学领域,超表面以其独特的亚波长结构展现出对光的卓越操控能力,而手性超表面更是其中的璀璨明珠,能够对不同旋向的圆偏振光产生特异响应。今天咱们就来聊聊如何用 Comsol 对纳米孔超表面的手性响应进行仿…...
从二极管到MOS管:工程师实测对比三种防反接电路的效率与成本(含数据)
从二极管到MOS管:三种防反接电路的全维度工程评估手册 当你的电路板因为电源反接冒出一缕青烟时,那种混合着焦味和绝望的体验,相信每个硬件工程师都记忆犹新。防反接电路看似简单,却直接影响着产品的可靠性、成本和能效表现。本文…...
绕过RK3588的RGA坑:手把手教你修改YOLOv8分割模型部署代码,用CPU预处理替代硬件加速
RK3588部署YOLOv8分割模型的稳定化实践:从RGA报错到CPU预处理方案优化 当你在RK3588开发板上部署YOLOv8分割模型时,是否遇到过这样的场景:模型转换和交叉编译一切顺利,却在运行时突然弹出"Failed to call RockChipRga interf…...
