按键中断实验
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 */                                       
~                                            

相关内容

热门资讯

手机系统安卓和ios系统下载地... 你有没有发现,现在手机的世界里,安卓和iOS两大系统就像是一对双胞胎,各有各的特色,让人爱不释手。今...
安卓系统最早开发公司,从安卓起... 你有没有想过,我们每天离不开的安卓系统,它究竟是由哪家公司最早开发的呢?没错,就是谷歌(Google...
安卓系统平板推荐学生用,学生适... 作为一名热爱学习的学生,你是不是也在寻找一款既实用又好用的平板电脑呢?平板电脑在学习和生活中可是个得...
安卓5.0系统多大容量,存储容... 你有没有想过,你的安卓手机里那个神秘的安卓5.0系统到底有多大容量呢?别急,今天就来给你揭秘这个谜团...
芒果嗨是安卓系统吗,揭秘这款热... 你有没有听说过“芒果嗨”这个名字?最近,这个名词在手机圈里可是火得一塌糊涂。不过,别急,今天咱们就来...
安卓系统锁屏如何破,破解攻略全... 你是不是也遇到了安卓手机锁屏的烦恼?每次解锁都要输入复杂的密码或者滑动图案,有时候真是急得团团转。别...
安卓系统app开机自启,深度解... 你有没有发现,每次手机开机,那些APP就像一群调皮的小精灵,迫不及待地跳出来和你打招呼?没错,说的就...
安卓系统拨号连接在哪,拨号连接... 你是不是也和我一样,有时候在使用安卓手机时,突然想连接一下网络,却发现不知道怎么操作?别急,今天就来...
安卓系统为什么会赢,技术革新与... 你有没有想过,为什么安卓系统在智能手机市场上如此火爆,几乎成了“手机必备”的存在呢?今天,就让我带你...
电脑可以做安卓系统么,电脑上运... 你有没有想过,电脑能不能装上安卓系统呢?这听起来是不是有点像科幻电影里的情节?别急,让我带你一探究竟...
国产安卓系统碎片化软件,软件生... 你有没有发现,现在手机上的安卓系统越来越丰富多样了?没错,这就是我们今天要聊的话题——国产安卓系统的...
安卓系统的蚂蚁花呗,蚂蚁花呗在... 你知道吗?在安卓系统的世界里,有一个超级方便的支付工具,那就是蚂蚁花呗。它就像你的贴心小助手,让你在...
安卓2系统彩蛋在哪找,揭秘隐藏... 你有没有发现,安卓2系统里竟然隐藏着一些神秘的彩蛋?没错,就是那些让你忍不住想要一探究竟的小惊喜。今...
全球最大的安卓系统,全球最大移... 你知道吗?在智能手机的世界里,有一个系统可是当之无愧的“王者”——那就是安卓系统!它就像一位全能的魔...
安卓系统就没有碎片了,迈向无缝... 你知道吗?最近在科技圈里,安卓系统可是掀起了一阵不小的波澜呢!有人说,安卓系统再也没有碎片化了?这可...
安卓系统平板电脑评测,安卓平板... 你有没有想过,在这个信息爆炸的时代,拥有一台性能卓越的安卓系统平板电脑,简直就是移动办公和娱乐的完美...
双系统安卓自动关机,双系统安卓... 你有没有遇到过这样的情况:手机里装了双系统安卓,一边是工作用的,一边是娱乐用的,结果有时候不小心,手...
圣地安列斯安卓9系统,圣地安列... 亲爱的读者,你是否也像我一样,对科技新动态充满好奇?今天,我要和你分享一个超级有趣的话题——圣地安列...
平果有安卓系统的吗,畅享智能生... 你有没有想过,手机的世界里,竟然还有这样一个有趣的现象?那就是——平果手机,竟然也有安卓系统!是不是...
vivoy27安卓系统下载,畅... 你有没有听说最近Vivo Y27这款手机的新鲜事儿?没错,就是它的安卓系统下载!今天,我就要给你来个...