ARM按键中断实验
设置按键中断,按键1按下,LED亮,再按一次,灭
按键2按下,蜂鸣器响。再按一次,不响
按键3按下,风扇转,再按一次,风扇停
src/do_irq.c
#include "key_it.h"
extern void printf(const char *fmt, ...);
unsigned int i = 0;
void do_irq(void)
{int irqno;//保存中断号printf("%d\n",irqno);irqno = GICC->IAR&0x3ff;switch(irqno){case 99://key1//按键1中断处理printf("KEY1 灯亮灭\n");if(GPIOE->ODR & (0X1<<10)){GPIOE->ODR &= (~(0X1<<10));}else{GPIOE->ODR |= (0X1<<10);}//清除挂起中断标志位GICD_ICPENDRxGICD->ICPENDR[3] |= (0X1<<3);//清除中断触发标志位EXTI_FPR1EXTI->FPR1 |= (0X1<<9);break;case 97://key2//按键2中断处理printf("KEY2 蜂鸣器\n");if(GPIOB->ODR & (0X1<<6)){GPIOB->ODR &= (~(0X1<<6));}else{GPIOB->ODR |= (0X1<<6);}//清除挂起中断标志位GICD_ICPENDRxGICD->ICPENDR[3] |= (0X1<<1);//清除中断触发标志位EXTI_FPR1EXTI->FPR1 |= (0X1<<7);break;case 98://key3//按键3中断处理printf("KEY3 风扇\n");if(GPIOE->ODR & (0X1<<9)){GPIOE->ODR &= (~(0X1<<9));}else{GPIOE->ODR |= (0X1<<9);}//清除挂起中断标志位GICD_ICPENDRxGICD->ICPENDR[3] |= (0X1<<2);//清除中断触发标志位EXTI_FPR1EXTI->FPR1 |= (0X1<<8);break;}//清除处理完的中断号GICC_EOTRGICC->EOIR = irqno;
}
src/key_it.c
#include"key_it.h"void key3_it_config()
{//RCC使能GPIOF时钟RCC->MP_AHB4ENSETR |= (0x1<<5);GPIOF->MODER &= (~(0x3<<16));EXTI->EXTICR3 &=(~(0xFF<<0));EXTI->EXTICR3 |= (0x5<<0);EXTI->FTSR1 |= (0x1<<8);EXTI->C1IMR1 |= (0x1<<8);GICD->ISENABLER[3] |= (0X1<<2); GICD->IPRIORITYR[24] &= (~(0X1F<<19)); GICD->ITARGETSR[24] &= (~(0X3<<16));GICD->ITARGETSR[24] |= (0X1<<16);
}
void key_it_config()
{//RCC使能GPIOF时钟RCC->MP_AHB4ENSETR |= (0x1<<5);//设置PF9 PF7 PF8GPIO输入//PF9GPIOF->MODER &= (~(0x3<<18));//PF8// GPIOF->MODER &= (~(0x3<<16));//pf7GPIOF->MODER &= (~(0x3<<14));//设置PF9 PF7 PF8产生EXTI事件 EXTI_EXTICRx//pf7EXTI->EXTICR2 &=(~(0xFF<<24));EXTI->EXTICR2 |= (0x5<<24);//pf8// EXTI->EXTICR3 &=(~(0xFF<<0));// EXTI->EXTICR3 |= (0x5<<0);//pf9EXTI->EXTICR3 &=(~(0xFF<<8));EXTI->EXTICR3 |= (0x5<<8);//设置事件触发方式为下降沿触发EXTI_FTSR1//pf7EXTI->FTSR1 |= (0x1<<7);//pf8// EXTI->FTSR1 |= (0x1<<8);//pf9EXTI->FTSR1 |= (0x1<<9);//设置EXTI事件触发不屏蔽EXTI_IMR1//PF7EXTI->C1IMR1 |= (0x1<<7);//PF8// EXTI->C1IMR1 |= (0x1<<8);//PF9EXTI->C1IMR1 |= (0x1<<9);//使能中断能转发到特定的CPU接口层GICD_ISENABLERx//PF7 97号中断GICD->ISENABLER[3] |= (0X1<<1); //PF78 98号中断// GICD->ISENABLER[3] |= (0X1<<2); //PF9 99号中断GICD->ISENABLER[3] |= (0X1<<3); // GICD_ISENABLERx设置中断优先级//PF7GICD->IPRIORITYR[24] &= (~(0X1F<<11)); //PF8// GICD->IPRIORITYR[24] &= (~(0X1F<<19)); //PF9GICD->IPRIORITYR[24] &= (~(0X1F<<27)); //设置当前中断被转发到哪一个CPU处理GICD_ITARGETSRx//pf7 97中断GICD->ITARGETSR[24] &= (~(0X3<<8));GICD->ITARGETSR[24] |= (0X1<<8);//pf8 98中断// GICD->ITARGETSR[24] &= (~(0X3<<16));// GICD->ITARGETSR[24] |= (0X1<<16);//pf9 99中断GICD->ITARGETSR[24] &= (~(0X3<<24));GICD->ITARGETSR[24] |= (0X1<<24);//使能组0转发中断GICD_CTLRGICD->CTRL |= 0X1;//设置中断优先级掩码GICC_PMRGICC->PMR |= (0x1F<<3);//使能CPU可以处理组0转发的中断GICC_CTLRGICC->CTRL |= 0X1;}
//灯1初始化
void led1_init()
{RCC->MP_AHB4ENSETR |= (0x1<<4);GPIOE->MODER &= (~(0X3<<20));GPIOE->MODER |= (0X1<<20);GPIOE->OTYPER &= (~(0X1<<10));GPIOE->OSPEEDR &= (~(0X3<<20));GPIOE->PUPDR &= (~(0X3<<20));}
//蜂鸣器初始化
void tim_init()
{RCC->MP_AHB4ENSETR |= (0x1<<1);GPIOB->MODER &= (~(0X3<<12));GPIOB->MODER |= (0X1<<12);GPIOB->OTYPER &= (~(0X1<<6));GPIOB->OSPEEDR &= (~(0X3<<12));GPIOB->PUPDR &= (~(0X3<<12));}
//风扇初始化
void fan_init()
{RCC->MP_AHB4ENSETR |= (0x1<<4);GPIOE->MODER &= (~(0X3<<18));GPIOE->MODER |= (0X1<<18);GPIOE->OTYPER &= (~(0X1<<9));GPIOE->OSPEEDR &= (~(0X3<<18));GPIOE->PUPDR &= (~(0X3<<18));}
测试结果

相关文章:
ARM按键中断实验
设置按键中断,按键1按下,LED亮,再按一次,灭 按键2按下,蜂鸣器响。再按一次,不响 按键3按下,风扇转,再按一次,风扇停 src/do_irq.c #include "key_it.h" ex…...
C#的值类型和引用类型
不得不说c#的类型系统设计有点意思,不同的编程语言对于类型的设计各有取舍。 值类型: 当我们将一个int类型的值赋值到另一个int类型的值时,它实际上是创建了一个完全不同的副本。换句话说,如果你改变了其中某一个的值࿰…...
YOLOv7改进:极简的神经网络模型 VanillaNet---VanillaBlock助力检测,实现暴力涨点 | 华为诺亚2023
💡💡💡本文属于原创独家改进:极简模块VanillaBlock,以极简主义的设计为理念,网络中仅仅包含最简单的卷积计算,去掉了残差和注意力模块,二次创新引入到YOLOv7中取得了不俗的效果。 极简模块VanillaBlock | 亲测在多个数据集实现涨点; 收录: YOLOv7高阶自研专…...
对验证码的识别爆破
声明:该系列文章首发于公众号:Y1X1n安全,转载请注明出处!本公众号所分享内容仅用于每一个爱好者之间的技术讨论及教育目的,所有渗透及工具的使用都需获取授权,禁止用于违法途径,否则需自行承担&…...
LeetCode【15】三数之和
题目: 解析: 参考:https://zhuanlan.zhihu.com/p/111715985 代码: public static List<List<Integer>> threeSum(int[] nums) {// 先排序Arrays.sort(nums);List<List<Integer>> result new ArrayLis…...
Gossip协议是什么
Gossip协议是什么 Gossip protocol 也叫 Epidemic Protocol (流行病协议), 是基于流行病传播方式的节点或者进程之间信息交换的协议, 也被叫做流言算法, 八卦算法、疫情传播算法等等. 说到 Gossip 协议, 就不得不提著名的六度分隔理论. 简单地说, 你和任何一个陌生人之间所间…...
【java学习】this关键字(27)
文章目录 1. this是什么?2. this的作用 1. this是什么? 在 java 中,this关键字比较难理解,它的作用和其词义很接近。 ①它在方法内部使用,即这个方法所属对象的引用; ②它在构造器内部使用,表示…...
27、元组
区分: 数组:纯粹 一个[]中的数据类型都是一致的 元组:不纯粹 一个[]中可能有不同类型的数据项 意义 当赋值或访问一个已知索引的元素时,可以得到正确的类型 let miao: [string, number] [cat, 18]; miao[0] cat miao[1] 18…...
1km分辨率逐月降雨量和最高温度数据集(1901-2022)--数据处理
1km分辨率逐月降雨量和最高温度数据集(1901-2022)的下载可以参考我的另外一篇博客: 这里的温度和降雨数据集都是NC格式的,需要将其处理为tif格式,我采用的处理软件是MATLAB。 本篇博客以处理温度数据为例,…...
docker入门加实战—docker常见命令
docker入门加实战—docker常见命令 在介绍命令之前,先用一副图形象的展示一下docker的命令: 常见命令 docker的常见命令和文档地址如下表: 命令说明文档地址docker pull拉取镜像docker pulldocker push推送镜像到DockerRegistrydocker pus…...
【C/C++】使用 g++ 编译器编译 C++ 程序的完全指南
本文介绍了 g 编译器的使用方法和常见参数解释,帮助您编译和构建 C 程序。 引言 在 C 程序开发中,选择一个合适的编译器是至关重要的。g 是 GNU 编译器集合(GCC)中的 C 编译器,提供了丰富的功能和选项,帮…...
ARM中断实验
设置按键中断,按键1按下,LED亮,再按一次,灭 按键2按下,蜂鸣器响。再按一次,不响 按键3按下,风扇转,再按一次,风扇停 main.c #include "uart1.h" #include …...
Vue条件渲染
一、使用v-show条件渲染 语法格式: v-show"表达式" // true 或 false 当表达式的值为true的时候就显示,表达式值为false的时候隐藏。 下面是使用v-show实现的一个点击按钮切换显示和隐藏的小案例 : 值得注意的是,使…...
k8s中如何使用gpu、gpu资源讲解、nvidia gpu驱动安装
前言 环境:centos7.9、k8s 1.22.17、docker-ce-20.10.9 gpu资源也是服务器中常见的一种资源,gpu即显卡,一般用在人工智能、图文识别、大模型等领域,其中nvidia gpu是nvidia公司生产的nvidia类型的显卡,amd gpu则是adm…...
VRRP 虚拟路由器冗余协议的解析和配置
VRRP的解析 个人简介 原理和HSRP的差不多,少了一些状态就只有了三种状态 还有不同的就是VRRP严格按照抢占要求 一个VRRP组中具有最高优先级的设备成为Master路由器缺省优先级为100若优先级相同,具有最高接口IP地址最大的路由器成为Master路由器抢占(Pr…...
旅游网站HTML
代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>旅游网</title> </head> <body><!--采用table编辑--> <!--最晚曾table,用于整个页面那布局--><table width&q…...
Unity - Normal mapping - Reoriented normal mapping - 重定向法线、混合法线
文章目录 目的核心代码PBR - Filament - Normal mappingShader效果BlendNormal_Hill12BlendNormal_UDNBlendNormals_Unity_Native - 效果目前最好 ProjectReferences 目的 备份、拾遗 核心代码 half3 blended_normal normalize(half3(n1.xy n2.xy, n1.z*n2.z));PBR - Filam…...
CSS 常用样式background背景属性
一、背景颜色 background-color CSS中的background-color是用来设置HTML元素的背景颜色的一个属性。它可以接受各种颜色值,包括具有名称的颜色和十六进制颜色值。 以下是一些示例代码: 设置元素的背景颜色为红色: background-color: red…...
Java开发利器,让你事半功倍!
Java是一种广泛使用的编程语言,它具有跨平台、面向对象、安全性高等特点,因此在企业级应用开发中得到了广泛的应用。在Java开发过程中,选择合适的开发工具可以大大提高工作效率,本文将为大家介绍几款Java开发利器,帮助…...
Redis面临的挑战
Redis的数据结构丰富,一般不会在功能性上造成困扰。但随着请求量的增加,SLA要求的提高,我们势必会对Redis进行一些改造和定制性开发。 高可用挑战 Redis提供了主从、哨兵、cluster等三种集群模式,其中cluster模式为目前大多数公…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
uniapp 实现腾讯云IM群文件上传下载功能
UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...
C++_哈希表
本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说,直接开始吧! 一、基础概念 1. 哈希核心思想: 哈希函数的作用:通过此函数建立一个Key与存储位置之间的映射关系。理想目标:实现…...
C# winform教程(二)----checkbox
一、作用 提供一个用户选择或者不选的状态,这是一个可以多选的控件。 二、属性 其实功能大差不差,除了特殊的几个外,与button基本相同,所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...
