From c94580448095ba8f8c2b489cce3149687f1016b4 Mon Sep 17 00:00:00 2001 From: MacRsh Date: Mon, 7 Apr 2025 19:50:46 +0800 Subject: [PATCH] =?UTF-8?q?fix(serial,drv=5Fpin):=20=E4=BF=AE=E5=A4=8Dseri?= =?UTF-8?q?al=E6=96=B9=E6=B3=95=E6=A3=80=E6=9F=A5=E9=94=99=E8=AF=AF?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E5=A4=8DPIN=E9=A9=B1=E5=8A=A8=E4=B8=AD?= =?UTF-8?q?=E6=96=AD=E5=85=B3=E9=97=AD=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 感谢Lucas反馈问题 --- bsp/st/driver/drv_pin.c | 3 +++ bsp/wch/driver/drv_pin.c | 5 ++++- device/serial.c | 6 +++++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/bsp/st/driver/drv_pin.c b/bsp/st/driver/drv_pin.c index d61b171..5134b7d 100644 --- a/bsp/st/driver/drv_pin.c +++ b/bsp/st/driver/drv_pin.c @@ -203,6 +203,9 @@ static int drv_pin_configure(struct mr_pin *pin, int number, int mode) { HAL_NVIC_DisableIRQ(pin_irq_map[exti_line]); } + } else + { + HAL_NVIC_DisableIRQ(pin_irq_map[exti_line]); } pin_irq_mask[exti_line] = -1; } diff --git a/bsp/wch/driver/drv_pin.c b/bsp/wch/driver/drv_pin.c index 5e8da03..c2a281e 100644 --- a/bsp/wch/driver/drv_pin.c +++ b/bsp/wch/driver/drv_pin.c @@ -220,7 +220,7 @@ static int drv_pin_configure(struct mr_pin *pin, int number, int mode) { EXTI_InitStructure.EXTI_LineCmd = ENABLE; } - } else + } else if ((exti_line >= 10) && (exti_line <= 15)) { if ((pin_irq_mask[10] == -1) && (pin_irq_mask[11] == -1) && @@ -234,6 +234,9 @@ static int drv_pin_configure(struct mr_pin *pin, int number, int mode) { EXTI_InitStructure.EXTI_LineCmd = ENABLE; } + } else + { + EXTI_InitStructure.EXTI_LineCmd = DISABLE; } #endif /* MR_USING_CH32V00X */ pin_irq_mask[exti_line] = -1; diff --git a/device/serial.c b/device/serial.c index a846e2d..1ea40ad 100644 --- a/device/serial.c +++ b/device/serial.c @@ -276,7 +276,7 @@ static int mr_serial_ioctl(struct mr_dev *dev, int cmd, void *args) if (args != MR_NULL) { size_t bufsz = *(size_t *)args; - if (ops->stop_dma_rx) { + if (ops->stop_dma_rx == MR_NULL) { return MR_EIO; } ops->stop_dma_rx(serial); @@ -299,6 +299,10 @@ static int mr_serial_ioctl(struct mr_dev *dev, int cmd, void *args) if (args != MR_NULL) { size_t bufsz = *(size_t *)args; + if (serial->nonblock_state != MR_DISABLE) { + return MR_EBUSY; + } + uint8_t *pool = mr_realloc(serial->dma_wr_buf, bufsz); if ((pool == MR_NULL) && (bufsz != 0)) { return MR_ENOMEM;