当前位置: 首页 > news >正文

按键中断实验

gpio.c

 #include"gpio.h"//给gpio使能和设置为输入模式void hal_gpio_init(){//使能GPIOF控制器RCC->MP_AHB4ENSETR|=(0x1<<5);//通过GPIOF_将pf9/pf7/pf8设置为输入模式 GPIOF->MODER&=(~(0x3<<18));GPIOF->MODER&=(~(0x3<<14));GPIOF->MODER&=(~(0x3<<16));}//EXTI控制器初始化void hal_exti_init(){//选择与pf9,pf7,pf8EXTI->EXTICR3&=(~(0xff<<8));EXTI->EXTICR3|=(0x5<<8);EXTI->EXTICR3&=(~(0xff<<24));EXTI->EXTICR3|=(0x5<<24);EXTI->EXTICR3&=(~(0xff<<0));EXTI->EXTICR3|=(0x5<<0);//对应事件9,7,8EXTI->FTSR1|=(0x1<<9);EXTI->FTSR1|=(0x1<<7);EXTI->FTSR1|=(0x1<<8);//不中断屏蔽EXTI->C1IMR1|=(0x1<<9);EXTI->C1IMR1|=(0x1<<7);EXTI->C1IMR1|=(0x1<<8);}//GICD控制器初始化void hal_gicd_init(){//设置CTLR给CPU0使能GICD->CTRL|=(0x1);//管理key1->99,key2->97,key3->98中断号GICD->ISENABLER[3]|=(0x1<<3);GICD->ISENABLER[3]|=(0x1<<1);GICD->ISENABLER[3]|=(0x1<<2);//设置中断优先级GICD->IPRIORITYR[24]|=(0x1<<27);GICD->IPRIORITYR[24]|=(0x1<<11);GICD->IPRIORITYR[24]|=(0x1<<19);//设置是分配给CPU0还是CPU1GICD->ITARGETSR[24]|=(0x1<<24);GICD->ITARGETSR[24]|=(0x1<<8);GICD->ITARGETSR[24]|=(0x1<<16);}//GICC控制器初始化void hal_gicc_init(){//设置CTLR给CPU0使能GICC->CTRL|=(0x1);//设置中断优先级GICC->PMR|=(0x1f<<27);}

do_irq.c

 #include"stm32mp1xx_gic.h"                            #include"stm32mp1xx_exti.h"                           extern void printf(const char *fmt, ...);             unsigned int i = 0;                                   void do_irq(void)                                     {                                                     i|=GICC->IAR;                                     if(i==99)                                         {                                                 printf("1111111111:%d\n",i);                  EXTI->FPR1|=(0x1<<9);                             EXTI->FPR1|=(0x1<<7);                             EXTI->FPR1|=(0x1<<8);                             GICD->ICPENDR[2]|=(0X1<<3);                       GICD->ICPENDR[2]|=(0X1<<1);                       GICD->ICPENDR[2]|=(0X1<<2);                       GICC->EOIR|=i;                                    }                                                 else  if(i==97)                                   {                                                 printf("11111111111:%d\n",i);                 EXTI->FPR1|=(0x1<<9);                         EXTI->FPR1|=(0x1<<7);                             EXTI->FPR1|=(0x1<<8);                             GICD->ICPENDR[2]|=(0X1<<3);                       GICD->ICPENDR[2]|=(0X1<<1);                       GICD->ICPENDR[2]|=(0X1<<2);                       GICC->EOIR|=i;                                    }                                                 else  if(i==98)                                   {                                                 printf("1111111111:%d\n",i);                  EXTI->FPR1|=(0x1<<9);                         EXTI->FPR1|=(0x1<<7);                             EXTI->FPR1|=(0x1<<8);                             GICD->ICPENDR[2]|=(0X1<<3);                       GICD->ICPENDR[2]|=(0X1<<1);                       GICD->ICPENDR[2]|=(0X1<<2);                       GICC->EOIR|=i;                                    }                                                 }                                                     

gpio.h

 #ifndef __GPIO_H__              #define __GPIO_H__              #include"stm32mp1xx_gpio.h"     #include"stm32mp1xx_rcc.h"      #include"stm32mp1xx_exti.h"     #include"stm32mp1xx_gic.h"      //给gpio使能和设置为输入模式    void hal_gpio_init();           //EXTI控制器初始化              void hal_exti_init();           //GICD控制器初始化              void hal_gicd_init();           //GICC控制器初始化              void hal_gicc_init();           #endif                          

main.c

#include "gpio.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 < 1800; j++); 
} int main() 
{ hal_gpio_init(); hal_exti_init(); hal_gicd_init(); hal_gicc_init(); while(1) { }return 0;
}
http://www.lryc.cn/news/16386.html

相关文章:

  • kubernetes入门介绍,从0到1搭建并使用
  • 【C语言进阶】字符串函数与内存函数的学习与模拟实现
  • 【JavaEE初阶】第一节.多线程(进阶篇 ) 常见的锁策略、CAS及它的ABA问题
  • Linux基础命令-pstree树状显示进程信息
  • keepalived+LVS配置详解
  • Unity之C#端使用protobuf
  • C++设计模式(18)——模板方法模式
  • SQLserver 索引碎片
  • 【Storm】【二】安装
  • Android ConditionVariable
  • Action Segmentation数据集介绍——Breakfast
  • 横道图时间标尺在P6软件中的设置
  • 空间复杂度(超详解+例题)
  • Document-Level event Extraction via human-like reading process 论文解读
  • H5盲盒抽奖系统源码
  • 低代码平台和无代码平台哪个更适合开发企业管理系统?
  • 75岁彪马再发NFT 复活美洲狮IP
  • 大学生成人插画培训机构盘点
  • 【算法基础】一维差分 + 二维差分
  • 游戏服务器框架 技能buff篇
  • 网友说socket通信讲的不彻底,原来这才是Socket
  • Nginx第二讲
  • redis(win版)
  • 【Linux】编辑器——vim(最小集+指令集+自动化配置)
  • Centos7+Xshell+Jenkins堆装
  • Android system实战 — Android R(11) 进程保活白名单
  • oracle表 分组,并查每组第一条
  • Java代码弱点与修复之——DE: Dropped or ignored exception(无视或忽略异常)
  • JavaEE简单示例——动态SQL之更新操作<set>元素
  • 【极海APM32替代笔记】低功耗模式配置及配置汇总