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.rhkb.cn/news/159705.html

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

相关文章

进来“抄作业”!示例代码、操作手册,尽在华为云Codelabs!

1 Codelabs 简介 1.1 什么是 Codelabs&#xff1f; Codelabs 是华为云开发者工具&#xff0c;提供互动式的&#xff0c;以实践为主的教程&#xff0c;这些教程旨在指导开发者通过实际操作来学习新的编程技能、工具、框架。华为云 Codelabs 提供丰富的华为云产品代码示例/操…

Redis 集群 Redis 事务 Redis 流水线 Redis 发布订阅 Redis Lua脚本操作

Redis 集群 & Redis 事务 & Redis 流水线 & Redis 发布订阅 Redis 集群linux安装redis主从配置查看当前实例主从信息 Redis Sentinelsentinel Redis Cluster Redis 事务Redis 流水线Redis 发布订阅Redis Lua脚本操作 Redis 集群 linux安装redis 下载安装包&#…

数据结构之手撕链表(讲解➕源代码)

0.引言 我们在学习过顺序表之后&#xff0c;会发现两点不是很优秀的操作&#xff1a; 1.顺序表的头插和中间的插入&#xff1a; 非常麻烦&#xff0c;需要不断的覆盖数据。 2.动态开辟空间&#xff1a; a.一般动态开辟的空间都是以2倍的形式开辟&#xff0c;当…

xml的语法

<!-- 1、每一个xml,有且只有一个根标签&#xff0c;所有xml标签必须写在根标签中 2、标签必须要有合闭 3、xml格式是否正确&#xff0c;可以通过浏览器打开xml。来校验xml格式是否正确 4、xml是区别大小写的 5、xml书写标签名时&#xff0c;不要出现空格等特…

centos 7.9离线安装wget

1.下载安装包 登录到wget官网上下载最新的wget的rpm安装包到本地 http://mirrors.163.com/centos/7/os/x86_64/Packages/ 2.上传安装包到服务器 3.安装 rpm -ivh wget-1.14-18.el7_6.1.x86_64.rpm 4.查看版本 wget -V

集合的进阶

不可变集合 创建不可变的集合 在创建了之后集合的长度内容都不可以变化 静态集合的创建在list &#xff0c;set &#xff0c;map接口当中都可以获取不可变集合 方法名称说明static list of(E …elements)创建一个具有指定元素集合list集合对象staticlist of(E…elements)创…

智慧港口与无人机巡逻技术:走进未来的海上交通枢纽

在21世纪&#xff0c;随着全球贸易的日益繁荣&#xff0c;港口作为连接世界各地的重要交通枢纽显得尤为重要。为了提高港口的效率和安全性&#xff0c;智慧港口和无人机巡逻技术成为了最前沿的选择。其中&#xff0c;复亚智能无人机技术在智慧港口的建设和日常运营中扮演了至关…

6、docker下mysql修改配置文件

1、查看mysql镜像 如果没有mysql镜像则下载 docker images |grep mysql 2、查看mysql容器 docker ps |grep mysql 如果没有显示mysql容器信息&#xff0c;则创建 3、创建容器 docker run -it --name mysql-test -e MYSQL_ROOT_PASSWORDroot -p 3306:3306 -d f9653 4、在…

消息队列缓存,以蓝牙消息服务为例

前言 消息队列缓存&#xff0c;支持阻塞、非阻塞模式&#xff1b;支持协议、非协议模式 可自定义消息结构体数据内容 使用者只需设置一些宏定义、调用相应接口即可 这里我用蓝牙消息服务举例 有纰漏请指出&#xff0c;转载请说明。 学习交流请发邮件 1280253714qq.com 原…

Go语言入门心法(一): 基础语法

Go语言入门心法(一) Go语言入门心法(二): 结构体 Go语言入门心法(三): 接口 Go语言入门心法(四): 异常体系 Go语言入门心法(五): 函数 一: go语言中变量认知 go语言中变量的定义: &#xff08;要想飞|先会走&#xff09;||&#xff08;翻身仗|抹遗憾 &#xff09; |&…

