当前位置: 首页 > news >正文

ARM:作业3

按键中断代码编写

代码:

key_it.h

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

key_it.c

#include"key_it.h"void key1_it_config()
{//1.设置GPIOF时钟使能RCC->MP_AHB4ENSETR |= (0X1<<5);// 2.将PF9管脚设置为输入GPIOF->MODER &= (~(0x3<<18));//3.设置由PF9产生EXTI9事件EXTI->EXTICR3 &= (~(0XFF<<8));EXTI->EXTICR3 |= (0x05<<8);// 4.设置EXTI9事件的检测方式为下降沿检测EXTI->FTSR1 |= (0x1<<9);// 5.允许中断不屏蔽,可以被转发到GICEXTI->C1IMR1 |= (0x1<<9);// 6.允许EXTI9(99号)中断被保存在组0中GICD->ISENABLER[3]|= (0x1<<3);// 7.设置99号中断优先级GICD->IPRIORITYR[24] &= (~(0x1f<<27));GICD->IPRIORITYR[24] |= (0x0<<27);// 8.设置99号中断可以被CPU0处理GICD->ITARGETSR[24] &= (~(0x3<<24));GICD->ITARGETSR[24] |= (0x1<<24);//9.允许99号中断被转发到CPU接口层GICD->CTRL |= 0x1;//10.设置中断优先级掩码GICC->PMR |= (0x1f<<3);//11.允许中断被转发给CPU处理GICC->CTRL |=0x1;
}
void key2_it_config()
{//1.设置GPIOF时钟使能RCC->MP_AHB4ENSETR |= (0X1 << 5);// 2.将PF7管脚设置为输入GPIOF->MODER &= (~(0x3 << 14));//3.设置由PF7产生EXTI7事件EXTI->EXTICR2 &= (~(0XFF << 24));EXTI->EXTICR2 |= (0x05 << 24);// 4.设置EXTI7事件的检测方式为下降沿检测EXTI->FTSR1 |= (0x1 << 7);// 5.允许中断不屏蔽,可以被转发到GICEXTI->C1IMR1 |= (0x1 << 7);// 6.允许EXTI7(97号)中断被保存在组0中GICD->ISENABLER[3] |= (0x1 << 1);// 7.设置97号中断优先级GICD->IPRIORITYR[24] &= (~(0x1f << 11));GICD->IPRIORITYR[24] |= (0x0 << 11);// 8.设置97号中断可以被CPU0处理GICD->ITARGETSR[24] &= (~(0x3 << 8));GICD->ITARGETSR[24] |= (0x1 << 8);//9.允许97号中断被转发到CPU接口层GICD->CTRL |= 0x1;//10.设置中断优先级掩码GICC->PMR |= (0x1f << 3);//11.允许中断被转发给CPU处理GICC->CTRL |= 0x1;
}
void key3_it_config()
{//1.设置GPIOF时钟使能RCC->MP_AHB4ENSETR |= (0X1 << 5);// 2.将PF8管脚设置为输入GPIOF->MODER &= (~(0x3 << 16));//3.设置由PF8产生EXTI8事件EXTI->EXTICR3 &= (~(0XFF << 0));EXTI->EXTICR3 |= (0x05 << 0);// 4.设置EXTI8事件的检测方式为下降沿检测EXTI->FTSR1 |= (0x1 << 8);// 5.允许中断不屏蔽,可以被转发到GICEXTI->C1IMR1 |= (0x1 << 8);// 6.允许EXTI8(98号)中断被保存在组0中 98/32=3...2GICD->ISENABLER[3] |= (0x1 << 2);// 7.设置98号中断优先级   98/4=24...2     2*8+3=19GICD->IPRIORITYR[24] &= (~(0x1f << 19));GICD->IPRIORITYR[24] |= (0x0 << 19);// 8.设置98号中断可以被CPU0处理 98/4=24...2GICD->ITARGETSR[24] &= (~(0x3 << 16));GICD->ITARGETSR[24] |= (0x1 << 16);//9.允许97号中断被转发到CPU接口层GICD->CTRL |= 0x1;//10.设置中断优先级掩码GICC->PMR |= (0x1f << 3);//11.允许中断被转发给CPU处理GICC->CTRL |= 0x1;
}

do_irq.c

