ARM开发(cortex-A7核中断实验)
1.实验目的:实现KEY1/LEY2/KE3三个按键,中断触发打印一句话,并且灯的状态取反;
key1 ----> LED3灯状态取反;
key2 ----> LED2灯状态取反;
key3 ----> LED1灯状态取反;
2.分析框图:

3.代码:
---key.h头文件---
#ifndef __KEY_H__
#define __KEY_H__#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_gic.h"
#include "stm32mp1xx_exti.h"typedef enum
{FALLING_TRI, //下降沿触发方式RISING_TRI, //上升沿触发方式
}trigger_t;//中断RCC章节初始化 PF9 7 8
void hal_interrupt_rcc_init();//EXTI初始化函数
//EXTI编号 GPIO组号 触发方式
void hal_exti_init(unsigned int extix,unsigned int groupx,trigger_t trix);//GIC初始化函数
//中断号,中断优先级
void hal_gic_init(unsigned int interruptx,unsigned int priority);//led初始化函数
void led_init(gpio_t* gpiox,unsigned int pin);#endif
---key.c函数实现---
#include "key.h"//中断RCC章节初始化 PF9 7 8
void hal_interrupt_rcc_init()
{//RCC章节初始化 PF9 [5]=1RCC->MP_AHB4ENSETR |= (0x1 << 5);}//EXTI初始化函数
//EXTI编号 GPIO组号 触发方式
void hal_exti_init(unsigned int extix,unsigned int groupx,trigger_t trix)
{//GPIO章节初始化 设置三个按键为输入模式GPIOF->MODER &= (~(0x3 << 2*extix));//EXTI章节初始化,引脚信号与EXTI连接//1.EXIT_EXTICR组 0x05EXTI->EXTICR[extix/4] &= (~(0xff << ((extix%4)*8)));EXTI->EXTICR[extix/4] |= (groupx << ((extix%4)*8));//2.EXTI_FTSR1 设置下降沿触发方式if(trix == FALLING_TRI)EXTI->FTSR1 |= (0x1 << extix);elseEXTI->RTSR1 |= (0x1 << extix);//3.EXTI_IMR1 设置中断不屏蔽 =1EXTI->C1IMR1 |= (0x1 << extix);}//GIC初始化函数
//中断号,中断优先级
void hal_gic_init(unsigned int interruptx,unsigned int priority)
{//GICD初始化//1.GICD_CTRL 使能组0 [0]=1GICD->CTRL |= (0x1 << 0);//2.GICD_ISENABLER组 设置GICD层中断使能GICD->ISENABLER[interruptx/32] |= (0x1 << (interruptx % 32));//3.GICD_IPRIORITYR组 设置中断优先级 操作高5位GICD->IPRIORITYR[interruptx/4] &= (~(0x1f << (interruptx % 4 * 8 + 3)));GICD->IPRIORITYR[interruptx/4] |= (priority << (interruptx % 4 * 8 + 3));//4.GICD_ITARGETSR组 设置中断目标分配给CPU0GICD->ITARGETSR[interruptx/4] &= (~(0x3 << (interruptx % 4 * 8)));GICD->ITARGETSR[interruptx/4] |= (0x1 << (interruptx % 4 * 8));//GICC初始化//1.GICC_CTRL 设置GICC层组0使能 [0]=1GICC->CTRL |= (0x1 << 0);//2.GICC_PMR 设置GICC层中断优先级 GICC->PMR |= ((priority+1) << 3);
}//led灯初始化
//参数1:GPIO组号
//参数2:引脚编号
void led_init(gpio_t* gpiox,unsigned int pin)
{//1输出模式 gpiox->MODER &= ~(0x3 << (pin*2));gpiox->MODER |= (0x1 << (pin*2));//2输出类型gpiox->OTYPER &= (~(0x1 << pin));//3输出速率gpiox->OSPEEDR &= ~(0x3 << (pin*2));//4拉电阻gpiox->PUPDR &= ~(0x3 << (pin*2));
}
---do_irq.c终端处理函数---
#include "key.h"extern void printf(const char *fmt, ...);//中断处理函数
void do_irq(void)
{//1获取中断号 IAR[9:0]unsigned int num = 0;num = GICC->IAR & 0x3ff;//2判断中断号,并且打印一句话switch(num){case 99:printf("KEY1按键中断,LED3灯取反\n");//led3灯状态取反GPIOE->ODR ^= (0x1 << 8);//3清除EXTI层中断挂起标志位 [9]=1//EXTI_FDR1 [9]=1EXTI->FPR1 |= (0x1 << 9);//4清除GICD层中断挂起标志位//GICD_ICPENDR3 [3]=1GICD->ICPENDR[3] |= (0x1 << 3);break;case 97:printf("KEY2按键中断,LED2灯取反\n");//led2灯状态取反GPIOF->ODR ^= (0x1 << 10);//清除EXTI层中断挂起标志位 [9]=1EXTI->FPR1 |= (0x1 << 7);GICD->ICPENDR[3] |= (0x1 << 1);break;case 98:printf("KEY3按键中断,LED1灯取反\n"); //led1灯状态取反GPIOE->ODR ^= (0x1 << 10);EXTI->FPR1 |= (0x1 << 8);GICD->ICPENDR[3] |= (0x1 << 2);break;}//5清楚获取到的中断号GICC->EOIR = num;}
---main.c测试文件---
#include "key.h"extern void printf(const char *fmt, ...);void delay_ms(int ms){int i,j;for(i = 0; i < ms;i++)for (j = 0; j < 1800; j++);
}#define GPIO_PIN10 10 //引脚编号
#define GPIO_PIN8 8
#define EXTI9 9 //EXTI编号
#define EXTI7 7
#define EXTI8 8
#define GPIOF_GROUP 0x05 //GPIOF组号
#define KEY1_ID 99 //中断号
#define KEY2_ID 97
#define KEY3_ID 98
#define KEY1_PRIORITY 9 //中断优先级
#define KEY2_PRIORITY 7
#define KEY3_PRIORITY 8int main()
{//使能三盏灯PE10 PF10 PE8RCC->MP_AHB4ENSETR |= (0x3 << 4);//led初始化函数led_init(GPIOE,GPIO_PIN10);led_init(GPIOF,GPIO_PIN10);led_init(GPIOE,GPIO_PIN8);//中断RCC章节初始化 PF9 7 8hal_interrupt_rcc_init();//EXTI初始化函数hal_exti_init(EXTI9,GPIOF_GROUP,FALLING_TRI);hal_exti_init(EXTI7,GPIOF_GROUP,FALLING_TRI);hal_exti_init(EXTI8,GPIOF_GROUP,FALLING_TRI);//GIC初始化函数hal_gic_init(KEY1_ID,KEY1_PRIORITY);hal_gic_init(KEY2_ID,KEY2_PRIORITY);hal_gic_init(KEY3_ID,KEY3_PRIORITY);while(1){}return 0;}
4.实验现象:


相关文章:
ARM开发(cortex-A7核中断实验)
1.实验目的:实现KEY1/LEY2/KE3三个按键,中断触发打印一句话,并且灯的状态取反; key1 ----> LED3灯状态取反; key2 ----> LED2灯状态取反; key3 ----> LED1灯状态取反; 2.分析框图: …...
关于融合项目点云pointpillars检测不显示三维检测框问题的解决
这个问题主要还是launch文件中出现了一些偏差。 launch文件的第26行 这里原先是0.6,在检测kitti的时候是0.6,由于kitti是64线激光雷达,我个人用的是16线激光雷达,所以把0.6降到了0.2.出现了三维检测框,问题解决...
spring复习:(57)PropertyOverrideConfigurer用法及工作原理
一、属性配置文件 dataSource.urljdbc:mysql://xxx.xxx.xxx.xxx/test dataSource.usernameroot dataSource.passwordxxxxxx dataSource.driverClassNamecom.mysql.jdbc.Driver #dataSource.typecom.alibaba.druid.pool.DruidDataSource二、spring配置文件 <?xml version&…...
在axios中获取文件上传进度
1.在axios 全局配置的文件中加入一个postFile 方法在上传文件时调用。 export function postFile(url, params,config) {return new Promise((resolve, reject) > {axios.post(url, params,config).then(res > {resolve(res);}).catch(err > {reject(err);})}) } 2.…...
黑马头条-kafka配置
生产者配置 NAMEDESCRIPTIONTYPEDEFAULTVALID VALUESIMPORTANCEbootstrap.servershost/port列表,用于初始化建立和Kafka集群的连接。列表格式为host1:port1,host2:port2,…,无需添加所有的集群地址,kafka会根据提供的地址发现其他的地址&…...
PMP P-01 Basic Knowledge
PMP基础知识...
java八股文面试[数据结构]——ArrayList和LinkedList区别
ArrayList和LinkedList的异同 二者的线程都不安全,相对线程安全的Vector,执行效率高。此外,ArrayList时实现了基于动态数组的数据结构,LinkedList基于链表的数据结构,对于随机访问get和set,ArrayList觉得优于LinkedLis…...
OpenCV中QR二维码的生成与识别(CIS摄像头解析)
1、QR概述 QR(Quick Response)属于二维条码的一种,意思是快速响应的意思。QR码不仅信息容量大、可靠性高、成本低,还可表示汉字及图像等多种文字信息、其保密防伪性强而且使用非常方便。更重要的是QR码这项技术是开源的,在移动支付、电影票、…...
常见排序集锦-C语言实现数据结构
目录 排序的概念 常见排序集锦 1.直接插入排序 2.希尔排序 3.选择排序 4.堆排序 5.冒泡排序 6.快速排序 hoare 挖坑法 前后指针法 非递归 7.归并排序 非递归 排序实现接口 算法复杂度与稳定性分析 排序的概念 排序 :所谓排序,就是使一串记录&#…...
css 实现四角边框样式
效果如图 此图只实现 左下与右下边角样式 右上与左上同理 /* 容器 */ .card-mini {position: relative; } /* 左下*/ .card-mini::before {content: ;position: absolute;left: 0;bottom: 0;width: 20px;height: 20px;border-bottom: 2px solid #253d64;border-left: 2px so…...
机器学习深度学习——自注意力和位置编码(数学推导+代码实现)
👨🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——注意力分数(详细数学推导代码实现) 📚订阅专栏:机器学习…...
02.案列项目Demo
1.创建项目 1. 创建项目 用pycharm 选择对应的编译器,输入对应的文件名,点击创建项目。删除默认外层生成的template和DIRS 配置项: 2. 创建App 创建appo1的命令: python manage.py startapp app01 如果使用pycharm>tool>…...
PDF校对:追求文档的精准与完美
随着数字化时代的到来,PDF已经成为了多数机构和个人首选的文件格式,原因在于它的稳定性、跨平台特性以及统一的显示效果。但是,对于任何需要公开或正式发布的文档,确保其内容的准确性是至关重要的,这就是PDF校对显得尤…...
低代码解放生产力,助力企业高效发展
近年来,随着数字化转型的推进,企业对于软件开发的需求日益显著。然而,传统的软件开发模式通常需要耗费大量时间和资源,限制了企业的快速响应能力。为了解决这一难题,低代码开发平台应运而生,成为企业和开发…...
【前端从0开始】CSS——9、浮动
1. 浮动(float) 1.1 定义 float 属性定义元素向哪个方向浮动。之前这个属性应用于图像,使文本围绕在图像周围,不过在 CSS 中,任何元素都可以浮动。浮动元素会生成一个块级框,不论它本身是何种元素。 取值…...
如何在Moonriver网络上向社区代表委托投票权利
我们之前介绍了「社区代表」这一概念,想必大家对社区代表在治理中扮演的角色和地位有了一定的了解。 本文将介绍如何将您的投票权利委托给社区代表。请注意,在委托Token给社区代表这一过程中,并非将您的Token转移给任何人,而且此…...
时序预测 | MATLAB实现基于CNN-GRU卷积门控循环单元的时间序列预测-递归预测未来(多指标评价)
时序预测 | MATLAB实现基于CNN-GRU卷积门控循环单元的时间序列预测-递归预测未来(多指标评价) 目录 时序预测 | MATLAB实现基于CNN-GRU卷积门控循环单元的时间序列预测-递归预测未来(多指标评价)预测结果基本介绍程序设计参考资料 预测结果 基本介绍 MATLAB实现基于CNN-GRU卷积…...
【李群李代数】李群控制器(lie-group-controllers)介绍——控制 SO(3) 空间中的系统的比例控制器Demo...
李群控制器SO(3)测试 测试代码是一个用于控制 SO(3) 空间中的系统的比例控制器。它通过计算控制策略来使当前状态逼近期望状态。该控制器使用比例增益 kp 进行参数化,然后进行一系列迭代以更新系统状态,最终检查状态误差是否小于给定的阈值。这个控制器用…...
DP读书:鲲鹏处理器 架构与编程(六)PCI Express 总线
处理器与服务器:PCI Express 总线 PCI Express 总线1. PCI Express 总线的特点a. 高速差分传输b. 串行传输c. 全双工端到端连接d. 基于多通道的数据传输方式e. 基于数据包的传输 2. PCI Express 总线的组成与拓扑结构a. 根复合体b. PCI Express桥c. 功能单元 3. PCI…...
Pyqt5-开源工具分解功能(文本拖拽)
开源第四篇:功能实现之拖拽功能与配置文件。 写这个功能的初衷,是因为,每次调试我都要手动敲命令,太麻烦了,想偷个懒,所以直接给这功能加上了,顺便衍生出了另一个想法,配置文件自动填写相关数据。 先看个简单的拖拽功能: 很明显吧,还是比较便捷的。所以我们本章,就在…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...
uniapp 小程序 学习(一)
利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...
什么是VR全景技术
VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...
go 里面的指针
指针 在 Go 中,指针(pointer)是一个变量的内存地址,就像 C 语言那样: a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10,通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...
