2024/5/22 ARMday7

按键控制LED灯亮和灭

do_irq.c

#include "key_it.h"
//#include "led.h"
extern void printf(const char *fmt, ...);
unsigned int i = 0;
void do_irq(void) 
{//获取中断号unsigned int irqno=(GICC->IAR & (0x3FF));switch (irqno){case 99://处理中断GPIOE->ODR ^= (0x1<<8);//清除中断队列GICD->ICPENDR[3] |= (0x1<<3);//清除中断挂起标志EXTI->FPR1 |= (0x1<<9);break;case 98://处理中断GPIOE->ODR ^= (0x1<<10);//清除中断队列GICD->ICPENDR[3] |= (0x1<<2);//清除中断挂起标志EXTI->FPR1 |= (0x1<<8);break;case 97://处理中断GPIOF->ODR ^= (0x1<<10);//清除中断队列GICD->ICPENDR[3] |= (0x1<<1);//清除中断挂起标志EXTI->FPR1 |= (0x1<<7);break;default:break;}//清除中断号GICC->EOIR = irqno;
}


key_it.c

#include "key_it.h"//按键1初始化
void key1_init(){//使能GPIOF的RCC时钟RCC->MC_AHB4ENSETR |= (0x1<<5);//配置PF9为输入模式GPIOF->MODER &= (~(0x3<<18));//配置中断选择器EXTI9为PFEXTI->EXTICR3 &= (~(0xFF<<8));EXTI->EXTICR3 |= (0x05<<8);//配置为下降沿触发EXTI->FTSR1 |= (0x1<<9);//使能中断,关闭中断屏蔽EXTI->C1IMR1 |= (0x1<<9);//设置中断使能GICD->ISENABLER[3] |= (0x1<<3);//设置中断优先级GICD->IPRIORITYR[24] &= (~(0x1F<<27));//设置中断处理cpuGICD->ITARGETSR[24] |= (0x1<<24);//使能中断,中断默认在组0GICD->CTRL |=(0x1);//设置使能GICC->CTRL |= (0x1);//设置优先级掩码GICC->PMR |= (0x1f<<3);}//按键2初始化
void key2_init(){//配置PF7为输入模式GPIOF->MODER &= (~(0x3<<14));//配置中断选择器EXTI7为PFEXTI->EXTICR2 &= (~(0xFF<<24));EXTI->EXTICR2 |= (0x05<<24);//配置为下降沿触发EXTI->FTSR1 |= (0x1<<7);//使能中断,关闭中断屏蔽EXTI->C1IMR1 |= (0x1<<7);//设置中断使能GICD->ISENABLER[3] |= (0x1<<1);//设置中断优先级GICD->IPRIORITYR[24] &= (~(0x1F<<11));//设置中断处理cpuGICD->ITARGETSR[24] |= (0x1<<8);//使能中断,中断默认在组0GICD->CTRL |=(0x1);//设置使能GICC->CTRL |= (0x1);//设置优先级掩码GICC->PMR |= (0x1f<<3);
}//按键3初始化
void key3_init(){//配置PF8为输入模式GPIOF->MODER &= (~(0x3<<16));//配置中断选择器EXTI8为PFEXTI->EXTICR3 &= (~0xFF);EXTI->EXTICR3 |= 0x05;//配置为下降沿触发EXTI->FTSR1 |= (0x1<<8);//使能中断,关闭中断屏蔽EXTI->C1IMR1 |= (0x1<<8);//设置中断使能GICD->ISENABLER[3] |= (0x1<<2);//设置中断优先级GICD->IPRIORITYR[24] &= (~(0x1F<<19));//设置中断处理cpuGICD->ITARGETSR[24] |= (0x1<<16);//使能中断,中断默认在组0GICD->CTRL |=(0x1);//设置使能GICC->CTRL |= (0x1);//设置优先级掩码GICC->PMR |= (0x1f<<3);
}

led.h

#ifndef __LED_H__
#define __LED_H__/*//gpio寄存器
typedef struct{volatile unsigned int MODER;volatile unsigned int OTYPER;volatile unsigned int OSPEEDR;volatile unsigned int PUPDR;volatile unsigned int IDR;volatile unsigned int ODR;volatile unsigned int BSRR;
}gpio_t;*///GPIOE和GPIOF寄存器宏定义
//#define GPIOE (*(gpio_t *)0x50006000)
//#define GPIOF (*(gpio_t *)0x50007000)//led灯1初始化
void led1_init();
//led灯2初始化
void led2_init();
//led灯3初始化
void led3_init();//led灯1控制
void led1_ctl(int flag);
//led灯2控制
void led2_ctl(int flag);
//led灯3控制
void led3_ctl(int flag);#endif

main.c

#include "gpio.h"
#include "led.h"
#include "uart4.h"
#include "key_it.h"void delay(){for(int i=0;i<500;i++){for(int j=0;j<2000;j++){}}
}
extern void printf(const char *fmt, ...);
int main()
{//使能PE、PF时钟*((unsigned int *)0x50000A28) |= (0x3<<4);	led1_init();led2_init();led3_init();key1_init();key2_init();key3_init();while (1){printf("do_main\n");delay(1000);}return 0;
}

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

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

