From 9bf63edf731789efef35c522e5415c2f50c6ebde Mon Sep 17 00:00:00 2001 From: MacRsh <1063220965@qq.com> Date: Mon, 15 May 2023 09:49:28 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BC=98=E5=8C=96=E4=B8=AD=E6=96=AD=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E3=80=82=202.=E9=80=82=E9=85=8D=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bsp/wch/driver/drv_gpio.c | 35 +++++++++++++++++++++++++++++++++-- bsp/wch/driver/drv_gpio.h | 2 +- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/bsp/wch/driver/drv_gpio.c b/bsp/wch/driver/drv_gpio.c index 8b80d5c..097373a 100644 --- a/bsp/wch/driver/drv_gpio.c +++ b/bsp/wch/driver/drv_gpio.c @@ -8,7 +8,7 @@ * 2023-04-27 MacRsh first version */ -#include +#include "drv_gpio.h" #undef LOG_TAG #define LOG_TAG "drv_gpio" @@ -40,6 +40,23 @@ static IRQn_Type irqno[] = EXTI15_10_IRQn, }; +static mr_int16_t mask[16] = {- 1, + - 1, + - 1, + - 1, + - 1, + - 1, + - 1, + - 1, + - 1, + - 1, + - 1, + - 1, + - 1, + - 1, + - 1, + - 1}; + static struct mr_pin hw_pin; static mr_err_t ch32_pin_configure(mr_pin_t pin, struct mr_pin_config *config) @@ -111,8 +128,11 @@ static mr_err_t ch32_pin_configure(mr_pin_t pin, struct mr_pin_config *config) default: return - MR_ERR_GENERIC; } - if (config->mode >= MR_PIN_MODE_RISING) + if (config->mode >= MR_PIN_MODE_RISING + && (mask[config->number % 16] == - 1 || mask[config->number % 16] == config->number)) { + mask[config->number % 16] = config->number; + RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); EXTI_InitStructure.EXTI_Line = PIN_STPIN(config->number); @@ -127,6 +147,16 @@ static mr_err_t ch32_pin_configure(mr_pin_t pin, struct mr_pin_config *config) NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); + } else if (config->number == mask[config->number % 16]) + { + mask[config->number % 16] = - 1; + + EXTI_InitStructure.EXTI_Line = PIN_STPIN(config->number); + EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; + EXTI_InitStructure.EXTI_LineCmd = DISABLE; + + GPIO_EXTILineConfig(PIN_PORT(config->number), config->number % 16); + EXTI_Init(&EXTI_InitStructure); } GPIO_Init(PIN_STPORT(config->number), &GPIO_InitStruct); @@ -248,5 +278,6 @@ mr_err_t mr_hw_gpio_init(void) return MR_ERR_OK; } +INIT_BOARD_EXPORT(mr_hw_gpio_init); #endif \ No newline at end of file diff --git a/bsp/wch/driver/drv_gpio.h b/bsp/wch/driver/drv_gpio.h index 37a3459..2249e13 100644 --- a/bsp/wch/driver/drv_gpio.h +++ b/bsp/wch/driver/drv_gpio.h @@ -11,7 +11,7 @@ #ifndef _DRV_GPIO_H_ #define _DRV_GPIO_H_ -#include +#include "device/pin/pin.h" #if (MR_CONF_DEVICE_PIN == MR_CONF_ENABLE)