ARM的三个按键实验
main.c
#include "key_inc.h"//封装延时函数void delay(int ms){int i,j;for(i=0;i<ms;i++){for(j=0;j<2000;j++){}}}int main(){//按键中断初始化key1_it_config();key2_it_config();key3_it_config();while(1){printf("in main pro\n");delay(1000);}return 0;}
src/do_irq.c
#include "stm32mp1xx_gic.h"
#include "stm32mp1xx_exti.h"
extern void printf(const char *fmt, ...);
unsigned int i = 0;
void do_irq(void)
{//irq中断处理代码unsigned int irqno = GICC->IAR&0x3ff;switch(irqno){case 99:printf("key1_intc\n");//清除GICD中断排队标志GICD->ICPENDR[3] |= (0X1<<3);//清除EXTI中断触发标志EXTI->FPR1 |= (0X1<<9);break;case 98:printf("key2_intc\n");//清除GICD中断排队标志GICD->ICPENDR[3] |= (0X1<<2);//清除EXTI中断触发标志EXTI->FPR1 |= (0X1<<8);break;case 97:printf("key2_intc\n");//清除GICD中断排队标志GICD->ICPENDR[3] |= (0X1<<1);//清除EXTI中断触发标志EXTI->FPR1 |= (0X1<<7);break;default:break;}//清除IAR寄存器中的中断号GICC->EOIR |= irqno;
}
src/key_inc.c
#include "key_inc.h"void key1_it_config()
{//使能GPIOF的外设时钟RCC->MP_AHB4ENSETR |=(0X1<<5);//PF9设置为输入模式GPIOF->MODER &=(~(0x3<<18));//设置由PF9管脚产生EXTI9事件EXTI->EXTICR3 &= (~(0xff<<8));EXTI->EXTICR3 |= (0X05<<8);//通过下降沿检测EXTI9事件是否产生EXTI->FTSR1 |= (0X1<<9);//取消EXTI9中断屏蔽EXTI->C1IMR1 |= (0X1<<9);//设置EXTI9中断全局使能GICD->ISENABLER[3] |=(0X1<<3);//设置中断优先级GICD->IPRIORITYR[24] |= (~(0x1f<<27));//设置CPUO处理当前中断GICD->ITARGETSR[24] |= (0X1<<24);//设置组0中断可以被转发到GICC层GICD->CTRL |=0X1;//设置中断优先级掩码GICC->PMR |= (0x1f<<3);//设置组0中断交给指定处理器处理GICC->CTRL |= 0X1;
}void key2_it_config()
{//使能GPIOF的外设时钟RCC->MP_AHB4ENSETR |=(0X1<<5);//PF9设置为输入模式GPIOF->MODER &=(~(0x3<<14));//设置由PF9管脚产生EXTI9事件EXTI->EXTICR3 &= (~(0xff<<24));EXTI->EXTICR3 |= (0X05<<24);//通过下降沿检测EXTI9事件是否产生EXTI->FTSR1 |= (0X1<<7);//取消EXTI9中断屏蔽EXTI->C1IMR1 |= (0X1<<7);//设置EXTI9中断全局使能GICD->ISENABLER[3] |=(0X1<<1);//设置中断优先级GICD->IPRIORITYR[24] |= (~(0x1f<<11));//设置CPUO处理当前中断GICD->ITARGETSR[24] |= (0X1<<8);//设置组0中断可以被转发到GICC层GICD->CTRL |=0X1;//设置中断优先级掩码GICC->PMR |= (0x1f<<3);//设置组0中断交给指定处理器处理GICC->CTRL |= 0X1;
}void key3_it_config()
{//使能GPIOF的外设时钟RCC->MP_AHB4ENSETR |=(0X1<<5);//PF9设置为输入模式GPIOF->MODER &=(~(0x3<<16));//设置由PF9管脚产生EXTI9事件EXTI->EXTICR3 &= (~(0XFF<<0));EXTI->EXTICR3 |= (0X05<<0);//通过下降沿检测EXTI9事件是否产生EXTI->FTSR1 |= (0X1<<8);//取消EXTI9中断屏蔽EXTI->C1IMR1 |= (0X1<<8);//设置EXTI9中断全局使能GICD->ISENABLER[3] |=(0X1<<2);//设置中断优先级GICD->IPRIORITYR[24] |= (~(0x1f<<19));//设置CPUO处理当前中断GICD->ITARGETSR[24] |= (0X1<<16);//设置组0中断可以被转发到GICC层GICD->CTRL |=0X1;//设置中断优先级掩码GICC->PMR |= (0X1F<<3);//设置组0中断交给指定处理器处理GICC->CTRL |= 0X1;
}
include/key_inc.h
#ifndef _KEY_INC_H__
#define _KEY_INC_H
#include "stm32mp1xx_gic.h"
#include "stm32mp1xx_exti.h"
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.h"
void key1_it_config();
void key2_it_config();
void key3_it_config();
#endif
相关文章:
ARM的三个按键实验
main.c #include "key_inc.h"//封装延时函数void delay(int ms){int i,j;for(i0;i<ms;i){for(j0;j<2000;j){}}}int main(){//按键中断初始化key1_it_config();key2_it_config();key3_it_config();while(1){printf("in main pro\n");delay(1000);}re…...
高架学习笔记之需求工程
目录 一、什么是软件需求 二、需求工程 2.1. 需求获取 2.2. 需求分析 2.3. 形成需求规格 2.4. 需求确认 2.5. 需求管理 2.5.1. 变更控制 2.5.2. 版本控制 2.5.3. 需求跟踪 2.5.4. 需求状态跟踪 一、什么是软件需求 软件需求目前没有统一的定义,一般是指用…...
mysql基础2多表查询
多表查询 多表关系: 一对多 案例: 部门 与 员工的关系 关系: 一个部门对应多个员工,一个员工对应一个部门 实现: 在多的一方建立外键,指向一的一方的主键 多对多 案例: 学生 与 课程的关系 关系: 一个学生可以选修多门课程,一门课程也可以…...
Qt 写一个邮件发送程序
最近在完成一个邮箱代替的告警功能,写了一个邮件发送的demo 以下为代码: #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include<QTcpSocket> namespace Ui { class MainWindow; }class MainWindow : public QMainWin…...
swagger3快速使用
目录 🍿1.导入依赖 🌭2.添加配置文件 🧂3.添加注解 🥯4.访问客户端 1.导入依赖 引入swagger3的依赖包 <dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artif…...
一键入门Ubuntu22!
目录 一、安装 二、常用目录 三、常用指令 四、用户指令 五、ssh与scp 六、服务相关 七、Python与Pycharm 八、Vim编辑器 九、Ubuntu22下使用Mysql 十、Ubuntu22下使用mongodb 十一、Ubuntu22下使用redis Ubuntu是一个基于Debian的开源操作系统,由Canoni…...
阿里云服务器价格购买价格表,2024新版报价查询
2024年腾讯云服务器优惠价格表,一张表整理阿里云服务器最新报价,阿里云服务器网整理云服务器ECS和轻量应用服务器详细CPU内存、公网带宽和系统盘详细配置报价单,大家也可以直接移步到阿里云CLUB中心查看 aliyun.club 当前最新的云服务器优惠券…...
实现防抖函数并支持第一次立刻执行(vue3 + ts环境演示)
1、先看一效果: 2、实现思路: 使用定时器setTimeout和闭包实现常规防抖功能;增加immediate字段控制第一次是否执行一次函数(true or false);增加一个flag标识,在第一次执行时,将标…...
WPF —— DataGrid数据网格
1 :DataGrid简介 DataGrid 是数据网格 : 可以显示网格数据的控件,通过自定义列模版 来去实现各种网格效果 , 可以使用以下几中标签显示不同数据 2 :DataGrid常用的组件 显示文本: DataGridTextColumn 显示复选框: DataGridChec…...
牛客题霸-SQL进阶篇(刷题记录一)
本文基于前段时间学习总结的 MySQL 相关的查询语法,在牛客网找了相应的 MySQL 题目进行练习,以便加强对于 MySQL 查询语法的理解和应用。 由于涉及到的数据库表较多,因此本文不再展示,只提供 MySQL 代码与示例输出。 部分题目因…...
网络安全实训Day12
写在前面 注意根据笔记中的缩进判断该文本所在层级。 网络空间安全实训-网络安全技术 SSL VPN SSL协议 定义:一种应用层的安全保护技术 工作流程 1.客户端与服务器通过三次握手建立TCP连接 2.客户端向服务器发送Client-Hello信息,消息中包含希望访问的…...
对话Midjourney创始人:图片仅是起步,人工智能将全面改变学习、创意和组织。
ChatGPT狂飙160天,世界已经不是之前的样子。 新建了人工智能中文站https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 发布在https://it.weoknow.com 关注我 Midjourney 是一家神奇的公司,11 人改变世界,创造伟大的产品。…...
Elasticsearch:将 ILM 管理的数据流迁移到数据流生命周期
警告:此功能处于技术预览阶段,可能会在未来版本中更改或删除。 Elastic 将努力解决任何问题,但技术预览版中的功能不受官方 GA 功能的支持 SLA 的约束。目前的最新版本为 8.12。 在本教程中,我们将了解如何将现有数据流࿰…...
LeetCode刷题记录——day6
1、https://leetcode.cn/problems/length-of-last-word/description/?envTypestudy-plan-v2&envIdtop-interview-150 直接从后往前遍历就好 class Solution { public:int lengthOfLastWord(string s) {int length0;int lens.length();for(int ilen-1;i>0;i--){if(s[i]…...
C++String类
1. 前言 String是C中操作字符串的类,它是在比较早的时候设计的STL模板,因此在某些地方设计的有些冗余 对于String类,不仅仅是学会使用它,更重要的是要从底层去理解它;本篇文章将从底层出发,模拟实现常用的S…...
Linux docker7--私有镜像仓库registry和UI搭建及使用
一、对于开源的镜像,如redis,nginx等,可以通过官方仓库Docker Hub,或者国内的阿里云等共有仓库下载获取到镜像。但是企业内对于自己的研发产品不可能往公共仓库去发布镜像的,一般都会搭建私有的镜像仓库,保…...
IDS入侵检测系统分为两大类。
一、基于签名的IDS和基于异常的IDS。 基于签名的Ids主要依赖于已知的攻击模式库来检测入侵行为,适用于检测已知的攻击模式。 基于异常的Ids则关注网络流量的行为特征,通过分析数据包之间的关系和统计模型来判断是否存在异常行为,更适用于检…...
为什么元素显示的样式跟我设置的不一样?CSS优先级详解
一、什么是CSS中的选择器优先级? 在CSS中,选择器优先级是指确定应用于元素的最相关CSS声明的算法。这个优先级决定了哪个样式规则将被应用到元素上。根据选择器的类型和特定性,CSS规定了不同的优先级,例如ID选择器比类选择器具有更…...
C语言动态内存的管理
前言 本篇博客就来探讨一下动态内存,说到内存,我们以前开辟空间大小都是固定的,不能调整这个空间大小,于是就有动态内存,可以让我们自己选择开辟多少空间,更加方便,让我们一起来看看动态内存的有…...
CASIA数据集转png HWDB2.0-2.2
https://nlpr.ia.ac.cn/databases/handwriting/Home.html CASIA在线和离线中文手写数据库 https://nlpr.ia.ac.cn/databases/handwriting/Offline_database.html CASIA-HWDB2.0-2.2 离线文本数据库是由孤立字符数据集的作者制作的。每人撰写了五页给定文本。由于数据丢失&a…...
Virtuoso ADE L仿真结果分析实战:用Calculator快速提取带宽、相位裕度和噪声
Virtuoso ADE L仿真结果深度解析:从波形到关键指标的实战技巧 面对仿真完成后满屏的波形曲线,许多工程师常陷入"数据丰富但信息匮乏"的困境。本文将聚焦两级运放案例,演示如何用Calculator函数精准提取GBW、相位裕度、噪声谱密度等…...
C++ 文件 IO 性能优化技巧
C文件IO性能优化技巧 在软件开发中,文件IO操作往往是性能瓶颈之一,尤其是处理大文件或高频读写时。C作为一门高性能语言,提供了多种优化文件IO的方法,合理运用这些技巧可以显著提升程序效率。本文将介绍几种实用的C文件IO性能优化…...
游戏开发中的“场”魔法:用梯度、散度模拟水流、烟雾与热量扩散
游戏开发中的“场”魔法:用梯度、散度模拟水流、烟雾与热量扩散 在《塞尔达传说:王国之泪》中,林克挥动魔法杖时涌动的岩浆、随风飘散的蒲公英,或是《艾尔登法环》里腐败湖面蒸腾的毒雾——这些令人屏息的动态效果背后,…...
如何快速解锁WeMod Pro功能:Wand-Enhancer完整免费指南
如何快速解锁WeMod Pro功能:Wand-Enhancer完整免费指南 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer Wand-Enhancer是一款强大的开源工具&…...
阶跃星辰 GUI-MCP 解读---(2)---决策层
本文是第二篇,主要是介绍决策层,本层在任何情况下(是/非MCP)都会用到。因为是反推解读,而且时间有限,所以可能会有各种错误,还请大家不吝指出。0x01 LocalServerLocalServer 是本地 GUI Agent 服…...
跨设备移动计算的挑战与突破:Portable-VirtualBox实现系统随身化方案
跨设备移动计算的挑战与突破:Portable-VirtualBox实现系统随身化方案 【免费下载链接】Portable-VirtualBox Portable-VirtualBox is a free and open source software tool that lets you run any operating system from a usb stick without separate installatio…...
智能散热管理终极指南:风扇转速优化与系统温控曲线定制全解析
智能散热管理终极指南:风扇转速优化与系统温控曲线定制全解析 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Tren…...
OpenCore Legacy Patcher:让旧Mac重获新生的完整方案
OpenCore Legacy Patcher:让旧Mac重获新生的完整方案 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 当您的Mac被官方系统更新拒之门外时…...
注意力机制改进效果对比实验与分析
深夜调参现场:上周三凌晨两点,盯着验证集mAP曲线在0.735附近反复横跳,已经卡了三天。 backbone换成CSPDarknet53,Neck加了BiFPN,数据增强全上了,可小目标检测的AP_s死活上不去。同事扔来一篇论文࿱…...
手把手教你本地部署DeepSeek-R1 1.5B:极速CPU推理,隐私安全有保障
手把手教你本地部署DeepSeek-R1 1.5B:极速CPU推理,隐私安全有保障 1. 项目概述 DeepSeek-R1 1.5B是一个经过蒸馏优化的轻量级语言模型,专为本地CPU推理场景设计。相比原版模型,它保留了核心的逻辑推理能力,同时大幅降…...
