按键中断实验
admin
2024-03-04 06:21:44
0

key.h

  1 #ifndef __KEY_H__2 #define __KEY_H__3 4 #include "stm32mp1xx_gpio.h"5 #include "stm32mp1xx_gic.h"6 #include "stm32mp1xx_rcc.h"7 #include "stm32mp1xx_exti.h"8 9 10 //需要初始化GPIOF key1 = pf pin 911 void hal_gpio_key1_init(void);12 13 14 //初始化exti 15 void hal_exti_key1_init(void);16 17 //初始化gicd18 void hal_gicd_key1_init(void);19 20 //初始化gicc21 void hal_gicc_key1_init(void);22 23 #endif                                
~                                         
~                                         
~                                         

IRQ中断执行代码:

  1 #include "key.h"2 //#include "led.h"3 4 extern void printf(const char *fmt, ...);5 extern void delay_ms(int ms);6 7 unsigned int i = 0;8 void do_irq(void)9 {10     printf("key1 is pressed\n\r");11     //获取中断号12     i = GICC->IAR;13 14     printf("i = %d\n\r",i);15     i &= (0x3ff);16     //判断中断号17     if(99 == i)18     { 19 20   21         GICC->EOIR &= ~(0x3ff);             22         GICC->EOIR |= ((0x3ff)&i);  23             //clear                         24         //99/32 = 3---3                  25         GICD->ICPENDR[3] |= (0x1 <<3);26   27         EXTI->FPR1 |= (0x1 <<9);  28 29  30     //清除中断号以及中断挂起标志    31         32     }   33         34  35     return;36 }

key.c

  1 #include "key.h"                               2                                                3                                                4                                                5 //需要初始化GPIOF key1 = pf pin 9              6 void hal_gpio_key1_init(void)                  7 {                                              8     //RCC使能GPIOF                             9     RCC->MP_AHB4ENSETR |= (0X1 <<5);           10                                                11     //GPIOF pf9设置为input                     12     GPIOF->MODER &= ~(0x3 <<(9*2));            13                                                14     return;                                    15 }                                              16                                                17                                                18 //初始化exti                                   19 void hal_exti_key1_init(void)                  20 {                                              21     EXTI->EXTICR3 &= ~(0XFF <<8);              22     EXTI->EXTICR3 |= (0x05 <<8);               23                                                24     EXTI->FTSR1 |= (0X1 <<9);                  25                                                26     EXTI->C1IMR1 |= (0X1 <<9);                 27                                                28 /*                                             29     EXTI->FPR1 |= (0x1 <<9);                   30 */                                             31     return;                                    32 }                                              33                                                34 //初始化gicd                                   35 void hal_gicd_key1_init(void)                  36 {                                              37     GICD->CTRL |= (0X1);                       38                                                39     //BIT 3                                    40     GICD->ISENABLER[3] |= (0X1<<3);            41                                                42     //99/4 = 24---3; 3:24~31 -->24+3~31        43     GICD->IPRIORITYR[24] &= ~(0x1f <<27);      44     GICD->IPRIORITYR[24] |= (0x01 <<27);       45                                                46     //99/4 = 24---3; 3*8 = 24; [25~24]         47     GICD->ITARGETSR[24] &= ~(0x3 <<24);        48     GICD->ITARGETSR[24] |= (0x1 <<24);         49                                                50 /*                                             51     //clear                                    52     //99/32 = 3---3                            53     GICD->ICPENDR[3] |= (0x1 <<3);             54 */                                             55     return;                                    56 }                                              57                                                58 //初始化gicc                                   59 void hal_gicc_key1_init(void)                  60 {                                              61     GICC->CTRL |= (0x1<<0);                    62                                                63     GICC->PMR &= ~(0x1f <<3);                  64     GICC->PMR |= (0X11 <<3);                   65                                                66 /*                                             67                                                68     GICC->EOIR &= ~(0x3ff);                    69     GICC->EOIR |= ((0x3ff)&GICC->IAR);         70                                                71 */                                             72 }                                              73                                                74                                                75                                                
