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模式为目前大多数公…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
