ARM day9

src/key_it.c

#include "key_it.h"
#include "led.h"
void key_it_config()
{//RCC使能GPIOF时钟RCC->MP_AHB4ENSETR |= (0x1<<5);//设置PF9 PF7 PF8GPIO输入//PF9GPIOF->MODER &= (~(0x3<<18));//PF8GPIOF->MODER &= (~(0x3<<16));//PF7GPIOF->MODER &= (~(0x3<<14));//设置PF9 PF7 PF8产生EXTI事件 EXTI_EXTICRx//PF7EXTI->EXTICR2 &= (~(0xFF<<24));EXTI->EXTICR2 |= (0x5<<24);//PF8EXTI->EXTICR3 &= (~(0xFF<<0));EXTI->EXTICR3 |= (0x5<<0);//PF9EXTI->EXTICR3 &= (~(0xFF<<8));EXTI->EXTICR3 |= (0x5<<8);//设置事件触发方式为下降沿触发EXTI_FTSR1//PF7EXTI->FTSR1 |= (0x1<<7);//PF8EXTI->FTSR1 |= (0x1<<8);//PF9EXTI->FTSR1 |= (0x1<<9);//设置EXTI事件触发不屏蔽EXTI_IMR1//PF7EXTI->C1IMR1 |= (0x1<<7);//PF8EXTI->C1IMR1 |= (0x1<<8);//PF9EXTI->C1IMR1 |= (0x1<<9);//使能组0转发中断GICD_CTLRGICC->CTRL |= 0x1;//使能中断能转发到待定的CPU接口层GICD_ISENABLERx//PF7 97中断GICD->ISENABLER[3] |= (0x1<<1);//PF7 98中断GICD->ISENABLER[3] |= (0x1<<2);//PF7 99中断GICD->ISENABLER[3] |= (0x1<<3);//GICD_ISENABLERx设置中断优先级//PF7GICD->IPRIORITYR[24] &= (~(0x1F<<11));//PF8GICD->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);//使能CPU可以处理组0转发的中断GICC_CTLRGICD->CTRL |= 0x1;//设置中断优先级掩码GICC_CTLRGICC->PMR |= (0x1F<<3);
}
//延时函数
/*void delay(int ms)
{int i,j;for(i=0;i<ms;i++){for(j=0;j<2000;j++);}
}*/
//灯 GPIO初始化
void all_led_init()
{//RCC使能RCC->MP_AHB4ENSETR |= (0x3<<4);//设置PE10//PE10GPIOE->MODER &=(~(0x3f<<16));GPIOE->MODER |=(0x15<<16);//PB6GPIOB->MODER &=(~(0x3<<12));GPIOB->MODER |=(0x1<<12);//设置推挽输出//PE10GPIOE->OTYPER &=(~(0x1<<10));//PB6GPIOB->OTYPER &=(~(0x1<<6));//设置2个管脚低速输出//PE10GPIOE->OSPEEDR &=(~(0x3<<20));//PB6GPIOB->OSPEEDR &=(~(0x3<<12));//PE10GPIOE->PUPDR &=(~(0x3<<20));//PB6GPIOB->PUPDR &=(~(0x3<<12));
}

src/do_irq.c

#include "key_it.h"
#include "myuart.h"
#include "led.h"
extern void printf(const char *fmt, ...);
unsigned int i = 0;int num1=0,num2=0,num3=0;
void do_irq(void) 
{int irqno;//保存中断号irqno = GICC->IAR&0X3FF;switch(irqno){case 99://key1//按键1中断处理printf("KEY INT1\n");//风扇转if(num3==0){GPIOE->ODR |=(0x1<<9);num3++;}//风扇停else if(num3>0){GPIOE->ODR &=(~(0x1<<9));num3=0;}//清除挂起中断标志位GICD_ICPENDRxGICD->ICPENDR[3] |= (0x1<<3);//清除中断触发标志位EXTI_FRR1EXTI->FPR1 |= (0x1<<9);break;case 97://key2//按键2中断处理printf("KEY INT2\n");//蜂鸣器响if(num2==0){GPIOB->ODR |=(0x1<<6);num2++;}//蜂鸣器停else if(num2>0){GPIOB->ODR &=(~(0x1<<6));num2=0;}//清除挂起中断标志位GICD_ICPENDRxGICD->ICPENDR[3] |= (0x1<<1);//清除中断触发标志位EXTI_FRR1EXTI->FPR1 |= (0x1<<7);break;case 98://key3//按键3中断处理printf("KEY INT3\n");//LED1亮if(num1==0){GPIOE->ODR |=(0x1<<10);num1++;}else if(num1>0){GPIOE->ODR &=(~(0x1<<10));num1=0;}//清除挂起中断标志位GICD_ICPENDRxGICD->ICPENDR[3] |= (0x1<<2);//清除中断触发标志位EXTI_FRR1EXTI->FPR1 |= (0x1<<8);break;}//清除处理完的中断号GICC_EOIRGICC->EOIR=irqno;
}

