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

相关内容

热门资讯

电视安卓系统哪个品牌好,哪家品... 你有没有想过,家里的电视是不是该升级换代了呢?现在市面上电视品牌琳琅满目,各种操作系统也是让人眼花缭...
安卓会员管理系统怎么用,提升服... 你有没有想过,手机里那些你爱不释手的APP,背后其实有个强大的会员管理系统在默默支持呢?没错,就是那...
安卓系统软件使用技巧,解锁软件... 你有没有发现,用安卓手机的时候,总有一些小技巧能让你玩得更溜?别小看了这些小细节,它们可是能让你的手...
安卓系统提示音替换 你知道吗?手机里那个时不时响起的提示音,有时候真的能让人心情大好,有时候又让人抓狂不已。今天,就让我...
安卓开机不了系统更新 手机突然开不了机,系统更新还卡在那里,这可真是让人头疼的问题啊!你是不是也遇到了这种情况?别急,今天...
安卓系统中微信视频,安卓系统下... 你有没有发现,现在用手机聊天,视频通话简直成了标配!尤其是咱们安卓系统的小伙伴们,微信视频功能更是用...
安卓系统是服务器,服务器端的智... 你知道吗?在科技的世界里,安卓系统可是个超级明星呢!它不仅仅是个手机操作系统,竟然还能成为服务器的得...
pc电脑安卓系统下载软件,轻松... 你有没有想过,你的PC电脑上安装了安卓系统,是不是瞬间觉得世界都大不一样了呢?没错,就是那种“一机在...
电影院购票系统安卓,便捷观影新... 你有没有想过,在繁忙的生活中,一部好电影就像是一剂强心针,能瞬间让你放松心情?而我今天要和你分享的,...
安卓系统可以写程序? 你有没有想过,安卓系统竟然也能写程序呢?没错,你没听错!这个我们日常使用的智能手机操作系统,竟然有着...
安卓系统架构书籍推荐,权威书籍... 你有没有想过,想要深入了解安卓系统架构,却不知道从何下手?别急,今天我就要给你推荐几本超级实用的书籍...
安卓系统看到的炸弹,技术解析与... 安卓系统看到的炸弹——揭秘手机中的隐形威胁在数字化时代,智能手机已经成为我们生活中不可或缺的一部分。...
鸿蒙系统有安卓文件,畅享多平台... 你知道吗?最近在科技圈里,有个大新闻可是闹得沸沸扬扬的,那就是鸿蒙系统竟然有了安卓文件!是不是觉得有...
宝马安卓车机系统切换,驾驭未来... 你有没有发现,现在的汽车越来越智能了?尤其是那些豪华品牌,比如宝马,它们的内饰里那个大屏幕,简直就像...
p30退回安卓系统 你有没有听说最近P30的用户们都在忙活一件大事?没错,就是他们的手机要退回安卓系统啦!这可不是一个简...
oppoa57安卓原生系统,原... 你有没有发现,最近OPPO A57这款手机在安卓原生系统上的表现真是让人眼前一亮呢?今天,就让我带你...
安卓系统输入法联想,安卓系统输... 你有没有发现,手机上的输入法真的是个神奇的小助手呢?尤其是安卓系统的输入法,简直就是智能生活的点睛之...
怎么进入安卓刷机系统,安卓刷机... 亲爱的手机控们,你是否曾对安卓手机的刷机系统充满好奇?想要解锁手机潜能,体验全新的系统魅力?别急,今...
安卓系统程序有病毒 你知道吗?在这个数字化时代,手机已经成了我们生活中不可或缺的好伙伴。但是,你知道吗?即使是安卓系统,...
奥迪中控安卓系统下载,畅享智能... 你有没有发现,现在汽车的中控系统越来越智能了?尤其是奥迪这种豪华品牌,他们的中控系统简直就是科技与艺...