相关文章

Playwright 元素定位

一、get_by_XXXXX 1. get_by_role&#xff1a;根据元素角色进行定位, 常用的参数有两个&#xff0c;第一个是角色名称 role&#xff0c;第二个是元素的文本 name。其他参数的解释大家可以参考源码注释。 # 获取页面名称为确定的按钮 page.get_bt_role(button, name确定) pl…

cfa三级大神复习经验分享系列(一)

教材还是Notes? 对于愚钝如我之流&#xff0c;建议大家三级一定要看教材。Note很精华很浓缩&#xff0c;我觉得看过教材再看note感觉总结的很精辟&#xff0c;但是Note是以考点列的&#xff0c;而教材像小说一样娓娓道来&#xff0c;有逻辑有情节&#xff0c;如果不follow很难…

Android MIPI屏配置

参考资料&#xff1a;RockChip发布的DRM Display Driver Development Guide手册&#xff0c;以及网上大量相关博客资料 首先要拿到《屏幕硬件规格书》和《DataSheet》&#xff0c;软件配置主要依靠DataSheet提供数据支持。 查阅DataSheet里面on sequence和off sequence说明&a…

机器学习之爬山算法(Hill Climbing Algorithm)

爬山算法(Hill Climbing Algorithm)是一种简单而常见的启发式搜索算法,通常用于解决优化问题。它的基本思想类似于登山过程中爬升到山顶的过程,即从一个起始点开始,不断尝试向邻近的点移动,直到找到一个局部最优解。 下面是爬山算法的基本工作流程: 初始化:选择一个初…

关于同一个地址用作两个不同页面时,列表操作栏按钮混淆状态

同一个地址用作两个不同页面时&#xff0c;列表页的操作栏中有好多个按钮&#xff0c;如果用了v-if&#xff0c;可能会导致按钮混淆状态如disabled等属性混乱 解决方法1&#xff1a; 将v-if换成v-show&#xff0c;用了v-show之后意味着所有按钮都在只是在页面上隐藏了 解决方…

【python深度学习】——torch.min()

【python深度学习】——torch.min 1. torch.min()1.1 计算整个张量的最小值1.2 沿特定维度计算最小值1.3 比较两个张量 1. torch.min() torch.min()接受的参数如下: input: 输入的张量。dim: 沿指定维度寻找最小值。如果指定了该参数&#xff0c;返回一个元组&#xff0c;其中…

基于Vue+SpirngBoot的博客管理平台的设计与实现(论文+源码)_kaic

摘 要 随着当下社会的发展&#xff0c;互联网已经成为时代的主流&#xff0c;从此进入了互联网时代&#xff0c;对大部分人来说&#xff0c;互联网在日常生活中的应用是越来越频繁&#xff0c;大家都在互联网当中互相交流、学习、娱乐。博客正是扮演这样一个角色。博客已成为当…

[Nodejs]使用adm-zip和fs-extra压缩打包后的文件

在此之前&#xff0c;操作目录、压缩文件是通过scripts来实现的&#xff0c;在windows机器上多有不便&#xff0c;需要通过linux命令行来实现cp、rm命令&#xff1a; "cpdist": "cp -r ./dist/* ../../qw-portal/assetAllocation/", "rmdist": …

实验八 单区域OSPF路由协议配置

一、实验目的 掌握 OSPF 动态路由协议的配置、诊断方法。 二、实验步骤 1、 运行Cisco Packet Tracer软件&#xff0c;在逻辑工作区放入三台路由器、两台工作站PC及一台笔记本&#xff0c;分别点击各路由器&#xff0c;打开其配置窗口&#xff0c;关闭电源&#xff0c;分别加…

