RTL8762DW按键中断示例代码

1、实验现象:当按下KEY0~KEY3按键时,会打印对应看见信息。
在这里插入图片描述

#define KEY2_PIN_NUM 			P2_4
#define KEY2_GPIO_PIN 			GPIO_GetPin(KEY2_PIN_NUM)

#define KEY3_PIN_NUM 			P2_3
#define KEY3_GPIO_PIN 			GPIO_GetPin(KEY3_PIN_NUM)

#define KEY1_PIN_NUM 			P4_1
#define KEY1_GPIO_PIN 			GPIO_GetPin(KEY1_PIN_NUM)

#define KEY0_PIN_NUM 			P4_0
#define KEY0_GPIO_PIN 			GPIO_GetPin(KEY0_PIN_NUM)

#define KEY_NON			0XFF

#define KEY0_RELEASE	0x01
#define KEY0_PESS		0x02
#define KEY1_RELEASE	0x03
#define KEY1_PESS		0x04

#define KEY2_RELEASE	0x05
#define KEY2_PESS		0x06
#define KEY3_RELEASE	0x07
#define KEY3_PESS		0x08


uint8_t key_sta= KEY_NON;

void int_key_demo(void)
{
    Pad_Config(KEY0_PIN_NUM, PAD_PINMUX_MODE, PAD_IS_PWRON, PAD_PULL_UP, PAD_OUT_DISABLE, PAD_OUT_HIGH);
	Pad_Config(KEY1_PIN_NUM, PAD_PINMUX_MODE, PAD_IS_PWRON, PAD_PULL_UP, PAD_OUT_DISABLE, PAD_OUT_HIGH);
	
    Pad_Config(KEY2_PIN_NUM, PAD_PINMUX_MODE, PAD_IS_PWRON, PAD_PULL_UP, PAD_OUT_DISABLE, PAD_OUT_HIGH);
    Pad_Config(KEY3_PIN_NUM, PAD_PINMUX_MODE, PAD_IS_PWRON, PAD_PULL_UP, PAD_OUT_DISABLE, PAD_OUT_HIGH);

    Pinmux_Config(KEY0_PIN_NUM, DWGPIO);
    Pinmux_Config(KEY1_PIN_NUM, DWGPIO);
	
    Pinmux_Config(KEY2_PIN_NUM, DWGPIO);
    Pinmux_Config(KEY3_PIN_NUM, DWGPIO);

    RCC_PeriphClockCmd(APBPeriph_GPIO, APBPeriph_GPIO_CLOCK, ENABLE);

    GPIO_InitTypeDef GPIO_InitStruct;
    GPIO_StructInit(&GPIO_InitStruct);
	
	GPIO_InitStruct.GPIO_Pin        = KEY0_GPIO_PIN | KEY1_GPIO_PIN | KEY2_GPIO_PIN | KEY3_GPIO_PIN ;
    GPIO_InitStruct.GPIO_Mode       = GPIO_Mode_IN;
    GPIO_InitStruct.GPIO_ITCmd      = ENABLE;
    GPIO_InitStruct.GPIO_ITTrigger  = GPIO_INT_Trigger_EDGE;
    GPIO_InitStruct.GPIO_ITPolarity = GPIO_INT_POLARITY_ACTIVE_LOW;
    GPIO_InitStruct.GPIO_ITDebounce = GPIO_INT_DEBOUNCE_ENABLE;
    GPIO_InitStruct.GPIO_DebounceTime = 10;/* unit:ms , can be 1~64 ms */
	
	
    GPIO_Init(&GPIO_InitStruct);
	
	
    /* Enable interrupt */
    GPIO_INTConfig(KEY0_GPIO_PIN|KEY1_GPIO_PIN|KEY2_GPIO_PIN|KEY3_GPIO_PIN, ENABLE);
    GPIO_MaskINTConfig(KEY0_GPIO_PIN|KEY1_GPIO_PIN|KEY2_GPIO_PIN|KEY3_GPIO_PIN, DISABLE);

    NVIC_InitTypeDef NVIC_InitStruct;
    NVIC_InitStruct.NVIC_IRQChannel = GPIO20_IRQn;
    NVIC_InitStruct.NVIC_IRQChannelPriority = 3;
    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStruct);

    NVIC_InitStruct.NVIC_IRQChannel = GPIO19_IRQn;
    NVIC_InitStruct.NVIC_IRQChannelPriority = 3;
    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStruct);

    NVIC_InitStruct.NVIC_IRQChannel = GPIO29_IRQn;
    NVIC_InitStruct.NVIC_IRQChannelPriority = 3;
    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStruct);
	
	NVIC_InitStruct.NVIC_IRQChannel = GPIO28_IRQn;
    NVIC_InitStruct.NVIC_IRQChannelPriority = 3;
    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStruct);
	
	
	while(1)
	{
		if (KEY_NON != key_sta)
		{
			if (key_sta == KEY2_RELEASE) DBG_DIRECT("key2 Pair button release !!!\n");
			if (key_sta == KEY2_PESS) DBG_DIRECT("key2 Pair button press !!!\n");
			
			if (key_sta == KEY3_RELEASE) DBG_DIRECT("key3 Pair button release !!!\n");
			if (key_sta == KEY3_PESS) DBG_DIRECT("key3 Pair button press !!!\n");
			
			if (key_sta == KEY0_RELEASE) DBG_DIRECT("key0 Pair button release !!!\n");
			if (key_sta == KEY0_PESS) DBG_DIRECT("key0 Pair button press !!!\n");
			
			if (key_sta == KEY1_RELEASE) DBG_DIRECT("key1 Pair button release !!!\n");
			if (key_sta == KEY1_PESS) DBG_DIRECT("key1 Pair button press !!!\n");
						
			key_sta = KEY_NON;
		}	
	}
}

中断的处理函数

void GPIO19_Handler(void)
{
    /*  Mask GPIO interrupt */
    GPIO_INTConfig(KEY3_GPIO_PIN, DISABLE);
    GPIO_MaskINTConfig(KEY3_GPIO_PIN, ENABLE);
    GPIO_ClearINTPendingBit(KEY3_GPIO_PIN);


    if ( GPIO_ReadInputDataBit(KEY3_GPIO_PIN) ) //Release
    {
        GPIO->INTPOLARITY &= ~KEY3_GPIO_PIN; //Polarity Low
//        System_WakeUpPinEnable(PAIR_BUTTON, PAD_WAKEUP_POL_LOW, PAD_WK_DEBOUNCE_ENABLE);
		key_sta = KEY3_RELEASE;
    } else
    {
        GPIO->INTPOLARITY |= KEY3_GPIO_PIN;   //Polarity High
//        System_WakeUpPinEnable(PAIR_BUTTON, PAD_WAKEUP_POL_HIGH, PAD_WK_DEBOUNCE_ENABLE);
		key_sta = KEY3_PESS;
    }


    GPIO_MaskINTConfig(KEY3_GPIO_PIN, DISABLE);
    GPIO_INTConfig(KEY3_GPIO_PIN, ENABLE);

}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值