#include "key_it.h"   
extern void printf(const char *fmt, ...);
unsigned int i = 0;
void do_irq(void) 
{//获取中断号,根据中断号的不同进行不同的中断处理int irqno;irqno=GICC->IAR&0x3ff;switch(irqno){case 99:                           printf("key1 int\n");//清除exti中断标志位EXTI->FPR1 |=(0x1 << 3);//清除GICD中断标志位GICD->ICPENDR[3] = (0x1 << 3);break;case 97:printf("key2 int\n");// 清除exti中断标志位EXTI->FPR1 |= (0x1 << 7);// 清除GICD中断标志位GICD->ICPENDR[3] = (0x1 << 1);break;case 98:printf("key3 int\n");// 清除exti中断标志位EXTI->FPR1 |= (0x1 << 8);// 清除GICD中断标志位GICD->ICPENDR[3] = (0x1 << 2);break;}//清除IAR寄存器的值GICC->EOIR = irqno;
}

main.c

#include "key_it.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();//现象是发送一个a串口工具打印一个bwhile(1){printf("main func\n");delay(2000);}return 0;}

运行结果:

相关文章:

ARM:作业3

按键中断代码编写 代码: key_it.h #ifndef __KEY_IT_H__ #define __KEY_IT_H__#include "stm32mp1xx_gpio.h" #include "stm32mp1xx_exti.h" #include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gic.h"void key1_it_config(); voi…...

基于OpenCV+CNN+IOT+微信小程序智能果实采摘指导系统——深度学习算法应用(含python、JS工程源码)+数据集+模型(二)

目录 前言总体设计系统整体结构图系统流程图 运行环境Python环境TensorFlow 环境Jupyter Notebook环境Pycharm 环境微信开发者工具OneNET云平台 相关其它博客工程源代码下载其它资料下载 前言 本项目基于Keras框架&#xff0c;引入CNN进行模型训练&#xff0c;采用Dropout梯度…...

*上位机的定义

上位机是指在分布式控制系统中&#xff0c;负责监控和控制下位机&#xff08;也称为远程终端设备&#xff09;的计算机或者计算机网络。它通常是一个高性能的计算设备&#xff0c;运行着特定的监控软件&#xff0c;用于实时监测、控制和管理下位机设备。 上位机负责与各个下位…...

架构LAMP

目录 1.什么是LAMP 2.LAMP组成及作用 3.搭建Apache httpd服务 4.编译安装mysqld 服务 5.编译安装PHP 解析环境 6.安装论坛 1.什么是LAMP LAMP架构是目前成熟的企业网站应用模式之一&#xff0c;指的是协同工作的一整套系统和相关软件&#xff0c;能够提供动态Web站点服务…...

vue实现浏览器不同分辨率下的不同样式,css的媒体查询与js判断当前浏览器宽度

前言&#xff1a; 实现实现浏览器不同分辨率下的不同样式的方法很多&#xff0c;这里整理两种&#xff0c;1个是css的媒体查询来实现&#xff0c;另一个是js判断当前浏览器的宽度&#xff0c;然后动态给他添加不同的class名&#xff0c;或者动态用style修改样式&#xff0c;添加…...

CentOS7 安装包 MariaDB 10.4.x

CentOS7 安装包 MariaDB 10.4.x 统一 MariaDB安装包 https://www.alipan.com/s/fvLg3gN7LPX 提取码: nh81 打开「阿里云盘」...

js中箭头函数简单介绍

1.箭头函数是 ES6 中新增的一种函数定义方式&#xff0c; 简单举例为 var nameA function(a){return a} 可以用箭头函数简化为 var nameA a >a; 返回的是你输入的值 比如 nameA(5) 返回的就是5 nameA(2) 返回的就是2 以上两个表达的含义是一样的。nameA为名字 2.…...

分布式ID服务实践

背景 分布式场景下需要一个全局 ID 来标识唯一性&#xff0c;比如在单数据库时通过表唯一主键即可实现唯一 ID&#xff0c;分库分表时就需要全局唯一 ID。 业务对唯一 ID 的要求如下&#xff1a; 全局唯一性 不能出现重复的 ID 号&#xff0c;既然是唯一标识&#xff0c;这…...

YOLOv8改进 | 2023主干篇 | 利用RT-DETR特征提取网络PPHGNetV2改进YOLOv8(超级轻量化精度更高)

一、本文介绍 本文给大家带来利用RT-DETR模型主干HGNet去替换YOLOv8的主干&#xff0c;RT-DETR是今年由百度推出的第一款实时的ViT模型&#xff0c;其在实时检测的领域上号称是打败了YOLO系列&#xff0c;其利用两个主干一个是HGNet一个是ResNet&#xff0c;其中HGNet就是我们…...

C现代方法(第26章)笔记——<stdarg.h>、<stdlib.h>和<time.h>标准库

文章目录 第26章 <stdarg.h>、<stdlib.h>和<time.h>标准库26.1 <stdarg.h>: 可变参数26.1.1 调用带有可变参数列表的函数26.1.2 v...printf函数26.1.3 v...scanf函数(C99) 26.2 <stdlib.h>: 通用的实用工具26.2.1 数值转换函数26.2.1.1 测试数值…...

