From 67b28054c77fb63595125afc6de4056292666ec8 Mon Sep 17 00:00:00 2001 From: MacRsh Date: Sun, 3 Dec 2023 19:36:48 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=96=B0=E5=A2=9EST-SPI=E9=A9=B1=E5=8A=A8?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bsp/st/driver/drv_serial.c | 16 +++++------ bsp/st/driver/drv_spi.c | 58 ++++++++++++++++++++------------------ 2 files changed, 38 insertions(+), 36 deletions(-) diff --git a/bsp/st/driver/drv_serial.c b/bsp/st/driver/drv_serial.c index 8c87c0f..f1ba2c0 100644 --- a/bsp/st/driver/drv_serial.c +++ b/bsp/st/driver/drv_serial.c @@ -194,11 +194,6 @@ static int drv_serial_configure(struct mr_serial *serial, struct mr_serial_confi } } - /* Configure NVIC */ - HAL_NVIC_SetPriority(serial_data->irq, 1, 0); - HAL_NVIC_EnableIRQ(serial_data->irq); - __HAL_UART_ENABLE_IT(&serial_data->handle, UART_IT_RXNE); - /* Configure UART */ serial_data->handle.Init.BaudRate = config->baud_rate; serial_data->handle.Init.HwFlowCtl = UART_HWCONTROL_NONE; @@ -207,15 +202,20 @@ static int drv_serial_configure(struct mr_serial *serial, struct mr_serial_confi HAL_UART_Init(&serial_data->handle); __HAL_UART_CLEAR_FLAG(&serial_data->handle, UART_FLAG_RXNE); __HAL_UART_CLEAR_FLAG(&serial_data->handle, UART_FLAG_TC); + + /* Configure NVIC */ + HAL_NVIC_SetPriority(serial_data->irq, 1, 0); + HAL_NVIC_EnableIRQ(serial_data->irq); + __HAL_UART_ENABLE_IT(&serial_data->handle, UART_IT_RXNE); } else { + /* Configure UART */ + HAL_UART_DeInit(&serial_data->handle); + /* Configure NVIC */ HAL_NVIC_DisableIRQ(serial_data->irq); __HAL_UART_DISABLE_IT(&serial_data->handle, UART_IT_RXNE); __HAL_UART_DISABLE_IT(&serial_data->handle, UART_IT_TXE); - - /* Configure UART */ - HAL_UART_DeInit(&serial_data->handle); } return MR_EOK; } diff --git a/bsp/st/driver/drv_spi.c b/bsp/st/driver/drv_spi.c index e3b7a4d..b77b570 100644 --- a/bsp/st/driver/drv_spi.c +++ b/bsp/st/driver/drv_spi.c @@ -9,7 +9,7 @@ #include "drv_spi.h" #ifdef MR_USING_SPI - +#define MR_USING_SPI1 #if !defined(MR_USING_SPI1) && !defined(MR_USING_SPI2) && !defined(MR_USING_SPI3) && !defined(MR_USING_SPI4) && !defined(MR_USING_SPI5) && !defined(MR_USING_SPI6) #error "Please define at least one SPI macro like MR_USING_SPI1. Otherwise undefine MR_USING_SPI." #else @@ -64,19 +64,19 @@ static struct drv_spi_bus_data spi_bus_drv_data[] = {{0}, SPI1, SPI1_IRQn}, #endif /* MR_USING_SPI1 */ #ifdef MR_USING_SPI2 - {{0},SPI2,SPI2_IRQn}, + {{0}, SPI2, SPI2_IRQn}, #endif /* MR_USING_SPI2 */ #ifdef MR_USING_SPI3 - {{0},SPI3,SPI3_IRQn}, + {{0}, SPI3, SPI3_IRQn}, #endif /* MR_USING_SPI3 */ #ifdef MR_USING_SPI4 - {{0},SPI4,SPI4_IRQn}, + {{0}, SPI4, SPI4_IRQn}, #endif /* MR_USING_SPI4 */ #ifdef MR_USING_SPI5 - {{0},SPI5,SPI5_IRQn}, + {{0}, SPI5, SPI5_IRQn}, #endif /* MR_USING_SPI5 */ #ifdef MR_USING_SPI6 - {{0},SPI6,SPI6_IRQn}, + {{0}, SPI6, SPI6_IRQn}, #endif /* MR_USING_SPI6 */ }; @@ -92,10 +92,10 @@ static int drv_spi_bus_configure(struct mr_spi_bus *spi_bus, struct mr_spi_confi /* Configure clock */ if ((uint32_t)spi_bus_data->instance > APB2PERIPH_BASE) { - pclk_freq = HAL_RCC_GetPCLK2Freq(); + pclk = HAL_RCC_GetPCLK2Freq(); } else { - pclk_freq = HAL_RCC_GetPCLK1Freq(); + pclk = HAL_RCC_GetPCLK1Freq(); } psc = pclk / config->baud_rate; @@ -223,18 +223,6 @@ static int drv_spi_bus_configure(struct mr_spi_bus *spi_bus, struct mr_spi_confi } } - /* Configure NVIC */ - if (config->host_slave == MR_SPI_SLAVE) - { - HAL_NVIC_SetPriority(spi_bus_data->irq, 1, 0); - HAL_NVIC_EnableIRQ(spi_bus_data->irq); - __HAL_UART_ENABLE_IT(&spi_bus_data->handle, SPI_IT_RXNE); - } else - { - HAL_NVIC_DisableIRQ(spi_bus_data->irq); - __HAL_UART_DISABLE_IT(&spi_bus_data->handle, SPI_IT_RXNE); - } - /* Configure SPI */ spi_bus_data->handle.Init.NSS = SPI_NSS_SOFT; spi_bus_data->handle.Init.Direction = SPI_DIRECTION_2LINES; @@ -242,14 +230,29 @@ static int drv_spi_bus_configure(struct mr_spi_bus *spi_bus, struct mr_spi_confi spi_bus_data->handle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; spi_bus_data->handle.Init.CRCPolynomial = 7; HAL_SPI_Init(&spi_bus_data->handle); + __HAL_SPI_ENABLE(&spi_bus_data->handle); + + /* Configure NVIC */ + if (config->host_slave == MR_SPI_SLAVE) + { + HAL_NVIC_SetPriority(spi_bus_data->irq, 1, 0); + HAL_NVIC_EnableIRQ(spi_bus_data->irq); + __HAL_SPI_ENABLE_IT(&spi_bus_data->handle, SPI_IT_RXNE); + } else + { + HAL_NVIC_DisableIRQ(spi_bus_data->irq); + __HAL_SPI_DISABLE_IT(&spi_bus_data->handle, SPI_IT_RXNE); + } + } else { - /* Configure NVIC */ - HAL_NVIC_DisableIRQ(spi_bus_data->irq); - __HAL_UART_DISABLE_IT(&spi_bus_data->handle, SPI_IT_RXNE); - /* Configure SPI */ HAL_SPI_DeInit(&spi_bus_data->handle); + __HAL_SPI_DISABLE(&spi_bus_data->handle); + + /* Configure NVIC */ + HAL_NVIC_DisableIRQ(spi_bus_data->irq); + __HAL_SPI_DISABLE_IT(&spi_bus_data->handle, SPI_IT_RXNE); } return MR_EOK; } @@ -267,7 +270,7 @@ static uint32_t drv_spi_bus_read(struct mr_spi_bus *spi_bus) return 0; } } - return (uint32_t)spi_bus_data->instance->DR; + return (uint32_t)spi_bus_data->handle.Instance->DR; } static void drv_spi_bus_write(struct mr_spi_bus *spi_bus, uint32_t data) @@ -275,6 +278,7 @@ static void drv_spi_bus_write(struct mr_spi_bus *spi_bus, uint32_t data) struct drv_spi_bus_data *spi_bus_data = (struct drv_spi_bus_data *)spi_bus->dev.drv->data; int i = 0; + spi_bus_data->handle.Instance->DR = data; while (__HAL_SPI_GET_FLAG(&spi_bus_data->handle, SPI_FLAG_TXE) == RESET) { i++; @@ -283,15 +287,13 @@ static void drv_spi_bus_write(struct mr_spi_bus *spi_bus, uint32_t data) return; } } - spi_bus_data->instance->DR = data; } static void drv_spi_bus_isr(struct mr_spi_bus *spi_bus) { struct drv_spi_bus_data *spi_bus_data = (struct drv_spi_bus_data *)spi_bus->dev.drv->data; - if ((__HAL_UART_GET_FLAG(&spi_bus_data->handle, SPI_FLAG_RXNE) != RESET) && - (__HAL_UART_GET_IT_SOURCE(&spi_bus_data->handle, SPI_IT_RXNE) != RESET)) + if ((__HAL_SPI_GET_FLAG(&spi_bus_data->handle, SPI_FLAG_RXNE) != RESET)) { mr_dev_isr(&spi_bus->dev, MR_ISR_SPI_RD_INT, NULL); }