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

相关内容

热门资讯

怎么解除订阅安卓系统,安卓系统... 你是不是也和我一样,手机里订阅了好多服务,结果现在想解除订阅,却一头雾水?别急,今天就来手把手教你如...
安卓系统停用怎么开启,轻松恢复... 亲爱的手机控们,你是否曾经遇到过安卓系统突然停用的情况,让你手忙脚乱,不知所措?别担心,今天就来教你...
安卓系统电池健康度,电池健康度... 你有没有发现,你的安卓手机最近是不是有点儿不给力了?电池续航能力大不如前,充电速度也慢了不少?别急,...
安卓系统按键怎么截图,安卓系统... 你是不是也和我一样,有时候想截个图分享给朋友,却发现安卓手机的截图功能有点神秘呢?别急,今天就来手把...
购票系统安卓源代码,架构设计与... 你有没有想过,那些我们每天离不开的购票系统,它们背后的秘密是什么呢?今天,就让我带你一探究竟,揭开购...
安卓手机系统后台测试,深度解析... 你有没有发现,你的安卓手机后台总是悄悄地忙碌着?别小看了这些后台程序,它们可是手机系统稳定运行的关键...
安卓系统重启的图标,解锁设备新... 手机突然重启,是不是心里有点慌?别急,今天就来和你聊聊安卓系统重启的图标,让你一眼就能认出它,再也不...
车载智慧屏安卓系统,智能出行新... 你有没有发现,现在的车载智慧屏越来越智能了?尤其是那些搭载了安卓系统的,简直就像是个移动的小电脑,不...
安卓系统连上网权限,解锁设备无... 你有没有发现,你的安卓手机里有些应用总是偷偷连上网?别小看这个小小的网络权限,它可是能影响你隐私、消...
安卓谷歌操作系统,探索安卓谷歌... 你知道吗?在智能手机的世界里,有一个操作系统可是无人不知、无人不晓,那就是安卓谷歌操作系统。它就像一...
安卓系统手写%怎样调出,具体实... 你有没有遇到过这种情况:在使用安卓手机的时候,突然想用手写输入法来记录一些灵感或者重要信息,可是怎么...
安卓手机重置 系统设置,轻松恢... 手机用久了是不是感觉卡顿得厉害?别急,今天就来教你怎么给安卓手机来个大变身——重置系统设置!想象你的...
win如何安装安卓系统,Win... 哇,你有没有想过,让你的Win系统也能玩转安卓应用?没错,就是那种在手机上轻松自如的安卓系统,现在也...
苹果qq和安卓系统,跨平台体验... 你有没有发现,现在手机市场上,苹果和安卓的较量可是越来越激烈了呢!咱们就来聊聊这个话题,看看苹果QQ...
显示最好的安卓系统,探索最新旗... 你有没有想过,为什么安卓系统那么受欢迎呢?它就像一个魔法盒子,里面装满了各种神奇的魔法。今天,就让我...
安卓app怎么降级系统,系统版... 你有没有发现,有时候安卓手机的系统更新后,新功能虽然炫酷,但老系统用起来更顺手呢?别急,今天就来教你...
雷军脱离安卓系统,引领科技变革... 你知道吗?最近科技圈可是炸开了锅,因为我们的雷军大大竟然宣布要脱离安卓系统,这可真是让人大跌眼镜啊!...
安卓系统自动开网络,安卓系统自... 你有没有发现,手机里的安卓系统有时候会自动开启网络连接,这可真是让人又爱又恨啊!有时候,你正专心致志...
安卓系统怎样控制后台,因为服务... 手机里的安卓系统是不是感觉越来越卡了?后台程序太多,不仅耗电还影响性能。别急,今天就来教你怎么巧妙地...
安卓系统打游戏推荐,一触即达! 你有没有发现,现在手机游戏越来越好玩了?不管是休闲小游戏还是大型MMORPG,都能在手机上畅玩。但是...