CCKS2023-面向金融领域的主体事件检测-亚军方案分享

赛题分析 大赛地址 https://tianchi.aliyun.com/competition/entrance/532098/introduction?spma2c22.12281925.0.0.52b97137bpVnmh 任务描述 主体事件检测是语言文本分析和金融领域智能应用的重要任务之一&#xff0c;如在金融风控领域往往会对公司主体进行风险事件的检测…...

Linux下通过find找文件---通过修改时间查找(-mtime)

通过man手册查找和-mtime选项相关的内容 man find | grep -A 3 mtime # 这里简单介绍了 -mtime &#xff0c;还有一个简单的示例-mtime n Files data was last modified n*24 hours ago. See the comments for -atime to understand how rounding affects the interpretati…...

图文教程:stable-diffusion的基本使用教程 txt2img(多图)

之前我介绍了SD的安装过程&#xff0c;那么这篇将介绍怎么使用SD 使用模型 SD安装好之后&#xff0c;我们只有一个默认的模型。这个模型很难满足我们的绘图需求&#xff0c;那么有2种方法。 1是自己训练一个模型&#xff08;有门槛&#xff09;2是去网站上找一个别人练好的模…...

VisualSVN Server的安装全过程

目录 背景: 安装过程&#xff1a; 步骤1&#xff1a; 步骤2&#xff1a; 步骤3&#xff1a; 步骤4&#xff1a; 步骤5&#xff1a; 安装出现的bug&#xff1a; 问题: 解决办法: 总结: 背景: VisualSVN Server 是一款免费的 SVN (Subversion) 服务器软件&#xff0c…...

Python 进阶(十六):二进制和ASCII码的转换(binascii 模块)

大家好&#xff0c;我是水滴~~ 本文详细介绍了Python中的binascii模块及其使用方法。通过binascii模块&#xff0c;我们可以方便地进行二进制和ASCII字符串之间的转换操作。文章中包含大量的示例代码&#xff0c;希望能够帮助新手同学快速入门。 《Python入门核心技术》专栏总…...

CSS Grid布局入门:从零开始创建一个网格系统

CSS Grid布局入门&#xff1a;从零开始创建一个网格系统 引言 在响应式设计日益重要的今天&#xff0c;CSS Grid布局系统是前端开发中的一次革新。它使得创建复杂、灵活的布局变得简单而直观。本教程将通过分步骤的方式&#xff0c;让你从零开始掌握CSS Grid&#xff0c;并在…...

java--Collection的遍历方式

1.迭代器概述 迭代器是用来遍历集合的专用方式(数组没有迭代器)&#xff0c;在java中迭代器是Iterator。 2.Collection集合获取迭代器的方法 3.Iterator迭代器中的常用方法 4.增强for循环 ①增强for可以用来遍历集合或数组。 ②增强for遍历集合&#xff0c;本质就是迭代器遍…...

现代雷达车载应用——第2章 汽车雷达系统原理 2.2节

经典著作&#xff0c;值得一读&#xff0c;英文原版下载链接【免费】ModernRadarforAutomotiveApplications资源-CSDN文库。 2.2 汽车雷达架构 从顶层来看&#xff0c;基本的汽车雷达由发射器&#xff0c;接收器和天线组成。图2.2给出了一种简化的单通道连续波雷达结构[2]。这…...

Ajax跨域请求

最近使用js构造请求时发生了CORS跨域问题&#xff0c;mark一下 ajax跨域&#xff0c;这应该是最全的解决方案了 | Dailc的个人主页Everything about dailchttps://dailc.github.io/2017/03/22/ajaxCrossDomainSolution.htmlAJAX - 廖雪峰的官方网站研究互联网产品和技术&#…...

python 中Windows编程一些心得

主要思路 当我们显示所有消息的信息时&#xff0c;我们可以知道Windows后台是如何传递消息给我们&#xff0c;但是并不会把所有东西写进开发文档 &#xff0c;这有一定的原因 但是 我们要自己去理解或者猜想开发者思路或者根据反馈结果来分析消息的作用&#xff0c;不然永远只…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型

在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重&#xff0c;适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解&#xff0c;并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...

Linux安全加固:从攻防视角构建系统免疫

Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...

echarts使用graphic强行给图增加一个边框(边框根据自己的图形大小设置)- 适用于无法使用dom的样式

pdf-lib https://blog.csdn.net/Shi_haoliu/article/details/148157624?spm1001.2014.3001.5501 为了完成在pdf中导出echarts图&#xff0c;如果边框加在dom上面&#xff0c;pdf-lib导出svg的时候并不会导出边框&#xff0c;所以只能在echarts图上面加边框 grid的边框是在图里…...