include/led.h

#ifndef __LED_H__
#define __LED_H__
//创建寄存器组织结构体
/*
typedef struct
{unsigned int moder;unsigned int otyper;unsigned int ospeedr;unsigned int pupdr;unsigned int idr;unsigned int odr;
}gpio_t;
#define GPIOE (*(gpio_t)0x50006000)
#define GPIOE (*(gpio_t)0x50007000)
#define RCC (*(unsigned int *)0x50000A28)
*/
void deley(int ms);
void all_led_init();
#endif

include/key_it.h

#ifndef __KEY_IT_H__
#define __KEY_IT_H__
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_exti.h"
#include "stm32mp1xx_gic.h"
void key_it_config();
#endif

main.c

#include "myuart.h"
#include "key_it.h"
#include "led.h"
int main()
{//char c;//char *s;uart4_init();//串口初始化//中断初始化key_it_config();//初始化all_led_init();while(1){//保证主程序不结束//串口数据收发//接受一个字符//c=getchar();//发送字符//putchar(c+1);//接受一个字符串//s=my_gets();//发送一个字符串//my_puts(s);}return 0;
}

结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/105421.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

互联网Java工程师面试题·Java 并发编程篇·第八弹

目录 33、Java 死锁以及如何避免&#xff1f; 34、死锁的原因 35、怎么唤醒一个阻塞的线程 36、不可变对象对多线程有什么帮助 37、什么是多线程的上下文切换 38、如果你提交任务时&#xff0c;线程池队列已满&#xff0c;这时会发生什么这里区分一下&#xff1a; 39、J…

002数据安全传输-多端协议传输平台:配置Oracle数据库-19c及导入数据信息

002多端协议传输平台&#xff1a;配置Oracle数据库-19c及导入数据信息 文章目录 002多端协议传输平台&#xff1a;配置Oracle数据库-19c及导入数据信息1. 数据库准备2. 导入sql脚本2.1 原版Oracle-11g脚本2.2 新版Oracle-19c脚本2.3 命令行导入脚本 3. 删除系统中数据库信息sql…

Git命令大全

1、下载地址 点击进入Git下载地址 2、Git命令大全 git config --global user.name “设置个人用户名”&#xff1a;设置用户信息git config --global user.email “设置个人邮箱” &#xff1a;设置用户信息 本地仓库操作 git config --list&#xff1a;查看配置信息git i…

Java idea查看自定义注解的调用地方

Java idea查看自定义注解的调用地方

SQL语句-中级

一、Mysql软件使用 1.启动/停止Mysql服务器 任务管理器 cmd命令&#xff1a;以管理员的身份打开cmd命令行 net start mysql80//开启net stop mysql80//停止 2.连接与断开Mysql服务器 注意要在bin目录下执行:-u用户名root&#xff0c;-p密码 mysql -u root -p 可能出现的…

Kafka 开启SASL/SCRAM认证 及 ACL授权(二)ACL

Kafka 开启SASL/SCRAM认证 及 ACL授权(二)ACL。 官网地址:https://kafka.apache.org/ kafka authentorization:https://docs.confluent.io/platform/current/kafka/authorization.html 一、开启ZK ACL(可选,内网环境,用户无机器访问权限时) 给kafka meta都加上zk的ac…

【docker - 安装】windows 10 专业版 安装docker,以及 WSL kernel version too low 解决方案

一、开启 Hyper-V 二、下载 docker 三、安装 docker 四、问题 Stage 1&#xff1a;打开 powershell&#xff0c;并执行 Stage 2&#xff1a;下载Linux内核更新包&#xff0c;并安装 Stage 3&#xff1a;将 WSL 2 设置为默认版本 Stage 4&#xff1a;安装所选的 Linux 分…

排序优化:如何实现一个通用的、高性能的排序函数?

文章来源于极客时间前google工程师−王争专栏。 几乎所有的编程语言都会提供排序函数&#xff0c;比如java中的Collections.sort()。在平时的开发中&#xff0c;我们都是直接使用&#xff0c;这些排序函数是如何实现的&#xff1f;底层都利用了哪种排序算法呢&#xff1f; 问题…

互联网Java工程师面试题·Java 并发编程篇·第四弹

