大家好,我是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原型机 系统界面功能超乎你想像!
电力智能运维服务的内容介绍
功率放大器的三种类型是什么意思