~                                                  

main.c

  1 //#include "led.h"                       2 #include "key.h"                         3                                          4 extern void printf(const char *fmt, ...);5 void delay_ms(int ms)                    6 {                                        7     int i,j;                             8     for(i = 0; i < ms;i++)               9         for (j = 0; j < 1800; j++);      10 }                                        11                                          12                                          13 int main(void)                           14 {                                        15     hal_gpio_key1_init();                16                                          17     hal_exti_key1_init();                18                                          19     hal_gicd_key1_init();                20                                          21     hal_gicc_key1_init();                22     while(1)                             23     {                                    24         ;                                25     }                                    26     return 0;                            27 }                                        28 /*                                       29      LED1(INIT);//led1_init();           30     LED2(INIT);//led2_init();            31     LED3(INIT);//led3_init();            32     LED1(ON);//led1_on();                33         delay_ms(500);                   34         LED1(OFF);//led1_off();          35         delay_ms(500);                   36                                          37         LED2(ON);//led2_on();            38         delay_ms(500);                   39         LED2(OFF);//led2_off();          40         delay_ms(500);                   41                                          42         LED3(ON);//led3_on();            43         delay_ms(500);                   44         LED3(OFF);//led3_off();          45         delay_ms(500);                   46                                          47         LED2(ON);//led2_on();            48         delay_ms(500);                   49         LED2(OFF);//led2_off();          50         delay_ms(500);                   51                                          52                                          53 */                                       
~                                            

相关内容

热门资讯

【MySQL】锁 锁 文章目录锁全局锁表级锁表锁元数据锁(MDL)意向锁AUTO-INC锁...
【内网安全】 隧道搭建穿透上线... 文章目录内网穿透-Ngrok-入门-上线1、服务端配置:2、客户端连接服务端ÿ...
GCN的几种模型复现笔记 引言 本篇笔记紧接上文,主要是上一篇看写了快2w字,再去接入代码感觉有点...
数据分页展示逻辑 import java.util.Arrays;import java.util.List;impo...
Redis为什么选择单线程?R... 目录专栏导读一、Redis版本迭代二、Redis4.0之前为什么一直采用单线程?三、R...
【已解决】ERROR: Cou... 正确指令: pip install pyyaml
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
Lock 接口解读 前置知识点Synchronized synchronized 是 Java 中的关键字,...
Win7 专业版安装中文包、汉... 参考资料:http://www.metsky.com/archives/350.htm...
3 ROS1通讯编程提高(1) 3 ROS1通讯编程提高3.1 使用VS Code编译ROS13.1.1 VS Code的安装和配置...
大模型未来趋势 大模型是人工智能领域的重要发展趋势之一,未来有着广阔的应用前景和发展空间。以下是大模型未来的趋势和展...
python实战应用讲解-【n... 目录 如何在Python中计算残余的平方和 方法1:使用其Base公式 方法2:使用statsmod...
学习u-boot 需要了解的m... 一、常用函数 1. origin 函数 origin 函数的返回值就是变量来源。使用格式如下...
常用python爬虫库介绍与简... 通用 urllib -网络库(stdlib)。 requests -网络库。 grab – 网络库&...
药品批准文号查询|药融云-中国... 药品批文是国家食品药品监督管理局(NMPA)对药品的审评和批准的证明文件...
【2023-03-22】SRS... 【2023-03-22】SRS推流搭配FFmpeg实现目标检测 说明: 外侧测试使用SRS播放器测...
有限元三角形单元的等效节点力 文章目录前言一、重新复习一下有限元三角形单元的理论1、三角形单元的形函数(Nÿ...
初级算法-哈希表 主要记录算法和数据结构学习笔记,新的一年更上一层楼! 初级算法-哈希表...
进程间通信【Linux】 1. 进程间通信 1.1 什么是进程间通信 在 Linux 系统中,进程间通信...
【Docker】P3 Dock... Docker数据卷、宿主机与挂载数据卷的概念及作用挂载宿主机配置数据卷挂载操作示例一个容器挂载多个目...