目录 39、volatile 有什么用&#xff1f;能否用一句话说明下 volatile 的应用场景&#xff1f; 40、为什么代码会重排序&#xff1f; 41、在 java 中 wait 和 sleep 方法的不同&#xff1f; 42、用 Java 实现阻塞队列 43、一个线程运行时发生异常会怎样&#xff1f; 44、…

Sub-1G射频收发器soc芯片 UM2080F32 低功耗 32 位 IoTP

UM2080F32是基于 ARM Cortex M0 内核的超低功耗、高性能的、单片集成 (G)FSK/OOK 无线收发机的 32 位SOC 芯片。 UM2080F32 工作于200MHz~960MHz 范围内&#xff0c;支持灵活可设的数据包格式&#xff0c;支持自动应答和自动重发功能&#xff0c;支持跳频操作&#xff0c;支持 …

Hi3516DV500 SVP_NNN添加opencv库记录

默认没有带opencv库&#xff0c;但是实际项目中需要用到opencv库&#xff0c;因此添加一下此库&#xff1b; 1&#xff1a;编译opencv源码&#xff0c;这里具体可以参考 海思Hi3516移植opencv以及错误调试_海思hi3516摄像头开发-CSDN博客 2&#xff1a;在工程的根目录下新建…

计算机毕业设计 基于Web铁路订票管理系统 火车订票管理系统的设计与实现 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

校招C#面试题整理—Unity客户端

前言 博客已经1年多没有更新了&#xff0c;这一年主要在实习并准备秋招和春招&#xff0c;目前已经上岸Unity客户端岗位&#xff0c;现将去年校招遇到的一些面试题的事后整理分享出来。答案是笔者自己整理的不一定保证准确&#xff0c;欢迎大家在评论区指出。 Unity客户端岗的…

相似性搜索:第 3 部分--混合倒排文件索引和产品量化

接续前文&#xff1a;相似性搜索&#xff1a;第 2 部分&#xff1a;产品量化 SImilarity 搜索是一个问题&#xff0c;给定一个查询的目标是在所有数据库文档中找到与其最相似的文档。 一、介绍 在数据科学中&#xff0c;相似性搜索经常出现在NLP领域&#xff0c;搜索引擎或推…

【MST】 CF1108 F

Problem - 1108F - Codeforces 题意 思路 先看样例 这里的 MST&#xff0c;是把边排序之后合并至权值为3 权值为3的两条边&#xff0c;选其中一条即可&#xff0c;但是不能两条都选&#xff0c;这样会形成环 这启示我们&#xff0c;我们要操作的是和Kruskal的最后一条边权值…

【MySql】6- 实践篇(四)

文章目录 1. 为何SQL语句逻辑相同&#xff0c;性能却差异巨大1.1 性能差异大的SQL语句问题1.1.1 案例一:条件字段函数操作1.1.2 案例二:隐式类型转换1.1.3 案例三:隐式字符编码转换 2. 为何只查询一行的SQL执行很慢2.1 场景一:查询长时间不返回2.1.1 等MDL锁2.1.2 等 flush2.1.…

【每日一题】只出现一次的数字 II

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;位运算 写在最后 Tag 【位运算】【数组】【2023-10-15】 题目来源 137. 只出现一次的数字 II 题目解读 找出数组中仅出现一次的数字&#xff0c;其余数字仅出现三次。要求线性时间复杂度求解。 解题思路 本题的朴素…

Java类加载过程

一、前言 我们都知道计算机的底层逻辑都是0和1的编码&#xff0c;当然除了现在所研究的量子计算除外。那么我们在计算机所做的一切操作&#xff0c;底层原理是不是都可以翻译到0和1呢。如果刨根问底的话&#xff0c;可以这么说&#xff0c;当然0和1的表示也属于逻辑门电路电的…

蓝牙资讯|2024年智能家居新趋势,蓝牙助力智能家居发展

2024年将迎来变革&#xff0c;智能家居趋势不仅会影响我们的生活空间&#xff0c;还会提高我们的生活质量&#xff0c;让我们有更多时间享受属于自己的时光。 2024年智能家居新趋势 趋势一&#xff1a;多功能科技 2024年预示着多功能技术的趋势&#xff0c;创新将成为焦点。混…

Spring framework Day14:配置类的Lite模式和Full模式

前言 Lite模式和Full模式是指在软件或系统中的不同配置选项。一般来说&#xff0c;Lite模式是指较为简洁、轻量级的配置&#xff0c;而Full模式则是指更加完整、功能更丰富的配置。 Lite模式通常会去除一些不常用或占用资源较多的功能&#xff0c;以提高系统的运行效率和响应…