按键中断驱动文件编写
以中断的方式编写KEY按键驱动,当按下KEY以后触发GPIO中断,然后在中断服务函数里控制蜂鸣器的开关。
接下来就是要编写按键KEY对应的UART1_CTS这个IO的中断驱动
#ifndef _BSP_EXTI_H
#define _BSP_EXTI_H
#include "imx6ul.h"
/*函数声明*/
void exit_init(void);
void gpio1_io18_irqhandler(void);
#endif
#include "bsp_exti.h"
#include "bsp_gpio.h"
#include "bsp_int.h"
#include "bsp_delay.h"
#include "bsp_beep.h"
void 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);
/*初始化GPIO为中断模式*/
key_config.direction = kGPIO_DigitalInput;
key_config.interruptMode = kGPIO_IntFallingEdge;
key_config.outputLogic = 1;
gpio_init(GPIO1, 18, &key_config);
/*使能GIC中断、注册中断服务函数、使能GPIO中断*/
GIC_EnableIRQ(GPIO1_Combined_16_31_IRQn);
system_register_irqhandler(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)
}