基于IDEA集成环境---Nacos安装

Nacos服务器是独立安装部署的&#xff0c;因此我们需要下载最新的Nacos服务端程序&#xff0c;下载地址&#xff1a;https://github.com/alibaba/nacos。 将文件进行解压&#xff0c;得到以下内容&#xff1a; 直接将其拖入到项目文件夹下&#xff0c;便于我们一会在IDEA内部…

mysql case when 不命中缓存

case when 在sql 中非常方便数据不同维度统计&#xff0c;但是也会出现mysql 索引不命中问题&#xff0c;当多个case 出现时&#xff0c;需要提取出来到where里面优化 优化后 SELECT date(RecordTime) AS date, count( DISTINCT CASE WHEN Param 1 …

什么是美体SDK?美摄美颜美体SDK对接开发指南

在当今的数字世界中&#xff0c;人们对自我表达和形象展示的需求越来越高。美体SDK应运而生&#xff0c;为用户提供了一种全新的美颜美体体验&#xff0c;让每一个人都能享受到个性化的美丽与自信。 一、美体SDK的特点 轻量级&#xff1a;美体SDK体积小巧&#xff0c;不会对用…

运用精益管理思想提升MES管理系统建设水平

随着制造业的不断发展&#xff0c;MES生产管理系统已经成为了企业生产过程中不可或缺的一部分。而在MES管理系统建设过程中&#xff0c;精益管理的思想也越来越受到重视。本文将探讨如何运用精益管理的思想&#xff0c;提高MES系统的建设水平&#xff0c;以更好地服务于企业的生…

Sanic​——Python函数变成API的神器

今天给大家介绍一个超好用的框架&#xff0c;迅速将Python函数变成API&#xff0c;它就是最近越来越火的异步Web框架Sanic。 1. Sanic简介 Sanic 是 Python3.7 Web 服务器和 Web 框架&#xff0c;旨在提高性能。它允许使用 Python3.5 中添加的async/await语法&#xff0c;这使…

1.Vue-在独立页面实现Vue的增删改查

题记 在独立页面实现Vue的增删改查&#xff0c;以下是具体的代码&#xff0c;和操作流程。 编写index.html页面 index.html文件如下&#xff1a; <!DOCTYPE html> <html> <head><title>Vue CRUD Example</title><!--在线导入vue文件-->&l…

Linux系统之ip命令的基本使用

Linux系统之ip命令的基本使用 一、ip命令介绍1.1 ip命令简介1.2 ip命令的由来1.3 ip命令的安装包 二、ip命令使用帮助2.1 ip命令的help帮助信息2.2 ip命令使用帮助 三、查看网络信息3.1 显示当前网络接口信息3.2 显示网络设备运行状态3.3 显示详细设备信息3.4 查看路由表3.5 查…

canvas画一个笑脸和画一个三角形

画一个笑脸主要用到的是画弧形的方法&#xff1a;arc&#xff0c;有五个参数&#xff1a;起始坐标&#xff0c;半径&#xff0c;弧形起始坐标&#xff0c;还有一个参数是顺时针还是逆时针。画的笑脸&#xff1a;虽然丑了点&#xff0c;但是学习了 代码&#xff1a; <!DOCTY…

【Docker 内核详解】namespace 资源隔离(四):Mount namespace Network namespace

【Docker 内核详解 - namespace 资源隔离】系列包含&#xff1a; namespace 资源隔离&#xff08;一&#xff09;&#xff1a;进行 namespace API 操作的 4 种方式namespace 资源隔离&#xff08;二&#xff09;&#xff1a;UTS namespace & IPC namespacenamespace 资源隔…

[23] T^3Bench: Benchmarking Current Progress in Text-to-3D Generation

3D生成蓬勃发展&#xff0c;主流方法通过事例比较和用户调查来评价方法好坏&#xff0c;缺少客观比较指标&#xff1b;本文提出Bench&#xff0c;首次综合比较了不同生成方法&#xff1b;具体来说&#xff0c;本文设计了质量评估&#xff08;Quality Assessment&#xff09;和对…