linux系统中裸机按键中断的驱动​方法

大家好,我是st。
      今天主要和大家聊一聊,如何实现按键中断的驱动方法。
第一:外部中断头文件实现
#ifndef _bsp_exit_h#define  _bsp_exit_h//函数声明void exit_init(void); //中断初始化void gpio1_irqhandler(void); //中断处理函数#endif  
第二:外部中断源文件的具体实现
#include bsp_exit.h#include bsp_gpio.hvoid exit_init(void){    gpio_pin_config_t key_config;    //设置io复用    iomuxc_setpinmux(iomuxc_uart1_cts_b_gpio1_io18,0);  iomuxc_setpinconfig(iomuxc_uart1_cts_b_gpio1_io18,0xf080);  /* 2、初始化 gpio 为中断模式 */  key_config.direction = kgpio_digitalinput;  key_config.interruptmode = kgpio_intfallingedge;  key_config.outputlogic = 1;  gpio_init(gpio1, 18, &key_config); /* 3、使能 gic 中断、注册中断服务函数、使能 gpio 中断 */  gic_enableirq(gpio1_combined_16_31_irqn);     system_register_irqhandler(gpio1_combined_16_31_irqn,(system_irq_handler_t)gpio1_io18_irqhandler,null);  gpio_enableint(gpio1, 18);}//中断处理函数void gpio1_io18_irqhandler(void){  static unsigned char state = 0;   /*  *采用延时消抖,中断服务函数中禁止使用延时函数!因为中断服务需要  *快进快出!!这里为了演示所以采用了延时函数进行消抖,后面我们会讲解  *定时器中断消抖法!!!  */  delay(10);  if(gpio_pinread(gpio1, 18) == 0) /* 按键按下了 */  {  state = !state;  beep_switch(state);  }    gpio_clearintflags(gpio1, 18); /* 清除中断标志位 */}  
      分析:两个函数进行中断初始化,然后配置为下降沿触发中断。
调用函数 gic_enableirq来使能 gpio_io18 所对应的中断总开关,i.mx6u 中 gpio1_io16~io31 这 16 个 io 共用 id99。调用函数 system_register_irqhandler 注册 id99 所对应的中断处理函数,gpio1_io16~io31。这 16 个 io 共用一个中断处理函数,至于具体是哪个 io 引起的中断,那就需要在中断处理函数中判断了。通过函数 gpio_enableint 使能 gpio1_io18 这个 io 对应的中断。
第三:编写对应的main.c函数
     主函数的具体代码实现如下:
#include bsp_exit.h#include bsp_init.hint main(void){ unsigned char state = off; int_init(); imx6u_clkinit(); /* 初始化系统时钟 */   clk_enable(); /* 使能所有的时钟 */  led_init(); /* 初始化 led */  beep_init(); /* 初始化 beep */  key_init(); /* 初始化 key */  exit_init(); /* 初始化按键中断 */   while(1)   {    state = !state;  led_switch(led0, state);       delay(500);   }      return 0;}  
main.c 很简单,重点是调用函数 int_init 来初始化中断系统,调用函数exit_init 来初始化按键 key 对应的 gpio 中断。
总结:硬件中断的配置,熟悉其中的实现方法对后面的底层控制实现具有重要意义。


浅谈集成电路封装的重要性
dfrobotRGB LED模块 5050简介
三相感应电动机的启动与调速
Intel:32nm六核心Xeon已出货10万
传联电、日月光CoWoS封装中介层订单将涨价
linux系统中裸机按键中断的驱动​方法
盘点2018年PCB行业的11大并购案
iphone7或配置A10处理器 采用最新PoP工艺
at89c52引脚图及管脚功能
移动互联网给前端工程师带来了什么
2020Medtec中国展如期举行 近50+知名企业已组团报名现场参观
“2020中国新材料资本技术大会”回顾
慕容话币|新手如何进入区块链行业?
AR教育未来的发展方向
SEL保护电路原理及在双机系统中的应用设计
伍兹霍尔海洋研究所与ADI公司共同宣布成立海洋与气候创新加速器
MAX14921:12/16节电池高精度测量模拟前端的PCB布局指南
爆料天王展示初代iPad原型机 系统界面功能超乎你想像!
电力智能运维服务的内容介绍
功率放大器的三种类型是什么意思