ARM(中断实验) 2023.12.12

main.h

#include "key_interrupt.h"#include "myuart.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();//灯初始化led_init();//现象是发送一个a串口工具打印一个bwhile(1){}return 0;}

key_interrupt.h

#ifndef __KEY_INTERRUPT_H__
#define __KEY_INTERRUPT_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_interrupt.c

#include"key_interrupt.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->CTLR |= (0x1);//   10.设置中断优先级掩码GICC->PMR |= (0x1f<<3);//   11.允许中断被转发给CPU处理GICC->CTRL |= (0x1);}
void key3_it_config()
{//设置GPIOF时钟使能RCC->MP_AHB4ENSETR |= (0x1 << 5);//将PF8设置为输入模式GPIOF->MODER &= (~(0x3 << 16));//设置由PF8产生EXIT8事件---[7:0]的8位先清零,再置位为0x05EXTI->EXTICR3 &= (~(0xff));EXTI->EXTICR3 |= (0x05);//设置下降沿检测EXTI->FTSR1 |= (0x1 << 8);//设置中断不屏蔽EXTI->C1IMR1 |= (0x1 << 8);//设置允许中断发送到GICD中GICD->ISENABLER[3] |= (0x1 << 2);//设置优先级GICD->IPRIORITYR[24] &= (~(0x1f << 19));GICD->IPRIORITYR[24] |= (0x0 << 19);//选择进程目标处理器GICD->ITARGETSR[24] &= (~(0x3 << 16));GICD->ITARGETSR[24] |= (0x1 << 16);//允许中断到CPU接口层GICD->CTLR |= (0x1);//使能中断转发到CPU中GICC->CTRL |= 0x1;//设置优先级掩码GICC->PMR |= (0x1f << 3);}void key2_it_config()
{//1.设置GPIOF组使能----------------------PF7RCC->MP_AHB4ENSETR |= (0x1<<5);//2.设置PF7为输入模式GPIOF->MODER &= (~(0x3 << 14));//3.设置exti的事件选择为exti7模式EXTI->EXTICR2 &= (~(0xff << 24));EXTI->EXTICR2 |= (0x05 << 24);//4.设置不屏蔽中断EXTI->C1IMR1 |= (0x1 << 7);//5.设置下降沿检测EXTI->FTSR1 |= (0x1 << 7);//6.GICD允许中断进入GICD中GICD->ISENABLER[3] |= (0x1 << 1);//7.设置优先级GICD->IPRIORITYR[24] &= (~(0x1f << 11));GICD->IPRIORITYR[24] |= (0x0 << 11);//8.设置目标处理器GICD->ITARGETSR[24] &= ((~0x3 << 8));GICD->ITARGETSR[24] |= (0x1 << 8);//9.设置使能进入GICCGICD->CTLR |= (0x1);//11.设置优先级掩码GICC->PMR |= (0x1f << 3);//10.设置允许进入GICCGICC->CTRL |= 0x1;  
}

do_irq

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

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

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

相关文章

理解排序算法:冒泡排序、选择排序与归并排序

简介&#xff1a; 在计算机科学中&#xff0c;排序算法是基础且重要的概念。本文将介绍三种常见的排序方法&#xff1a;冒泡排序、选择排序和归并排序。我们将探讨它们的工作原理、特点和适用场景&#xff0c;以帮助读者更好地理解和选择合适的排序方法。 冒泡排序 冒泡排序是…

logback日志框架使用

依赖引入 <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.1.7</version> </dependency> 使用logback日志框架只需要引入以上即可&#xff0c;(我们平时使用较多的Slf4j…

浏览器提示不安全

当我们使用浏览器访问一个网站时&#xff0c;如果该网站使用的是HTTPS连接&#xff0c;那么浏览器会对其进行安全性的检查。其中一项重要的检查就是确认该网站是否拥有有效的SSL证书。然而&#xff0c;有时我们会在浏览器中看到“不安全”的警告&#xff0c;这通常是由于SSL证书…

三天精通Selenium Web 自动化 - Selenium(Java)环境搭建

1 下载JDK JDK下载地址&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2 安装和配置JDK 安装目录尽量不要有空格 D:\Java\jdk1.8.0_91; D:\Java\jre8设置环境变量&#xff1a; “我的电脑”->右键->“属性”->…

跟着官网学 Vue - 基础

1、跟 Vue 说 Hello World&#xff01; <!--跟 Vue 说 Hello World&#xff01; --><script> // 导出一个 Vue 组件 export default {// 数据data() {return {message: Hello World! lfsun}} } </script><template><!-- 使用数据中的信息渲染标题 …

C.小苯的排列构造

C-小苯的排列构造_北京信息科技大学第十五届程序设计竞赛&#xff08;同步赛&#xff09; (nowcoder.com) 凑2很容易想出来&#xff0c;但是2 4 1 3 这个内核不好想&#xff0c;算是一种尝试和经验吧 #include<bits/stdc.h> using namespace std;int n;int main() {cin&g…

Nginx命令---检查配置文件语法是否正确

介绍 使用命令检查 nginx 配置语法是否正确。 命令 检查默认配置文件&#xff1a; /sbin/nginx -t检查指定配置文件&#xff1a; /sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf

Go map 大小

如何得到一个 map 占用了多少内存 go get github.com/520MianXiangDuiXiang520/MapSizepackage mainimport ("fmt""github.com/520MianXiangDuiXiang520/MapSize" )func main() {m : make(map[int]struct{})for i : 0; i < 100; i {m[i] struct{}{}}f…

今天公司来了个拿 30K 出来的测试,算是见识到了基础的天花板

今天上班开早会就是新人见面仪式&#xff0c;听说来了个很厉害的大佬&#xff0c;年纪还不大&#xff0c;是上家公司离职过来的&#xff0c;薪资已经达到中高等水平&#xff0c;很多人都好奇不已&#xff0c;能拿到这个薪资应该人不简单&#xff0c;果然&#xff0c;自我介绍的…

CPU、内存与硬盘及IO操作

目录 1、概念简介 1.1 CPU&#xff08;Central Processing Unit&#xff0c;中央处理器&#xff09; 1.2 硬盘&#xff08;Hard Disk Drive&#xff09; 1.3 内存&#xff08;Memory&#xff09; 2、计算机程序在进行io读写操作时&#xff0c;这三者的功能和实现原理 1、概…

【C语言】结构体实现位段

引言 对位段进行介绍&#xff0c;什么是位段&#xff0c;位段如何节省空间&#xff0c;位段的内存分布&#xff0c;位段存在的跨平台问题&#xff0c;及位段的应用。 ✨ 猪巴戒&#xff1a;个人主页✨ 所属专栏&#xff1a;《C语言进阶》 &#x1f388;跟着猪巴戒&#xff0c;…

使用paddleocr识别图片文本的一种方案

pdf文本分为两种&#xff0c;一种是标准的pdf格式的文本&#xff0c;这种无需利用ocr识别&#xff0c;另外一种就是图片文本&#xff0c;这种需要进行ocr的识别。 OCR 识别文本和文本区域 ppstructure是paddleocr里面的一个子库&#xff0c;可以识别文档的页眉页脚、正文、标…

从手工测试进阶中高级测试?如何突破职业瓶颈...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、手工测试如何进…

oh-my-zsh 安装和配置

安装zsh sudo apt update sudo apt install zsh安装oh-my-zsh sh -c "$(curl -fsSL https://gitee.com/mirrors/oh-my-zsh/raw/master/tools/install.sh)"配置~/.zshrc sudo vim ~/.zshrc添加以下内容 ZSH_THEME"steeef" HISTFILE~/.zsh_history HISTS…

Linux:gdb的简单使用

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》《Linux》 文章目录 前言一、前置理解二、使用总结 前言 gdb是Linux中的调试代码的工具 一、前置理解 我们都知道要调试一份代码&#xff0c;这份代码的发布模式必须是debug。那你知道在li…

jquery实现省市区三级联动

一、技术: 前端采用的是jsp页面 后端采用springmvc+mybatis+mysql8 效果图 二、cascadeSelect.jsp页面 <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%String path = request.getContextPath();String basePath = r…

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

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

Mybatis映射接口的动态代理实现原理

Mybatis映射接口的动态代理实现原理 在上一节中&#xff0c;我们介绍了MyBatis的核心配置文件加载流程&#xff0c;Mybatis核心配置文件加载流程详解 在文中&#xff0c;我们介绍了MyBatis在加载配置文件的过程中会针对每个接口类都生成一个相应的MapperProxyFactory动态代理工…

【上海大学数字逻辑实验报告】六、时序电路

一、 实验目的 掌握同步二进制计数器和移位寄存器的原理。学会用分立元件构成2位同步二进制加计数器。学会在Quartus II上设计单向移位寄存器。学会在Quartus II上设计环形计数器。 二、 实验原理 同步计数器是指计数器中的各触发器的时钟脉冲输入端连接在一起&#xff0c;接…

FL Studio Producer Edition 21.2.2.3914中文汉化破解版新功能介绍及下载安装教程

FL Studio Producer Edition 21.2.2.3914中文汉化破解版 也就是 Image-Line 出品的一款功能强大的编曲软件&#xff0c;全名 Fruity Loops Studio 简称“FL Studio”今天突然的发现我们经常使用的水果音乐制作软件 FL STUDIO 居然从FL STUDIO 21.1.1 一下子跨越了版本号到了FL …