当前位置: 首页 > news >正文

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&#xff1a;使能gpio f8 RCC->MP_AHB4ENSETR | (0x1<<5);9 //因为exti和gic属于芯片内部 所以无需使能10 11 //GPIO章节12 //1:将…...

触摸屏虚拟键盘组件 jQuery Virtual Keyboard使用 自定义键盘

如何在触摸设备上为输入域添加虚拟键盘&#xff1f; 一个插件可以解决这个问题&#xff0c;关键还支持高度自定义&#xff08;git地址&#xff09;&#xff1a; GitHub - Mottie/Keyboard: Virtual Keyboard using jQuery ~ 官网地址&#xff1a;Virtual Keyboard 使用步骤&…...

面试题07-09

知道了 InnoDB 的索引实现后&#xff0c;就很容易明白为什么不建议使用过长的字段作为主键&#xff0c;因为所有辅助索引都引用主索引&#xff0c;过长的主索引会令辅助索引变得过大。再例如&#xff0c;用非单调的字段作为主键在 InnoDB 中不是个好主意&#xff0c;因为 InnoD…...

MySQL之binlog日志

原文链接&#xff1a;https://zhuanlan.zhihu.com/p/697078870 目录&#xff1a; binlog 是什么binlog 配置和查看binlog 的类型binlog 如何恢复数据binlog 是逻辑日志还是物理日志binlog 作用 注意&#xff1a;以下所有的操作都在 MySQL 8.0 版本实现。 1、binlog 是什么 …...

【大数据】什么是数据湖?一文揭示数据湖的本质

很多人跟我一样&#xff0c;对于数据湖充满好奇&#xff0c;也许还读了不少数据湖文章&#xff0c;但无论别人怎么说&#xff0c;你还是会觉得难以把握数据湖的本质。 有些人会望文生义说&#xff0c;数据湖嘛&#xff0c;就是什么东西都可以往里面扔&#xff0c;特别是对非结构…...

CSS【详解】文本相关样式(含 font 系列,文本排版,文本装饰,分散对齐,渐变色文本等)

文本风格 font-style font-style:italic 值描述normal默认值。浏览器显示一个标准的字体样式。italic加载对应字体的斜体字体文件&#xff0c;若找不到斜体字体文件&#xff0c;则进行物理上的倾斜。 标签默认font-style:italicoblique浏览器会显示一个倾斜的字体样式。 文本粗…...

加油卡APP系统开发,优惠加油收益

目前&#xff0c;汽车已经成为了不可或缺的出行工具&#xff0c;汽车加油更是成为了家家户户要做的事。不过随着油价的波动&#xff0c;车主急需能够进行优惠加油的渠道&#xff0c;因此&#xff0c;加油卡APP成为了大众汽车加油新的选择方式&#xff0c;用户在下载APP后即可享…...

el-scrollbar实现自动滚动到底部(AI聊天)

目录 项目背景 实现步骤 实现代码 完整示例代码 项目背景 chatGPT聊天消息展示滚动面板&#xff0c;每次用户输入提问内容或者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)—镜像仓库

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;秒針を噛む—ずっと真夜中でいいのに。 0:34━━━━━━️&#x1f49f;──────── 4:20 &#x1f504; ◀️ ⏸ …...

Git详细安装和使用教程

文章目录 准备工作-gitee注册认识及安装GitGit配置用户信息本地初始化Git仓库记录每次更新到仓库查看及切换历史版本Git忽略文件和查看文件状态Git分支-查看及切换Git分支-创建分支Git分支-合并及删除分支Git分支-命令补充Git分支-冲突需求: 准备工作-gitee注册 传送门: gite…...

LeetCode题练习与总结:反转字符串中的单词--151

一、题目描述 给你一个字符串 s &#xff0c;请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 注意&#xff1a;输入字符串 s中可能会存在…...

2.pwn的linux基础(计算机内部数据结构存储形式)

linux基础 保护层级: 分为四个ring0-ring3 一般来说就两个&#xff0c;0和3 0为内核 3为用户 权限: 用户分为多个组 文件和目录等等的权限一般都是三个&#xff0c;即可读可写可执行。 读:R&#xff0c;写:W&#xff0c;执行: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输入一定遵循井字棋规则 解答思路 如果某一方想要获胜&#xff0c;则其需要占满某一行或某一列或对角线&#xff0c;所以只需要根据第一行和第一列判断是否填充完某一行或某一列或对角线…...

GEE代码实例教程详解:地表温度与土地覆盖类型分析

简介 在本篇博客中&#xff0c;我们将使用Google Earth Engine (GEE) 对地表温度数据进行分析&#xff0c;并探究不同土地覆盖类型&#xff08;特别是水体和城市区域&#xff09;的地表温度变化。通过MODIS数据集&#xff0c;我们可以监测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)安装问题解决

众所周知&#xff08;反正不管你知不知道&#xff09;&#xff0c;kafka-maneger更名了&#xff0c;现在叫cmak&#xff01;原因是什么呢&#xff1f;据不可靠小道信息说&#xff0c;原kafka-manager这个名字涉及到kafka商标使用问题&#xff0c;应该是被律师函警告了&#xff…...

【转载】目标检测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…...

智慧校园行政办公-红头文件功能概述

在智慧校园的行政办公系统中&#xff0c;红头文件的管理功能是一项重要的组成部分&#xff0c;它极大地提升了文件处理的效率与规范性。该功能围绕文件的创建、审批、归档等关键环节&#xff0c;进行了全面的数字化改造。 首先&#xff0c;系统内置了多种标准化的红头文件模板&…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...