2024.4.16

 三个按键的中断

do_irq.c

#include "mykey.h"
extern void printf(const char *fmt, ...);
unsigned int i = 0;
void do_irq(void) 
{//获取中断号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 97://中断处理逻辑printf("KEY2_INTC\n");//清除GICD的中断标志GICD->ICPENDR[3] |= (0x1<<1);//清除EXTI中的中断触发标志EXTI->FPR1 |= (0x1<<7);break;case 98://中断处理逻辑printf("KEY3_INTC\n");//清除GICD的中断标志GICD->ICPENDR[3] |= (0x1<<2);//清除EXTI中的中断触发标志EXTI->FPR1 |= (0x1<<8);break;}//清除IAR寄存器中保存的中断号GICC->EOIR = irqno;
}

 main.c

#include "mykey.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<2000;j++){}}}int main(){//按键中断初始化
key1_init_config();
key2_init_config();
key3_init_config();while(1)
{printf("main func\n");delay_ms(1000);}return 0; }

 mykey.c

#include "mykey.h"void key1_init_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);// 全局使能99号中断GICD->ISENABLER[3] |= (0x1<<3);// 设置99号中断的优先级GICD->IPRIORITYR[24] &= (~(0x1f<<27));//最高优先级// 设置99号中断的目标处理器GICD->ITARGETSR[24] |= (0x1<<24);// 允许组0中断被转发到GICC层GICD->CTRL |= 0x1;// 设置中断优先级掩码GICC->PMR |= (0x1f<<3);// 允许组0中断被转发给处理器GICC->CTRL |= 0x1;}
void key2_init_config()
{// 使能GPIOF外设时钟RCC->MP_AHB4ENSETR |= (0x1<<5);// 设置PF7为输入GPIOF->MODER &= (~(0X3<<14));// 设置PF7产生EXTI7事件EXTI->EXTICR2 &= (~(0xff<<24));EXTI->EXTICR2 |= (0x05<<24);// 设置下降沿检测EXTI7事件EXTI->FTSR1 |= (0x1<<7);// 取消EXTI7事件的屏蔽EXTI->C1IMR1 |= (0x1<<7);// 全局使能97号中断GICD->ISENABLER[3] |= (0x1<<1);// 设置97号中断的优先级GICD->IPRIORITYR[24] &= (~(0x1f<<11));//最高优先级// 设置99号中断的目标处理器GICD->ITARGETSR[24] |= (0x1<<8);// 允许组0中断被转发到GICC层GICD->CTRL |= 0x1;// 设置中断优先级掩码GICC->PMR |= (0x1f<<3);// 允许组0中断被转发给处理器GICC->CTRL |= 0x1;
}void key3_init_config()
{// 使能GPIOF外设时钟RCC->MP_AHB4ENSETR |= (0x1<<5);// 设置PF8为输入GPIOF->MODER &= (~(0X3<<16));// 设置PF8产生EXTI8事件EXTI->EXTICR3 &= (~(0xff));EXTI->EXTICR3 |= (0x05);// 设置下降沿检测EXTI8事件EXTI->FTSR1 |= (0x1<<8);// 取消EXTI8事件的屏蔽EXTI->C1IMR1 |= (0x1<<8);// 全局使能98号中断GICD->ISENABLER[3] |= (0x1<<2);// 设置97号中断的优先级GICD->IPRIORITYR[24] &= (~(0x1f<<19));//最高优先级// 设置99号中断的目标处理器GICD->ITARGETSR[24] |= (0x1<<16);// 允许组0中断被转发到GICC层GICD->CTRL |= 0x1;// 设置中断优先级掩码GICC->PMR |= (0x1f<<3);// 允许组0中断被转发给处理器GICC->CTRL |= 0x1;
}

 

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

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

相关文章

java绘图在ubuntu报错

把JRT网站部署到ubuntu桌面系统上&#xff0c;开始没测试绘图部分功能&#xff0c;只试了连PostGreSql部分正常。后面试了生成位图部分发现报错。 报下面错误&#xff1a; (ColorModel.java:220)\n\tat java.desktop/java.awt.image.BufferedImage.(BufferedImage.java:286)\n…

大历史下的 tcp:从早期拥塞控制 到 bbr 再到未来