如何选择云服务器

云服务器选择概述 在选择合适的云服务器时&#xff0c;需要综合考虑多个方面的因素&#xff0c;包括但不限于云服务器的类型、配置、价格、性能、安全性、可靠性、扩展性以及服务商的品牌信誉等。以下是根据搜索结果得出的详细分析和建议。 云服务器选择详解 云服务器类型选…

Python装饰器的应用

Python 中的装饰器是一种语法糖&#xff0c;可以在运行时&#xff0c;动态的给函数或类添加功能。装饰器本质上是一个函数&#xff0c;使用 函数名就是可实现绑定给函数的第二个功能 。它的作用就是在不修改被装饰对象源代码和调用方式的前提下为被装饰对象添加额外的功能。 …

策略模式代码

import java.util.*; enum TYPE { NORMAL,CASH_DISCOUNT,CASH_RETURN}; interface Cashsuper { public double acceptCash(double money); } class CashNormal implements CashSuper{// 正常收费子类 public double accptCash(double money){ return money; …

微信小程序如何在公共组件中改变某一个页面的属性值

需求 公共组件A改变页面B的属性isShow的值。 思路 首先目前我不了解可以直接在组件中改变页面的值的方法&#xff0c;所以我通过监听的方式在B页面监听app.js的某一属性值的改变从而改变B页面的值&#xff0c;众所周知app.js的某一属性值是很容易就能更改的。 app.js globa…

Ownips+Coze海外社媒数据分析实战指南

目录 一、引言二、ISP代理简介三、应用实践——基于Ownips和coze的社媒智能分析助手3.1、Twitter趋势数据采集3.1.1、Twitter趋势数据接口分析3.1.2、Ownips原生住宅ISP选取与配置3.1.3、数据采集 3.2、基于Ownips和Coze的社媒智能助手3.2.1、Ownips数据采集插件集成3.2.2、创建…

解锁未标记图像的力量:深入探索计算机视觉中无监督卷积神经网络

引言 近年来&#xff0c;计算机视觉领域取得了显著进步&#xff0c;这在很大程度上得益于深度学习&#xff0c;尤其是卷积神经网络&#xff08;CNN&#xff09;的发展。这些强大的模型在图像分类、目标检测和分割等任务上表现出色&#xff0c;主要依靠大规模标记数据集进行监督…

Flutter 中的 FadeTransition 小部件:全面指南

Flutter 中的 FadeTransition 小部件&#xff1a;全面指南 在 Flutter 中&#xff0c;动画是一种吸引用户注意力并提供流畅用户体验的强大工具。FadeTransition 是 Flutter 提供的一个动画小部件&#xff0c;它允许子组件在不透明度上进行渐变&#xff0c;从而实现淡入和淡出效…

git基础 -- 判断 Git 输入名称是分支名还是标签名

判断 Git 输入名称是分支名还是标签名 背景 在使用 Git 进行版本控制时&#xff0c;有时需要判断一个给定的名称是分支名还是标签名。分支和标签在 Git 中是两种不同的引用类型&#xff0c;但它们的名称空间是独立的&#xff0c;因此同一个名称可以同时存在于分支和标签中。为…

Linux备份脚本

作用 Linux文件备份的作用较多&#xff0c;推荐以下几种&#xff1a; 保护文件&#xff1a;备份可以帮助用户保护文件&#xff0c;防止文件被意外删除或损坏。保证系统安全和应用安全&#xff1a;Linux系统管理人员对系统和业务应用要有一个合理的备份恢复策略&#xff0c;完…

【Unity入门】认识Unity编辑器

Unity 是一个广泛应用于游戏开发的强大引擎&#xff0c;从 1.0 版本开始到现在&#xff0c;其编辑器的基本框架一直保持稳定。其基于组件架构的设计&#xff0c;使得界面使用起来直观且高效。为了更好地理解 Unity 的界面&#xff0c;我们可以将其比喻为搭建一个舞台。以下是对…

【AI+chat】推荐一款基于大模型的智能对话机器人,支持微信公众号、企业微信应用、飞书、钉钉接入

之前写了一篇文章&#xff0c; coze配置 kimichat集成到微信公众号聊天 【AIchat】手把手配置kimichat集成到微信公众号中对话聊天 。 有同学私信我有没有开源项目&#xff0c; 这里推荐一款chatgpt-on-wechat。 官方git地址&#xff1a;https://github.com/zhayujie/ch…