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;}

运行结果:

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

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

相关文章

基于 ESP32-S3 的 Walter 开发板

Walter 是一款基于 ESP32-S3 且拥有 5G LTE 连接功能的新型开源开发套件。 近日&#xff0c;比利时公司 DPTechnics BV 推出了一款基于乐鑫 ESP32-S3 且拥有 5G LTE 连接功能的新型开源开发套件。该套件即将在 Crowd Supply 平台上发布&#xff0c;您可以点击此处了解详情。 无…

class068 更多的动态规划【算法】

class068 更多的动态规划【算法】 算法讲解068【必备】见识更多二维动态规划题目 code1 115. 不同的子序列 // 不同的子序列 // 给你两个字符串 s 和 t &#xff0c;统计并返回在 s 的 子序列 中 t 出现的个数 // 测试链接 : https://leetcode.cn/problems/distinct-subseque…

Mac如何设置control+space切换上一中输入法

#设置方法# *搜索输入法 系统设置-搜索&#xff1a;输入法&#xff0c;并点击键盘快捷键 *点击输入法&#xff0c;勾选&#xff1a;选择上一个输入法&#xff0c;点击完成。

漂亮的WPF界面 流行的一个界面,向上悬浮的窗口,终于试成功了

目前随便打开个APP&#xff0c;就可以看到一个悬浮的窗口 今天测试一下目前流行的一个界面&#xff0c;向上悬浮的窗口&#xff0c;终于试成功了。看着还不错的。

.net core提示The xx field is required,One or more validation errors occurred

访问接口时缺少model中的参数时&#xff0c;会提示&#xff1a; The xx field is required One or more validation errors occurred原因是.net core webapi默认参数为不可空&#xff0c;因此会验证并报错。 解决方案&#xff1a; 在项目的.csproj中&#xff0c;修改Nullable…

Leetcode—2960.统计已测试设备【简单】

2023每日刷题&#xff08;五十六&#xff09; Leetcode—2960.统计已测试设备 实现代码 int countTestedDevices(int* batteryPercentages, int batteryPercentagesSize) {int cnt 0;int ans 0;for(int i 0; i < batteryPercentagesSize; i) {int t batteryPercentage…

装机必备 | 超赞OCR文本识别小工具 Text Scanner

Text Scanner 是一款功能强大的图片扫描工具软件,该软件利用光学字符识别技术&#xff0c;来将图片上的文字内容&#xff0c;直接转换为可编辑文本&#xff0c;实用性很强。 光学字符识别&#xff08;OCR&#xff09;&#xff1a;Text Scanner for Mac采用了先进的OCR技术&…

qt 使用百度在线地图 方法2

使用百度在线地图两个关键点&#xff0c;一是html页面准备&#xff1b;二是qt 与js 语言的交互。 1&#xff0c;html页面的准备&#xff0c;双击页面就可以出现如下效果。 主要代码&#xff1a; <!DOCTYPE html> <html> <head><meta http-equiv"C…

【Maven技术专题】「入门到精通」教你如何使用Maven中引用依赖本地Jar包,并进行打包输出

前言 在使用Maven管理Java项目时&#xff0c;有时需要引入一些存放在系统特定位置的JAR文件。这些JAR文件可能是你自己编写的&#xff0c;也可能是其他来源的。无论是哪种情况&#xff0c;使用 Maven 的 system 范围和 systemPath 参数&#xff0c;可以方便地引入这些本地依赖…

Logstash输入Kafka输出Es配置

Logstash介绍 Logstash是一个开源的数据收集引擎&#xff0c;具有实时管道功能。它可以从各种数据源中动态地统一和标准化数据&#xff0c;并将其发送到你选择的目的地。Logstash的早期目标主要是用于收集日志&#xff0c;但现在的功能已经远远超出这个范围。任何事件类型都可…

Python从入门到精通九:Python异常、模块与包

了解异常 什么是异常 当检测到一个错误时&#xff0c;Python解释器就无法继续执行了&#xff0c;反而出现了一些错误的提示&#xff0c;这就是所谓的“异常”, 也就是我们常说的BUG bug单词的诞生 早期计算机采用大量继电器工作&#xff0c;马克二型计算机就是这样的。 19…

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

简介&#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; “我的电脑”->右键->“属性”->…

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…

今天公司来了个拿 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;可以识别文档的页眉页脚、正文、标…