TCP协议有了拥塞控制机制&#xff0c;为什么还会网络拥塞&#xff1f; 随着骨干带宽增长&#xff0c;拥塞被阻滞在接入网&#xff0c;大规模拥塞崩溃难再呈现&#xff0c;tcp 拥塞控制(不仅限于 tcp&#xff0c;但以 tcp 为主线来说)从避免崩溃&#xff0c;保证可用性逐渐转到…

【从浅学到熟知Linux】进程控制下篇=>进程程序替换与简易Shell实现(含替换原理、execve、execvp等接口详解)

&#x1f3e0;关于专栏&#xff1a;Linux的浅学到熟知专栏用于记录Linux系统编程、网络编程等内容。 &#x1f3af;每天努力一点点&#xff0c;技术变化看得见 文章目录 进程程序替换什么是程序替换及其原理替换函数execlexeclpexecleexecvexecvpexecvpeexecve 替换函数总结实现…

JavaScript基础:js介绍、变量、数据类型以及类型转换

目录 介绍 引入方式 内部方式 外部形式 注释和结束符 单行注释 多行注释 结束符 输入和输出 输出 输入 变量 声明 赋值 关键字 变量名命名规则 常量 数据类型 数值类型 字符串类型 布尔类型 undefined 类型转换 隐式转换 显式转换 Number ✨介绍 &a…

500元左右的运动耳机怎么选?五大质量超群品牌分享

在运动中&#xff0c;一款合适的耳机不仅可以提升运动的乐趣&#xff0c;更能激励我们坚持锻炼&#xff0c;在市场上的运动耳机种类繁多&#xff0c;价格不一&#xff0c;如何选择一款既适合自己又物有所值的运动耳机呢&#xff1f;特别是在500元左右的预算范围内&#xff0c;我…

多规格产品应该如何设置呢?

今天一用户从供应商手中拿到产品价目表&#xff0c;但是设置起来蒙圈了&#xff0c;接下来我们就一起设置一下吧&#xff5e; 一、产品价格表 我们通过供应商手中拿到产品价目表是这个样子的&#xff1a; 5bea1202312081615331303.png 我们可以看到此产品的销售客价根据不同…

【中间件】ElasticSearch简介和基本操作

一、简介 Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎&#xff0c;支持各种数据类型&#xff0c;包括文本、数字、地理、结构化、非结构化 ,可以让你存储所有类型的数据&#xff0c;能够解决不断涌现出的各种用例。其构成如下&#xff1a; 说明&#xff1…

【SVN】clean up报错:Cleanup failed to process the following paths 解决方法

报错来源&#xff1a;代码更新有一个文件既不能接受自己的也不能接受别人的&#xff0c;只能取消&#xff0c;再提交提醒clean up&#xff0c;随后报标题错误。 解决方法&#xff1a;参考https://www.cnblogs.com/pinpin/p/11395438.html 注&#xff1a;如果clean up的时候有…

【亲测有用】2024年timm从本地加载模型

有图有真相&#xff1a;https://github.com/huggingface/pytorch-image-models/discussions/1826 好使。 其他的过时的方法就别看了。&#xff08;当然我这个过几年也会过时&#xff09;

亚信安慧AntDB:为安全加码

亚信安慧AntDB分布式数据库凭借平滑扩展、高可用性和低成本三大核心优势&#xff0c;在业界获得了极高的评价和认可。这些优点不仅为AntDB提供了巨大的市场发展潜力&#xff0c;也使其成为众多企业在数据管理上的首选解决方案。 AntDB的平滑扩展特性极大地提升了企业的灵活性和…

asyncio异步编程

参考视频&#xff1a;02 协程_哔哩哔哩_bilibili 1.协程&#xff1a;&#xff08;不是计算机中真实存在的&#xff0c;人为创造出的概念&#xff09;&#xff0c;也可称为微线程。 本质是用一个线程在一段代码中来会切换游走的线程&#xff0c;是一种用户态内的上下文切换技术…

Leetcode刷题(异或)

一、2980. 检查按位或是否存在尾随零 奇数二进制形式最右一位一定为1 偶数二进制形式最右一位一定为0 要存在尾随0至少要两个偶数进行或运算 代码 class Solution:def hasTrailingZeros(self, nums: List[int]) -> bool:cnt 0for x in nums:if x%20:cnt1return True if c…