diff --git a/bsp/README.md b/bsp/README.md index 9fd1e080c2f..924378c545f 100644 --- a/bsp/README.md +++ b/bsp/README.md @@ -332,8 +332,8 @@ This document is based on the RT-Thread mainline repository and categorizes the | [n32l43xrl-stb](n32/n32gxx_lxx/n32l43xrl-stb) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | - | - | - | - | - | - | - | - | - | | [n32wb45xl-evb](n32/n32gxx_lxx/n32wb45xl-evb) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | - | - | - | - | - | - | - | - | - | | [n32h760zil7-stb](n32/n32hxxx/n32h760zil7-stb) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [n32h497zgl7-evb](n32/n32hxxx/n32h497zgl7-evb) | ✅ | ✅ | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | -| [n32h487zgl7-evb](n32/n32hxxx/n32h487zgl7-evb) | ✅ | ✅ | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | +| [n32h497zgl7-evb](n32/n32hxxx/n32h497zgl7-evb) | ✅ | ✅ | - | ✅ | - | - | - | ✅ | - | - | - | - | - | - | - | ✅ | - | - | - | +| [n32h487zgl7-evb](n32/n32hxxx/n32h487zgl7-evb) | ✅ | ✅ | - | ✅ | - | - | - | ✅ | - | - | - | - | - | - | - | ✅ | - | - | - | #### 🟡 NRF5x diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h47x_48x/can_config.h b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h47x_48x/can_config.h new file mode 100644 index 00000000000..8d5d61ef266 --- /dev/null +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h47x_48x/can_config.h @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2006-2026, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef __CAN_CONFIG_H__ +#define __CAN_CONFIG_H__ + +#include +#include "n32h47x_48x_fdcan.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct n32_fdcan_config +{ + const char *name; + FDCAN_Module *Instance; + uint32_t std_filter_size; + uint32_t ext_filter_size; + uint32_t rx_fifo0_size; + uint32_t rx_fifo0_data_bytes; + uint32_t rx_fifo1_size; + uint32_t rx_fifo1_data_bytes; + uint32_t rx_buffer_size; + uint32_t rx_buffer_data_bytes; + uint32_t tx_event_size; + uint32_t tx_buffer_size; + uint32_t tx_buffer_data_bytes; + uint32_t tx_fifo_queue_size; + uint32_t tx_fifo_queue_mode; + uint32_t tdc_offset; + uint32_t tdc_filter; + rt_bool_t tdc_enabled; +}; + +#define FDCAN_RESOURCE_CONFIG(number) \ + .std_filter_size = BSP_FDCAN##number##_STD_FILTER_SIZE, \ + .ext_filter_size = BSP_FDCAN##number##_EXT_FILTER_SIZE, \ + .rx_fifo0_size = BSP_FDCAN##number##_RX_FIFO0_SIZE, \ + .rx_fifo0_data_bytes = BSP_FDCAN##number##_RX_FIFO0_DATA_BYTES, \ + .rx_fifo1_size = BSP_FDCAN##number##_RX_FIFO1_SIZE, \ + .rx_fifo1_data_bytes = BSP_FDCAN##number##_RX_FIFO1_DATA_BYTES, \ + .rx_buffer_size = BSP_FDCAN##number##_RX_BUFFER_SIZE, \ + .rx_buffer_data_bytes = BSP_FDCAN##number##_RX_BUFFER_DATA_BYTES, \ + .tx_event_size = BSP_FDCAN##number##_TX_EVENT_FIFO_SIZE, \ + .tx_buffer_size = BSP_FDCAN##number##_TX_BUFFER_SIZE, \ + .tx_buffer_data_bytes = BSP_FDCAN##number##_TX_BUFFER_DATA_BYTES, \ + .tx_fifo_queue_size = BSP_FDCAN##number##_TX_FIFO_QUEUE_SIZE + +#define FDCAN_INSTANCE_CONFIG(number) \ + { \ + .name = "fdcan" #number, \ + .Instance = FDCAN##number, \ + FDCAN_RESOURCE_CONFIG(number), \ + FDCAN##number##_MODE_CONFIG, \ + FDCAN##number##_TDC_CONFIG, \ + } + +#define FDCAN_TX_FIFO_CONFIG(number) \ + .tx_fifo_queue_mode = FDCAN_TX_FIFO_MODE +#define FDCAN_TX_QUEUE_CONFIG(number) \ + .tx_fifo_queue_mode = FDCAN_TX_QUEUE_MODE +#define FDCAN_TDC_DISABLED_CONFIG(number) \ + .tdc_enabled = RT_FALSE, .tdc_offset = 0, .tdc_filter = 0 +#define FDCAN_TDC_ENABLED_CONFIG(number) \ + .tdc_enabled = RT_TRUE, \ + .tdc_offset = BSP_FDCAN##number##_TDC_OFFSET, \ + .tdc_filter = BSP_FDCAN##number##_TDC_FILTER + +#if defined(BSP_USING_FDCAN1) +#if defined(BSP_FDCAN1_TX_QUEUE_MODE) +#define FDCAN1_MODE_CONFIG FDCAN_TX_QUEUE_CONFIG(1) +#else +#define FDCAN1_MODE_CONFIG FDCAN_TX_FIFO_CONFIG(1) +#endif +#if defined(BSP_FDCAN1_USING_TDC) +#define FDCAN1_TDC_CONFIG FDCAN_TDC_ENABLED_CONFIG(1) +#else +#define FDCAN1_TDC_CONFIG FDCAN_TDC_DISABLED_CONFIG(1) +#endif +#define FDCAN1_CONFIG FDCAN_INSTANCE_CONFIG(1) +#endif + +#if defined(BSP_USING_FDCAN2) +#if defined(BSP_FDCAN2_TX_QUEUE_MODE) +#define FDCAN2_MODE_CONFIG FDCAN_TX_QUEUE_CONFIG(2) +#else +#define FDCAN2_MODE_CONFIG FDCAN_TX_FIFO_CONFIG(2) +#endif +#if defined(BSP_FDCAN2_USING_TDC) +#define FDCAN2_TDC_CONFIG FDCAN_TDC_ENABLED_CONFIG(2) +#else +#define FDCAN2_TDC_CONFIG FDCAN_TDC_DISABLED_CONFIG(2) +#endif +#define FDCAN2_CONFIG FDCAN_INSTANCE_CONFIG(2) +#endif + +#if defined(BSP_USING_FDCAN3) +#if defined(BSP_FDCAN3_TX_QUEUE_MODE) +#define FDCAN3_MODE_CONFIG FDCAN_TX_QUEUE_CONFIG(3) +#else +#define FDCAN3_MODE_CONFIG FDCAN_TX_FIFO_CONFIG(3) +#endif +#if defined(BSP_FDCAN3_USING_TDC) +#define FDCAN3_TDC_CONFIG FDCAN_TDC_ENABLED_CONFIG(3) +#else +#define FDCAN3_TDC_CONFIG FDCAN_TDC_DISABLED_CONFIG(3) +#endif +#define FDCAN3_CONFIG FDCAN_INSTANCE_CONFIG(3) +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __CAN_CONFIG_H__ */ diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h47x_48x/uart_config.h b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h47x_48x/uart_config.h index fb9a2b31159..6f7f1454a8c 100644 --- a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h47x_48x/uart_config.h +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h47x_48x/uart_config.h @@ -21,10 +21,10 @@ extern "C" { #ifndef UART1_CONFIG #define UART1_CONFIG \ { \ - .name = "uart1", \ - .Instance = USART1, \ - .irq_type = USART1_IRQn, \ - .periph = RCC_APB2_PERIPH_USART1, \ + .name = "uart1", \ + .Instance = USART1, \ + .irq_type = USART1_IRQn, \ + .periph = RCC_APB2_PERIPH_USART1, \ .EnablePeriphClk = RCC_EnableAPB2PeriphClk, \ } #endif /* UART1_CONFIG */ @@ -34,8 +34,8 @@ extern "C" { #ifndef UART1_DMA_RX_CONFIG #define UART1_DMA_RX_CONFIG \ { \ - .DMAy = UART1_RX_DMA, \ - .DMAChx = UART1_RX_DMA_CHType, \ + .DMAy = UART1_RX_DMA, \ + .DMAChx = UART1_RX_DMA_CHType, \ .dma_irq = UART1_RX_DMA_IRQ, \ .dma_rcc = UART1_RX_DMA_RCC, \ .request = UART1_RX_DMA_REQUEST, \ @@ -51,8 +51,8 @@ extern "C" { #ifndef UART1_DMA_TX_CONFIG #define UART1_DMA_TX_CONFIG \ { \ - .DMAy = UART1_TX_DMA, \ - .DMAChx = UART1_TX_DMA_CHType, \ + .DMAy = UART1_TX_DMA, \ + .DMAChx = UART1_TX_DMA_CHType, \ .dma_irq = UART1_TX_DMA_IRQ, \ .dma_rcc = UART1_TX_DMA_RCC, \ .request = UART1_TX_DMA_REQUEST, \ @@ -68,10 +68,10 @@ extern "C" { #ifndef UART2_CONFIG #define UART2_CONFIG \ { \ - .name = "uart2", \ - .Instance = USART2, \ - .irq_type = USART2_IRQn, \ - .periph = RCC_APB1_PERIPH_USART2, \ + .name = "uart2", \ + .Instance = USART2, \ + .irq_type = USART2_IRQn, \ + .periph = RCC_APB1_PERIPH_USART2, \ .EnablePeriphClk = RCC_EnableAPB1PeriphClk, \ } #endif /* UART2_CONFIG */ @@ -81,8 +81,8 @@ extern "C" { #ifndef UART2_DMA_RX_CONFIG #define UART2_DMA_RX_CONFIG \ { \ - .DMAy = UART2_RX_DMA, \ - .DMAChx = UART2_RX_DMA_CHType, \ + .DMAy = UART2_RX_DMA, \ + .DMAChx = UART2_RX_DMA_CHType, \ .dma_irq = UART2_RX_DMA_IRQ, \ .dma_rcc = UART2_RX_DMA_RCC, \ .request = UART2_RX_DMA_REQUEST, \ @@ -98,8 +98,8 @@ extern "C" { #ifndef UART2_DMA_TX_CONFIG #define UART2_DMA_TX_CONFIG \ { \ - .DMAy = UART2_TX_DMA, \ - .DMAChx = UART2_TX_DMA_CHType, \ + .DMAy = UART2_TX_DMA, \ + .DMAChx = UART2_TX_DMA_CHType, \ .dma_irq = UART2_TX_DMA_IRQ, \ .dma_rcc = UART2_TX_DMA_RCC, \ .request = UART2_TX_DMA_REQUEST, \ @@ -115,10 +115,10 @@ extern "C" { #ifndef UART3_CONFIG #define UART3_CONFIG \ { \ - .name = "uart3", \ - .Instance = USART3, \ - .irq_type = USART3_IRQn, \ - .periph = RCC_APB1_PERIPH_USART3, \ + .name = "uart3", \ + .Instance = USART3, \ + .irq_type = USART3_IRQn, \ + .periph = RCC_APB1_PERIPH_USART3, \ .EnablePeriphClk = RCC_EnableAPB1PeriphClk, \ } #endif /* UART3_CONFIG */ @@ -128,8 +128,8 @@ extern "C" { #ifndef UART3_DMA_RX_CONFIG #define UART3_DMA_RX_CONFIG \ { \ - .DMAy = UART3_RX_DMA, \ - .DMAChx = UART3_RX_DMA_CHType, \ + .DMAy = UART3_RX_DMA, \ + .DMAChx = UART3_RX_DMA_CHType, \ .dma_irq = UART3_RX_DMA_IRQ, \ .dma_rcc = UART3_RX_DMA_RCC, \ .request = UART3_RX_DMA_REQUEST, \ @@ -145,8 +145,8 @@ extern "C" { #ifndef UART3_DMA_TX_CONFIG #define UART3_DMA_TX_CONFIG \ { \ - .DMAy = UART3_TX_DMA, \ - .DMAChx = UART3_TX_DMA_CHType, \ + .DMAy = UART3_TX_DMA, \ + .DMAChx = UART3_TX_DMA_CHType, \ .dma_irq = UART3_TX_DMA_IRQ, \ .dma_rcc = UART3_TX_DMA_RCC, \ .request = UART3_TX_DMA_REQUEST, \ @@ -162,10 +162,10 @@ extern "C" { #ifndef UART4_CONFIG #define UART4_CONFIG \ { \ - .name = "uart4", \ - .Instance = USART4, \ - .irq_type = USART4_IRQn, \ - .periph = RCC_APB2_PERIPH_USART4, \ + .name = "uart4", \ + .Instance = USART4, \ + .irq_type = USART4_IRQn, \ + .periph = RCC_APB2_PERIPH_USART4, \ .EnablePeriphClk = RCC_EnableAPB2PeriphClk, \ } #endif /* UART4_CONFIG */ @@ -175,8 +175,8 @@ extern "C" { #ifndef UART4_DMA_RX_CONFIG #define UART4_DMA_RX_CONFIG \ { \ - .DMAy = UART4_RX_DMA, \ - .DMAChx = UART4_RX_DMA_CHType, \ + .DMAy = UART4_RX_DMA, \ + .DMAChx = UART4_RX_DMA_CHType, \ .dma_irq = UART4_RX_DMA_IRQ, \ .dma_rcc = UART4_RX_DMA_RCC, \ .request = UART4_RX_DMA_REQUEST, \ @@ -192,8 +192,8 @@ extern "C" { #ifndef UART4_DMA_TX_CONFIG #define UART4_DMA_TX_CONFIG \ { \ - .DMAy = UART4_TX_DMA, \ - .DMAChx = UART4_TX_DMA_CHType, \ + .DMAy = UART4_TX_DMA, \ + .DMAChx = UART4_TX_DMA_CHType, \ .dma_irq = UART4_TX_DMA_IRQ, \ .dma_rcc = UART4_TX_DMA_RCC, \ .request = UART4_TX_DMA_REQUEST, \ @@ -209,10 +209,10 @@ extern "C" { #ifndef UART5_CONFIG #define UART5_CONFIG \ { \ - .name = "uart5", \ - .Instance = UART5, \ - .irq_type = UART5_IRQn, \ - .periph = RCC_APB1_PERIPH_UART5, \ + .name = "uart5", \ + .Instance = UART5, \ + .irq_type = UART5_IRQn, \ + .periph = RCC_APB1_PERIPH_UART5, \ .EnablePeriphClk = RCC_EnableAPB1PeriphClk, \ } #endif /* UART5_CONFIG */ @@ -222,8 +222,8 @@ extern "C" { #ifndef UART5_DMA_RX_CONFIG #define UART5_DMA_RX_CONFIG \ { \ - .DMAy = UART5_RX_DMA, \ - .DMAChx = UART5_RX_DMA_CHType, \ + .DMAy = UART5_RX_DMA, \ + .DMAChx = UART5_RX_DMA_CHType, \ .dma_irq = UART5_RX_DMA_IRQ, \ .dma_rcc = UART5_RX_DMA_RCC, \ .request = UART5_RX_DMA_REQUEST, \ @@ -239,8 +239,8 @@ extern "C" { #ifndef UART5_DMA_TX_CONFIG #define UART5_DMA_TX_CONFIG \ { \ - .DMAy = UART5_TX_DMA, \ - .DMAChx = UART5_TX_DMA_CHType, \ + .DMAy = UART5_TX_DMA, \ + .DMAChx = UART5_TX_DMA_CHType, \ .dma_irq = UART5_TX_DMA_IRQ, \ .dma_rcc = UART5_TX_DMA_RCC, \ .request = UART5_TX_DMA_REQUEST, \ @@ -256,10 +256,10 @@ extern "C" { #ifndef UART6_CONFIG #define UART6_CONFIG \ { \ - .name = "uart6", \ - .Instance = UART6, \ - .irq_type = UART6_IRQn, \ - .periph = RCC_APB2_PERIPH_UART6, \ + .name = "uart6", \ + .Instance = UART6, \ + .irq_type = UART6_IRQn, \ + .periph = RCC_APB2_PERIPH_UART6, \ .EnablePeriphClk = RCC_EnableAPB2PeriphClk, \ } #endif /* UART6_CONFIG */ @@ -269,8 +269,8 @@ extern "C" { #ifndef UART6_DMA_RX_CONFIG #define UART6_DMA_RX_CONFIG \ { \ - .DMAy = UART6_RX_DMA, \ - .DMAChx = UART6_RX_DMA_CHType, \ + .DMAy = UART6_RX_DMA, \ + .DMAChx = UART6_RX_DMA_CHType, \ .dma_irq = UART6_RX_DMA_IRQ, \ .dma_rcc = UART6_RX_DMA_RCC, \ .request = UART6_RX_DMA_REQUEST, \ @@ -286,8 +286,8 @@ extern "C" { #ifndef UART6_DMA_TX_CONFIG #define UART6_DMA_TX_CONFIG \ { \ - .DMAy = UART6_TX_DMA, \ - .DMAChx = UART6_TX_DMA_CHType, \ + .DMAy = UART6_TX_DMA, \ + .DMAChx = UART6_TX_DMA_CHType, \ .dma_irq = UART6_TX_DMA_IRQ, \ .dma_rcc = UART6_TX_DMA_RCC, \ .request = UART6_TX_DMA_REQUEST, \ @@ -303,10 +303,10 @@ extern "C" { #ifndef UART7_CONFIG #define UART7_CONFIG \ { \ - .name = "uart7", \ - .Instance = UART7, \ - .irq_type = UART7_IRQn, \ - .periph = RCC_APB2_PERIPH_UART7, \ + .name = "uart7", \ + .Instance = UART7, \ + .irq_type = UART7_IRQn, \ + .periph = RCC_APB2_PERIPH_UART7, \ .EnablePeriphClk = RCC_EnableAPB2PeriphClk, \ } #endif /* UART7_CONFIG */ @@ -316,8 +316,8 @@ extern "C" { #ifndef UART7_DMA_RX_CONFIG #define UART7_DMA_RX_CONFIG \ { \ - .DMAy = UART7_RX_DMA, \ - .DMAChx = UART7_RX_DMA_CHType, \ + .DMAy = UART7_RX_DMA, \ + .DMAChx = UART7_RX_DMA_CHType, \ .dma_irq = UART7_RX_DMA_IRQ, \ .dma_rcc = UART7_RX_DMA_RCC, \ .request = UART7_RX_DMA_REQUEST, \ @@ -333,8 +333,8 @@ extern "C" { #ifndef UART7_DMA_TX_CONFIG #define UART7_DMA_TX_CONFIG \ { \ - .DMAy = UART7_TX_DMA, \ - .DMAChx = UART7_TX_DMA_CHType, \ + .DMAy = UART7_TX_DMA, \ + .DMAChx = UART7_TX_DMA_CHType, \ .dma_irq = UART7_TX_DMA_IRQ, \ .dma_rcc = UART7_TX_DMA_RCC, \ .request = UART7_TX_DMA_REQUEST, \ @@ -350,10 +350,10 @@ extern "C" { #ifndef UART8_CONFIG #define UART8_CONFIG \ { \ - .name = "uart8", \ - .Instance = UART8, \ - .irq_type = UART8_IRQn, \ - .periph = RCC_APB1_PERIPH_UART8, \ + .name = "uart8", \ + .Instance = UART8, \ + .irq_type = UART8_IRQn, \ + .periph = RCC_APB1_PERIPH_UART8, \ .EnablePeriphClk = RCC_EnableAPB1PeriphClk, \ } #endif /* UART8_CONFIG */ @@ -363,8 +363,8 @@ extern "C" { #ifndef UART8_DMA_RX_CONFIG #define UART8_DMA_RX_CONFIG \ { \ - .DMAy = UART8_RX_DMA, \ - .DMAChx = UART8_RX_DMA_CHType, \ + .DMAy = UART8_RX_DMA, \ + .DMAChx = UART8_RX_DMA_CHType, \ .dma_irq = UART8_RX_DMA_IRQ, \ .dma_rcc = UART8_RX_DMA_RCC, \ .request = UART8_RX_DMA_REQUEST, \ @@ -380,8 +380,8 @@ extern "C" { #ifndef UART8_DMA_TX_CONFIG #define UART8_DMA_TX_CONFIG \ { \ - .DMAy = UART8_TX_DMA, \ - .DMAChx = UART8_TX_DMA_CHType, \ + .DMAy = UART8_TX_DMA, \ + .DMAChx = UART8_TX_DMA_CHType, \ .dma_irq = UART8_TX_DMA_IRQ, \ .dma_rcc = UART8_TX_DMA_RCC, \ .request = UART8_TX_DMA_REQUEST, \ diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h49x/can_config.h b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h49x/can_config.h new file mode 100644 index 00000000000..679e8571b3e --- /dev/null +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h49x/can_config.h @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2006-2026, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef __CAN_CONFIG_H__ +#define __CAN_CONFIG_H__ + +#include +#include "n32h49x_fdcan.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct n32_fdcan_config +{ + const char *name; + FDCAN_Module *Instance; + uint32_t std_filter_size; + uint32_t ext_filter_size; + uint32_t rx_fifo0_size; + uint32_t rx_fifo0_data_bytes; + uint32_t rx_fifo1_size; + uint32_t rx_fifo1_data_bytes; + uint32_t rx_buffer_size; + uint32_t rx_buffer_data_bytes; + uint32_t tx_event_size; + uint32_t tx_buffer_size; + uint32_t tx_buffer_data_bytes; + uint32_t tx_fifo_queue_size; + uint32_t tx_fifo_queue_mode; + uint32_t tdc_offset; + uint32_t tdc_filter; + rt_bool_t tdc_enabled; +}; + +#define FDCAN_RESOURCE_CONFIG(number) \ + .std_filter_size = BSP_FDCAN##number##_STD_FILTER_SIZE, \ + .ext_filter_size = BSP_FDCAN##number##_EXT_FILTER_SIZE, \ + .rx_fifo0_size = BSP_FDCAN##number##_RX_FIFO0_SIZE, \ + .rx_fifo0_data_bytes = BSP_FDCAN##number##_RX_FIFO0_DATA_BYTES, \ + .rx_fifo1_size = BSP_FDCAN##number##_RX_FIFO1_SIZE, \ + .rx_fifo1_data_bytes = BSP_FDCAN##number##_RX_FIFO1_DATA_BYTES, \ + .rx_buffer_size = BSP_FDCAN##number##_RX_BUFFER_SIZE, \ + .rx_buffer_data_bytes = BSP_FDCAN##number##_RX_BUFFER_DATA_BYTES, \ + .tx_event_size = BSP_FDCAN##number##_TX_EVENT_FIFO_SIZE, \ + .tx_buffer_size = BSP_FDCAN##number##_TX_BUFFER_SIZE, \ + .tx_buffer_data_bytes = BSP_FDCAN##number##_TX_BUFFER_DATA_BYTES, \ + .tx_fifo_queue_size = BSP_FDCAN##number##_TX_FIFO_QUEUE_SIZE + +#define FDCAN_INSTANCE_CONFIG(number) \ + { \ + .name = "fdcan" #number, \ + .Instance = FDCAN##number, \ + FDCAN_RESOURCE_CONFIG(number), \ + FDCAN##number##_MODE_CONFIG, \ + FDCAN##number##_TDC_CONFIG, \ + } + +#define FDCAN_TX_FIFO_CONFIG(number) \ + .tx_fifo_queue_mode = FDCAN_TX_FIFO_MODE +#define FDCAN_TX_QUEUE_CONFIG(number) \ + .tx_fifo_queue_mode = FDCAN_TX_QUEUE_MODE +#define FDCAN_TDC_DISABLED_CONFIG(number) \ + .tdc_enabled = RT_FALSE, .tdc_offset = 0, .tdc_filter = 0 +#define FDCAN_TDC_ENABLED_CONFIG(number) \ + .tdc_enabled = RT_TRUE, \ + .tdc_offset = BSP_FDCAN##number##_TDC_OFFSET, \ + .tdc_filter = BSP_FDCAN##number##_TDC_FILTER + +#if defined(BSP_USING_FDCAN1) +#if defined(BSP_FDCAN1_TX_QUEUE_MODE) +#define FDCAN1_MODE_CONFIG FDCAN_TX_QUEUE_CONFIG(1) +#else +#define FDCAN1_MODE_CONFIG FDCAN_TX_FIFO_CONFIG(1) +#endif +#if defined(BSP_FDCAN1_USING_TDC) +#define FDCAN1_TDC_CONFIG FDCAN_TDC_ENABLED_CONFIG(1) +#else +#define FDCAN1_TDC_CONFIG FDCAN_TDC_DISABLED_CONFIG(1) +#endif +#define FDCAN1_CONFIG FDCAN_INSTANCE_CONFIG(1) +#endif + +#if defined(BSP_USING_FDCAN2) +#if defined(BSP_FDCAN2_TX_QUEUE_MODE) +#define FDCAN2_MODE_CONFIG FDCAN_TX_QUEUE_CONFIG(2) +#else +#define FDCAN2_MODE_CONFIG FDCAN_TX_FIFO_CONFIG(2) +#endif +#if defined(BSP_FDCAN2_USING_TDC) +#define FDCAN2_TDC_CONFIG FDCAN_TDC_ENABLED_CONFIG(2) +#else +#define FDCAN2_TDC_CONFIG FDCAN_TDC_DISABLED_CONFIG(2) +#endif +#define FDCAN2_CONFIG FDCAN_INSTANCE_CONFIG(2) +#endif + +#if defined(BSP_USING_FDCAN3) +#if defined(BSP_FDCAN3_TX_QUEUE_MODE) +#define FDCAN3_MODE_CONFIG FDCAN_TX_QUEUE_CONFIG(3) +#else +#define FDCAN3_MODE_CONFIG FDCAN_TX_FIFO_CONFIG(3) +#endif +#if defined(BSP_FDCAN3_USING_TDC) +#define FDCAN3_TDC_CONFIG FDCAN_TDC_ENABLED_CONFIG(3) +#else +#define FDCAN3_TDC_CONFIG FDCAN_TDC_DISABLED_CONFIG(3) +#endif +#define FDCAN3_CONFIG FDCAN_INSTANCE_CONFIG(3) +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __CAN_CONFIG_H__ */ diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h49x/uart_config.h b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h49x/uart_config.h index c9c28c815c2..045d1ad44f3 100644 --- a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h49x/uart_config.h +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h49x/uart_config.h @@ -19,13 +19,13 @@ extern "C" { #if defined(BSP_USING_UART1) #ifndef UART1_CONFIG -#define UART1_CONFIG \ - { \ - .name = "uart1", \ - .Instance = USART1, \ - .irq_type = USART1_IRQn, \ - .periph = RCC_APB2_PERIPHEN_USART1, \ - .EnablePeriphClk = RCC_EnableAPB2PeriphClk, \ +#define UART1_CONFIG \ + { \ + .name = "uart1", \ + .Instance = USART1, \ + .irq_type = USART1_IRQn, \ + .periph = RCC_APB2_PERIPHEN_USART1, \ + .EnablePeriphClk = RCC_EnableAPB2PeriphClk, \ } #endif /* UART1_CONFIG */ #endif /* BSP_USING_UART1 */ @@ -34,8 +34,8 @@ extern "C" { #ifndef UART1_DMA_RX_CONFIG #define UART1_DMA_RX_CONFIG \ { \ - .DMAy = UART1_RX_DMA, \ - .DMAChx = UART1_RX_DMA_CHType, \ + .DMAy = UART1_RX_DMA, \ + .DMAChx = UART1_RX_DMA_CHType, \ .dma_irq = UART1_RX_DMA_IRQ, \ .dma_rcc = UART1_RX_DMA_RCC, \ .request = UART1_RX_DMA_REQUEST, \ @@ -51,8 +51,8 @@ extern "C" { #ifndef UART1_DMA_TX_CONFIG #define UART1_DMA_TX_CONFIG \ { \ - .DMAy = UART1_TX_DMA, \ - .DMAChx = UART1_TX_DMA_CHType, \ + .DMAy = UART1_TX_DMA, \ + .DMAChx = UART1_TX_DMA_CHType, \ .dma_irq = UART1_TX_DMA_IRQ, \ .dma_rcc = UART1_TX_DMA_RCC, \ .request = UART1_TX_DMA_REQUEST, \ @@ -66,13 +66,13 @@ extern "C" { #if defined(BSP_USING_UART2) #ifndef UART2_CONFIG -#define UART2_CONFIG \ - { \ - .name = "uart2", \ - .Instance = USART2, \ - .irq_type = USART2_IRQn, \ - .periph = RCC_APB1_PERIPHEN_USART2, \ - .EnablePeriphClk = RCC_EnableAPB1PeriphClk, \ +#define UART2_CONFIG \ + { \ + .name = "uart2", \ + .Instance = USART2, \ + .irq_type = USART2_IRQn, \ + .periph = RCC_APB1_PERIPHEN_USART2, \ + .EnablePeriphClk = RCC_EnableAPB1PeriphClk, \ } #endif /* UART2_CONFIG */ #endif /* BSP_USING_UART2 */ @@ -81,8 +81,8 @@ extern "C" { #ifndef UART2_DMA_RX_CONFIG #define UART2_DMA_RX_CONFIG \ { \ - .DMAy = UART2_RX_DMA, \ - .DMAChx = UART2_RX_DMA_CHType, \ + .DMAy = UART2_RX_DMA, \ + .DMAChx = UART2_RX_DMA_CHType, \ .dma_irq = UART2_RX_DMA_IRQ, \ .dma_rcc = UART2_RX_DMA_RCC, \ .request = UART2_RX_DMA_REQUEST, \ @@ -98,8 +98,8 @@ extern "C" { #ifndef UART2_DMA_TX_CONFIG #define UART2_DMA_TX_CONFIG \ { \ - .DMAy = UART2_TX_DMA, \ - .DMAChx = UART2_TX_DMA_CHType, \ + .DMAy = UART2_TX_DMA, \ + .DMAChx = UART2_TX_DMA_CHType, \ .dma_irq = UART2_TX_DMA_IRQ, \ .dma_rcc = UART2_TX_DMA_RCC, \ .request = UART2_TX_DMA_REQUEST, \ @@ -113,13 +113,13 @@ extern "C" { #if defined(BSP_USING_UART3) #ifndef UART3_CONFIG -#define UART3_CONFIG \ - { \ - .name = "uart3", \ - .Instance = USART3, \ - .irq_type = USART3_IRQn, \ - .periph = RCC_APB1_PERIPHEN_USART3, \ - .EnablePeriphClk = RCC_EnableAPB1PeriphClk, \ +#define UART3_CONFIG \ + { \ + .name = "uart3", \ + .Instance = USART3, \ + .irq_type = USART3_IRQn, \ + .periph = RCC_APB1_PERIPHEN_USART3, \ + .EnablePeriphClk = RCC_EnableAPB1PeriphClk, \ } #endif /* UART3_CONFIG */ #endif /* BSP_USING_UART3 */ @@ -128,8 +128,8 @@ extern "C" { #ifndef UART3_DMA_RX_CONFIG #define UART3_DMA_RX_CONFIG \ { \ - .DMAy = UART3_RX_DMA, \ - .DMAChx = UART3_RX_DMA_CHType, \ + .DMAy = UART3_RX_DMA, \ + .DMAChx = UART3_RX_DMA_CHType, \ .dma_irq = UART3_RX_DMA_IRQ, \ .dma_rcc = UART3_RX_DMA_RCC, \ .request = UART3_RX_DMA_REQUEST, \ @@ -145,8 +145,8 @@ extern "C" { #ifndef UART3_DMA_TX_CONFIG #define UART3_DMA_TX_CONFIG \ { \ - .DMAy = UART3_TX_DMA, \ - .DMAChx = UART3_TX_DMA_CHType, \ + .DMAy = UART3_TX_DMA, \ + .DMAChx = UART3_TX_DMA_CHType, \ .dma_irq = UART3_TX_DMA_IRQ, \ .dma_rcc = UART3_TX_DMA_RCC, \ .request = UART3_TX_DMA_REQUEST, \ @@ -160,13 +160,13 @@ extern "C" { #if defined(BSP_USING_UART4) #ifndef UART4_CONFIG -#define UART4_CONFIG \ - { \ - .name = "uart4", \ - .Instance = USART4, \ - .irq_type = USART4_IRQn, \ - .periph = RCC_APB2_PERIPHEN_USART4, \ - .EnablePeriphClk = RCC_EnableAPB2PeriphClk, \ +#define UART4_CONFIG \ + { \ + .name = "uart4", \ + .Instance = USART4, \ + .irq_type = USART4_IRQn, \ + .periph = RCC_APB2_PERIPHEN_USART4, \ + .EnablePeriphClk = RCC_EnableAPB2PeriphClk, \ } #endif /* UART4_CONFIG */ #endif /* BSP_USING_UART4 */ @@ -175,8 +175,8 @@ extern "C" { #ifndef UART4_DMA_RX_CONFIG #define UART4_DMA_RX_CONFIG \ { \ - .DMAy = UART4_RX_DMA, \ - .DMAChx = UART4_RX_DMA_CHType, \ + .DMAy = UART4_RX_DMA, \ + .DMAChx = UART4_RX_DMA_CHType, \ .dma_irq = UART4_RX_DMA_IRQ, \ .dma_rcc = UART4_RX_DMA_RCC, \ .request = UART4_RX_DMA_REQUEST, \ @@ -192,8 +192,8 @@ extern "C" { #ifndef UART4_DMA_TX_CONFIG #define UART4_DMA_TX_CONFIG \ { \ - .DMAy = UART4_TX_DMA, \ - .DMAChx = UART4_TX_DMA_CHType, \ + .DMAy = UART4_TX_DMA, \ + .DMAChx = UART4_TX_DMA_CHType, \ .dma_irq = UART4_TX_DMA_IRQ, \ .dma_rcc = UART4_TX_DMA_RCC, \ .request = UART4_TX_DMA_REQUEST, \ @@ -209,10 +209,10 @@ extern "C" { #ifndef UART5_CONFIG #define UART5_CONFIG \ { \ - .name = "uart5", \ - .Instance = UART5, \ - .irq_type = UART5_IRQn, \ - .periph = RCC_APB1_PERIPHEN_UART5, \ + .name = "uart5", \ + .Instance = UART5, \ + .irq_type = UART5_IRQn, \ + .periph = RCC_APB1_PERIPHEN_UART5, \ .EnablePeriphClk = RCC_EnableAPB1PeriphClk, \ } #endif /* UART5_CONFIG */ @@ -222,8 +222,8 @@ extern "C" { #ifndef UART5_DMA_RX_CONFIG #define UART5_DMA_RX_CONFIG \ { \ - .DMAy = UART5_RX_DMA, \ - .DMAChx = UART5_RX_DMA_CHType, \ + .DMAy = UART5_RX_DMA, \ + .DMAChx = UART5_RX_DMA_CHType, \ .dma_irq = UART5_RX_DMA_IRQ, \ .dma_rcc = UART5_RX_DMA_RCC, \ .request = UART5_RX_DMA_REQUEST, \ @@ -239,8 +239,8 @@ extern "C" { #ifndef UART5_DMA_TX_CONFIG #define UART5_DMA_TX_CONFIG \ { \ - .DMAy = UART5_TX_DMA, \ - .DMAChx = UART5_TX_DMA_CHType, \ + .DMAy = UART5_TX_DMA, \ + .DMAChx = UART5_TX_DMA_CHType, \ .dma_irq = UART5_TX_DMA_IRQ, \ .dma_rcc = UART5_TX_DMA_RCC, \ .request = UART5_TX_DMA_REQUEST, \ @@ -256,10 +256,10 @@ extern "C" { #ifndef UART6_CONFIG #define UART6_CONFIG \ { \ - .name = "uart6", \ - .Instance = UART6, \ - .irq_type = UART6_IRQn, \ - .periph = RCC_APB2_PERIPHEN_UART6, \ + .name = "uart6", \ + .Instance = UART6, \ + .irq_type = UART6_IRQn, \ + .periph = RCC_APB2_PERIPHEN_UART6, \ .EnablePeriphClk = RCC_EnableAPB2PeriphClk, \ } #endif /* UART6_CONFIG */ @@ -269,8 +269,8 @@ extern "C" { #ifndef UART6_DMA_RX_CONFIG #define UART6_DMA_RX_CONFIG \ { \ - .DMAy = UART6_RX_DMA, \ - .DMAChx = UART6_RX_DMA_CHType, \ + .DMAy = UART6_RX_DMA, \ + .DMAChx = UART6_RX_DMA_CHType, \ .dma_irq = UART6_RX_DMA_IRQ, \ .dma_rcc = UART6_RX_DMA_RCC, \ .request = UART6_RX_DMA_REQUEST, \ @@ -286,8 +286,8 @@ extern "C" { #ifndef UART6_DMA_TX_CONFIG #define UART6_DMA_TX_CONFIG \ { \ - .DMAy = UART6_TX_DMA, \ - .DMAChx = UART6_TX_DMA_CHType, \ + .DMAy = UART6_TX_DMA, \ + .DMAChx = UART6_TX_DMA_CHType, \ .dma_irq = UART6_TX_DMA_IRQ, \ .dma_rcc = UART6_TX_DMA_RCC, \ .request = UART6_TX_DMA_REQUEST, \ @@ -303,10 +303,10 @@ extern "C" { #ifndef UART7_CONFIG #define UART7_CONFIG \ { \ - .name = "uart7", \ - .Instance = UART7, \ - .irq_type = UART7_IRQn, \ - .periph = RCC_APB2_PERIPHEN_UART7, \ + .name = "uart7", \ + .Instance = UART7, \ + .irq_type = UART7_IRQn, \ + .periph = RCC_APB2_PERIPHEN_UART7, \ .EnablePeriphClk = RCC_EnableAPB2PeriphClk, \ } #endif /* UART7_CONFIG */ @@ -316,8 +316,8 @@ extern "C" { #ifndef UART7_DMA_RX_CONFIG #define UART7_DMA_RX_CONFIG \ { \ - .DMAy = UART7_RX_DMA, \ - .DMAChx = UART7_RX_DMA_CHType, \ + .DMAy = UART7_RX_DMA, \ + .DMAChx = UART7_RX_DMA_CHType, \ .dma_irq = UART7_RX_DMA_IRQ, \ .dma_rcc = UART7_RX_DMA_RCC, \ .request = UART7_RX_DMA_REQUEST, \ @@ -333,8 +333,8 @@ extern "C" { #ifndef UART7_DMA_TX_CONFIG #define UART7_DMA_TX_CONFIG \ { \ - .DMAy = UART7_TX_DMA, \ - .DMAChx = UART7_TX_DMA_CHType, \ + .DMAy = UART7_TX_DMA, \ + .DMAChx = UART7_TX_DMA_CHType, \ .dma_irq = UART7_TX_DMA_IRQ, \ .dma_rcc = UART7_TX_DMA_RCC, \ .request = UART7_TX_DMA_REQUEST, \ @@ -350,10 +350,10 @@ extern "C" { #ifndef UART8_CONFIG #define UART8_CONFIG \ { \ - .name = "uart8", \ - .Instance = UART8, \ - .irq_type = UART8_IRQn, \ - .periph = RCC_APB1_PERIPHEN_UART8, \ + .name = "uart8", \ + .Instance = UART8, \ + .irq_type = UART8_IRQn, \ + .periph = RCC_APB1_PERIPHEN_UART8, \ .EnablePeriphClk = RCC_EnableAPB1PeriphClk, \ } #endif /* UART8_CONFIG */ @@ -363,8 +363,8 @@ extern "C" { #ifndef UART8_DMA_RX_CONFIG #define UART8_DMA_RX_CONFIG \ { \ - .DMAy = UART8_RX_DMA, \ - .DMAChx = UART8_RX_DMA_CHType, \ + .DMAy = UART8_RX_DMA, \ + .DMAChx = UART8_RX_DMA_CHType, \ .dma_irq = UART8_RX_DMA_IRQ, \ .dma_rcc = UART8_RX_DMA_RCC, \ .request = UART8_RX_DMA_REQUEST, \ @@ -380,8 +380,8 @@ extern "C" { #ifndef UART8_DMA_TX_CONFIG #define UART8_DMA_TX_CONFIG \ { \ - .DMAy = UART8_TX_DMA, \ - .DMAChx = UART8_TX_DMA_CHType, \ + .DMAy = UART8_TX_DMA, \ + .DMAChx = UART8_TX_DMA_CHType, \ .dma_irq = UART8_TX_DMA_IRQ, \ .dma_rcc = UART8_TX_DMA_RCC, \ .request = UART8_TX_DMA_REQUEST, \ @@ -395,13 +395,13 @@ extern "C" { #if defined(BSP_USING_UART9) #ifndef UART9_CONFIG -#define UART9_CONFIG \ - { \ - .name = "uart9", \ - .Instance = USART9, \ - .irq_type = USART9_IRQn, \ - .periph = RCC_APB2_PERIPHEN_USART9, \ - .EnablePeriphClk = RCC_EnableAPB2PeriphClk, \ +#define UART9_CONFIG \ + { \ + .name = "uart9", \ + .Instance = USART9, \ + .irq_type = USART9_IRQn, \ + .periph = RCC_APB2_PERIPHEN_USART9, \ + .EnablePeriphClk = RCC_EnableAPB2PeriphClk, \ } #endif /* UART9_CONFIG */ #endif /* BSP_USING_UART9 */ @@ -410,8 +410,8 @@ extern "C" { #ifndef UART9_DMA_RX_CONFIG #define UART9_DMA_RX_CONFIG \ { \ - .DMAy = UART9_RX_DMA, \ - .DMAChx = UART9_RX_DMA_CHType, \ + .DMAy = UART9_RX_DMA, \ + .DMAChx = UART9_RX_DMA_CHType, \ .dma_irq = UART9_RX_DMA_IRQ, \ .dma_rcc = UART9_RX_DMA_RCC, \ .request = UART9_RX_DMA_REQUEST, \ @@ -427,8 +427,8 @@ extern "C" { #ifndef UART9_DMA_TX_CONFIG #define UART9_DMA_TX_CONFIG \ { \ - .DMAy = UART9_TX_DMA, \ - .DMAChx = UART9_TX_DMA_CHType, \ + .DMAy = UART9_TX_DMA, \ + .DMAChx = UART9_TX_DMA_CHType, \ .dma_irq = UART9_TX_DMA_IRQ, \ .dma_rcc = UART9_TX_DMA_RCC, \ .request = UART9_TX_DMA_REQUEST, \ @@ -442,13 +442,13 @@ extern "C" { #if defined(BSP_USING_UART10) #ifndef UART10_CONFIG -#define UART10_CONFIG \ - { \ - .name = "uart10", \ - .Instance = URT10, \ - .irq_type = UART10_IRQn, \ - .periph = RCC_APB2_PERIPHEN_UART10, \ - .EnablePeriphClk = RCC_EnableAPB2PeriphClk, \ +#define UART10_CONFIG \ + { \ + .name = "uart10", \ + .Instance = URT10, \ + .irq_type = UART10_IRQn, \ + .periph = RCC_APB2_PERIPHEN_UART10, \ + .EnablePeriphClk = RCC_EnableAPB2PeriphClk, \ } #endif /* UART10_CONFIG */ #endif /* BSP_USING_UART10 */ @@ -457,8 +457,8 @@ extern "C" { #ifndef UART10_DMA_RX_CONFIG #define UART10_DMA_RX_CONFIG \ { \ - .DMAy = UART10_RX_DMA, \ - .DMAChx = UART10_RX_DMA_CHType, \ + .DMAy = UART10_RX_DMA, \ + .DMAChx = UART10_RX_DMA_CHType, \ .dma_irq = UART10_RX_DMA_IRQ, \ .dma_rcc = UART10_RX_DMA_RCC, \ .request = UART10_RX_DMA_REQUEST, \ @@ -474,8 +474,8 @@ extern "C" { #ifndef UART10_DMA_TX_CONFIG #define UART10_DMA_TX_CONFIG \ { \ - .DMAy = UART10_TX_DMA, \ - .DMAChx = UART10_TX_DMA_CHType, \ + .DMAy = UART10_TX_DMA, \ + .DMAChx = UART10_TX_DMA_CHType, \ .dma_irq = UART10_TX_DMA_IRQ, \ .dma_rcc = UART10_TX_DMA_RCC, \ .request = UART10_TX_DMA_REQUEST, \ diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/adc_config.h b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/adc_config.h index d3f23b65873..e0167c57cd7 100644 --- a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/adc_config.h +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/adc_config.h @@ -19,72 +19,72 @@ extern "C" { #ifdef BSP_USING_ADC1 #ifndef ADC1_CONFIG -#define ADC1_CONFIG \ - { \ - .ADCx = ADC1, \ - .AHB_periph = (RCC_AHB1_PERIPHEN_M7_ADC1SYS | RCC_AHB1_PERIPHEN_M7_ADC1BUS), \ - .EnablePeriphClk = RCC_EnableAHB1PeriphClk1, \ - .ADC_ClkMode = ADC_CTRL3_CKMOD_AHB, \ - .Pll_CLK_source = RCC_ADCPLLCLK_SRC_PLL1B, \ - .RCC_ADCPrescaler = RCC_AHB1DIV2_ADC1SYSDIV_DIV15, \ - .Init.WorkMode = ADC_WORKMODE_INDEPENDENT, \ - .Init.MultiChEn = DISABLE, \ - .Init.ContinueConvEn = DISABLE, \ - .Init.ExtTrigSelect = ADC_EXT_TRIG_REG_CONV_SOFTWARE, \ - .Init.DataTransferMode = ADC_REG_DR_TRANSFER, \ - .Init.DatAlign = ADC_DAT_ALIGN_R, \ - .Init.ChsNumber = 1U, \ - .Init.Resolution = ADC_DATA_RES_12BIT, \ - .Rank = 1U, \ - .ADC_SampleTime = ADC_SAMP_TIME_CYCLES_24, \ +#define ADC1_CONFIG \ + { \ + .ADCx = ADC1, \ + .AHB_periph = (RCC_AHB1_PERIPHEN_M7_ADC1SYS | RCC_AHB1_PERIPHEN_M7_ADC1BUS), \ + .EnablePeriphClk = RCC_EnableAHB1PeriphClk1, \ + .ADC_ClkMode = ADC_CTRL3_CKMOD_AHB, \ + .Pll_CLK_source = RCC_ADCPLLCLK_SRC_PLL1B, \ + .RCC_ADCPrescaler = RCC_AHB1DIV2_ADC1SYSDIV_DIV15, \ + .Init.WorkMode = ADC_WORKMODE_INDEPENDENT, \ + .Init.MultiChEn = DISABLE, \ + .Init.ContinueConvEn = DISABLE, \ + .Init.ExtTrigSelect = ADC_EXT_TRIG_REG_CONV_SOFTWARE, \ + .Init.DataTransferMode = ADC_REG_DR_TRANSFER, \ + .Init.DatAlign = ADC_DAT_ALIGN_R, \ + .Init.ChsNumber = 1U, \ + .Init.Resolution = ADC_DATA_RES_12BIT, \ + .Rank = 1U, \ + .ADC_SampleTime = ADC_SAMP_TIME_CYCLES_24, \ } #endif /* ADC1_CONFIG */ #endif /* BSP_USING_ADC1 */ #ifdef BSP_USING_ADC2 #ifndef ADC2_CONFIG -#define ADC2_CONFIG \ - { \ - .ADCx = ADC2, \ - .AHB_periph = (RCC_AHB1_PERIPHEN_M7_ADC2SYS | RCC_AHB1_PERIPHEN_M7_ADC2BUS), \ - .EnablePeriphClk = RCC_EnableAHB1PeriphClk4, \ - .ADC_ClkMode = ADC_CTRL3_CKMOD_AHB, \ - .Pll_CLK_source = RCC_ADCPLLCLK_SRC_PLL1B, \ - .RCC_ADCPrescaler = RCC_AHB1DIV2_ADC1SYSDIV_DIV15, \ - .Init.WorkMode = ADC_WORKMODE_INDEPENDENT, \ - .Init.MultiChEn = DISABLE, \ - .Init.ContinueConvEn = DISABLE, \ - .Init.ExtTrigSelect = ADC_EXT_TRIG_REG_CONV_SOFTWARE, \ - .Init.DataTransferMode = ADC_REG_DR_TRANSFER, \ - .Init.DatAlign = ADC_DAT_ALIGN_R, \ - .Init.ChsNumber = 1U, \ - .Init.Resolution = ADC_DATA_RES_12BIT, \ - .Rank = 1U, \ - .ADC_SampleTime = ADC_SAMP_TIME_CYCLES_24, \ +#define ADC2_CONFIG \ + { \ + .ADCx = ADC2, \ + .AHB_periph = (RCC_AHB1_PERIPHEN_M7_ADC2SYS | RCC_AHB1_PERIPHEN_M7_ADC2BUS), \ + .EnablePeriphClk = RCC_EnableAHB1PeriphClk4, \ + .ADC_ClkMode = ADC_CTRL3_CKMOD_AHB, \ + .Pll_CLK_source = RCC_ADCPLLCLK_SRC_PLL1B, \ + .RCC_ADCPrescaler = RCC_AHB1DIV2_ADC1SYSDIV_DIV15, \ + .Init.WorkMode = ADC_WORKMODE_INDEPENDENT, \ + .Init.MultiChEn = DISABLE, \ + .Init.ContinueConvEn = DISABLE, \ + .Init.ExtTrigSelect = ADC_EXT_TRIG_REG_CONV_SOFTWARE, \ + .Init.DataTransferMode = ADC_REG_DR_TRANSFER, \ + .Init.DatAlign = ADC_DAT_ALIGN_R, \ + .Init.ChsNumber = 1U, \ + .Init.Resolution = ADC_DATA_RES_12BIT, \ + .Rank = 1U, \ + .ADC_SampleTime = ADC_SAMP_TIME_CYCLES_24, \ } #endif /* ADC2_CONFIG */ #endif /* BSP_USING_ADC2 */ #ifdef BSP_USING_ADC3 #ifndef ADC3_CONFIG -#define ADC3_CONFIG \ - { \ - .ADCx = ADC3, \ - .AHB_periph = (RCC_AHB1_PERIPHEN_M7_ADC3SYS | RCC_AHB1_PERIPHEN_M7_ADC3BUS), \ - .EnablePeriphClk = RCC_EnableAHB1PeriphClk4, \ - .ADC_ClkMode = ADC_CTRL3_CKMOD_AHB, \ - .Pll_CLK_source = RCC_ADCPLLCLK_SRC_PLL1B, \ - .RCC_ADCPrescaler = RCC_AHB1DIV2_ADC1SYSDIV_DIV15, \ - .Init.WorkMode = ADC_WORKMODE_INDEPENDENT, \ - .Init.MultiChEn = DISABLE, \ - .Init.ContinueConvEn = DISABLE, \ - .Init.ExtTrigSelect = ADC_EXT_TRIG_REG_CONV_SOFTWARE, \ - .Init.DataTransferMode = ADC_REG_DR_TRANSFER, \ - .Init.DatAlign = ADC_DAT_ALIGN_R, \ - .Init.ChsNumber = 1U, \ - .Init.Resolution = ADC_DATA_RES_12BIT, \ - .Rank = 1U, \ - .ADC_SampleTime = ADC_SAMP_TIME_CYCLES_24, \ +#define ADC3_CONFIG \ + { \ + .ADCx = ADC3, \ + .AHB_periph = (RCC_AHB1_PERIPHEN_M7_ADC3SYS | RCC_AHB1_PERIPHEN_M7_ADC3BUS), \ + .EnablePeriphClk = RCC_EnableAHB1PeriphClk4, \ + .ADC_ClkMode = ADC_CTRL3_CKMOD_AHB, \ + .Pll_CLK_source = RCC_ADCPLLCLK_SRC_PLL1B, \ + .RCC_ADCPrescaler = RCC_AHB1DIV2_ADC1SYSDIV_DIV15, \ + .Init.WorkMode = ADC_WORKMODE_INDEPENDENT, \ + .Init.MultiChEn = DISABLE, \ + .Init.ContinueConvEn = DISABLE, \ + .Init.ExtTrigSelect = ADC_EXT_TRIG_REG_CONV_SOFTWARE, \ + .Init.DataTransferMode = ADC_REG_DR_TRANSFER, \ + .Init.DatAlign = ADC_DAT_ALIGN_R, \ + .Init.ChsNumber = 1U, \ + .Init.Resolution = ADC_DATA_RES_12BIT, \ + .Rank = 1U, \ + .ADC_SampleTime = ADC_SAMP_TIME_CYCLES_24, \ } #endif /* ADC3_CONFIG */ #endif /* BSP_USING_ADC3 */ diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/can_config.h b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/can_config.h index 71bce0b5dcd..fa6a155f806 100644 --- a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/can_config.h +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/can_config.h @@ -2,10 +2,6 @@ * Copyright (c) 2006-2026, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 - * - * Change Logs: - * Date Author Notes - * 2026-06-22 lin.qi first version */ #ifndef __CAN_CONFIG_H__ @@ -18,106 +14,173 @@ extern "C" { #endif -/** - *\*\name n32_fdcan_config. - *\*\brief FDCAN instance configuration structure. - *\*\note Clock and GPIO initialization are handled by CubeMX-generated code - *\*\ in n32h7xx_cfg.c (from Cube.ntfx). NVIC interrupt vector numbers - *\*\ are hardcoded in drv_fdcan.c per instance. - */ struct n32_fdcan_config { - const char *name; /**< device name */ - FDCAN_Module *Instance; /**< FDCAN peripheral base address */ + const char *name; + FDCAN_Module *Instance; + uint32_t std_filter_size; + uint32_t ext_filter_size; + uint32_t rx_fifo0_size; + uint32_t rx_fifo0_data_bytes; + uint32_t rx_fifo1_size; + uint32_t rx_fifo1_data_bytes; + uint32_t rx_buffer_size; + uint32_t rx_buffer_data_bytes; + uint32_t tx_event_size; + uint32_t tx_buffer_size; + uint32_t tx_buffer_data_bytes; + uint32_t tx_fifo_queue_size; + uint32_t tx_fifo_queue_mode; + uint32_t tdc_offset; + uint32_t tdc_filter; + rt_bool_t tdc_enabled; }; -/* - * Hardware connection pairs on N32H760ZIL7-STB: - * FDCAN1 <-> FDCAN2 - * FDCAN3 <-> FDCAN4 - * FDCAN5 <-> FDCAN6 - * FDCAN7 <-> FDCAN8 - */ +#define FDCAN_RESOURCE_CONFIG(number) \ + .std_filter_size = BSP_FDCAN##number##_STD_FILTER_SIZE, \ + .ext_filter_size = BSP_FDCAN##number##_EXT_FILTER_SIZE, \ + .rx_fifo0_size = BSP_FDCAN##number##_RX_FIFO0_SIZE, \ + .rx_fifo0_data_bytes = BSP_FDCAN##number##_RX_FIFO0_DATA_BYTES, \ + .rx_fifo1_size = BSP_FDCAN##number##_RX_FIFO1_SIZE, \ + .rx_fifo1_data_bytes = BSP_FDCAN##number##_RX_FIFO1_DATA_BYTES, \ + .rx_buffer_size = BSP_FDCAN##number##_RX_BUFFER_SIZE, \ + .rx_buffer_data_bytes = BSP_FDCAN##number##_RX_BUFFER_DATA_BYTES, \ + .tx_event_size = BSP_FDCAN##number##_TX_EVENT_FIFO_SIZE, \ + .tx_buffer_size = BSP_FDCAN##number##_TX_BUFFER_SIZE, \ + .tx_buffer_data_bytes = BSP_FDCAN##number##_TX_BUFFER_DATA_BYTES, \ + .tx_fifo_queue_size = BSP_FDCAN##number##_TX_FIFO_QUEUE_SIZE -#if defined(BSP_USING_FDCAN1) -#ifndef FDCAN1_CONFIG -#define FDCAN1_CONFIG \ - { \ - .name = "fdcan1", \ - .Instance = FDCAN1, \ +#define FDCAN_INSTANCE_CONFIG(number) \ + { \ + .name = "fdcan" #number, \ + .Instance = FDCAN##number, \ + FDCAN_RESOURCE_CONFIG(number), \ + FDCAN##number##_MODE_CONFIG, \ + FDCAN##number##_TDC_CONFIG, \ } + +#define FDCAN_TX_FIFO_CONFIG(number) \ + .tx_fifo_queue_mode = FDCAN_TX_FIFO_MODE +#define FDCAN_TX_QUEUE_CONFIG(number) \ + .tx_fifo_queue_mode = FDCAN_TX_QUEUE_MODE +#define FDCAN_TDC_DISABLED_CONFIG(number) \ + .tdc_enabled = RT_FALSE, .tdc_offset = 0, .tdc_filter = 0 +#define FDCAN_TDC_ENABLED_CONFIG(number) \ + .tdc_enabled = RT_TRUE, \ + .tdc_offset = BSP_FDCAN##number##_TDC_OFFSET, \ + .tdc_filter = BSP_FDCAN##number##_TDC_FILTER + +#if defined(BSP_USING_FDCAN1) +#if defined(BSP_FDCAN1_TX_QUEUE_MODE) +#define FDCAN1_MODE_CONFIG FDCAN_TX_QUEUE_CONFIG(1) +#else +#define FDCAN1_MODE_CONFIG FDCAN_TX_FIFO_CONFIG(1) +#endif +#if defined(BSP_FDCAN1_USING_TDC) +#define FDCAN1_TDC_CONFIG FDCAN_TDC_ENABLED_CONFIG(1) +#else +#define FDCAN1_TDC_CONFIG FDCAN_TDC_DISABLED_CONFIG(1) +#endif +#define FDCAN1_CONFIG FDCAN_INSTANCE_CONFIG(1) #endif -#endif /* BSP_USING_FDCAN1 */ #if defined(BSP_USING_FDCAN2) -#ifndef FDCAN2_CONFIG -#define FDCAN2_CONFIG \ - { \ - .name = "fdcan2", \ - .Instance = FDCAN2, \ - } +#if defined(BSP_FDCAN2_TX_QUEUE_MODE) +#define FDCAN2_MODE_CONFIG FDCAN_TX_QUEUE_CONFIG(2) +#else +#define FDCAN2_MODE_CONFIG FDCAN_TX_FIFO_CONFIG(2) +#endif +#if defined(BSP_FDCAN2_USING_TDC) +#define FDCAN2_TDC_CONFIG FDCAN_TDC_ENABLED_CONFIG(2) +#else +#define FDCAN2_TDC_CONFIG FDCAN_TDC_DISABLED_CONFIG(2) +#endif +#define FDCAN2_CONFIG FDCAN_INSTANCE_CONFIG(2) #endif -#endif /* BSP_USING_FDCAN2 */ #if defined(BSP_USING_FDCAN3) -#ifndef FDCAN3_CONFIG -#define FDCAN3_CONFIG \ - { \ - .name = "fdcan3", \ - .Instance = FDCAN3, \ - } +#if defined(BSP_FDCAN3_TX_QUEUE_MODE) +#define FDCAN3_MODE_CONFIG FDCAN_TX_QUEUE_CONFIG(3) +#else +#define FDCAN3_MODE_CONFIG FDCAN_TX_FIFO_CONFIG(3) +#endif +#if defined(BSP_FDCAN3_USING_TDC) +#define FDCAN3_TDC_CONFIG FDCAN_TDC_ENABLED_CONFIG(3) +#else +#define FDCAN3_TDC_CONFIG FDCAN_TDC_DISABLED_CONFIG(3) +#endif +#define FDCAN3_CONFIG FDCAN_INSTANCE_CONFIG(3) #endif -#endif /* BSP_USING_FDCAN3 */ #if defined(BSP_USING_FDCAN4) -#ifndef FDCAN4_CONFIG -#define FDCAN4_CONFIG \ - { \ - .name = "fdcan4", \ - .Instance = FDCAN4, \ - } +#if defined(BSP_FDCAN4_TX_QUEUE_MODE) +#define FDCAN4_MODE_CONFIG FDCAN_TX_QUEUE_CONFIG(4) +#else +#define FDCAN4_MODE_CONFIG FDCAN_TX_FIFO_CONFIG(4) +#endif +#if defined(BSP_FDCAN4_USING_TDC) +#define FDCAN4_TDC_CONFIG FDCAN_TDC_ENABLED_CONFIG(4) +#else +#define FDCAN4_TDC_CONFIG FDCAN_TDC_DISABLED_CONFIG(4) +#endif +#define FDCAN4_CONFIG FDCAN_INSTANCE_CONFIG(4) #endif -#endif /* BSP_USING_FDCAN4 */ #if defined(BSP_USING_FDCAN5) -#ifndef FDCAN5_CONFIG -#define FDCAN5_CONFIG \ - { \ - .name = "fdcan5", \ - .Instance = FDCAN5, \ - } +#if defined(BSP_FDCAN5_TX_QUEUE_MODE) +#define FDCAN5_MODE_CONFIG FDCAN_TX_QUEUE_CONFIG(5) +#else +#define FDCAN5_MODE_CONFIG FDCAN_TX_FIFO_CONFIG(5) +#endif +#if defined(BSP_FDCAN5_USING_TDC) +#define FDCAN5_TDC_CONFIG FDCAN_TDC_ENABLED_CONFIG(5) +#else +#define FDCAN5_TDC_CONFIG FDCAN_TDC_DISABLED_CONFIG(5) +#endif +#define FDCAN5_CONFIG FDCAN_INSTANCE_CONFIG(5) #endif -#endif /* BSP_USING_FDCAN5 */ #if defined(BSP_USING_FDCAN6) -#ifndef FDCAN6_CONFIG -#define FDCAN6_CONFIG \ - { \ - .name = "fdcan6", \ - .Instance = FDCAN6, \ - } +#if defined(BSP_FDCAN6_TX_QUEUE_MODE) +#define FDCAN6_MODE_CONFIG FDCAN_TX_QUEUE_CONFIG(6) +#else +#define FDCAN6_MODE_CONFIG FDCAN_TX_FIFO_CONFIG(6) +#endif +#if defined(BSP_FDCAN6_USING_TDC) +#define FDCAN6_TDC_CONFIG FDCAN_TDC_ENABLED_CONFIG(6) +#else +#define FDCAN6_TDC_CONFIG FDCAN_TDC_DISABLED_CONFIG(6) +#endif +#define FDCAN6_CONFIG FDCAN_INSTANCE_CONFIG(6) #endif -#endif /* BSP_USING_FDCAN6 */ #if defined(BSP_USING_FDCAN7) -#ifndef FDCAN7_CONFIG -#define FDCAN7_CONFIG \ - { \ - .name = "fdcan7", \ - .Instance = FDCAN7, \ - } +#if defined(BSP_FDCAN7_TX_QUEUE_MODE) +#define FDCAN7_MODE_CONFIG FDCAN_TX_QUEUE_CONFIG(7) +#else +#define FDCAN7_MODE_CONFIG FDCAN_TX_FIFO_CONFIG(7) +#endif +#if defined(BSP_FDCAN7_USING_TDC) +#define FDCAN7_TDC_CONFIG FDCAN_TDC_ENABLED_CONFIG(7) +#else +#define FDCAN7_TDC_CONFIG FDCAN_TDC_DISABLED_CONFIG(7) +#endif +#define FDCAN7_CONFIG FDCAN_INSTANCE_CONFIG(7) #endif -#endif /* BSP_USING_FDCAN7 */ #if defined(BSP_USING_FDCAN8) -#ifndef FDCAN8_CONFIG -#define FDCAN8_CONFIG \ - { \ - .name = "fdcan8", \ - .Instance = FDCAN8, \ - } +#if defined(BSP_FDCAN8_TX_QUEUE_MODE) +#define FDCAN8_MODE_CONFIG FDCAN_TX_QUEUE_CONFIG(8) +#else +#define FDCAN8_MODE_CONFIG FDCAN_TX_FIFO_CONFIG(8) +#endif +#if defined(BSP_FDCAN8_USING_TDC) +#define FDCAN8_TDC_CONFIG FDCAN_TDC_ENABLED_CONFIG(8) +#else +#define FDCAN8_TDC_CONFIG FDCAN_TDC_DISABLED_CONFIG(8) +#endif +#define FDCAN8_CONFIG FDCAN_INSTANCE_CONFIG(8) #endif -#endif /* BSP_USING_FDCAN8 */ #ifdef __cplusplus } diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/dac_config.h b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/dac_config.h index b1256573d8b..67fd7458dc1 100644 --- a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/dac_config.h +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/dac_config.h @@ -19,46 +19,46 @@ extern "C" { #ifdef BSP_USING_DAC1 #ifndef DAC1_CONFIG -#define DAC1_CONFIG \ - { \ - .DACx = DAC1, \ - .DAC_Module = DAC12, \ - .periph_clk = RCC_APB1_PERIPHEN_M7_DAC12, \ - .EnablePeriphClk = RCC_EnableAPB1PeriphClk2, \ - .DAC_clk_pres = 150, \ - .Init.DAC_Trigger = DAC_Trigger_Software, \ - .Init.DAC_Trigger2 = DAC_Trigger2_Software, \ - .Init.DAC_WaveGeneration = DAC_WaveGeneration_None, \ - .Init.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0, \ - .Init.DAC_OutputBuffer = DISABLE, \ - .Init.DAC_TriggerEnable = ENABLE, \ - .Init.DAC_ConnectOnChipPeripheral = DISABLE, \ - .Init.DAC_ConnectExternalPin = ENABLE, \ - .Init.DAC_DMADoubleDataMode = DISABLE, \ - .Init.DAC_SignedFormat = DISABLE, \ +#define DAC1_CONFIG \ + { \ + .DACx = DAC1, \ + .DAC_Module = DAC12, \ + .periph_clk = RCC_APB1_PERIPHEN_M7_DAC12, \ + .EnablePeriphClk = RCC_EnableAPB1PeriphClk2, \ + .DAC_clk_pres = 150, \ + .Init.DAC_Trigger = DAC_Trigger_Software, \ + .Init.DAC_Trigger2 = DAC_Trigger2_Software, \ + .Init.DAC_WaveGeneration = DAC_WaveGeneration_None, \ + .Init.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0, \ + .Init.DAC_OutputBuffer = DISABLE, \ + .Init.DAC_TriggerEnable = ENABLE, \ + .Init.DAC_ConnectOnChipPeripheral = DISABLE, \ + .Init.DAC_ConnectExternalPin = ENABLE, \ + .Init.DAC_DMADoubleDataMode = DISABLE, \ + .Init.DAC_SignedFormat = DISABLE, \ } #endif /* DAC1_CONFIG */ #endif /* BSP_USING_DAC1 */ #ifdef BSP_USING_DAC2 #ifndef DAC2_CONFIG -#define DAC2_CONFIG \ - { \ - .DACx = DAC2, \ - .DAC_Module = DAC12, \ - .periph_clk = RCC_APB1_PERIPHEN_M7_DAC12, \ - .EnablePeriphClk = RCC_EnableAPB1PeriphClk2, \ - .DAC_clk_pres = 150, \ - .Init.DAC_Trigger = DAC_Trigger_Software, \ - .Init.DAC_Trigger2 = DAC_Trigger2_Software, \ - .Init.DAC_WaveGeneration = DAC_WaveGeneration_None, \ - .Init.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0, \ - .Init.DAC_OutputBuffer = DISABLE, \ - .Init.DAC_TriggerEnable = ENABLE, \ - .Init.DAC_ConnectOnChipPeripheral = DISABLE, \ - .Init.DAC_ConnectExternalPin = ENABLE, \ - .Init.DAC_DMADoubleDataMode = DISABLE, \ - .Init.DAC_SignedFormat = DISABLE, \ +#define DAC2_CONFIG \ + { \ + .DACx = DAC2, \ + .DAC_Module = DAC12, \ + .periph_clk = RCC_APB1_PERIPHEN_M7_DAC12, \ + .EnablePeriphClk = RCC_EnableAPB1PeriphClk2, \ + .DAC_clk_pres = 150, \ + .Init.DAC_Trigger = DAC_Trigger_Software, \ + .Init.DAC_Trigger2 = DAC_Trigger2_Software, \ + .Init.DAC_WaveGeneration = DAC_WaveGeneration_None, \ + .Init.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0, \ + .Init.DAC_OutputBuffer = DISABLE, \ + .Init.DAC_TriggerEnable = ENABLE, \ + .Init.DAC_ConnectOnChipPeripheral = DISABLE, \ + .Init.DAC_ConnectExternalPin = ENABLE, \ + .Init.DAC_DMADoubleDataMode = DISABLE, \ + .Init.DAC_SignedFormat = DISABLE, \ } #endif /* DAC2_CONFIG */ #endif /* BSP_USING_DAC2 */ diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/i2c_hard_config.h b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/i2c_hard_config.h index 08de65cc087..ac32f682f3e 100644 --- a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/i2c_hard_config.h +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/i2c_hard_config.h @@ -21,16 +21,16 @@ extern "C" { #ifndef I2C1_BUS_CONFIG #define I2C1_BUS_CONFIG \ { \ - .name = "hwi2c1", \ - .Instance = I2C1, \ - .timing = 0x50012526, \ - .timeout = 0x1000, \ - .evirq_type = I2C1_EV_IRQn, \ - .erirq_type = I2C1_ER_IRQn, \ - .scl_af_width = 0, \ - .sda_af_width = 0, \ - .df_width = 0, \ - .periph = RCC_APB1_PERIPHEN_M7_I2C1, \ + .name = "hwi2c1", \ + .Instance = I2C1, \ + .timing = 0x50012526, \ + .timeout = 0x1000, \ + .evirq_type = I2C1_EV_IRQn, \ + .erirq_type = I2C1_ER_IRQn, \ + .scl_af_width = 0, \ + .sda_af_width = 0, \ + .df_width = 0, \ + .periph = RCC_APB1_PERIPHEN_M7_I2C1, \ .EnablePeriphClk = RCC_EnableAPB1PeriphClk4, \ .I2CKerClkSource = RCC_ConfigI2C1KerClkSource, \ } @@ -40,11 +40,11 @@ extern "C" { #ifndef I2C1_RX_DMA_CONFIG #define I2C1_RX_DMA_CONFIG \ { \ - .Instance = I2C1_RX_DMA_INSTANCE, \ - .dma_irq = I2C1_RX_DMA_IRQ, \ - .HsInterface = I2C1_RX_DMA_HANDSHAK, \ - .dma_rcc = I2C1_RX_DMA_DMA_RCC, \ - .dma_channel = I2C1_RX_DMA_DMA_CHANNEL, \ + .Instance = I2C1_RX_DMA_INSTANCE, \ + .dma_irq = I2C1_RX_DMA_IRQ, \ + .HsInterface = I2C1_RX_DMA_HANDSHAK, \ + .dma_rcc = I2C1_RX_DMA_DMA_RCC, \ + .dma_channel = I2C1_RX_DMA_DMA_CHANNEL, \ .dmamux_channel = I2C1_RX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = I2C1_RX_DMA_DMAMUX_REQUEST, \ } @@ -54,11 +54,11 @@ extern "C" { #ifndef I2C1_TX_DMA_CONFIG #define I2C1_TX_DMA_CONFIG \ { \ - .Instance = I2C1_TX_DMA_INSTANCE, \ - .dma_irq = I2C1_TX_DMA_IRQ, \ - .HsInterface = I2C1_TX_DMA_HANDSHAK, \ - .dma_rcc = I2C1_TX_DMA_DMA_RCC, \ - .dma_channel = I2C1_TX_DMA_DMA_CHANNEL, \ + .Instance = I2C1_TX_DMA_INSTANCE, \ + .dma_irq = I2C1_TX_DMA_IRQ, \ + .HsInterface = I2C1_TX_DMA_HANDSHAK, \ + .dma_rcc = I2C1_TX_DMA_DMA_RCC, \ + .dma_channel = I2C1_TX_DMA_DMA_CHANNEL, \ .dmamux_channel = I2C1_TX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = I2C1_TX_DMA_DMAMUX_REQUEST, \ } @@ -69,16 +69,16 @@ extern "C" { #ifndef I2C2_BUS_CONFIG #define I2C2_BUS_CONFIG \ { \ - .name = "hwi2c2", \ - .Instance = I2C2, \ - .timing = 0x50012526, \ - .timeout = 0x1000, \ - .evirq_type = I2C2_EV_IRQn, \ - .erirq_type = I2C2_ER_IRQn, \ - .scl_af_width = 0, \ - .sda_af_width = 0, \ - .df_width = 0, \ - .periph = RCC_APB1_PERIPHEN_M7_I2C2, \ + .name = "hwi2c2", \ + .Instance = I2C2, \ + .timing = 0x50012526, \ + .timeout = 0x1000, \ + .evirq_type = I2C2_EV_IRQn, \ + .erirq_type = I2C2_ER_IRQn, \ + .scl_af_width = 0, \ + .sda_af_width = 0, \ + .df_width = 0, \ + .periph = RCC_APB1_PERIPHEN_M7_I2C2, \ .EnablePeriphClk = RCC_EnableAPB1PeriphClk4, \ .I2CKerClkSource = RCC_ConfigI2C2KerClkSource, \ } @@ -88,11 +88,11 @@ extern "C" { #ifndef I2C2_RX_DMA_CONFIG #define I2C2_RX_DMA_CONFIG \ { \ - .Instance = I2C2_RX_DMA_INSTANCE, \ - .dma_irq = I2C2_RX_DMA_IRQ, \ - .HsInterface = I2C2_RX_DMA_HANDSHAK, \ - .dma_rcc = I2C2_RX_DMA_DMA_RCC, \ - .dma_channel = I2C2_RX_DMA_DMA_CHANNEL, \ + .Instance = I2C2_RX_DMA_INSTANCE, \ + .dma_irq = I2C2_RX_DMA_IRQ, \ + .HsInterface = I2C2_RX_DMA_HANDSHAK, \ + .dma_rcc = I2C2_RX_DMA_DMA_RCC, \ + .dma_channel = I2C2_RX_DMA_DMA_CHANNEL, \ .dmamux_channel = I2C2_RX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = I2C2_RX_DMA_DMAMUX_REQUEST, \ } @@ -102,11 +102,11 @@ extern "C" { #ifndef I2C2_TX_DMA_CONFIG #define I2C2_TX_DMA_CONFIG \ { \ - .Instance = I2C2_TX_DMA_INSTANCE, \ - .dma_irq = I2C2_TX_DMA_IRQ, \ - .HsInterface = I2C2_TX_DMA_HANDSHAK, \ - .dma_rcc = I2C2_TX_DMA_DMA_RCC, \ - .dma_channel = I2C2_TX_DMA_DMA_CHANNEL, \ + .Instance = I2C2_TX_DMA_INSTANCE, \ + .dma_irq = I2C2_TX_DMA_IRQ, \ + .HsInterface = I2C2_TX_DMA_HANDSHAK, \ + .dma_rcc = I2C2_TX_DMA_DMA_RCC, \ + .dma_channel = I2C2_TX_DMA_DMA_CHANNEL, \ .dmamux_channel = I2C2_TX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = I2C2_TX_DMA_DMAMUX_REQUEST, \ } @@ -117,16 +117,16 @@ extern "C" { #ifndef I2C3_BUS_CONFIG #define I2C3_BUS_CONFIG \ { \ - .name = "hwi2c3", \ - .Instance = I2C3, \ - .timing = 0x50012526, \ - .timeout = 0x1000, \ - .evirq_type = I2C3_EV_IRQn, \ - .erirq_type = I2C3_ER_IRQn, \ - .scl_af_width = 0, \ - .sda_af_width = 0, \ - .df_width = 0, \ - .periph = RCC_APB1_PERIPHEN_M7_I2C3, \ + .name = "hwi2c3", \ + .Instance = I2C3, \ + .timing = 0x50012526, \ + .timeout = 0x1000, \ + .evirq_type = I2C3_EV_IRQn, \ + .erirq_type = I2C3_ER_IRQn, \ + .scl_af_width = 0, \ + .sda_af_width = 0, \ + .df_width = 0, \ + .periph = RCC_APB1_PERIPHEN_M7_I2C3, \ .EnablePeriphClk = RCC_EnableAPB1PeriphClk4, \ .I2CKerClkSource = RCC_ConfigI2C3KerClkSource, \ } @@ -136,11 +136,11 @@ extern "C" { #ifndef I2C3_RX_DMA_CONFIG #define I2C3_RX_DMA_CONFIG \ { \ - .Instance = I2C3_RX_DMA_INSTANCE, \ - .dma_irq = I2C3_RX_DMA_IRQ, \ - .HsInterface = I2C3_RX_DMA_HANDSHAK, \ - .dma_rcc = I2C3_RX_DMA_DMA_RCC, \ - .dma_channel = I2C3_RX_DMA_DMA_CHANNEL, \ + .Instance = I2C3_RX_DMA_INSTANCE, \ + .dma_irq = I2C3_RX_DMA_IRQ, \ + .HsInterface = I2C3_RX_DMA_HANDSHAK, \ + .dma_rcc = I2C3_RX_DMA_DMA_RCC, \ + .dma_channel = I2C3_RX_DMA_DMA_CHANNEL, \ .dmamux_channel = I2C3_RX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = I2C3_RX_DMA_DMAMUX_REQUEST, \ } @@ -150,11 +150,11 @@ extern "C" { #ifndef I2C3_TX_DMA_CONFIG #define I2C3_TX_DMA_CONFIG \ { \ - .Instance = I2C3_TX_DMA_INSTANCE, \ - .dma_irq = I2C3_TX_DMA_IRQ, \ - .HsInterface = I2C3_TX_DMA_HANDSHAK, \ - .dma_rcc = I2C3_TX_DMA_DMA_RCC, \ - .dma_channel = I2C3_TX_DMA_DMA_CHANNEL, \ + .Instance = I2C3_TX_DMA_INSTANCE, \ + .dma_irq = I2C3_TX_DMA_IRQ, \ + .HsInterface = I2C3_TX_DMA_HANDSHAK, \ + .dma_rcc = I2C3_TX_DMA_DMA_RCC, \ + .dma_channel = I2C3_TX_DMA_DMA_CHANNEL, \ .dmamux_channel = I2C3_TX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = I2C3_TX_DMA_DMAMUX_REQUEST, \ } @@ -165,16 +165,16 @@ extern "C" { #ifndef I2C4_BUS_CONFIG #define I2C4_BUS_CONFIG \ { \ - .name = "hwi2c4", \ - .Instance = I2C4, \ - .timing = 0x50012526, \ - .timeout = 0x1000, \ - .evirq_type = I2C4_EV_IRQn, \ - .erirq_type = I2C4_ER_IRQn, \ - .scl_af_width = 0, \ - .sda_af_width = 0, \ - .df_width = 0, \ - .periph = RCC_APB2_PERIPHEN_M7_I2C4, \ + .name = "hwi2c4", \ + .Instance = I2C4, \ + .timing = 0x50012526, \ + .timeout = 0x1000, \ + .evirq_type = I2C4_EV_IRQn, \ + .erirq_type = I2C4_ER_IRQn, \ + .scl_af_width = 0, \ + .sda_af_width = 0, \ + .df_width = 0, \ + .periph = RCC_APB2_PERIPHEN_M7_I2C4, \ .EnablePeriphClk = RCC_EnableAPB2PeriphClk2, \ .I2CKerClkSource = RCC_ConfigI2C4KerClkSource, \ } @@ -184,11 +184,11 @@ extern "C" { #ifndef I2C4_RX_DMA_CONFIG #define I2C4_RX_DMA_CONFIG \ { \ - .Instance = I2C4_RX_DMA_INSTANCE, \ - .dma_irq = I2C4_RX_DMA_IRQ, \ - .HsInterface = I2C4_RX_DMA_HANDSHAK, \ - .dma_rcc = I2C4_RX_DMA_DMA_RCC, \ - .dma_channel = I2C4_RX_DMA_DMA_CHANNEL, \ + .Instance = I2C4_RX_DMA_INSTANCE, \ + .dma_irq = I2C4_RX_DMA_IRQ, \ + .HsInterface = I2C4_RX_DMA_HANDSHAK, \ + .dma_rcc = I2C4_RX_DMA_DMA_RCC, \ + .dma_channel = I2C4_RX_DMA_DMA_CHANNEL, \ .dmamux_channel = I2C4_RX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = I2C4_RX_DMA_DMAMUX_REQUEST, \ } @@ -198,11 +198,11 @@ extern "C" { #ifndef I2C4_TX_DMA_CONFIG #define I2C4_TX_DMA_CONFIG \ { \ - .Instance = I2C4_TX_DMA_INSTANCE, \ - .dma_irq = I2C4_TX_DMA_IRQ, \ - .HsInterface = I2C4_TX_DMA_HANDSHAK, \ - .dma_rcc = I2C4_TX_DMA_DMA_RCC, \ - .dma_channel = I2C4_TX_DMA_DMA_CHANNEL, \ + .Instance = I2C4_TX_DMA_INSTANCE, \ + .dma_irq = I2C4_TX_DMA_IRQ, \ + .HsInterface = I2C4_TX_DMA_HANDSHAK, \ + .dma_rcc = I2C4_TX_DMA_DMA_RCC, \ + .dma_channel = I2C4_TX_DMA_DMA_CHANNEL, \ .dmamux_channel = I2C4_TX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = I2C4_TX_DMA_DMAMUX_REQUEST, \ } @@ -213,16 +213,16 @@ extern "C" { #ifndef I2C5_BUS_CONFIG #define I2C5_BUS_CONFIG \ { \ - .name = "hwi2c5", \ - .Instance = I2C5, \ - .timing = 0x50012526, \ - .timeout = 0x1000, \ - .evirq_type = I2C5_EV_IRQn, \ - .erirq_type = I2C5_ER_IRQn, \ - .scl_af_width = 0, \ - .sda_af_width = 0, \ - .df_width = 0, \ - .periph = RCC_APB2_PERIPHEN_M7_I2C5, \ + .name = "hwi2c5", \ + .Instance = I2C5, \ + .timing = 0x50012526, \ + .timeout = 0x1000, \ + .evirq_type = I2C5_EV_IRQn, \ + .erirq_type = I2C5_ER_IRQn, \ + .scl_af_width = 0, \ + .sda_af_width = 0, \ + .df_width = 0, \ + .periph = RCC_APB2_PERIPHEN_M7_I2C5, \ .EnablePeriphClk = RCC_EnableAPB2PeriphClk2, \ .I2CKerClkSource = RCC_ConfigI2C5KerClkSource, \ } @@ -232,11 +232,11 @@ extern "C" { #ifndef I2C5_RX_DMA_CONFIG #define I2C5_RX_DMA_CONFIG \ { \ - .Instance = I2C5_RX_DMA_INSTANCE, \ - .dma_irq = I2C5_RX_DMA_IRQ, \ - .HsInterface = I2C5_RX_DMA_HANDSHAK, \ - .dma_rcc = I2C5_RX_DMA_DMA_RCC, \ - .dma_channel = I2C5_RX_DMA_DMA_CHANNEL, \ + .Instance = I2C5_RX_DMA_INSTANCE, \ + .dma_irq = I2C5_RX_DMA_IRQ, \ + .HsInterface = I2C5_RX_DMA_HANDSHAK, \ + .dma_rcc = I2C5_RX_DMA_DMA_RCC, \ + .dma_channel = I2C5_RX_DMA_DMA_CHANNEL, \ .dmamux_channel = I2C5_RX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = I2C5_RX_DMA_DMAMUX_REQUEST, \ } @@ -246,11 +246,11 @@ extern "C" { #ifndef I2C5_TX_DMA_CONFIG #define I2C5_TX_DMA_CONFIG \ { \ - .Instance = I2C5_TX_DMA_INSTANCE, \ - .dma_irq = I2C5_TX_DMA_IRQ, \ - .HsInterface = I2C5_TX_DMA_HANDSHAK, \ - .dma_rcc = I2C5_TX_DMA_DMA_RCC, \ - .dma_channel = I2C5_TX_DMA_DMA_CHANNEL, \ + .Instance = I2C5_TX_DMA_INSTANCE, \ + .dma_irq = I2C5_TX_DMA_IRQ, \ + .HsInterface = I2C5_TX_DMA_HANDSHAK, \ + .dma_rcc = I2C5_TX_DMA_DMA_RCC, \ + .dma_channel = I2C5_TX_DMA_DMA_CHANNEL, \ .dmamux_channel = I2C5_TX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = I2C5_TX_DMA_DMAMUX_REQUEST, \ } @@ -261,16 +261,16 @@ extern "C" { #ifndef I2C6_BUS_CONFIG #define I2C6_BUS_CONFIG \ { \ - .name = "hwi2c6", \ - .Instance = I2C6, \ - .timing = 0x50012526, \ - .timeout = 0x1000, \ - .evirq_type = I2C6_EV_IRQn, \ - .erirq_type = I2C6_ER_IRQn, \ - .scl_af_width = 0, \ - .sda_af_width = 0, \ - .df_width = 0, \ - .periph = RCC_APB2_PERIPHEN_M7_I2C6, \ + .name = "hwi2c6", \ + .Instance = I2C6, \ + .timing = 0x50012526, \ + .timeout = 0x1000, \ + .evirq_type = I2C6_EV_IRQn, \ + .erirq_type = I2C6_ER_IRQn, \ + .scl_af_width = 0, \ + .sda_af_width = 0, \ + .df_width = 0, \ + .periph = RCC_APB2_PERIPHEN_M7_I2C6, \ .EnablePeriphClk = RCC_EnableAPB2PeriphClk2, \ .I2CKerClkSource = RCC_ConfigI2C6KerClkSource, \ } @@ -280,11 +280,11 @@ extern "C" { #ifndef I2C6_RX_DMA_CONFIG #define I2C6_RX_DMA_CONFIG \ { \ - .Instance = I2C6_RX_DMA_INSTANCE, \ - .dma_irq = I2C6_RX_DMA_IRQ, \ - .HsInterface = I2C6_RX_DMA_HANDSHAK, \ - .dma_rcc = I2C6_RX_DMA_DMA_RCC, \ - .dma_channel = I2C6_RX_DMA_DMA_CHANNEL, \ + .Instance = I2C6_RX_DMA_INSTANCE, \ + .dma_irq = I2C6_RX_DMA_IRQ, \ + .HsInterface = I2C6_RX_DMA_HANDSHAK, \ + .dma_rcc = I2C6_RX_DMA_DMA_RCC, \ + .dma_channel = I2C6_RX_DMA_DMA_CHANNEL, \ .dmamux_channel = I2C6_RX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = I2C6_RX_DMA_DMAMUX_REQUEST, \ } @@ -294,11 +294,11 @@ extern "C" { #ifndef I2C6_TX_DMA_CONFIG #define I2C6_TX_DMA_CONFIG \ { \ - .Instance = I2C6_TX_DMA_INSTANCE, \ - .dma_irq = I2C6_TX_DMA_IRQ, \ - .HsInterface = I2C6_TX_DMA_HANDSHAK, \ - .dma_rcc = I2C6_TX_DMA_DMA_RCC, \ - .dma_channel = I2C6_TX_DMA_DMA_CHANNEL, \ + .Instance = I2C6_TX_DMA_INSTANCE, \ + .dma_irq = I2C6_TX_DMA_IRQ, \ + .HsInterface = I2C6_TX_DMA_HANDSHAK, \ + .dma_rcc = I2C6_TX_DMA_DMA_RCC, \ + .dma_channel = I2C6_TX_DMA_DMA_CHANNEL, \ .dmamux_channel = I2C6_TX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = I2C6_TX_DMA_DMAMUX_REQUEST, \ } @@ -309,16 +309,16 @@ extern "C" { #ifndef I2C7_BUS_CONFIG #define I2C7_BUS_CONFIG \ { \ - .name = "hwi2c7", \ - .Instance = I2C7, \ - .timing = 0x50012526, \ - .timeout = 0x1000, \ - .evirq_type = I2C7_EV_IRQn, \ - .erirq_type = I2C7_ER_IRQn, \ - .scl_af_width = 0, \ - .sda_af_width = 0, \ - .df_width = 0, \ - .periph = RCC_APB5_PERIPHEN_M7_I2C7, \ + .name = "hwi2c7", \ + .Instance = I2C7, \ + .timing = 0x50012526, \ + .timeout = 0x1000, \ + .evirq_type = I2C7_EV_IRQn, \ + .erirq_type = I2C7_ER_IRQn, \ + .scl_af_width = 0, \ + .sda_af_width = 0, \ + .df_width = 0, \ + .periph = RCC_APB5_PERIPHEN_M7_I2C7, \ .EnablePeriphClk = RCC_EnableAPB5PeriphClk2, \ .I2CKerClkSource = RCC_ConfigI2C7KerClkSource, \ } @@ -328,11 +328,11 @@ extern "C" { #ifndef I2C7_RX_DMA_CONFIG #define I2C7_RX_DMA_CONFIG \ { \ - .Instance = I2C7_RX_DMA_INSTANCE, \ - .dma_irq = I2C7_RX_DMA_IRQ, \ - .HsInterface = I2C7_RX_DMA_HANDSHAK, \ - .dma_rcc = I2C7_RX_DMA_DMA_RCC, \ - .dma_channel = I2C7_RX_DMA_DMA_CHANNEL, \ + .Instance = I2C7_RX_DMA_INSTANCE, \ + .dma_irq = I2C7_RX_DMA_IRQ, \ + .HsInterface = I2C7_RX_DMA_HANDSHAK, \ + .dma_rcc = I2C7_RX_DMA_DMA_RCC, \ + .dma_channel = I2C7_RX_DMA_DMA_CHANNEL, \ .dmamux_channel = I2C7_RX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = I2C7_RX_DMA_DMAMUX_REQUEST, \ } @@ -342,11 +342,11 @@ extern "C" { #ifndef I2C7_TX_DMA_CONFIG #define I2C7_TX_DMA_CONFIG \ { \ - .Instance = I2C7_TX_DMA_INSTANCE, \ - .dma_irq = I2C7_TX_DMA_IRQ, \ - .HsInterface = I2C7_TX_DMA_HANDSHAK, \ - .dma_rcc = I2C7_TX_DMA_DMA_RCC, \ - .dma_channel = I2C7_TX_DMA_DMA_CHANNEL, \ + .Instance = I2C7_TX_DMA_INSTANCE, \ + .dma_irq = I2C7_TX_DMA_IRQ, \ + .HsInterface = I2C7_TX_DMA_HANDSHAK, \ + .dma_rcc = I2C7_TX_DMA_DMA_RCC, \ + .dma_channel = I2C7_TX_DMA_DMA_CHANNEL, \ .dmamux_channel = I2C7_TX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = I2C7_TX_DMA_DMAMUX_REQUEST, \ } @@ -357,16 +357,16 @@ extern "C" { #ifndef I2C8_BUS_CONFIG #define I2C8_BUS_CONFIG \ { \ - .name = "hwi2c8", \ - .Instance = I2C8, \ - .timing = 0x50012526, \ - .timeout = 0x1000, \ - .evirq_type = I2C8_EV_IRQn, \ - .erirq_type = I2C8_ER_IRQn, \ - .scl_af_width = 0, \ - .sda_af_width = 0, \ - .df_width = 0, \ - .periph = RCC_APB5_PERIPHEN_M7_I2C8, \ + .name = "hwi2c8", \ + .Instance = I2C8, \ + .timing = 0x50012526, \ + .timeout = 0x1000, \ + .evirq_type = I2C8_EV_IRQn, \ + .erirq_type = I2C8_ER_IRQn, \ + .scl_af_width = 0, \ + .sda_af_width = 0, \ + .df_width = 0, \ + .periph = RCC_APB5_PERIPHEN_M7_I2C8, \ .EnablePeriphClk = RCC_EnableAPB5PeriphClk2, \ .I2CKerClkSource = RCC_ConfigI2C8KerClkSource, \ } @@ -376,11 +376,11 @@ extern "C" { #ifndef I2C8_RX_DMA_CONFIG #define I2C8_RX_DMA_CONFIG \ { \ - .Instance = I2C8_RX_DMA_INSTANCE, \ - .dma_irq = I2C8_RX_DMA_IRQ, \ - .HsInterface = I2C8_RX_DMA_HANDSHAK, \ - .dma_rcc = I2C8_RX_DMA_DMA_RCC, \ - .dma_channel = I2C8_RX_DMA_DMA_CHANNEL, \ + .Instance = I2C8_RX_DMA_INSTANCE, \ + .dma_irq = I2C8_RX_DMA_IRQ, \ + .HsInterface = I2C8_RX_DMA_HANDSHAK, \ + .dma_rcc = I2C8_RX_DMA_DMA_RCC, \ + .dma_channel = I2C8_RX_DMA_DMA_CHANNEL, \ .dmamux_channel = I2C8_RX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = I2C8_RX_DMA_DMAMUX_REQUEST, \ } @@ -390,11 +390,11 @@ extern "C" { #ifndef I2C8_TX_DMA_CONFIG #define I2C8_TX_DMA_CONFIG \ { \ - .Instance = I2C8_TX_DMA_INSTANCE, \ - .dma_irq = I2C8_TX_DMA_IRQ, \ - .HsInterface = I2C8_TX_DMA_HANDSHAK, \ - .dma_rcc = I2C8_TX_DMA_DMA_RCC, \ - .dma_channel = I2C8_TX_DMA_DMA_CHANNEL, \ + .Instance = I2C8_TX_DMA_INSTANCE, \ + .dma_irq = I2C8_TX_DMA_IRQ, \ + .HsInterface = I2C8_TX_DMA_HANDSHAK, \ + .dma_rcc = I2C8_TX_DMA_DMA_RCC, \ + .dma_channel = I2C8_TX_DMA_DMA_CHANNEL, \ .dmamux_channel = I2C8_TX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = I2C8_TX_DMA_DMAMUX_REQUEST, \ } @@ -405,16 +405,16 @@ extern "C" { #ifndef I2C9_BUS_CONFIG #define I2C9_BUS_CONFIG \ { \ - .name = "hwi2c9", \ - .Instance = I2C9, \ - .timing = 0x50012526, \ - .timeout = 0x1000, \ - .evirq_type = I2C9_EV_IRQn, \ - .erirq_type = I2C9_ER_IRQn, \ - .scl_af_width = 0, \ - .sda_af_width = 0, \ - .df_width = 0, \ - .periph = RCC_APB5_PERIPHEN_M7_I2C9, \ + .name = "hwi2c9", \ + .Instance = I2C9, \ + .timing = 0x50012526, \ + .timeout = 0x1000, \ + .evirq_type = I2C9_EV_IRQn, \ + .erirq_type = I2C9_ER_IRQn, \ + .scl_af_width = 0, \ + .sda_af_width = 0, \ + .df_width = 0, \ + .periph = RCC_APB5_PERIPHEN_M7_I2C9, \ .EnablePeriphClk = RCC_EnableAPB5PeriphClk2, \ .I2CKerClkSource = RCC_ConfigI2C9KerClkSource, \ } @@ -424,11 +424,11 @@ extern "C" { #ifndef I2C9_RX_DMA_CONFIG #define I2C9_RX_DMA_CONFIG \ { \ - .Instance = I2C9_RX_DMA_INSTANCE, \ - .dma_irq = I2C9_RX_DMA_IRQ, \ - .HsInterface = I2C9_RX_DMA_HANDSHAK, \ - .dma_rcc = I2C9_RX_DMA_DMA_RCC, \ - .dma_channel = I2C9_RX_DMA_DMA_CHANNEL, \ + .Instance = I2C9_RX_DMA_INSTANCE, \ + .dma_irq = I2C9_RX_DMA_IRQ, \ + .HsInterface = I2C9_RX_DMA_HANDSHAK, \ + .dma_rcc = I2C9_RX_DMA_DMA_RCC, \ + .dma_channel = I2C9_RX_DMA_DMA_CHANNEL, \ .dmamux_channel = I2C9_RX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = I2C9_RX_DMA_DMAMUX_REQUEST, \ } @@ -438,11 +438,11 @@ extern "C" { #ifndef I2C9_TX_DMA_CONFIG #define I2C9_TX_DMA_CONFIG \ { \ - .Instance = I2C9_TX_DMA_INSTANCE, \ - .dma_irq = I2C9_TX_DMA_IRQ, \ - .HsInterface = I2C9_TX_DMA_HANDSHAK, \ - .dma_rcc = I2C9_TX_DMA_DMA_RCC, \ - .dma_channel = I2C9_TX_DMA_DMA_CHANNEL, \ + .Instance = I2C9_TX_DMA_INSTANCE, \ + .dma_irq = I2C9_TX_DMA_IRQ, \ + .HsInterface = I2C9_TX_DMA_HANDSHAK, \ + .dma_rcc = I2C9_TX_DMA_DMA_RCC, \ + .dma_channel = I2C9_TX_DMA_DMA_CHANNEL, \ .dmamux_channel = I2C9_TX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = I2C9_TX_DMA_DMAMUX_REQUEST, \ } @@ -453,16 +453,16 @@ extern "C" { #ifndef I2C10_BUS_CONFIG #define I2C10_BUS_CONFIG \ { \ - .name = "hwi2c10", \ - .Instance = I2C10, \ - .timing = 0x50012526, \ - .timeout = 0x1000, \ - .evirq_type = I2C10_EV_IRQn, \ - .erirq_type = I2C10_ER_IRQn, \ - .scl_af_width = 0, \ - .sda_af_width = 0, \ - .df_width = 0, \ - .periph = RCC_APB5_PERIPHEN_M7_I2C10, \ + .name = "hwi2c10", \ + .Instance = I2C10, \ + .timing = 0x50012526, \ + .timeout = 0x1000, \ + .evirq_type = I2C10_EV_IRQn, \ + .erirq_type = I2C10_ER_IRQn, \ + .scl_af_width = 0, \ + .sda_af_width = 0, \ + .df_width = 0, \ + .periph = RCC_APB5_PERIPHEN_M7_I2C10, \ .EnablePeriphClk = RCC_EnableAPB5PeriphClk2, \ .I2CKerClkSource = RCC_ConfigI2C10KerClkSource, \ } @@ -472,11 +472,11 @@ extern "C" { #ifndef I2C10_RX_DMA_CONFIG #define I2C10_RX_DMA_CONFIG \ { \ - .Instance = I2C10_RX_DMA_INSTANCE, \ - .dma_irq = I2C10_RX_DMA_IRQ, \ - .HsInterface = I2C10_RX_DMA_HANDSHAK, \ - .dma_rcc = I2C10_RX_DMA_DMA_RCC, \ - .dma_channel = I2C10_RX_DMA_DMA_CHANNEL, \ + .Instance = I2C10_RX_DMA_INSTANCE, \ + .dma_irq = I2C10_RX_DMA_IRQ, \ + .HsInterface = I2C10_RX_DMA_HANDSHAK, \ + .dma_rcc = I2C10_RX_DMA_DMA_RCC, \ + .dma_channel = I2C10_RX_DMA_DMA_CHANNEL, \ .dmamux_channel = I2C10_RX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = I2C10_RX_DMA_DMAMUX_REQUEST, \ } @@ -486,11 +486,11 @@ extern "C" { #ifndef I2C10_TX_DMA_CONFIG #define I2C10_TX_DMA_CONFIG \ { \ - .Instance = I2C10_TX_DMA_INSTANCE, \ - .dma_irq = I2C10_TX_DMA_IRQ, \ - .HsInterface = I2C10_TX_DMA_HANDSHAK, \ - .dma_rcc = I2C10_TX_DMA_DMA_RCC, \ - .dma_channel = I2C10_TX_DMA_DMA_CHANNEL, \ + .Instance = I2C10_TX_DMA_INSTANCE, \ + .dma_irq = I2C10_TX_DMA_IRQ, \ + .HsInterface = I2C10_TX_DMA_HANDSHAK, \ + .dma_rcc = I2C10_TX_DMA_DMA_RCC, \ + .dma_channel = I2C10_TX_DMA_DMA_CHANNEL, \ .dmamux_channel = I2C10_TX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = I2C10_TX_DMA_DMAMUX_REQUEST, \ } diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/lptim_config.h b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/lptim_config.h index eceb6d5193b..ebea68d41c8 100644 --- a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/lptim_config.h +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/lptim_config.h @@ -22,7 +22,7 @@ extern "C" { { \ .maxfreq = 1000000, \ .minfreq = 3000, \ - .maxcnt = 0xFFFF, \ + .maxcnt = 0xFFFF, \ .cntmode = CLOCK_TIMER_CNTMODE_UP, \ } #endif /* LPTIM_DEV_INFO_CONFIG */ @@ -31,9 +31,9 @@ extern "C" { #ifndef LPTIM1_CONFIG #define LPTIM1_CONFIG \ { \ - .timer = LPTIM1, \ + .timer = LPTIM1, \ .tim_irqn = LPTIM1_WKUP_IRQn, \ - .name = "lptim1", \ + .name = "lptim1", \ } #endif /* LPTIM1_CONFIG */ #endif /* BSP_USING_LPTIM1 */ @@ -42,9 +42,9 @@ extern "C" { #ifndef LPTIM2_CONFIG #define LPTIM2_CONFIG \ { \ - .timer = LPTIM2, \ + .timer = LPTIM2, \ .tim_irqn = LPTIM2_WKUP_IRQn, \ - .name = "lptim2", \ + .name = "lptim2", \ } #endif /* LPTIM2_CONFIG */ #endif /* BSP_USING_LPTIM2 */ @@ -53,9 +53,9 @@ extern "C" { #ifndef LPTIM3_CONFIG #define LPTIM3_CONFIG \ { \ - .timer = LPTIM3, \ + .timer = LPTIM3, \ .tim_irqn = LPTIM3_WKUP_IRQn, \ - .name = "lptim3", \ + .name = "lptim3", \ } #endif /* LPTIM3_CONFIG */ #endif /* BSP_USING_LPTIM3 */ @@ -64,9 +64,9 @@ extern "C" { #ifndef LPTIM4_CONFIG #define LPTIM4_CONFIG \ { \ - .timer = LPTIM4, \ + .timer = LPTIM4, \ .tim_irqn = LPTIM4_WKUP_IRQn, \ - .name = "lptim4", \ + .name = "lptim4", \ } #endif /* LPTIM4_CONFIG */ #endif /* BSP_USING_LPTIM4 */ @@ -75,9 +75,9 @@ extern "C" { #ifndef LPTIM5_CONFIG #define LPTIM5_CONFIG \ { \ - .timer = LPTIM5, \ + .timer = LPTIM5, \ .tim_irqn = LPTIM5_WKUP_IRQn, \ - .name = "lptim5", \ + .name = "lptim5", \ } #endif /* LPTIM5_CONFIG */ #endif /* BSP_USING_LPTIM5 */ diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/pulse_encoder_config.h b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/pulse_encoder_config.h index 824d95efd59..e2adbe73364 100644 --- a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/pulse_encoder_config.h +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/pulse_encoder_config.h @@ -21,9 +21,9 @@ extern "C" { #ifndef PULSE_ENCODER1_CONFIG #define PULSE_ENCODER1_CONFIG \ { \ - .timer = ATIM1, \ + .timer = ATIM1, \ .tim_irqn = ATIM1_UP_IRQn, \ - .name = "pulse1", \ + .name = "pulse1", \ } #endif /* PULSE_ENCODER1_CONFIG */ #endif /* BSP_USING_PULSE_ENCODER1 */ @@ -32,9 +32,9 @@ extern "C" { #ifndef PULSE_ENCODER2_CONFIG #define PULSE_ENCODER2_CONFIG \ { \ - .timer = ATIM2, \ + .timer = ATIM2, \ .tim_irqn = ATIM2_UP_IRQn, \ - .name = "pulse2", \ + .name = "pulse2", \ } #endif /* PULSE_ENCODER2_CONFIG */ #endif /* BSP_USING_PULSE_ENCODER2 */ @@ -43,9 +43,9 @@ extern "C" { #ifndef PULSE_ENCODER3_CONFIG #define PULSE_ENCODER3_CONFIG \ { \ - .timer = ATIM3, \ + .timer = ATIM3, \ .tim_irqn = ATIM3_UP_IRQn, \ - .name = "pulse3", \ + .name = "pulse3", \ } #endif /* PULSE_ENCODER3_CONFIG */ #endif /* BSP_USING_PULSE_ENCODER3 */ @@ -54,9 +54,9 @@ extern "C" { #ifndef PULSE_ENCODER4_CONFIG #define PULSE_ENCODER4_CONFIG \ { \ - .timer = ATIM4, \ + .timer = ATIM4, \ .tim_irqn = ATIM4_UP_IRQn, \ - .name = "pulse4", \ + .name = "pulse4", \ } #endif /* PULSE_ENCODER4_CONFIG */ #endif /* BSP_USING_PULSE_ENCODER4 */ @@ -65,9 +65,9 @@ extern "C" { #ifndef PULSE_ENCODER5_CONFIG #define PULSE_ENCODER5_CONFIG \ { \ - .timer = GTIMA1, \ + .timer = GTIMA1, \ .tim_irqn = GTIMA1_IRQn, \ - .name = "pulse5", \ + .name = "pulse5", \ } #endif /* PULSE_ENCODER5_CONFIG */ #endif /* BSP_USING_PULSE_ENCODER5 */ @@ -76,9 +76,9 @@ extern "C" { #ifndef PULSE_ENCODER6_CONFIG #define PULSE_ENCODER6_CONFIG \ { \ - .timer = GTIMA2, \ + .timer = GTIMA2, \ .tim_irqn = GTIMA2_IRQn, \ - .name = "pulse6", \ + .name = "pulse6", \ } #endif /* PULSE_ENCODER6_CONFIG */ #endif /* BSP_USING_PULSE_ENCODER6 */ @@ -87,9 +87,9 @@ extern "C" { #ifndef PULSE_ENCODER7_CONFIG #define PULSE_ENCODER7_CONFIG \ { \ - .timer = GTIMA3, \ + .timer = GTIMA3, \ .tim_irqn = GTIMA3_IRQn, \ - .name = "pulse7", \ + .name = "pulse7", \ } #endif /* PULSE_ENCODER7_CONFIG */ #endif /* BSP_USING_PULSE_ENCODER7 */ @@ -98,9 +98,9 @@ extern "C" { #ifndef PULSE_ENCODER8_CONFIG #define PULSE_ENCODER8_CONFIG \ { \ - .timer = GTIMA4, \ + .timer = GTIMA4, \ .tim_irqn = GTIMA4_IRQn, \ - .name = "pulse8", \ + .name = "pulse8", \ } #endif /* PULSE_ENCODER8_CONFIG */ #endif /* BSP_USING_PULSE_ENCODER8 */ @@ -109,9 +109,9 @@ extern "C" { #ifndef PULSE_ENCODER9_CONFIG #define PULSE_ENCODER9_CONFIG \ { \ - .timer = GTIMA5, \ + .timer = GTIMA5, \ .tim_irqn = GTIMA5_IRQn, \ - .name = "pulse9", \ + .name = "pulse9", \ } #endif /* PULSE_ENCODER9_CONFIG */ #endif /* BSP_USING_PULSE_ENCODER9 */ @@ -120,9 +120,9 @@ extern "C" { #ifndef PULSE_ENCODER10_CONFIG #define PULSE_ENCODER10_CONFIG \ { \ - .timer = GTIMA6, \ + .timer = GTIMA6, \ .tim_irqn = GTIMA6_IRQn, \ - .name = "pulse10", \ + .name = "pulse10", \ } #endif /* PULSE_ENCODER10_CONFIG */ #endif /* BSP_USING_PULSE_ENCODER10 */ @@ -131,9 +131,9 @@ extern "C" { #ifndef PULSE_ENCODER11_CONFIG #define PULSE_ENCODER11_CONFIG \ { \ - .timer = GTIMA7, \ + .timer = GTIMA7, \ .tim_irqn = GTIMA7_IRQn, \ - .name = "pulse11", \ + .name = "pulse11", \ } #endif /* PULSE_ENCODER11_CONFIG */ #endif /* BSP_USING_PULSE_ENCODER11 */ @@ -142,9 +142,9 @@ extern "C" { #ifndef PULSE_ENCODER12_CONFIG #define PULSE_ENCODER12_CONFIG \ { \ - .timer = GTIMB1, \ + .timer = GTIMB1, \ .tim_irqn = GTIMB1_IRQn, \ - .name = "pulse12", \ + .name = "pulse12", \ } #endif /* PULSE_ENCODER12_CONFIG */ #endif /* BSP_USING_PULSE_ENCODER12 */ @@ -153,9 +153,9 @@ extern "C" { #ifndef PULSE_ENCODER13_CONFIG #define PULSE_ENCODER13_CONFIG \ { \ - .timer = GTIMB2, \ + .timer = GTIMB2, \ .tim_irqn = GTIMB2_IRQn, \ - .name = "pulse13", \ + .name = "pulse13", \ } #endif /* PULSE_ENCODER13_CONFIG */ #endif /* BSP_USING_PULSE_ENCODER13 */ @@ -164,9 +164,9 @@ extern "C" { #ifndef PULSE_ENCODER14_CONFIG #define PULSE_ENCODER14_CONFIG \ { \ - .timer = GTIMB3, \ + .timer = GTIMB3, \ .tim_irqn = GTIMB3_IRQn, \ - .name = "pulse14", \ + .name = "pulse14", \ } #endif /* PULSE_ENCODER14_CONFIG */ #endif /* BSP_USING_PULSE_ENCODER14 */ diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/pwm_config.h b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/pwm_config.h index 0888968436d..b137d42af7f 100644 --- a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/pwm_config.h +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/pwm_config.h @@ -19,154 +19,154 @@ extern "C" { #ifdef BSP_USING_PWM1 #ifndef PWM1_CONFIG -#define PWM1_CONFIG \ - { \ - .timer = ATIM1, \ - .name = "pwm1", \ - .channel = 0 \ +#define PWM1_CONFIG \ + { \ + .timer = ATIM1, \ + .name = "pwm1", \ + .channel = 0 \ } #endif /* PWM1_CONFIG */ #endif /* BSP_USING_PWM1 */ #ifdef BSP_USING_PWM2 #ifndef PWM2_CONFIG -#define PWM2_CONFIG \ - { \ - .timer = ATIM2, \ - .name = "pwm2", \ - .channel = 0 \ +#define PWM2_CONFIG \ + { \ + .timer = ATIM2, \ + .name = "pwm2", \ + .channel = 0 \ } #endif /* PWM2_CONFIG */ #endif /* BSP_USING_PWM2 */ #ifdef BSP_USING_PWM3 #ifndef PWM3_CONFIG -#define PWM3_CONFIG \ - { \ - .timer = ATIM3, \ - .name = "pwm3", \ - .channel = 0 \ +#define PWM3_CONFIG \ + { \ + .timer = ATIM3, \ + .name = "pwm3", \ + .channel = 0 \ } #endif /* PWM3_CONFIG */ #endif /* BSP_USING_PWM3 */ #ifdef BSP_USING_PWM4 #ifndef PWM4_CONFIG -#define PWM4_CONFIG \ - { \ - .timer = ATIM4, \ - .name = "pwm4", \ - .channel = 0 \ +#define PWM4_CONFIG \ + { \ + .timer = ATIM4, \ + .name = "pwm4", \ + .channel = 0 \ } #endif /* PWM4_CONFIG */ #endif /* BSP_USING_PWM4 */ #ifdef BSP_USING_PWM5 #ifndef PWM5_CONFIG -#define PWM5_CONFIG \ - { \ - .timer = GTIMA1, \ - .name = "pwm5", \ - .channel = 0 \ +#define PWM5_CONFIG \ + { \ + .timer = GTIMA1, \ + .name = "pwm5", \ + .channel = 0 \ } #endif /* PWM5_CONFIG */ #endif /* BSP_USING_PWM5 */ #ifdef BSP_USING_PWM6 #ifndef PWM6_CONFIG -#define PWM6_CONFIG \ - { \ - .timer = GTIMA2, \ - .name = "pwm6", \ - .channel = 0 \ +#define PWM6_CONFIG \ + { \ + .timer = GTIMA2, \ + .name = "pwm6", \ + .channel = 0 \ } #endif /* PWM6_CONFIG */ #endif /* BSP_USING_PWM6 */ #ifdef BSP_USING_PWM7 #ifndef PWM7_CONFIG -#define PWM7_CONFIG \ - { \ - .timer = GTIMA3, \ - .name = "pwm7", \ - .channel = 0 \ +#define PWM7_CONFIG \ + { \ + .timer = GTIMA3, \ + .name = "pwm7", \ + .channel = 0 \ } #endif /* PWM7_CONFIG */ #endif /* BSP_USING_PWM7 */ #ifdef BSP_USING_PWM8 #ifndef PWM8_CONFIG -#define PWM8_CONFIG \ - { \ - .timer = GTIMA4, \ - .name = "pwm8", \ - .channel = 0 \ +#define PWM8_CONFIG \ + { \ + .timer = GTIMA4, \ + .name = "pwm8", \ + .channel = 0 \ } #endif /* PWM8_CONFIG */ #endif /* BSP_USING_PWM8 */ #ifdef BSP_USING_PWM9 #ifndef PWM9_CONFIG -#define PWM9_CONFIG \ - { \ - .timer = GTIMA5, \ - .name = "pwm9", \ - .channel = 0 \ +#define PWM9_CONFIG \ + { \ + .timer = GTIMA5, \ + .name = "pwm9", \ + .channel = 0 \ } #endif /* PWM9_CONFIG */ #endif /* BSP_USING_PWM9 */ #ifdef BSP_USING_PWM10 #ifndef PWM10_CONFIG -#define PWM10_CONFIG \ - { \ - .timer = GTIMA6, \ - .name = "pwm10", \ - .channel = 0 \ +#define PWM10_CONFIG \ + { \ + .timer = GTIMA6, \ + .name = "pwm10", \ + .channel = 0 \ } #endif /* PWM10_CONFIG */ #endif /* BSP_USING_PWM10 */ #ifdef BSP_USING_PWM11 #ifndef PWM11_CONFIG -#define PWM11_CONFIG \ - { \ - .timer = GTIMA7, \ - .name = "pwm11", \ - .channel = 0 \ +#define PWM11_CONFIG \ + { \ + .timer = GTIMA7, \ + .name = "pwm11", \ + .channel = 0 \ } #endif /* PWM11_CONFIG */ #endif /* BSP_USING_PWM11 */ #ifdef BSP_USING_PWM12 #ifndef PWM12_CONFIG -#define PWM12_CONFIG \ - { \ - .timer = GTIMB1, \ - .name = "pwm12", \ - .channel = 0 \ +#define PWM12_CONFIG \ + { \ + .timer = GTIMB1, \ + .name = "pwm12", \ + .channel = 0 \ } #endif /* PWM12_CONFIG */ #endif /* BSP_USING_PWM12 */ #ifdef BSP_USING_PWM13 #ifndef PWM13_CONFIG -#define PWM13_CONFIG \ - { \ - .timer = GTIMB2, \ - .name = "pwm13", \ - .channel = 0 \ +#define PWM13_CONFIG \ + { \ + .timer = GTIMB2, \ + .name = "pwm13", \ + .channel = 0 \ } #endif /* PWM13_CONFIG */ #endif /* BSP_USING_PWM13 */ #ifdef BSP_USING_PWM14 #ifndef PWM14_CONFIG -#define PWM14_CONFIG \ - { \ - .timer = GTIMB3, \ - .name = "pwm14", \ - .channel = 0 \ +#define PWM14_CONFIG \ + { \ + .timer = GTIMB3, \ + .name = "pwm14", \ + .channel = 0 \ } #endif /* PWM14_CONFIG */ #endif /* BSP_USING_PWM14 */ diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/spi_config.h b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/spi_config.h index fc00c218d73..edbd7c8940f 100644 --- a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/spi_config.h +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/spi_config.h @@ -21,7 +21,7 @@ extern "C" { #ifndef SPI1_BUS_CONFIG #define SPI1_BUS_CONFIG \ { \ - .SPIx = SPI1, \ + .SPIx = SPI1, \ .bus_name = "spi1", \ .irq_type = SPI1_IRQn, \ } @@ -31,11 +31,11 @@ extern "C" { #ifndef SPI1_TX_DMA_CONFIG #define SPI1_TX_DMA_CONFIG \ { \ - .Instance = SPI1_TX_DMA_INSTANCE, \ - .dma_irq = SPI1_TX_DMA_IRQ, \ - .HsInterface = SPI1_TX_DMA_HANDSHAK, \ - .dma_rcc = SPI1_TX_DMA_DMA_RCC, \ - .dma_channel = SPI1_TX_DMA_DMA_CHANNEL, \ + .Instance = SPI1_TX_DMA_INSTANCE, \ + .dma_irq = SPI1_TX_DMA_IRQ, \ + .HsInterface = SPI1_TX_DMA_HANDSHAK, \ + .dma_rcc = SPI1_TX_DMA_DMA_RCC, \ + .dma_channel = SPI1_TX_DMA_DMA_CHANNEL, \ .dmamux_channel = SPI1_TX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = SPI1_TX_DMA_DMAMUX_REQUEST, \ } @@ -45,11 +45,11 @@ extern "C" { #ifndef SPI1_RX_DMA_CONFIG #define SPI1_RX_DMA_CONFIG \ { \ - .Instance = SPI1_RX_DMA_INSTANCE, \ - .dma_irq = SPI1_RX_DMA_IRQ, \ - .HsInterface = SPI1_RX_DMA_HANDSHAK, \ - .dma_rcc = SPI1_RX_DMA_DMA_RCC, \ - .dma_channel = SPI1_RX_DMA_DMA_CHANNEL, \ + .Instance = SPI1_RX_DMA_INSTANCE, \ + .dma_irq = SPI1_RX_DMA_IRQ, \ + .HsInterface = SPI1_RX_DMA_HANDSHAK, \ + .dma_rcc = SPI1_RX_DMA_DMA_RCC, \ + .dma_channel = SPI1_RX_DMA_DMA_CHANNEL, \ .dmamux_channel = SPI1_RX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = SPI1_RX_DMA_DMAMUX_REQUEST, \ } @@ -60,7 +60,7 @@ extern "C" { #ifndef SPI2_BUS_CONFIG #define SPI2_BUS_CONFIG \ { \ - .SPIx = SPI2, \ + .SPIx = SPI2, \ .bus_name = "spi2", \ .irq_type = SPI2_IRQn, \ } @@ -70,11 +70,11 @@ extern "C" { #ifndef SPI2_TX_DMA_CONFIG #define SPI2_TX_DMA_CONFIG \ { \ - .Instance = SPI2_TX_DMA_INSTANCE, \ - .dma_irq = SPI2_TX_DMA_IRQ, \ - .HsInterface = SPI2_TX_DMA_HANDSHAK, \ - .dma_rcc = SPI2_TX_DMA_DMA_RCC, \ - .dma_channel = SPI2_TX_DMA_DMA_CHANNEL, \ + .Instance = SPI2_TX_DMA_INSTANCE, \ + .dma_irq = SPI2_TX_DMA_IRQ, \ + .HsInterface = SPI2_TX_DMA_HANDSHAK, \ + .dma_rcc = SPI2_TX_DMA_DMA_RCC, \ + .dma_channel = SPI2_TX_DMA_DMA_CHANNEL, \ .dmamux_channel = SPI2_TX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = SPI2_TX_DMA_DMAMUX_REQUEST, \ } @@ -84,11 +84,11 @@ extern "C" { #ifndef SPI2_RX_DMA_CONFIG #define SPI2_RX_DMA_CONFIG \ { \ - .Instance = SPI2_RX_DMA_INSTANCE, \ - .dma_irq = SPI2_RX_DMA_IRQ, \ - .HsInterface = SPI2_RX_DMA_HANDSHAK, \ - .dma_rcc = SPI2_RX_DMA_DMA_RCC, \ - .dma_channel = SPI2_RX_DMA_DMA_CHANNEL, \ + .Instance = SPI2_RX_DMA_INSTANCE, \ + .dma_irq = SPI2_RX_DMA_IRQ, \ + .HsInterface = SPI2_RX_DMA_HANDSHAK, \ + .dma_rcc = SPI2_RX_DMA_DMA_RCC, \ + .dma_channel = SPI2_RX_DMA_DMA_CHANNEL, \ .dmamux_channel = SPI2_RX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = SPI2_RX_DMA_DMAMUX_REQUEST, \ } @@ -99,7 +99,7 @@ extern "C" { #ifndef SPI3_BUS_CONFIG #define SPI3_BUS_CONFIG \ { \ - .SPIx = SPI3, \ + .SPIx = SPI3, \ .bus_name = "spi3", \ .irq_type = SPI3_IRQn, \ } @@ -109,11 +109,11 @@ extern "C" { #ifndef SPI3_TX_DMA_CONFIG #define SPI3_TX_DMA_CONFIG \ { \ - .Instance = SPI3_TX_DMA_INSTANCE, \ - .dma_irq = SPI3_TX_DMA_IRQ, \ - .HsInterface = SPI3_TX_DMA_HANDSHAK, \ - .dma_rcc = SPI3_TX_DMA_DMA_RCC, \ - .dma_channel = SPI3_TX_DMA_DMA_CHANNEL, \ + .Instance = SPI3_TX_DMA_INSTANCE, \ + .dma_irq = SPI3_TX_DMA_IRQ, \ + .HsInterface = SPI3_TX_DMA_HANDSHAK, \ + .dma_rcc = SPI3_TX_DMA_DMA_RCC, \ + .dma_channel = SPI3_TX_DMA_DMA_CHANNEL, \ .dmamux_channel = SPI3_TX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = SPI3_TX_DMA_DMAMUX_REQUEST, \ } @@ -123,11 +123,11 @@ extern "C" { #ifndef SPI3_RX_DMA_CONFIG #define SPI3_RX_DMA_CONFIG \ { \ - .Instance = SPI3_RX_DMA_INSTANCE, \ - .dma_irq = SPI3_RX_DMA_IRQ, \ - .HsInterface = SPI3_RX_DMA_HANDSHAK, \ - .dma_rcc = SPI3_RX_DMA_DMA_RCC, \ - .dma_channel = SPI3_RX_DMA_DMA_CHANNEL, \ + .Instance = SPI3_RX_DMA_INSTANCE, \ + .dma_irq = SPI3_RX_DMA_IRQ, \ + .HsInterface = SPI3_RX_DMA_HANDSHAK, \ + .dma_rcc = SPI3_RX_DMA_DMA_RCC, \ + .dma_channel = SPI3_RX_DMA_DMA_CHANNEL, \ .dmamux_channel = SPI3_RX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = SPI3_RX_DMA_DMAMUX_REQUEST, \ } @@ -138,7 +138,7 @@ extern "C" { #ifndef SPI4_BUS_CONFIG #define SPI4_BUS_CONFIG \ { \ - .SPIx = SPI4, \ + .SPIx = SPI4, \ .bus_name = "spi4", \ .irq_type = SPI4_IRQn, \ } @@ -148,11 +148,11 @@ extern "C" { #ifndef SPI4_TX_DMA_CONFIG #define SPI4_TX_DMA_CONFIG \ { \ - .Instance = SPI4_TX_DMA_INSTANCE, \ - .dma_irq = SPI4_TX_DMA_IRQ, \ - .HsInterface = SPI4_TX_DMA_HANDSHAK, \ - .dma_rcc = SPI4_TX_DMA_DMA_RCC, \ - .dma_channel = SPI4_TX_DMA_DMA_CHANNEL, \ + .Instance = SPI4_TX_DMA_INSTANCE, \ + .dma_irq = SPI4_TX_DMA_IRQ, \ + .HsInterface = SPI4_TX_DMA_HANDSHAK, \ + .dma_rcc = SPI4_TX_DMA_DMA_RCC, \ + .dma_channel = SPI4_TX_DMA_DMA_CHANNEL, \ .dmamux_channel = SPI4_TX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = SPI4_TX_DMA_DMAMUX_REQUEST, \ } @@ -162,11 +162,11 @@ extern "C" { #ifndef SPI4_RX_DMA_CONFIG #define SPI4_RX_DMA_CONFIG \ { \ - .Instance = SPI4_RX_DMA_INSTANCE, \ - .dma_irq = SPI4_RX_DMA_IRQ, \ - .HsInterface = SPI4_RX_DMA_HANDSHAK, \ - .dma_rcc = SPI4_RX_DMA_DMA_RCC, \ - .dma_channel = SPI4_RX_DMA_DMA_CHANNEL, \ + .Instance = SPI4_RX_DMA_INSTANCE, \ + .dma_irq = SPI4_RX_DMA_IRQ, \ + .HsInterface = SPI4_RX_DMA_HANDSHAK, \ + .dma_rcc = SPI4_RX_DMA_DMA_RCC, \ + .dma_channel = SPI4_RX_DMA_DMA_CHANNEL, \ .dmamux_channel = SPI4_RX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = SPI4_RX_DMA_DMAMUX_REQUEST, \ } @@ -177,7 +177,7 @@ extern "C" { #ifndef SPI5_BUS_CONFIG #define SPI5_BUS_CONFIG \ { \ - .SPIx = SPI5, \ + .SPIx = SPI5, \ .bus_name = "spi5", \ .irq_type = SPI5_IRQn, \ } @@ -187,11 +187,11 @@ extern "C" { #ifndef SPI5_TX_DMA_CONFIG #define SPI5_TX_DMA_CONFIG \ { \ - .Instance = SPI5_TX_DMA_INSTANCE, \ - .dma_irq = SPI5_TX_DMA_IRQ, \ - .HsInterface = SPI5_TX_DMA_HANDSHAK, \ - .dma_rcc = SPI5_TX_DMA_DMA_RCC, \ - .dma_channel = SPI5_TX_DMA_DMA_CHANNEL, \ + .Instance = SPI5_TX_DMA_INSTANCE, \ + .dma_irq = SPI5_TX_DMA_IRQ, \ + .HsInterface = SPI5_TX_DMA_HANDSHAK, \ + .dma_rcc = SPI5_TX_DMA_DMA_RCC, \ + .dma_channel = SPI5_TX_DMA_DMA_CHANNEL, \ .dmamux_channel = SPI5_TX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = SPI5_TX_DMA_DMAMUX_REQUEST, \ } @@ -201,11 +201,11 @@ extern "C" { #ifndef SPI5_RX_DMA_CONFIG #define SPI5_RX_DMA_CONFIG \ { \ - .Instance = SPI5_RX_DMA_INSTANCE, \ - .dma_irq = SPI5_RX_DMA_IRQ, \ - .HsInterface = SPI5_RX_DMA_HANDSHAK, \ - .dma_rcc = SPI5_RX_DMA_DMA_RCC, \ - .dma_channel = SPI5_RX_DMA_DMA_CHANNEL, \ + .Instance = SPI5_RX_DMA_INSTANCE, \ + .dma_irq = SPI5_RX_DMA_IRQ, \ + .HsInterface = SPI5_RX_DMA_HANDSHAK, \ + .dma_rcc = SPI5_RX_DMA_DMA_RCC, \ + .dma_channel = SPI5_RX_DMA_DMA_CHANNEL, \ .dmamux_channel = SPI5_RX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = SPI5_RX_DMA_DMAMUX_REQUEST, \ } @@ -216,7 +216,7 @@ extern "C" { #ifndef SPI6_BUS_CONFIG #define SPI6_BUS_CONFIG \ { \ - .SPIx = SPI6, \ + .SPIx = SPI6, \ .bus_name = "spi6", \ .irq_type = SPI6_IRQn, \ } @@ -226,11 +226,11 @@ extern "C" { #ifndef SPI6_TX_DMA_CONFIG #define SPI6_TX_DMA_CONFIG \ { \ - .Instance = SPI6_TX_DMA_INSTANCE, \ - .dma_irq = SPI6_TX_DMA_IRQ, \ - .HsInterface = SPI6_TX_DMA_HANDSHAK, \ - .dma_rcc = SPI6_TX_DMA_DMA_RCC, \ - .dma_channel = SPI6_TX_DMA_DMA_CHANNEL, \ + .Instance = SPI6_TX_DMA_INSTANCE, \ + .dma_irq = SPI6_TX_DMA_IRQ, \ + .HsInterface = SPI6_TX_DMA_HANDSHAK, \ + .dma_rcc = SPI6_TX_DMA_DMA_RCC, \ + .dma_channel = SPI6_TX_DMA_DMA_CHANNEL, \ .dmamux_channel = SPI6_TX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = SPI6_TX_DMA_DMAMUX_REQUEST, \ } @@ -240,11 +240,11 @@ extern "C" { #ifndef SPI6_RX_DMA_CONFIG #define SPI6_RX_DMA_CONFIG \ { \ - .Instance = SPI6_RX_DMA_INSTANCE, \ - .dma_irq = SPI6_RX_DMA_IRQ, \ - .HsInterface = SPI6_RX_DMA_HANDSHAK, \ - .dma_rcc = SPI6_RX_DMA_DMA_RCC, \ - .dma_channel = SPI6_RX_DMA_DMA_CHANNEL, \ + .Instance = SPI6_RX_DMA_INSTANCE, \ + .dma_irq = SPI6_RX_DMA_IRQ, \ + .HsInterface = SPI6_RX_DMA_HANDSHAK, \ + .dma_rcc = SPI6_RX_DMA_DMA_RCC, \ + .dma_channel = SPI6_RX_DMA_DMA_CHANNEL, \ .dmamux_channel = SPI6_RX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = SPI6_RX_DMA_DMAMUX_REQUEST, \ } @@ -255,7 +255,7 @@ extern "C" { #ifndef SPI7_BUS_CONFIG #define SPI7_BUS_CONFIG \ { \ - .SPIx = SPI7, \ + .SPIx = SPI7, \ .bus_name = "spi7", \ .irq_type = SPI7_IRQn, \ } @@ -265,11 +265,11 @@ extern "C" { #ifndef SPI7_TX_DMA_CONFIG #define SPI7_TX_DMA_CONFIG \ { \ - .Instance = SPI7_TX_DMA_INSTANCE, \ - .dma_irq = SPI7_TX_DMA_IRQ, \ - .HsInterface = SPI7_TX_DMA_HANDSHAK, \ - .dma_rcc = SPI7_TX_DMA_DMA_RCC, \ - .dma_channel = SPI7_TX_DMA_DMA_CHANNEL, \ + .Instance = SPI7_TX_DMA_INSTANCE, \ + .dma_irq = SPI7_TX_DMA_IRQ, \ + .HsInterface = SPI7_TX_DMA_HANDSHAK, \ + .dma_rcc = SPI7_TX_DMA_DMA_RCC, \ + .dma_channel = SPI7_TX_DMA_DMA_CHANNEL, \ .dmamux_channel = SPI7_TX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = SPI7_TX_DMA_DMAMUX_REQUEST, \ } @@ -279,11 +279,11 @@ extern "C" { #ifndef SPI7_RX_DMA_CONFIG #define SPI7_RX_DMA_CONFIG \ { \ - .Instance = SPI7_RX_DMA_INSTANCE, \ - .dma_irq = SPI7_RX_DMA_IRQ, \ - .HsInterface = SPI7_RX_DMA_HANDSHAK, \ - .dma_rcc = SPI7_RX_DMA_DMA_RCC, \ - .dma_channel = SPI7_RX_DMA_DMA_CHANNEL, \ + .Instance = SPI7_RX_DMA_INSTANCE, \ + .dma_irq = SPI7_RX_DMA_IRQ, \ + .HsInterface = SPI7_RX_DMA_HANDSHAK, \ + .dma_rcc = SPI7_RX_DMA_DMA_RCC, \ + .dma_channel = SPI7_RX_DMA_DMA_CHANNEL, \ .dmamux_channel = SPI7_RX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = SPI7_RX_DMA_DMAMUX_REQUEST, \ } diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/tim_config.h b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/tim_config.h index 153b1c4f111..d24baed1f02 100644 --- a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/tim_config.h +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/tim_config.h @@ -22,7 +22,7 @@ extern "C" { { \ .maxfreq = 1000000, \ .minfreq = 3000, \ - .maxcnt = 0xFFFF, \ + .maxcnt = 0xFFFF, \ .cntmode = CLOCK_TIMER_CNTMODE_UP, \ } #endif /* TIM_DEV_INFO_CONFIG */ @@ -31,9 +31,9 @@ extern "C" { #ifndef ATIM1_CONFIG #define ATIM1_CONFIG \ { \ - .timer = ATIM1, \ + .timer = ATIM1, \ .tim_irqn = ATIM1_UP_IRQn, \ - .name = "timer1", \ + .name = "timer1", \ } #endif /* ATIM1_CONFIG */ #endif /* BSP_USING_ATIM1 */ @@ -42,9 +42,9 @@ extern "C" { #ifndef ATIM2_CONFIG #define ATIM2_CONFIG \ { \ - .timer = ATIM2, \ + .timer = ATIM2, \ .tim_irqn = ATIM2_UP_IRQn, \ - .name = "timer2", \ + .name = "timer2", \ } #endif /* ATIM2_CONFIG */ #endif /* BSP_USING_ATIM2 */ @@ -53,9 +53,9 @@ extern "C" { #ifndef ATIM3_CONFIG #define ATIM3_CONFIG \ { \ - .timer = ATIM3, \ + .timer = ATIM3, \ .tim_irqn = ATIM3_UP_IRQn, \ - .name = "timer3", \ + .name = "timer3", \ } #endif /* ATIM3_CONFIG */ #endif /* BSP_USING_ATIM3 */ @@ -64,9 +64,9 @@ extern "C" { #ifndef ATIM4_CONFIG #define ATIM4_CONFIG \ { \ - .timer = ATIM4, \ + .timer = ATIM4, \ .tim_irqn = ATIM4_UP_IRQn, \ - .name = "timer4", \ + .name = "timer4", \ } #endif /* ATIM4_CONFIG */ #endif /* BSP_USING_ATIM4 */ @@ -75,9 +75,9 @@ extern "C" { #ifndef GTIMA1_CONFIG #define GTIMA1_CONFIG \ { \ - .timer = GTIMA1, \ + .timer = GTIMA1, \ .tim_irqn = GTIMA1_IRQn, \ - .name = "timer5", \ + .name = "timer5", \ } #endif /* GTIMA1_CONFIG */ #endif /* BSP_USING_GTIMA1 */ @@ -86,9 +86,9 @@ extern "C" { #ifndef GTIMA2_CONFIG #define GTIMA2_CONFIG \ { \ - .timer = GTIMA2, \ + .timer = GTIMA2, \ .tim_irqn = GTIMA2_IRQn, \ - .name = "timer6", \ + .name = "timer6", \ } #endif /* GTIMA2_CONFIG */ #endif /* BSP_USING_GTIMA2 */ @@ -97,9 +97,9 @@ extern "C" { #ifndef GTIMA3_CONFIG #define GTIMA3_CONFIG \ { \ - .timer = GTIMA3, \ + .timer = GTIMA3, \ .tim_irqn = GTIMA3_IRQn, \ - .name = "timer7", \ + .name = "timer7", \ } #endif /* GTIMA3_CONFIG */ #endif /* BSP_USING_GTIMA3 */ @@ -108,9 +108,9 @@ extern "C" { #ifndef GTIMA4_CONFIG #define GTIMA4_CONFIG \ { \ - .timer = GTIMA4, \ + .timer = GTIMA4, \ .tim_irqn = GTIMA4_IRQn, \ - .name = "timer8", \ + .name = "timer8", \ } #endif /* GTIMA4_CONFIG */ #endif /* BSP_USING_GTIMA4 */ @@ -119,9 +119,9 @@ extern "C" { #ifndef GTIMA5_CONFIG #define GTIMA5_CONFIG \ { \ - .timer = GTIMA5, \ + .timer = GTIMA5, \ .tim_irqn = GTIMA5_IRQn, \ - .name = "timer9", \ + .name = "timer9", \ } #endif /* GTIMA5_CONFIG */ #endif /* BSP_USING_GTIMA5 */ @@ -130,9 +130,9 @@ extern "C" { #ifndef GTIMA6_CONFIG #define GTIMA6_CONFIG \ { \ - .timer = GTIMA6, \ + .timer = GTIMA6, \ .tim_irqn = GTIMA6_IRQn, \ - .name = "timer10", \ + .name = "timer10", \ } #endif /* GTIMA6_CONFIG */ #endif /* BSP_USING_GTIMA6 */ @@ -141,9 +141,9 @@ extern "C" { #ifndef GTIMA7_CONFIG #define GTIMA7_CONFIG \ { \ - .timer = GTIMA7, \ + .timer = GTIMA7, \ .tim_irqn = GTIMA7_IRQn, \ - .name = "timer11", \ + .name = "timer11", \ } #endif /* GTIMA7_CONFIG */ #endif /* BSP_USING_GTIMA7 */ @@ -152,9 +152,9 @@ extern "C" { #ifndef GTIMB1_CONFIG #define GTIMB1_CONFIG \ { \ - .timer = GTIMB1, \ + .timer = GTIMB1, \ .tim_irqn = GTIMB1_IRQn, \ - .name = "timer12", \ + .name = "timer12", \ } #endif /* GTIMB1_CONFIG */ #endif /* BSP_USING_GTIMB1 */ @@ -163,9 +163,9 @@ extern "C" { #ifndef GTIMB2_CONFIG #define GTIMB2_CONFIG \ { \ - .timer = GTIMB2, \ + .timer = GTIMB2, \ .tim_irqn = GTIMB2_IRQn, \ - .name = "timer13", \ + .name = "timer13", \ } #endif /* GTIMB2_CONFIG */ #endif /* BSP_USING_GTIMB2 */ @@ -174,9 +174,9 @@ extern "C" { #ifndef GTIMB3_CONFIG #define GTIMB3_CONFIG \ { \ - .timer = GTIMB3, \ + .timer = GTIMB3, \ .tim_irqn = GTIMB3_IRQn, \ - .name = "timer14", \ + .name = "timer14", \ } #endif /* GTIMB3_CONFIG */ #endif /* BSP_USING_GTIMB3 */ @@ -185,9 +185,9 @@ extern "C" { #ifndef BTIM1_CONFIG #define BTIM1_CONFIG \ { \ - .timer = BTIM1, \ + .timer = BTIM1, \ .tim_irqn = BTIM1_IRQn, \ - .name = "timer15", \ + .name = "timer15", \ } #endif /* BTIM1_CONFIG */ #endif /* BSP_USING_BTIM1 */ @@ -196,9 +196,9 @@ extern "C" { #ifndef BTIM2_CONFIG #define BTIM2_CONFIG \ { \ - .timer = BTIM2, \ + .timer = BTIM2, \ .tim_irqn = BTIM2_IRQn, \ - .name = "timer16", \ + .name = "timer16", \ } #endif /* BTIM2_CONFIG */ #endif /* BSP_USING_BTIM2 */ @@ -207,9 +207,9 @@ extern "C" { #ifndef BTIM3_CONFIG #define BTIM3_CONFIG \ { \ - .timer = BTIM3, \ + .timer = BTIM3, \ .tim_irqn = BTIM3_IRQn, \ - .name = "timer17", \ + .name = "timer17", \ } #endif /* BTIM3_CONFIG */ #endif /* BSP_USING_BTIM3 */ @@ -218,9 +218,9 @@ extern "C" { #ifndef BTIM4_CONFIG #define BTIM4_CONFIG \ { \ - .timer = BTIM4, \ + .timer = BTIM4, \ .tim_irqn = BTIM4_IRQn, \ - .name = "timer18", \ + .name = "timer18", \ } #endif /* BTIM4_CONFIG */ #endif /* BSP_USING_BTIM4 */ diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/uart_config.h b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/uart_config.h index 04466649215..9787ce26dc4 100644 --- a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/uart_config.h +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/config/h7xx/uart_config.h @@ -19,13 +19,13 @@ extern "C" { #if defined(BSP_USING_UART1) #ifndef UART1_CONFIG -#define UART1_CONFIG \ - { \ - .name = "uart1", \ - .Instance = USART1, \ - .irq_type = USART1_IRQn, \ - .periph = RCC_APB1_PERIPHEN_M7_USART1, \ - .EnablePeriphClk = RCC_EnableAPB1PeriphClk3, \ +#define UART1_CONFIG \ + { \ + .name = "uart1", \ + .Instance = USART1, \ + .irq_type = USART1_IRQn, \ + .periph = RCC_APB1_PERIPHEN_M7_USART1, \ + .EnablePeriphClk = RCC_EnableAPB1PeriphClk3, \ } #endif /* UART1_CONFIG */ #endif /* BSP_USING_UART1 */ @@ -34,11 +34,11 @@ extern "C" { #ifndef UART1_DMA_RX_CONFIG #define UART1_DMA_RX_CONFIG \ { \ - .Instance = UART1_RX_DMA_INSTANCE, \ - .dma_irq = UART1_RX_DMA_IRQ, \ - .HsInterface = UART1_RX_DMA_HANDSHAK, \ - .dma_rcc = UART1_RX_DMA_DMA_RCC, \ - .dma_channel = UART1_RX_DMA_DMA_CHANNEL, \ + .Instance = UART1_RX_DMA_INSTANCE, \ + .dma_irq = UART1_RX_DMA_IRQ, \ + .HsInterface = UART1_RX_DMA_HANDSHAK, \ + .dma_rcc = UART1_RX_DMA_DMA_RCC, \ + .dma_channel = UART1_RX_DMA_DMA_CHANNEL, \ .dmamux_channel = UART1_RX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = UART1_RX_DMA_DMAMUX_REQUEST, \ } @@ -52,11 +52,11 @@ extern "C" { #ifndef UART1_DMA_TX_CONFIG #define UART1_DMA_TX_CONFIG \ { \ - .Instance = UART1_TX_DMA_INSTANCE, \ - .dma_irq = UART1_TX_DMA_IRQ, \ - .HsInterface = UART1_TX_DMA_HANDSHAK, \ - .dma_rcc = UART1_TX_DMA_DMA_RCC, \ - .dma_channel = UART1_TX_DMA_DMA_CHANNEL, \ + .Instance = UART1_TX_DMA_INSTANCE, \ + .dma_irq = UART1_TX_DMA_IRQ, \ + .HsInterface = UART1_TX_DMA_HANDSHAK, \ + .dma_rcc = UART1_TX_DMA_DMA_RCC, \ + .dma_channel = UART1_TX_DMA_DMA_CHANNEL, \ .dmamux_channel = UART1_TX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = UART1_TX_DMA_DMAMUX_REQUEST, \ } @@ -68,13 +68,13 @@ extern "C" { #if defined(BSP_USING_UART2) #ifndef UART2_CONFIG -#define UART2_CONFIG \ - { \ - .name = "uart2", \ - .Instance = USART2, \ - .irq_type = USART2_IRQn, \ - .periph = RCC_APB1_PERIPHEN_M7_USART2, \ - .EnablePeriphClk = RCC_EnableAPB1PeriphClk3, \ +#define UART2_CONFIG \ + { \ + .name = "uart2", \ + .Instance = USART2, \ + .irq_type = USART2_IRQn, \ + .periph = RCC_APB1_PERIPHEN_M7_USART2, \ + .EnablePeriphClk = RCC_EnableAPB1PeriphClk3, \ } #endif /* UART2_CONFIG */ #endif /* BSP_USING_UART2 */ @@ -83,11 +83,11 @@ extern "C" { #ifndef UART2_DMA_RX_CONFIG #define UART2_DMA_RX_CONFIG \ { \ - .Instance = UART2_RX_DMA_INSTANCE, \ - .dma_irq = UART2_RX_DMA_IRQ, \ - .HsInterface = UART2_RX_DMA_HANDSHAK, \ - .dma_rcc = UART2_RX_DMA_DMA_RCC, \ - .dma_channel = UART2_RX_DMA_DMA_CHANNEL, \ + .Instance = UART2_RX_DMA_INSTANCE, \ + .dma_irq = UART2_RX_DMA_IRQ, \ + .HsInterface = UART2_RX_DMA_HANDSHAK, \ + .dma_rcc = UART2_RX_DMA_DMA_RCC, \ + .dma_channel = UART2_RX_DMA_DMA_CHANNEL, \ .dmamux_channel = UART2_RX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = UART2_RX_DMA_DMAMUX_REQUEST, \ } @@ -101,11 +101,11 @@ extern "C" { #ifndef UART2_DMA_TX_CONFIG #define UART2_DMA_TX_CONFIG \ { \ - .Instance = UART2_TX_DMA_INSTANCE, \ - .dma_irq = UART2_TX_DMA_IRQ, \ - .HsInterface = UART2_TX_DMA_HANDSHAK, \ - .dma_rcc = UART2_TX_DMA_DMA_RCC, \ - .dma_channel = UART2_TX_DMA_DMA_CHANNEL, \ + .Instance = UART2_TX_DMA_INSTANCE, \ + .dma_irq = UART2_TX_DMA_IRQ, \ + .HsInterface = UART2_TX_DMA_HANDSHAK, \ + .dma_rcc = UART2_TX_DMA_DMA_RCC, \ + .dma_channel = UART2_TX_DMA_DMA_CHANNEL, \ .dmamux_channel = UART2_TX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = UART2_TX_DMA_DMAMUX_REQUEST, \ } @@ -117,13 +117,13 @@ extern "C" { #if defined(BSP_USING_UART3) #ifndef UART3_CONFIG -#define UART3_CONFIG \ - { \ - .name = "uart3", \ - .Instance = USART3, \ - .irq_type = USART3_IRQn, \ - .periph = RCC_APB1_PERIPHEN_M7_USART3, \ - .EnablePeriphClk = RCC_EnableAPB1PeriphClk3, \ +#define UART3_CONFIG \ + { \ + .name = "uart3", \ + .Instance = USART3, \ + .irq_type = USART3_IRQn, \ + .periph = RCC_APB1_PERIPHEN_M7_USART3, \ + .EnablePeriphClk = RCC_EnableAPB1PeriphClk3, \ } #endif /* UART3_CONFIG */ #endif /* BSP_USING_UART3 */ @@ -132,11 +132,11 @@ extern "C" { #ifndef UART3_DMA_RX_CONFIG #define UART3_DMA_RX_CONFIG \ { \ - .Instance = UART3_RX_DMA_INSTANCE, \ - .dma_irq = UART3_RX_DMA_IRQ, \ - .HsInterface = UART3_RX_DMA_HANDSHAK, \ - .dma_rcc = UART3_RX_DMA_DMA_RCC, \ - .dma_channel = UART3_RX_DMA_DMA_CHANNEL, \ + .Instance = UART3_RX_DMA_INSTANCE, \ + .dma_irq = UART3_RX_DMA_IRQ, \ + .HsInterface = UART3_RX_DMA_HANDSHAK, \ + .dma_rcc = UART3_RX_DMA_DMA_RCC, \ + .dma_channel = UART3_RX_DMA_DMA_CHANNEL, \ .dmamux_channel = UART3_RX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = UART3_RX_DMA_DMAMUX_REQUEST, \ } @@ -150,11 +150,11 @@ extern "C" { #ifndef UART3_DMA_TX_CONFIG #define UART3_DMA_TX_CONFIG \ { \ - .Instance = UART3_TX_DMA_INSTANCE, \ - .dma_irq = UART3_TX_DMA_IRQ, \ - .HsInterface = UART3_TX_DMA_HANDSHAK, \ - .dma_rcc = UART3_TX_DMA_DMA_RCC, \ - .dma_channel = UART3_TX_DMA_DMA_CHANNEL, \ + .Instance = UART3_TX_DMA_INSTANCE, \ + .dma_irq = UART3_TX_DMA_IRQ, \ + .HsInterface = UART3_TX_DMA_HANDSHAK, \ + .dma_rcc = UART3_TX_DMA_DMA_RCC, \ + .dma_channel = UART3_TX_DMA_DMA_CHANNEL, \ .dmamux_channel = UART3_TX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = UART3_TX_DMA_DMAMUX_REQUEST, \ } @@ -166,13 +166,13 @@ extern "C" { #if defined(BSP_USING_UART4) #ifndef UART4_CONFIG -#define UART4_CONFIG \ - { \ - .name = "uart4", \ - .Instance = USART4, \ - .irq_type = USART4_IRQn, \ - .periph = RCC_APB1_PERIPHEN_M7_USART4, \ - .EnablePeriphClk = RCC_EnableAPB1PeriphClk3, \ +#define UART4_CONFIG \ + { \ + .name = "uart4", \ + .Instance = USART4, \ + .irq_type = USART4_IRQn, \ + .periph = RCC_APB1_PERIPHEN_M7_USART4, \ + .EnablePeriphClk = RCC_EnableAPB1PeriphClk3, \ } #endif /* UART4_CONFIG */ #endif /* BSP_USING_UART4 */ @@ -181,11 +181,11 @@ extern "C" { #ifndef UART4_DMA_RX_CONFIG #define UART4_DMA_RX_CONFIG \ { \ - .Instance = UART4_RX_DMA_INSTANCE, \ - .dma_irq = UART4_RX_DMA_IRQ, \ - .HsInterface = UART4_RX_DMA_HANDSHAK, \ - .dma_rcc = UART4_RX_DMA_DMA_RCC, \ - .dma_channel = UART4_RX_DMA_DMA_CHANNEL, \ + .Instance = UART4_RX_DMA_INSTANCE, \ + .dma_irq = UART4_RX_DMA_IRQ, \ + .HsInterface = UART4_RX_DMA_HANDSHAK, \ + .dma_rcc = UART4_RX_DMA_DMA_RCC, \ + .dma_channel = UART4_RX_DMA_DMA_CHANNEL, \ .dmamux_channel = UART4_RX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = UART4_RX_DMA_DMAMUX_REQUEST, \ } @@ -199,11 +199,11 @@ extern "C" { #ifndef UART4_DMA_TX_CONFIG #define UART4_DMA_TX_CONFIG \ { \ - .Instance = UART4_TX_DMA_INSTANCE, \ - .dma_irq = UART4_TX_DMA_IRQ, \ - .HsInterface = UART4_TX_DMA_HANDSHAK, \ - .dma_rcc = UART4_TX_DMA_DMA_RCC, \ - .dma_channel = UART4_TX_DMA_DMA_CHANNEL, \ + .Instance = UART4_TX_DMA_INSTANCE, \ + .dma_irq = UART4_TX_DMA_IRQ, \ + .HsInterface = UART4_TX_DMA_HANDSHAK, \ + .dma_rcc = UART4_TX_DMA_DMA_RCC, \ + .dma_channel = UART4_TX_DMA_DMA_CHANNEL, \ .dmamux_channel = UART4_TX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = UART4_TX_DMA_DMAMUX_REQUEST, \ } @@ -215,13 +215,13 @@ extern "C" { #if defined(BSP_USING_UART5) #ifndef UART5_CONFIG -#define UART5_CONFIG \ - { \ - .name = "uart5", \ - .Instance = USART5, \ - .irq_type = USART5_IRQn, \ - .periph = RCC_APB2_PERIPHEN_M7_USART5, \ - .EnablePeriphClk = RCC_EnableAPB2PeriphClk3, \ +#define UART5_CONFIG \ + { \ + .name = "uart5", \ + .Instance = USART5, \ + .irq_type = USART5_IRQn, \ + .periph = RCC_APB2_PERIPHEN_M7_USART5, \ + .EnablePeriphClk = RCC_EnableAPB2PeriphClk3, \ } #endif /* UART5_CONFIG */ #endif /* BSP_USING_UART5 */ @@ -230,11 +230,11 @@ extern "C" { #ifndef UART5_DMA_RX_CONFIG #define UART5_DMA_RX_CONFIG \ { \ - .Instance = UART5_RX_DMA_INSTANCE, \ - .dma_irq = UART5_RX_DMA_IRQ, \ - .HsInterface = UART5_RX_DMA_HANDSHAK, \ - .dma_rcc = UART5_RX_DMA_DMA_RCC, \ - .dma_channel = UART5_RX_DMA_DMA_CHANNEL, \ + .Instance = UART5_RX_DMA_INSTANCE, \ + .dma_irq = UART5_RX_DMA_IRQ, \ + .HsInterface = UART5_RX_DMA_HANDSHAK, \ + .dma_rcc = UART5_RX_DMA_DMA_RCC, \ + .dma_channel = UART5_RX_DMA_DMA_CHANNEL, \ .dmamux_channel = UART5_RX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = UART5_RX_DMA_DMAMUX_REQUEST, \ } @@ -248,11 +248,11 @@ extern "C" { #ifndef UART5_DMA_TX_CONFIG #define UART5_DMA_TX_CONFIG \ { \ - .Instance = UART5_TX_DMA_INSTANCE, \ - .dma_irq = UART5_TX_DMA_IRQ, \ - .HsInterface = UART5_TX_DMA_HANDSHAK, \ - .dma_rcc = UART5_TX_DMA_DMA_RCC, \ - .dma_channel = UART5_TX_DMA_DMA_CHANNEL, \ + .Instance = UART5_TX_DMA_INSTANCE, \ + .dma_irq = UART5_TX_DMA_IRQ, \ + .HsInterface = UART5_TX_DMA_HANDSHAK, \ + .dma_rcc = UART5_TX_DMA_DMA_RCC, \ + .dma_channel = UART5_TX_DMA_DMA_CHANNEL, \ .dmamux_channel = UART5_TX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = UART5_TX_DMA_DMAMUX_REQUEST, \ } @@ -264,13 +264,13 @@ extern "C" { #if defined(BSP_USING_UART6) #ifndef UART6_CONFIG -#define UART6_CONFIG \ - { \ - .name = "uart6", \ - .Instance = USART6, \ - .irq_type = USART6_IRQn, \ - .periph = RCC_APB2_PERIPHEN_M7_USART6, \ - .EnablePeriphClk = RCC_EnableAPB2PeriphClk3, \ +#define UART6_CONFIG \ + { \ + .name = "uart6", \ + .Instance = USART6, \ + .irq_type = USART6_IRQn, \ + .periph = RCC_APB2_PERIPHEN_M7_USART6, \ + .EnablePeriphClk = RCC_EnableAPB2PeriphClk3, \ } #endif /* UART6_CONFIG */ #endif /* BSP_USING_UART6 */ @@ -279,11 +279,11 @@ extern "C" { #ifndef UART6_DMA_RX_CONFIG #define UART6_DMA_RX_CONFIG \ { \ - .Instance = UART6_RX_DMA_INSTANCE, \ - .dma_irq = UART6_RX_DMA_IRQ, \ - .HsInterface = UART6_RX_DMA_HANDSHAK, \ - .dma_rcc = UART6_RX_DMA_DMA_RCC, \ - .dma_channel = UART6_RX_DMA_DMA_CHANNEL, \ + .Instance = UART6_RX_DMA_INSTANCE, \ + .dma_irq = UART6_RX_DMA_IRQ, \ + .HsInterface = UART6_RX_DMA_HANDSHAK, \ + .dma_rcc = UART6_RX_DMA_DMA_RCC, \ + .dma_channel = UART6_RX_DMA_DMA_CHANNEL, \ .dmamux_channel = UART6_RX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = UART6_RX_DMA_DMAMUX_REQUEST, \ } @@ -297,11 +297,11 @@ extern "C" { #ifndef UART6_DMA_TX_CONFIG #define UART6_DMA_TX_CONFIG \ { \ - .Instance = UART6_TX_DMA_INSTANCE, \ - .dma_irq = UART6_TX_DMA_IRQ, \ - .HsInterface = UART6_TX_DMA_HANDSHAK, \ - .dma_rcc = UART6_TX_DMA_DMA_RCC, \ - .dma_channel = UART6_TX_DMA_DMA_CHANNEL, \ + .Instance = UART6_TX_DMA_INSTANCE, \ + .dma_irq = UART6_TX_DMA_IRQ, \ + .HsInterface = UART6_TX_DMA_HANDSHAK, \ + .dma_rcc = UART6_TX_DMA_DMA_RCC, \ + .dma_channel = UART6_TX_DMA_DMA_CHANNEL, \ .dmamux_channel = UART6_TX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = UART6_TX_DMA_DMAMUX_REQUEST, \ } @@ -313,13 +313,13 @@ extern "C" { #if defined(BSP_USING_UART7) #ifndef UART7_CONFIG -#define UART7_CONFIG \ - { \ - .name = "uart7", \ - .Instance = USART7, \ - .irq_type = USART7_IRQn, \ - .periph = RCC_APB2_PERIPHEN_M7_USART7, \ - .EnablePeriphClk = RCC_EnableAPB2PeriphClk3, \ +#define UART7_CONFIG \ + { \ + .name = "uart7", \ + .Instance = USART7, \ + .irq_type = USART7_IRQn, \ + .periph = RCC_APB2_PERIPHEN_M7_USART7, \ + .EnablePeriphClk = RCC_EnableAPB2PeriphClk3, \ } #endif /* UART7_CONFIG */ #endif /* BSP_USING_UART7 */ @@ -328,11 +328,11 @@ extern "C" { #ifndef UART7_DMA_RX_CONFIG #define UART7_DMA_RX_CONFIG \ { \ - .Instance = UART7_RX_DMA_INSTANCE, \ - .dma_irq = UART7_RX_DMA_IRQ, \ - .HsInterface = UART7_RX_DMA_HANDSHAK, \ - .dma_rcc = UART7_RX_DMA_DMA_RCC, \ - .dma_channel = UART7_RX_DMA_DMA_CHANNEL, \ + .Instance = UART7_RX_DMA_INSTANCE, \ + .dma_irq = UART7_RX_DMA_IRQ, \ + .HsInterface = UART7_RX_DMA_HANDSHAK, \ + .dma_rcc = UART7_RX_DMA_DMA_RCC, \ + .dma_channel = UART7_RX_DMA_DMA_CHANNEL, \ .dmamux_channel = UART7_RX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = UART7_RX_DMA_DMAMUX_REQUEST, \ } @@ -346,11 +346,11 @@ extern "C" { #ifndef UART7_DMA_TX_CONFIG #define UART7_DMA_TX_CONFIG \ { \ - .Instance = UART7_TX_DMA_INSTANCE, \ - .dma_irq = UART7_TX_DMA_IRQ, \ - .HsInterface = UART7_TX_DMA_HANDSHAK, \ - .dma_rcc = UART7_TX_DMA_DMA_RCC, \ - .dma_channel = UART7_TX_DMA_DMA_CHANNEL, \ + .Instance = UART7_TX_DMA_INSTANCE, \ + .dma_irq = UART7_TX_DMA_IRQ, \ + .HsInterface = UART7_TX_DMA_HANDSHAK, \ + .dma_rcc = UART7_TX_DMA_DMA_RCC, \ + .dma_channel = UART7_TX_DMA_DMA_CHANNEL, \ .dmamux_channel = UART7_TX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = UART7_TX_DMA_DMAMUX_REQUEST, \ } @@ -362,13 +362,13 @@ extern "C" { #if defined(BSP_USING_UART8) #ifndef UART8_CONFIG -#define UART8_CONFIG \ - { \ - .name = "uart8", \ - .Instance = USART8, \ - .irq_type = USART8_IRQn, \ - .periph = RCC_APB2_PERIPHEN_M7_USART8, \ - .EnablePeriphClk = RCC_EnableAPB2PeriphClk3, \ +#define UART8_CONFIG \ + { \ + .name = "uart8", \ + .Instance = USART8, \ + .irq_type = USART8_IRQn, \ + .periph = RCC_APB2_PERIPHEN_M7_USART8, \ + .EnablePeriphClk = RCC_EnableAPB2PeriphClk3, \ } #endif /* UART8_CONFIG */ #endif /* BSP_USING_UART8 */ @@ -377,11 +377,11 @@ extern "C" { #ifndef UART8_DMA_RX_CONFIG #define UART8_DMA_RX_CONFIG \ { \ - .Instance = UART8_RX_DMA_INSTANCE, \ - .dma_irq = UART8_RX_DMA_IRQ, \ - .HsInterface = UART8_RX_DMA_HANDSHAK, \ - .dma_rcc = UART8_RX_DMA_DMA_RCC, \ - .dma_channel = UART8_RX_DMA_DMA_CHANNEL, \ + .Instance = UART8_RX_DMA_INSTANCE, \ + .dma_irq = UART8_RX_DMA_IRQ, \ + .HsInterface = UART8_RX_DMA_HANDSHAK, \ + .dma_rcc = UART8_RX_DMA_DMA_RCC, \ + .dma_channel = UART8_RX_DMA_DMA_CHANNEL, \ .dmamux_channel = UART8_RX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = UART8_RX_DMA_DMAMUX_REQUEST, \ } @@ -395,11 +395,11 @@ extern "C" { #ifndef UART8_DMA_TX_CONFIG #define UART8_DMA_TX_CONFIG \ { \ - .Instance = UART8_TX_DMA_INSTANCE, \ - .dma_irq = UART8_TX_DMA_IRQ, \ - .HsInterface = UART8_TX_DMA_HANDSHAK, \ - .dma_rcc = UART8_TX_DMA_DMA_RCC, \ - .dma_channel = UART8_TX_DMA_DMA_CHANNEL, \ + .Instance = UART8_TX_DMA_INSTANCE, \ + .dma_irq = UART8_TX_DMA_IRQ, \ + .HsInterface = UART8_TX_DMA_HANDSHAK, \ + .dma_rcc = UART8_TX_DMA_DMA_RCC, \ + .dma_channel = UART8_TX_DMA_DMA_CHANNEL, \ .dmamux_channel = UART8_TX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = UART8_TX_DMA_DMAMUX_REQUEST, \ } @@ -411,13 +411,13 @@ extern "C" { #if defined(BSP_USING_UART9) #ifndef UART9_CONFIG -#define UART9_CONFIG \ - { \ - .name = "uart9", \ - .Instance = UART9, \ - .irq_type = UART9_IRQn, \ - .periph = RCC_APB1_PERIPHEN_M7_UART9, \ - .EnablePeriphClk = RCC_EnableAPB1PeriphClk3, \ +#define UART9_CONFIG \ + { \ + .name = "uart9", \ + .Instance = UART9, \ + .irq_type = UART9_IRQn, \ + .periph = RCC_APB1_PERIPHEN_M7_UART9, \ + .EnablePeriphClk = RCC_EnableAPB1PeriphClk3, \ } #endif /* UART9_CONFIG */ #endif /* BSP_USING_UART9 */ @@ -426,11 +426,11 @@ extern "C" { #ifndef UART9_DMA_RX_CONFIG #define UART9_DMA_RX_CONFIG \ { \ - .Instance = UART9_RX_DMA_INSTANCE, \ - .dma_irq = UART9_RX_DMA_IRQ, \ - .HsInterface = UART9_RX_DMA_HANDSHAK, \ - .dma_rcc = UART9_RX_DMA_DMA_RCC, \ - .dma_channel = UART9_RX_DMA_DMA_CHANNEL, \ + .Instance = UART9_RX_DMA_INSTANCE, \ + .dma_irq = UART9_RX_DMA_IRQ, \ + .HsInterface = UART9_RX_DMA_HANDSHAK, \ + .dma_rcc = UART9_RX_DMA_DMA_RCC, \ + .dma_channel = UART9_RX_DMA_DMA_CHANNEL, \ .dmamux_channel = UART9_RX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = UART9_RX_DMA_DMAMUX_REQUEST, \ } @@ -444,11 +444,11 @@ extern "C" { #ifndef UART9_DMA_TX_CONFIG #define UART9_DMA_TX_CONFIG \ { \ - .Instance = UART9_TX_DMA_INSTANCE, \ - .dma_irq = UART9_TX_DMA_IRQ, \ - .HsInterface = UART9_TX_DMA_HANDSHAK, \ - .dma_rcc = UART9_TX_DMA_DMA_RCC, \ - .dma_channel = UART9_TX_DMA_DMA_CHANNEL, \ + .Instance = UART9_TX_DMA_INSTANCE, \ + .dma_irq = UART9_TX_DMA_IRQ, \ + .HsInterface = UART9_TX_DMA_HANDSHAK, \ + .dma_rcc = UART9_TX_DMA_DMA_RCC, \ + .dma_channel = UART9_TX_DMA_DMA_CHANNEL, \ .dmamux_channel = UART9_TX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = UART9_TX_DMA_DMAMUX_REQUEST, \ } @@ -460,13 +460,13 @@ extern "C" { #if defined(BSP_USING_UART10) #ifndef UART10_CONFIG -#define UART10_CONFIG \ - { \ - .name = "uart10", \ - .Instance = UART10, \ - .irq_type = UART10_IRQn, \ - .periph = RCC_APB1_PERIPHEN_M7_UART10, \ - .EnablePeriphClk = RCC_EnableAPB1PeriphClk3, \ +#define UART10_CONFIG \ + { \ + .name = "uart10", \ + .Instance = UART10, \ + .irq_type = UART10_IRQn, \ + .periph = RCC_APB1_PERIPHEN_M7_UART10, \ + .EnablePeriphClk = RCC_EnableAPB1PeriphClk3, \ } #endif /* UART10_CONFIG */ #endif /* BSP_USING_UART10 */ @@ -475,11 +475,11 @@ extern "C" { #ifndef UART10_DMA_RX_CONFIG #define UART10_DMA_RX_CONFIG \ { \ - .Instance = UART10_RX_DMA_INSTANCE, \ - .dma_irq = UART10_RX_DMA_IRQ, \ - .HsInterface = UART10_RX_DMA_HANDSHAK, \ - .dma_rcc = UART10_RX_DMA_DMA_RCC, \ - .dma_channel = UART10_RX_DMA_DMA_CHANNEL, \ + .Instance = UART10_RX_DMA_INSTANCE, \ + .dma_irq = UART10_RX_DMA_IRQ, \ + .HsInterface = UART10_RX_DMA_HANDSHAK, \ + .dma_rcc = UART10_RX_DMA_DMA_RCC, \ + .dma_channel = UART10_RX_DMA_DMA_CHANNEL, \ .dmamux_channel = UART10_RX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = UART10_RX_DMA_DMAMUX_REQUEST, \ } @@ -493,11 +493,11 @@ extern "C" { #ifndef UART10_DMA_TX_CONFIG #define UART10_DMA_TX_CONFIG \ { \ - .Instance = UART10_TX_DMA_INSTANCE, \ - .dma_irq = UART10_TX_DMA_IRQ, \ - .HsInterface = UART10_TX_DMA_HANDSHAK, \ - .dma_rcc = UART10_TX_DMA_DMA_RCC, \ - .dma_channel = UART10_TX_DMA_DMA_CHANNEL, \ + .Instance = UART10_TX_DMA_INSTANCE, \ + .dma_irq = UART10_TX_DMA_IRQ, \ + .HsInterface = UART10_TX_DMA_HANDSHAK, \ + .dma_rcc = UART10_TX_DMA_DMA_RCC, \ + .dma_channel = UART10_TX_DMA_DMA_CHANNEL, \ .dmamux_channel = UART10_TX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = UART10_TX_DMA_DMAMUX_REQUEST, \ } @@ -509,13 +509,13 @@ extern "C" { #if defined(BSP_USING_UART11) #ifndef UART11_CONFIG -#define UART11_CONFIG \ - { \ - .name = "uart11", \ - .Instance = UART11, \ - .irq_type = UART11_IRQn, \ - .periph = RCC_APB1_PERIPHEN_M7_UART11, \ - .EnablePeriphClk = RCC_EnableAPB1PeriphClk3, \ +#define UART11_CONFIG \ + { \ + .name = "uart11", \ + .Instance = UART11, \ + .irq_type = UART11_IRQn, \ + .periph = RCC_APB1_PERIPHEN_M7_UART11, \ + .EnablePeriphClk = RCC_EnableAPB1PeriphClk3, \ } #endif /* UART11_CONFIG */ #endif /* BSP_USING_UART11 */ @@ -524,11 +524,11 @@ extern "C" { #ifndef UART11_DMA_RX_CONFIG #define UART11_DMA_RX_CONFIG \ { \ - .Instance = UART11_RX_DMA_INSTANCE, \ - .dma_irq = UART11_RX_DMA_IRQ, \ - .HsInterface = UART11_RX_DMA_HANDSHAK, \ - .dma_rcc = UART11_RX_DMA_DMA_RCC, \ - .dma_channel = UART11_RX_DMA_DMA_CHANNEL, \ + .Instance = UART11_RX_DMA_INSTANCE, \ + .dma_irq = UART11_RX_DMA_IRQ, \ + .HsInterface = UART11_RX_DMA_HANDSHAK, \ + .dma_rcc = UART11_RX_DMA_DMA_RCC, \ + .dma_channel = UART11_RX_DMA_DMA_CHANNEL, \ .dmamux_channel = UART11_RX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = UART11_RX_DMA_DMAMUX_REQUEST, \ } @@ -542,11 +542,11 @@ extern "C" { #ifndef UART11_DMA_TX_CONFIG #define UART11_DMA_TX_CONFIG \ { \ - .Instance = UART11_TX_DMA_INSTANCE, \ - .dma_irq = UART11_TX_DMA_IRQ, \ - .HsInterface = UART11_TX_DMA_HANDSHAK, \ - .dma_rcc = UART11_TX_DMA_DMA_RCC, \ - .dma_channel = UART11_TX_DMA_DMA_CHANNEL, \ + .Instance = UART11_TX_DMA_INSTANCE, \ + .dma_irq = UART11_TX_DMA_IRQ, \ + .HsInterface = UART11_TX_DMA_HANDSHAK, \ + .dma_rcc = UART11_TX_DMA_DMA_RCC, \ + .dma_channel = UART11_TX_DMA_DMA_CHANNEL, \ .dmamux_channel = UART11_TX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = UART11_TX_DMA_DMAMUX_REQUEST, \ } @@ -558,13 +558,13 @@ extern "C" { #if defined(BSP_USING_UART12) #ifndef UART12_CONFIG -#define UART12_CONFIG \ - { \ - .name = "uart12", \ - .Instance = UART12, \ - .irq_type = UART12_IRQn, \ - .periph = RCC_APB1_PERIPHEN_M7_UART12, \ - .EnablePeriphClk = RCC_EnableAPB1PeriphClk3, \ +#define UART12_CONFIG \ + { \ + .name = "uart12", \ + .Instance = UART12, \ + .irq_type = UART12_IRQn, \ + .periph = RCC_APB1_PERIPHEN_M7_UART12, \ + .EnablePeriphClk = RCC_EnableAPB1PeriphClk3, \ } #endif /* UART12_CONFIG */ #endif /* BSP_USING_UART12 */ @@ -573,11 +573,11 @@ extern "C" { #ifndef UART12_DMA_RX_CONFIG #define UART12_DMA_RX_CONFIG \ { \ - .Instance = UART12_RX_DMA_INSTANCE, \ - .dma_irq = UART12_RX_DMA_IRQ, \ - .HsInterface = UART12_RX_DMA_HANDSHAK, \ - .dma_rcc = UART12_RX_DMA_DMA_RCC, \ - .dma_channel = UART12_RX_DMA_DMA_CHANNEL, \ + .Instance = UART12_RX_DMA_INSTANCE, \ + .dma_irq = UART12_RX_DMA_IRQ, \ + .HsInterface = UART12_RX_DMA_HANDSHAK, \ + .dma_rcc = UART12_RX_DMA_DMA_RCC, \ + .dma_channel = UART12_RX_DMA_DMA_CHANNEL, \ .dmamux_channel = UART12_RX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = UART12_RX_DMA_DMAMUX_REQUEST, \ } @@ -591,11 +591,11 @@ extern "C" { #ifndef UART12_DMA_TX_CONFIG #define UART12_DMA_TX_CONFIG \ { \ - .Instance = UART12_TX_DMA_INSTANCE, \ - .dma_irq = UART12_TX_DMA_IRQ, \ - .HsInterface = UART12_TX_DMA_HANDSHAK, \ - .dma_rcc = UART12_TX_DMA_DMA_RCC, \ - .dma_channel = UART12_TX_DMA_DMA_CHANNEL, \ + .Instance = UART12_TX_DMA_INSTANCE, \ + .dma_irq = UART12_TX_DMA_IRQ, \ + .HsInterface = UART12_TX_DMA_HANDSHAK, \ + .dma_rcc = UART12_TX_DMA_DMA_RCC, \ + .dma_channel = UART12_TX_DMA_DMA_CHANNEL, \ .dmamux_channel = UART12_TX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = UART12_TX_DMA_DMAMUX_REQUEST, \ } @@ -607,13 +607,13 @@ extern "C" { #if defined(BSP_USING_UART13) #ifndef UART13_CONFIG -#define UART13_CONFIG \ - { \ - .name = "uart13", \ - .Instance = UART13, \ - .irq_type = UART13_IRQn, \ - .periph = RCC_APB2_PERIPHEN_M7_UART13, \ - .EnablePeriphClk = RCC_EnableAPB2PeriphClk3, \ +#define UART13_CONFIG \ + { \ + .name = "uart13", \ + .Instance = UART13, \ + .irq_type = UART13_IRQn, \ + .periph = RCC_APB2_PERIPHEN_M7_UART13, \ + .EnablePeriphClk = RCC_EnableAPB2PeriphClk3, \ } #endif /* UART13_CONFIG */ #endif /* BSP_USING_UART13 */ @@ -622,11 +622,11 @@ extern "C" { #ifndef UART13_DMA_RX_CONFIG #define UART13_DMA_RX_CONFIG \ { \ - .Instance = UART13_RX_DMA_INSTANCE, \ - .dma_irq = UART13_RX_DMA_IRQ, \ - .HsInterface = UART13_RX_DMA_HANDSHAK, \ - .dma_rcc = UART13_RX_DMA_DMA_RCC, \ - .dma_channel = UART13_RX_DMA_DMA_CHANNEL, \ + .Instance = UART13_RX_DMA_INSTANCE, \ + .dma_irq = UART13_RX_DMA_IRQ, \ + .HsInterface = UART13_RX_DMA_HANDSHAK, \ + .dma_rcc = UART13_RX_DMA_DMA_RCC, \ + .dma_channel = UART13_RX_DMA_DMA_CHANNEL, \ .dmamux_channel = UART13_RX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = UART13_RX_DMA_DMAMUX_REQUEST, \ } @@ -640,11 +640,11 @@ extern "C" { #ifndef UART13_DMA_TX_CONFIG #define UART13_DMA_TX_CONFIG \ { \ - .Instance = UART13_TX_DMA_INSTANCE, \ - .dma_irq = UART13_TX_DMA_IRQ, \ - .HsInterface = UART13_TX_DMA_HANDSHAK, \ - .dma_rcc = UART13_TX_DMA_DMA_RCC, \ - .dma_channel = UART13_TX_DMA_DMA_CHANNEL, \ + .Instance = UART13_TX_DMA_INSTANCE, \ + .dma_irq = UART13_TX_DMA_IRQ, \ + .HsInterface = UART13_TX_DMA_HANDSHAK, \ + .dma_rcc = UART13_TX_DMA_DMA_RCC, \ + .dma_channel = UART13_TX_DMA_DMA_CHANNEL, \ .dmamux_channel = UART13_TX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = UART13_TX_DMA_DMAMUX_REQUEST, \ } @@ -656,13 +656,13 @@ extern "C" { #if defined(BSP_USING_UART14) #ifndef UART14_CONFIG -#define UART14_CONFIG \ - { \ - .name = "uart14", \ - .Instance = UART14, \ - .irq_type = UART14_IRQn, \ - .periph = RCC_APB2_PERIPHEN_M7_UART14, \ - .EnablePeriphClk = RCC_EnableAPB2PeriphClk3, \ +#define UART14_CONFIG \ + { \ + .name = "uart14", \ + .Instance = UART14, \ + .irq_type = UART14_IRQn, \ + .periph = RCC_APB2_PERIPHEN_M7_UART14, \ + .EnablePeriphClk = RCC_EnableAPB2PeriphClk3, \ } #endif /* UART14_CONFIG */ #endif /* BSP_USING_UART14 */ @@ -671,11 +671,11 @@ extern "C" { #ifndef UART14_DMA_RX_CONFIG #define UART14_DMA_RX_CONFIG \ { \ - .Instance = UART14_RX_DMA_INSTANCE, \ - .dma_irq = UART14_RX_DMA_IRQ, \ - .HsInterface = UART14_RX_DMA_HANDSHAK, \ - .dma_rcc = UART14_RX_DMA_DMA_RCC, \ - .dma_channel = UART14_RX_DMA_DMA_CHANNEL, \ + .Instance = UART14_RX_DMA_INSTANCE, \ + .dma_irq = UART14_RX_DMA_IRQ, \ + .HsInterface = UART14_RX_DMA_HANDSHAK, \ + .dma_rcc = UART14_RX_DMA_DMA_RCC, \ + .dma_channel = UART14_RX_DMA_DMA_CHANNEL, \ .dmamux_channel = UART14_RX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = UART14_RX_DMA_DMAMUX_REQUEST, \ } @@ -689,11 +689,11 @@ extern "C" { #ifndef UART14_DMA_TX_CONFIG #define UART14_DMA_TX_CONFIG \ { \ - .Instance = UART14_TX_DMA_INSTANCE, \ - .dma_irq = UART14_TX_DMA_IRQ, \ - .HsInterface = UART14_TX_DMA_HANDSHAK, \ - .dma_rcc = UART14_TX_DMA_DMA_RCC, \ - .dma_channel = UART14_TX_DMA_DMA_CHANNEL, \ + .Instance = UART14_TX_DMA_INSTANCE, \ + .dma_irq = UART14_TX_DMA_IRQ, \ + .HsInterface = UART14_TX_DMA_HANDSHAK, \ + .dma_rcc = UART14_TX_DMA_DMA_RCC, \ + .dma_channel = UART14_TX_DMA_DMA_CHANNEL, \ .dmamux_channel = UART14_TX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = UART14_TX_DMA_DMAMUX_REQUEST, \ } @@ -705,13 +705,13 @@ extern "C" { #if defined(BSP_USING_UART15) #ifndef UART15_CONFIG -#define UART15_CONFIG \ - { \ - .name = "uart15", \ - .Instance = UART15, \ - .irq_type = UART15_IRQn, \ - .periph = RCC_APB2_PERIPHEN_M7_UART15, \ - .EnablePeriphClk = RCC_EnableAPB2PeriphClk3, \ +#define UART15_CONFIG \ + { \ + .name = "uart15", \ + .Instance = UART15, \ + .irq_type = UART15_IRQn, \ + .periph = RCC_APB2_PERIPHEN_M7_UART15, \ + .EnablePeriphClk = RCC_EnableAPB2PeriphClk3, \ } #endif /* UART15_CONFIG */ #endif /* BSP_USING_UART15 */ @@ -720,11 +720,11 @@ extern "C" { #ifndef UART15_DMA_RX_CONFIG #define UART15_DMA_RX_CONFIG \ { \ - .Instance = UART15_RX_DMA_INSTANCE, \ - .dma_irq = UART15_RX_DMA_IRQ, \ - .HsInterface = UART15_RX_DMA_HANDSHAK, \ - .dma_rcc = UART15_RX_DMA_DMA_RCC, \ - .dma_channel = UART15_RX_DMA_DMA_CHANNEL, \ + .Instance = UART15_RX_DMA_INSTANCE, \ + .dma_irq = UART15_RX_DMA_IRQ, \ + .HsInterface = UART15_RX_DMA_HANDSHAK, \ + .dma_rcc = UART15_RX_DMA_DMA_RCC, \ + .dma_channel = UART15_RX_DMA_DMA_CHANNEL, \ .dmamux_channel = UART15_RX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = UART15_RX_DMA_DMAMUX_REQUEST, \ } @@ -738,11 +738,11 @@ extern "C" { #ifndef UART15_DMA_TX_CONFIG #define UART15_DMA_TX_CONFIG \ { \ - .Instance = UART15_TX_DMA_INSTANCE, \ - .dma_irq = UART15_TX_DMA_IRQ, \ - .HsInterface = UART15_TX_DMA_HANDSHAK, \ - .dma_rcc = UART15_TX_DMA_DMA_RCC, \ - .dma_channel = UART15_TX_DMA_DMA_CHANNEL, \ + .Instance = UART15_TX_DMA_INSTANCE, \ + .dma_irq = UART15_TX_DMA_IRQ, \ + .HsInterface = UART15_TX_DMA_HANDSHAK, \ + .dma_rcc = UART15_TX_DMA_DMA_RCC, \ + .dma_channel = UART15_TX_DMA_DMA_CHANNEL, \ .dmamux_channel = UART15_TX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = UART15_TX_DMA_DMAMUX_REQUEST, \ } @@ -754,13 +754,13 @@ extern "C" { #if defined(BSP_USING_LPUART1) #ifndef LPUART1_CONFIG -#define LPUART1_CONFIG \ - { \ - .name = "lpuart1", \ - .Instance = LPUART1, \ - .irq_type = LPUART1_IRQn, \ - .periph = RCC_RD_PERIPHEN_M7_LPUART1, \ - .EnablePeriphClk = RCC_EnableRDPeriphClk1, \ +#define LPUART1_CONFIG \ + { \ + .name = "lpuart1", \ + .Instance = LPUART1, \ + .irq_type = LPUART1_IRQn, \ + .periph = RCC_RD_PERIPHEN_M7_LPUART1, \ + .EnablePeriphClk = RCC_EnableRDPeriphClk1, \ } #endif /* LPUART1_CONFIG */ #endif /* BSP_USING_LPUART1 */ @@ -768,11 +768,11 @@ extern "C" { #ifndef LPUART1_DMA_RX_CONFIG #define LPUART1_DMA_RX_CONFIG \ { \ - .Instance = LPUART1_RX_DMA_INSTANCE, \ - .dma_irq = LPUART1_RX_DMA_IRQ, \ - .HsInterface = LPUART1_RX_DMA_HANDSHAK, \ - .dma_rcc = LPUART1_RX_DMA_DMA_RCC, \ - .dma_channel = LPUART1_RX_DMA_DMA_CHANNEL, \ + .Instance = LPUART1_RX_DMA_INSTANCE, \ + .dma_irq = LPUART1_RX_DMA_IRQ, \ + .HsInterface = LPUART1_RX_DMA_HANDSHAK, \ + .dma_rcc = LPUART1_RX_DMA_DMA_RCC, \ + .dma_channel = LPUART1_RX_DMA_DMA_CHANNEL, \ .dmamux_channel = LPUART1_RX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = LPUART1_RX_DMA_DMAMUX_REQUEST, \ } @@ -781,13 +781,13 @@ extern "C" { #if defined(BSP_USING_LPUART2) #ifndef LPUART2_CONFIG -#define LPUART2_CONFIG \ - { \ - .name = "lpuart2", \ - .Instance = LPUART2, \ - .irq_type = LPUART2_IRQn, \ - .periph = RCC_RD_PERIPHEN_M7_LPUART2, \ - .EnablePeriphClk = RCC_EnableRDPeriphClk1, \ +#define LPUART2_CONFIG \ + { \ + .name = "lpuart2", \ + .Instance = LPUART2, \ + .irq_type = LPUART2_IRQn, \ + .periph = RCC_RD_PERIPHEN_M7_LPUART2, \ + .EnablePeriphClk = RCC_EnableRDPeriphClk1, \ } #endif /* LPUART2_CONFIG */ #endif /* BSP_USING_LPUART2 */ @@ -795,11 +795,11 @@ extern "C" { #ifndef LPUART2_DMA_RX_CONFIG #define LPUART2_DMA_RX_CONFIG \ { \ - .Instance = LPUART2_RX_DMA_INSTANCE, \ - .dma_irq = LPUART2_RX_DMA_IRQ, \ - .HsInterface = LPUART2_RX_DMA_HANDSHAK, \ - .dma_rcc = LPUART2_RX_DMA_DMA_RCC, \ - .dma_channel = LPUART2_RX_DMA_DMA_CHANNEL, \ + .Instance = LPUART2_RX_DMA_INSTANCE, \ + .dma_irq = LPUART2_RX_DMA_IRQ, \ + .HsInterface = LPUART2_RX_DMA_HANDSHAK, \ + .dma_rcc = LPUART2_RX_DMA_DMA_RCC, \ + .dma_channel = LPUART2_RX_DMA_DMA_CHANNEL, \ .dmamux_channel = LPUART2_RX_DMA_DMAMUX_CHANNEL, \ .dmamux_request = LPUART2_RX_DMA_DMAMUX_REQUEST, \ } diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_adc.c b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_adc.c index cd04672c07a..6e31a8dc82b 100644 --- a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_adc.c +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_adc.c @@ -15,7 +15,7 @@ #include "drv_config.h" //#define DRV_DEBUG -#define LOG_TAG "drv.adc" +#define LOG_TAG "drv.adc" #include @@ -35,8 +35,7 @@ typedef struct ADC_InitType Init; } ADC_InitInfo_t; -static ADC_InitInfo_t adc_config[] = -{ +static ADC_InitInfo_t adc_config[] = { #ifdef BSP_USING_ADC1 ADC1_CONFIG, #endif @@ -65,34 +64,34 @@ static rt_err_t n32_adc_get_channel(rt_int8_t rt_channel, uint32_t *n32_channel) { switch (rt_channel) { - case 0: + case 0: *n32_channel = ADC_CH_0; break; - case 1: + case 1: *n32_channel = ADC_CH_1; break; - case 2: + case 2: *n32_channel = ADC_CH_2; break; - case 3: + case 3: *n32_channel = ADC_CH_3; break; - case 4: + case 4: *n32_channel = ADC_CH_4; break; - case 5: + case 5: *n32_channel = ADC_CH_5; break; - case 6: + case 6: *n32_channel = ADC_CH_6; break; - case 7: + case 7: *n32_channel = ADC_CH_7; break; - case 8: + case 8: *n32_channel = ADC_CH_8; break; - case 9: + case 9: *n32_channel = ADC_CH_9; break; case 10: @@ -262,7 +261,7 @@ static rt_err_t n32_adc_enabled(struct rt_adc_device *device, rt_int8_t channel, static rt_err_t n32_adc_get_value(struct rt_adc_device *device, rt_int8_t channel, rt_uint32_t *value) { - uint16_t Convert_Value; + uint16_t Convert_Value = 0; ADC_InitInfo_t *n32_adc_info; RT_ASSERT(device != RT_NULL); @@ -284,7 +283,9 @@ static rt_err_t n32_adc_get_value(struct rt_adc_device *device, rt_int8_t channe Convert_Value = ADC_GetDat(n32_adc_info->ADCx); if (channel == RT_ADC_INTERN_CH_VBAT) + { Convert_Value *= 4U; + } #endif *value = Convert_Value; @@ -323,14 +324,13 @@ static rt_uint8_t n32_adc_get_resolution(struct rt_adc_device *device) } -static rt_int16_t n32_adc_get_vref (struct rt_adc_device *device) +static rt_int16_t n32_adc_get_vref(struct rt_adc_device *device) { return 3300; } -static const struct rt_adc_ops n32_adc_ops = -{ +static const struct rt_adc_ops n32_adc_ops = { .enabled = n32_adc_enabled, .convert = n32_adc_get_value, .get_resolution = n32_adc_get_resolution, @@ -342,7 +342,7 @@ static int n32_adc_init(void) { int result = RT_EOK; /* save adc name */ - char name_buf[5] = {'a', 'd', 'c', '0', 0}; + char name_buf[5] = { 'a', 'd', 'c', '0', 0 }; int i = 0; for (i = 0; i < sizeof(adc_config) / sizeof(adc_config[0]); i++) diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_config.h b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_config.h index 8bd9acdbc95..42e6334d2c0 100644 --- a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_config.h +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_config.h @@ -34,9 +34,11 @@ extern "C" { #elif defined(SOC_SERIES_N32H49x) #include "h49x/dma_config.h" #include "h49x/uart_config.h" +#include "h49x/can_config.h" #elif defined(SOC_SERIES_N32H47x_48x) #include "h47x_48x/dma_config.h" #include "h47x_48x/uart_config.h" +#include "h47x_48x/can_config.h" #endif /* defined(SOC_SERIES_N32H7xx) */ #ifdef __cplusplus diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_dma.h b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_dma.h index 1f69f62a0b3..bfcfddd3641 100644 --- a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_dma.h +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_dma.h @@ -34,12 +34,12 @@ struct dma_config #elif defined(SOC_SERIES_N32H49x) || defined(SOC_SERIES_N32H47x_48x) struct dma_config { - DMA_Module *DMAy; + DMA_Module *DMAy; DMA_ChannelType *DMAChx; - IRQn_Type dma_irq; - rt_uint32_t dma_rcc; - rt_uint32_t request; - rt_uint32_t channel; + IRQn_Type dma_irq; + rt_uint32_t dma_rcc; + rt_uint32_t request; + rt_uint32_t channel; }; #endif diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_fdcan.c b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_fdcan.c index 6f787a2497f..45c42ce1fc2 100644 --- a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_fdcan.c +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_fdcan.c @@ -6,6 +6,8 @@ * Change Logs: * Date Author Notes * 2026-06-22 ox-horse first version - N32H7xx FDCAN driver + * 2026-08-05 ox-horse add N32H47x/48x support + * 2026-08-06 ox-horse add N32H49x support */ #include "drv_fdcan.h" @@ -21,30 +23,31 @@ #define LOG_TAG "drv.fdcan" #include -/* FDCAN kernel clock: 40MHz (APB1/APB2 peripheral clock) */ -#define FDCAN_KERNEL_CLK (40000000U) +#define FDCAN_IS_VALID_DATA_BYTES(value) \ + (((value) == 8) || ((value) == 12) || \ + ((value) == 16) || ((value) == 20) || \ + ((value) == 24) || ((value) == 32) || \ + ((value) == 48) || ((value) == 64)) -/* FDCAN Message RAM base addresses */ -#define FDCAN_MSG_RAM_BASE1 ((uint32_t)0x30050000U) /* SRAM5 BANK1: FDCAN1~4 */ -#define FDCAN_MSG_RAM_BASE2 ((uint32_t)0x30054000U) /* SRAM5 BANK2: FDCAN5~8 */ - -/* Message RAM offset per FDCAN instance within a bank (in words) */ +/* FDCAN Message RAM configuration */ +#if defined(SOC_SERIES_N32H7xx) +#define FDCAN_MSG_RAM_BASE1 ((uint32_t)0x30050000U) /* SRAM5 BANK1: FDCAN1~4 */ +#define FDCAN_MSG_RAM_BASE2 ((uint32_t)0x30054000U) /* SRAM5 BANK2: FDCAN5~8 */ #define FDCAN_MSG_RAM_OFFSET_PER_INSTANCE ((uint32_t)0x400U) +#elif defined(SOC_SERIES_N32H47x_48x) || defined(SOC_SERIES_N32H49x) +/* FDCAN1/2/3 share one configurable continuous Message RAM array. */ +#ifndef BSP_FDCAN_MSG_RAM_WORDS +#define BSP_FDCAN_MSG_RAM_WORDS (768U) +#endif +#if (BSP_FDCAN_MSG_RAM_WORDS < 1) || (BSP_FDCAN_MSG_RAM_WORDS > 4480) +#error "BSP_FDCAN_MSG_RAM_WORDS must be between 1 and 4480" +#endif +static uint32_t _fdcan_msg_ram[BSP_FDCAN_MSG_RAM_WORDS]; +#else +#error "Unsupported N32 FDCAN series" +#endif -/* Number of dedicated TX Buffers for blocking send */ -#define FDCAN_TX_BUF_NUM (3U) - -/* Number of RX FIFO0 elements */ -#define FDCAN_RX_FIFO0_SIZE (8U) - -/* Default RX FIFO0 watermark (50%) */ -#define FDCAN_RX_FIFO0_WATERMARK (4U) - -/*============================================================================== - * Baud rate configuration tables (40MHz FDCAN kernel clock) - * Matching STM32 H7 FDCAN timing values. - * Formula: BaudRate = FDCAN_KERNEL_CLK / (Prescaler * (Tseg1 + Tseg2 + 1)) - *============================================================================*/ +/* BaudRate = kernel clock / (Prescaler * (Tseg1 + Tseg2 + 1)). */ /** *\*\name _fdcan_arb_timing_table. @@ -72,61 +75,172 @@ static const struct n32_fdcan_data_timing _fdcan_data_timing_table[] = { { CAN1MBaud * 8, 1, 1, 3, 1 }, /* 8Mbps : 40M / (1 * (3+1+1)) = 8M */ { CAN1MBaud * 5, 1, 2, 5, 2 }, /* 5Mbps : 40M / (1 * (5+2+1)) = 5M */ { CAN1MBaud * 4, 1, 2, 7, 2 }, /* 4Mbps : 40M / (1 * (7+2+1)) = 4M */ - { CAN1MBaud * 2, 1, 4, 15, 4 }, /* 2Mbps : 40M / (4 * (3+1+1)) = 2M */ + { CAN1MBaud * 2, 1, 4, 15, 4 }, /* 2Mbps : 40M / (1 * (15+4+1)) = 2M */ { CAN1MBaud, 1, 8, 31, 8 }, /* 1Mbps : 40M / (1 * (31+8+1)) = 1M */ { CAN800kBaud, 2, 5, 19, 5 }, /* 800kbps : 40M / (2 * (19+5+1)) = 800k */ - { CAN500kBaud, 4, 4, 15, 4 }, /* 400kbps : 40M / (4 * (15+4+1)) = 500k */ + { CAN500kBaud, 4, 4, 15, 4 }, /* 500kbps : 40M / (4 * (15+4+1)) = 500k */ +}; + +struct n32_fdcan_resource_config +{ + uint32_t std_filter_size; + uint32_t ext_filter_size; + uint32_t rx_fifo0_size; + uint32_t rx_fifo0_data_bytes; + uint32_t rx_fifo1_size; + uint32_t rx_fifo1_data_bytes; + uint32_t rx_buffer_size; + uint32_t rx_buffer_data_bytes; + uint32_t tx_event_size; + uint32_t tx_buffer_size; + uint32_t tx_buffer_data_bytes; + uint32_t tx_fifo_queue_size; + uint32_t tx_fifo_queue_mode; + uint32_t tdc_offset; + uint32_t tdc_filter; + rt_bool_t tdc_enabled; }; +static void _fdcan_get_resource_config(FDCAN_Module *FDCANx, + const struct n32_fdcan_config *config, + struct n32_fdcan_resource_config *resource) +{ + RT_ASSERT(config != RT_NULL); + RT_ASSERT(config->Instance == FDCANx); + + resource->std_filter_size = config->std_filter_size; + resource->ext_filter_size = config->ext_filter_size; + resource->rx_fifo0_size = config->rx_fifo0_size; + resource->rx_fifo0_data_bytes = config->rx_fifo0_data_bytes; + resource->rx_fifo1_size = config->rx_fifo1_size; + resource->rx_fifo1_data_bytes = config->rx_fifo1_data_bytes; + resource->rx_buffer_size = config->rx_buffer_size; + resource->rx_buffer_data_bytes = config->rx_buffer_data_bytes; + resource->tx_event_size = config->tx_event_size; + resource->tx_buffer_size = config->tx_buffer_size; + resource->tx_buffer_data_bytes = config->tx_buffer_data_bytes; + resource->tx_fifo_queue_size = config->tx_fifo_queue_size; + resource->tx_fifo_queue_mode = config->tx_fifo_queue_mode; + resource->tdc_offset = config->tdc_offset; + resource->tdc_filter = config->tdc_filter; + resource->tdc_enabled = config->tdc_enabled; +} + +static uint32_t _fdcan_data_size_from_bytes(uint32_t bytes) +{ + switch (bytes) + { + case 8: + return FDCAN_DATA_BYTES_8; + case 12: + return FDCAN_DATA_BYTES_12; + case 16: + return FDCAN_DATA_BYTES_16; + case 20: + return FDCAN_DATA_BYTES_20; + case 24: + return FDCAN_DATA_BYTES_24; + case 32: + return FDCAN_DATA_BYTES_32; + case 48: + return FDCAN_DATA_BYTES_48; + case 64: + return FDCAN_DATA_BYTES_64; + default: + return 0; + } +} + +static rt_err_t _fdcan_validate_resource_config( + const struct n32_fdcan_resource_config *resource) +{ + if (resource->std_filter_size > 128 || resource->ext_filter_size > 64 || + resource->rx_fifo0_size < 1 || resource->rx_fifo0_size > 64 || + resource->rx_fifo1_size > 64 || resource->rx_buffer_size > 64 || + resource->tx_event_size > 32 || resource->tx_buffer_size < 1 || + resource->tx_buffer_size > 32 || resource->tx_fifo_queue_size > 31 || + resource->tx_buffer_size + resource->tx_fifo_queue_size > 32 || + resource->tdc_offset > 127 || resource->tdc_filter > 127 || + !FDCAN_IS_VALID_DATA_BYTES(resource->rx_fifo0_data_bytes) || + !FDCAN_IS_VALID_DATA_BYTES(resource->rx_fifo1_data_bytes) || + !FDCAN_IS_VALID_DATA_BYTES(resource->rx_buffer_data_bytes) || + !FDCAN_IS_VALID_DATA_BYTES(resource->tx_buffer_data_bytes)) + { + return -RT_EINVAL; + } + return RT_EOK; +} + +static uint32_t _fdcan_get_tx_buffer_mask(uint32_t count) +{ + return (count >= 32U) ? 0xFFFFFFFFU : ((1UL << count) - 1UL); +} + /*============================================================================== * FDCAN instance objects *============================================================================*/ #ifdef BSP_USING_FDCAN1 +static const struct n32_fdcan_config _fdcan1_config = FDCAN1_CONFIG; static struct n32_fdcan _drv_fdcan1 = { .name = "fdcan1", + .config = &_fdcan1_config, }; #endif #ifdef BSP_USING_FDCAN2 +static const struct n32_fdcan_config _fdcan2_config = FDCAN2_CONFIG; static struct n32_fdcan _drv_fdcan2 = { .name = "fdcan2", + .config = &_fdcan2_config, }; #endif #ifdef BSP_USING_FDCAN3 +static const struct n32_fdcan_config _fdcan3_config = FDCAN3_CONFIG; static struct n32_fdcan _drv_fdcan3 = { .name = "fdcan3", + .config = &_fdcan3_config, }; #endif -#ifdef BSP_USING_FDCAN4 +#if defined(SOC_SERIES_N32H7xx) && defined(BSP_USING_FDCAN4) +static const struct n32_fdcan_config _fdcan4_config = FDCAN4_CONFIG; static struct n32_fdcan _drv_fdcan4 = { .name = "fdcan4", + .config = &_fdcan4_config, }; #endif -#ifdef BSP_USING_FDCAN5 +#if defined(SOC_SERIES_N32H7xx) && defined(BSP_USING_FDCAN5) +static const struct n32_fdcan_config _fdcan5_config = FDCAN5_CONFIG; static struct n32_fdcan _drv_fdcan5 = { .name = "fdcan5", + .config = &_fdcan5_config, }; #endif -#ifdef BSP_USING_FDCAN6 +#if defined(SOC_SERIES_N32H7xx) && defined(BSP_USING_FDCAN6) +static const struct n32_fdcan_config _fdcan6_config = FDCAN6_CONFIG; static struct n32_fdcan _drv_fdcan6 = { .name = "fdcan6", + .config = &_fdcan6_config, }; #endif -#ifdef BSP_USING_FDCAN7 +#if defined(SOC_SERIES_N32H7xx) && defined(BSP_USING_FDCAN7) +static const struct n32_fdcan_config _fdcan7_config = FDCAN7_CONFIG; static struct n32_fdcan _drv_fdcan7 = { .name = "fdcan7", + .config = &_fdcan7_config, }; #endif -#ifdef BSP_USING_FDCAN8 +#if defined(SOC_SERIES_N32H7xx) && defined(BSP_USING_FDCAN8) +static const struct n32_fdcan_config _fdcan8_config = FDCAN8_CONFIG; static struct n32_fdcan _drv_fdcan8 = { .name = "fdcan8", + .config = &_fdcan8_config, }; #endif @@ -266,6 +380,7 @@ static uint32_t _get_data_baud_index(uint32_t baud_rate) * Instance index calculation *============================================================================*/ +#if defined(SOC_SERIES_N32H7xx) /** *\*\name _fdcan_get_index. *\*\fun Get the index of the specified FDCAN instance. @@ -312,6 +427,71 @@ static uint8_t _fdcan_get_index(FDCAN_Module *FDCANx) } return 7; /* FDCAN8 */ } +#endif + +static uint32_t _fdcan_get_required_ram_words(const FDCAN_InitType *init) +{ + return init->StdFilterSize + + init->ExtFilterSize * FDCAN_EXT_FILTER_WORDS + + init->RxFifo0Size * init->RxFifo0DataSize + + init->RxFifo1Size * init->RxFifo1DataSize + + init->RxBufferSize * init->RxBufferDataSize + + init->TxEventSize * FDCAN_TX_EVENT_FIFO_WORDS + + (init->TxBufferSize + init->TxFifoQueueSize) * init->TxBufferDataSize; +} + +#if defined(SOC_SERIES_N32H47x_48x) || defined(SOC_SERIES_N32H49x) +static uint32_t _fdcan_get_resource_ram_words( + const struct n32_fdcan_resource_config *resource) +{ + return resource->std_filter_size + + resource->ext_filter_size * FDCAN_EXT_FILTER_WORDS + + resource->rx_fifo0_size * _fdcan_data_size_from_bytes(resource->rx_fifo0_data_bytes) + + resource->rx_fifo1_size * _fdcan_data_size_from_bytes(resource->rx_fifo1_data_bytes) + + resource->rx_buffer_size * _fdcan_data_size_from_bytes(resource->rx_buffer_data_bytes) + + resource->tx_event_size * FDCAN_TX_EVENT_FIFO_WORDS + + (resource->tx_buffer_size + resource->tx_fifo_queue_size) * + _fdcan_data_size_from_bytes(resource->tx_buffer_data_bytes); +} + +static uint32_t _fdcan_get_msg_ram_offset(FDCAN_Module *FDCANx) +{ + struct n32_fdcan_resource_config resource; + uint32_t offset = 0; + +#ifdef BSP_USING_FDCAN1 + if (FDCANx == FDCAN1) + { + return offset; + } + _fdcan_get_resource_config(FDCAN1, _drv_fdcan1.config, &resource); + if (_fdcan_validate_resource_config(&resource) != RT_EOK) + { + return 0xFFFFFFFFU; + } + offset += _fdcan_get_resource_ram_words(&resource); +#endif +#ifdef BSP_USING_FDCAN2 + if (FDCANx == FDCAN2) + { + return offset; + } + _fdcan_get_resource_config(FDCAN2, _drv_fdcan2.config, &resource); + if (_fdcan_validate_resource_config(&resource) != RT_EOK) + { + return 0xFFFFFFFFU; + } + offset += _fdcan_get_resource_ram_words(&resource); +#endif +#ifdef BSP_USING_FDCAN3 + if (FDCANx == FDCAN3) + { + return offset; + } +#endif + return 0xFFFFFFFFU; +} +#endif /** *\*\name _fdcan_get_int0_irqn. @@ -334,6 +514,7 @@ static IRQn_Type _fdcan_get_int0_irqn(FDCAN_Module *FDCANx) { return FDCAN3_INT0_IRQn; } +#if defined(SOC_SERIES_N32H7xx) if (FDCANx == FDCAN4) { return FDCAN4_INT0_IRQn; @@ -351,6 +532,9 @@ static IRQn_Type _fdcan_get_int0_irqn(FDCAN_Module *FDCANx) return FDCAN7_INT0_IRQn; } return FDCAN8_INT0_IRQn; +#else + return FDCAN1_INT0_IRQn; +#endif } /** @@ -374,6 +558,7 @@ static IRQn_Type _fdcan_get_int1_irqn(FDCAN_Module *FDCANx) { return FDCAN3_INT1_IRQn; } +#if defined(SOC_SERIES_N32H7xx) if (FDCANx == FDCAN4) { return FDCAN4_INT1_IRQn; @@ -391,6 +576,9 @@ static IRQn_Type _fdcan_get_int1_irqn(FDCAN_Module *FDCANx) return FDCAN7_INT1_IRQn; } return FDCAN8_INT1_IRQn; +#else + return FDCAN1_INT1_IRQn; +#endif } /*============================================================================== @@ -409,6 +597,7 @@ static IRQn_Type _fdcan_get_int1_irqn(FDCAN_Module *FDCANx) static rt_err_t _fdcan_configure(struct rt_can_device *can, struct can_configure *cfg) { struct n32_fdcan *p_drv; + struct n32_fdcan_resource_config resource; ErrorStatus status; RT_ASSERT(can != RT_NULL); @@ -417,8 +606,19 @@ static rt_err_t _fdcan_configure(struct rt_can_device *can, struct can_configure p_drv = (struct n32_fdcan *)can->parent.user_data; RT_ASSERT(p_drv != RT_NULL); + _fdcan_get_resource_config(p_drv->fdcan_x, p_drv->config, &resource); + if (_fdcan_validate_resource_config(&resource) != RT_EOK) + { + LOG_E("%s: invalid Message RAM resource configuration", p_drv->name); + return -RT_EINVAL; + } + /* Fill FDCAN init parameters */ - p_drv->init_struct.FrameFormat = FDCAN_FRAME_FD_BRS; +#ifdef RT_CAN_USING_CANFD + p_drv->init_struct.FrameFormat = cfg->enable_canfd ? FDCAN_FRAME_FD_BRS : FDCAN_FRAME_CLASSIC; +#else + p_drv->init_struct.FrameFormat = FDCAN_FRAME_CLASSIC; +#endif p_drv->init_struct.Mode = FDCAN_MODE_NORMAL; p_drv->init_struct.AutoRetransmission = ENABLE; p_drv->init_struct.TransmitPause = DISABLE; @@ -483,47 +683,82 @@ static rt_err_t _fdcan_configure(struct rt_can_device *can, struct can_configure } #endif - /* Configure Message RAM: FDCAN1~4 use BANK1, FDCAN5~8 use BANK2 */ - uint32_t instance_idx = _fdcan_get_index(p_drv->fdcan_x); - if (instance_idx < 4) - { - p_drv->init_struct.MsgRamStrAddr = FDCAN_MSG_RAM_BASE1; - p_drv->init_struct.MsgRamOffset = instance_idx * FDCAN_MSG_RAM_OFFSET_PER_INSTANCE; - } - else - { - p_drv->init_struct.MsgRamStrAddr = FDCAN_MSG_RAM_BASE2; - p_drv->init_struct.MsgRamOffset = (instance_idx - 4) * FDCAN_MSG_RAM_OFFSET_PER_INSTANCE; - } - /* Filter configuration */ - p_drv->init_struct.StdFilterSize = 2; /* 2 standard ID filters */ - p_drv->init_struct.ExtFilterSize = 2; /* 2 extended ID filters */ + p_drv->init_struct.StdFilterSize = resource.std_filter_size; + p_drv->init_struct.ExtFilterSize = resource.ext_filter_size; /* RX FIFO0 configuration */ - p_drv->init_struct.RxFifo0Size = FDCAN_RX_FIFO0_SIZE; - p_drv->init_struct.RxFifo0DataSize = FDCAN_DATA_BYTES_64; + p_drv->init_struct.RxFifo0Size = resource.rx_fifo0_size; + p_drv->init_struct.RxFifo0DataSize = _fdcan_data_size_from_bytes(resource.rx_fifo0_data_bytes); - /* RX FIFO1 configuration (not used) */ - p_drv->init_struct.RxFifo1Size = 0; - p_drv->init_struct.RxFifo1DataSize = FDCAN_DATA_BYTES_64; + /* RX FIFO1 configuration */ + p_drv->init_struct.RxFifo1Size = resource.rx_fifo1_size; + p_drv->init_struct.RxFifo1DataSize = _fdcan_data_size_from_bytes(resource.rx_fifo1_data_bytes); - /* RX Buffer configuration (not used) */ - p_drv->init_struct.RxBufferSize = 0; - p_drv->init_struct.RxBufferDataSize = FDCAN_DATA_BYTES_64; + /* Dedicated RX Buffer configuration */ + p_drv->init_struct.RxBufferSize = resource.rx_buffer_size; + p_drv->init_struct.RxBufferDataSize = _fdcan_data_size_from_bytes(resource.rx_buffer_data_bytes); - /* TX Event FIFO configuration (not used) */ - p_drv->init_struct.TxEventSize = 0; + /* TX Event FIFO configuration */ + p_drv->init_struct.TxEventSize = resource.tx_event_size; - /* TX Buffer configuration: dedicated Tx Buffer mode */ - p_drv->init_struct.TxBufferSize = FDCAN_TX_BUF_NUM; - p_drv->init_struct.TxBufferDataSize = FDCAN_DATA_BYTES_64; - p_drv->init_struct.TxFifoQueueMode = FDCAN_TX_FIFO_MODE; - p_drv->init_struct.TxFifoQueueSize = 0; /* not using Tx FIFO, use Dedicated Tx Buffer */ + /* TX Buffer/FIFO/Queue configuration */ + p_drv->init_struct.TxBufferSize = resource.tx_buffer_size; + p_drv->init_struct.TxBufferDataSize = _fdcan_data_size_from_bytes(resource.tx_buffer_data_bytes); + p_drv->init_struct.TxFifoQueueMode = resource.tx_fifo_queue_mode; + p_drv->init_struct.TxFifoQueueSize = resource.tx_fifo_queue_size; /* Message RAM info pointer */ p_drv->init_struct.pMsgInfo = &p_drv->msg_ram; + /* Configure and validate the series-specific shared Message RAM. */ +#if defined(SOC_SERIES_N32H7xx) + { + uint32_t instance_idx = _fdcan_get_index(p_drv->fdcan_x); + uint32_t required_words = _fdcan_get_required_ram_words(&p_drv->init_struct); + + if (required_words > FDCAN_MSG_RAM_OFFSET_PER_INSTANCE) + { + LOG_E("%s: Message RAM needs %u words, slot has %u words", + p_drv->name, required_words, FDCAN_MSG_RAM_OFFSET_PER_INSTANCE); + return -RT_ENOMEM; + } + + if (instance_idx < 4) + { + p_drv->init_struct.MsgRamStrAddr = FDCAN_MSG_RAM_BASE1; + p_drv->init_struct.MsgRamOffset = instance_idx * FDCAN_MSG_RAM_OFFSET_PER_INSTANCE; + } + else + { + p_drv->init_struct.MsgRamStrAddr = FDCAN_MSG_RAM_BASE2; + p_drv->init_struct.MsgRamOffset = (instance_idx - 4) * FDCAN_MSG_RAM_OFFSET_PER_INSTANCE; + } + } +#elif defined(SOC_SERIES_N32H47x_48x) || defined(SOC_SERIES_N32H49x) + { + uint32_t offset = _fdcan_get_msg_ram_offset(p_drv->fdcan_x); + uint32_t required_words = _fdcan_get_required_ram_words(&p_drv->init_struct); + + if (offset == 0xFFFFFFFFU) + { + LOG_E("%s: invalid FDCAN instance", p_drv->name); + return -RT_ERROR; + } + + if (offset + required_words > BSP_FDCAN_MSG_RAM_WORDS) + { + LOG_E("%s: Message RAM range [%u, %u) exceeds %u words", + p_drv->name, offset, offset + required_words, + BSP_FDCAN_MSG_RAM_WORDS); + return -RT_ENOMEM; + } + + p_drv->init_struct.MsgRamStrAddr = (uint32_t)_fdcan_msg_ram; + p_drv->init_struct.MsgRamOffset = offset; + } +#endif + /* Stop FDCAN before re-initializing (needed for mode/baud changes) */ FDCAN_Stop(p_drv->fdcan_x); @@ -532,7 +767,7 @@ static rt_err_t _fdcan_configure(struct rt_can_device *can, struct can_configure * on every reconfigure. FDCAN_AbortTxRequest() is asynchronous - poll * TXBRP until it actually clears before continuing. */ { - rt_uint32_t cancel_mask = FDCAN_TX_BUFFER0 | FDCAN_TX_BUFFER1 | FDCAN_TX_BUFFER2; + rt_uint32_t cancel_mask = _fdcan_get_tx_buffer_mask(resource.tx_buffer_size); volatile uint32_t timeout = 1000000; FDCAN_AbortTxRequest(p_drv->fdcan_x, cancel_mask); while ((p_drv->fdcan_x->TXBRP & cancel_mask) && --timeout) @@ -549,11 +784,13 @@ static rt_err_t _fdcan_configure(struct rt_can_device *can, struct can_configure return -RT_ERROR; } -#ifdef RT_CAN_USING_CANFD +#if defined(RT_CAN_USING_CANFD) /* Configure and enable Transmitter Delay Compensation (TDC) */ - if (cfg->enable_canfd) + if (cfg->enable_canfd && resource.tdc_enabled) { - FDCAN_ConfigTxDelayCompensation(p_drv->fdcan_x, 0x0C, 0x00); + FDCAN_ConfigTxDelayCompensation(p_drv->fdcan_x, + resource.tdc_offset, + resource.tdc_filter); FDCAN_EnableTxDelayCompensation(p_drv->fdcan_x); } #endif @@ -565,14 +802,18 @@ static rt_err_t _fdcan_configure(struct rt_can_device *can, struct can_configure FDCAN_FILTER_STD_REMOTE, FDCAN_FILTER_EXT_REMOTE); - /* Apply default filter */ - FDCAN_ConfigFilter(p_drv->fdcan_x, &p_drv->filter_cfg); + /* Apply default filter when at least one standard filter is allocated. */ + if (p_drv->init_struct.StdFilterSize > 0) + { + FDCAN_ConfigFilter(p_drv->fdcan_x, &p_drv->filter_cfg); + } /* Configure RX FIFO0 as Overwrite mode */ FDCAN_ConfigRxFifoMode(p_drv->fdcan_x, FDCAN_RX_FIFO0, FDCAN_RX_FIFO_OVERWRITE); /* Configure RX FIFO0 watermark */ - FDCAN_ConfigFifoWatermark(p_drv->fdcan_x, FDCAN_RX_FIFO0, FDCAN_RX_FIFO0_WATERMARK); + FDCAN_ConfigFifoWatermark(p_drv->fdcan_x, FDCAN_RX_FIFO0, + (resource.rx_fifo0_size > 1U) ? (resource.rx_fifo0_size / 2U) : 1U); /* Enable RX FIFO0 New Message interrupt (INT0) */ FDCAN_ConfigIntLine(p_drv->fdcan_x, FDCAN_INT_RX_FIFO0_NEW_MESSAGE, FDCAN_INTERRUPT_LINE0); @@ -592,6 +833,10 @@ static rt_err_t _fdcan_configure(struct rt_can_device *can, struct can_configure /* Start FDCAN */ FDCAN_Start(p_drv->fdcan_x); + /* RT_DEVICE_CTRL_CONFIG bypasses the CAN framework's field-by-field + * setters, so keep the device's configuration snapshot synchronized. */ + p_drv->device.config = *cfg; + LOG_I("%s: configured, baud=%d, mode=%d", p_drv->name, cfg->baud_rate, cfg->mode); return RT_EOK; @@ -720,7 +965,7 @@ static rt_err_t _fdcan_control(struct rt_can_device *can, int cmd, void *arg) FDCAN_INTERRUPT_LINE1); /* Activate TX Complete interrupt for each dedicated TX Buffer */ FDCAN_ActivateInt(p_drv->fdcan_x, FDCAN_INT_TX_COMPLETE, - FDCAN_TX_BUFFER0 | FDCAN_TX_BUFFER1 | FDCAN_TX_BUFFER2); + _fdcan_get_tx_buffer_mask(p_drv->init_struct.TxBufferSize)); NVIC_SetPriority(_fdcan_get_int1_irqn(p_drv->fdcan_x), 2); NVIC_EnableIRQ(_fdcan_get_int1_irqn(p_drv->fdcan_x)); } @@ -745,10 +990,20 @@ static rt_err_t _fdcan_control(struct rt_can_device *can, int cmd, void *arg) break; case RT_CAN_CMD_SET_FILTER: +#if defined(SOC_SERIES_N32H47x_48x) || defined(SOC_SERIES_N32H49x) + /* Filter changes follow the same Stop/Init/Start re-init rule. */ + if (_fdcan_configure(&p_drv->device, &p_drv->device.config) != RT_EOK) + { + return -RT_ERROR; + } +#endif if (RT_NULL == arg) { /* Restore default filter */ - FDCAN_ConfigFilter(p_drv->fdcan_x, &p_drv->filter_cfg); + if (p_drv->init_struct.StdFilterSize > 0) + { + FDCAN_ConfigFilter(p_drv->fdcan_x, &p_drv->filter_cfg); + } } else { @@ -768,6 +1023,12 @@ static rt_err_t _fdcan_control(struct rt_can_device *can, int cmd, void *arg) } if (argval != p_drv->device.config.mode) { +#if defined(SOC_SERIES_N32H47x_48x) || defined(SOC_SERIES_N32H49x) + struct can_configure new_config = p_drv->device.config; + + new_config.mode = argval; + return _fdcan_configure(&p_drv->device, &new_config); +#else /* Direct CCCR register modification for mode change * (avoids full FDCAN_Stop+Init re-init which can fail) */ FDCAN_Module *fdcan = p_drv->fdcan_x; @@ -776,7 +1037,7 @@ static rt_err_t _fdcan_control(struct rt_can_device *can, int cmd, void *arg) * (see _fdcan_configure() for the same pattern); the abort is * asynchronous, so poll TXBRP until it actually clears. */ { - rt_uint32_t cm = FDCAN_TX_BUFFER0 | FDCAN_TX_BUFFER1 | FDCAN_TX_BUFFER2; + rt_uint32_t cm = _fdcan_get_tx_buffer_mask(p_drv->init_struct.TxBufferSize); volatile uint32_t to = 1000000; FDCAN_AbortTxRequest(fdcan, cm); while ((fdcan->TXBRP & cm) && --to) @@ -819,6 +1080,7 @@ static rt_err_t _fdcan_control(struct rt_can_device *can, int cmd, void *arg) while (fdcan->CCCR & FDCAN_CCCR_INIT); p_drv->device.config.mode = argval; LOG_I("%s: mode changed to %d", p_drv->name, argval); +#endif } break; @@ -830,8 +1092,10 @@ static rt_err_t _fdcan_control(struct rt_can_device *can, int cmd, void *arg) } if (argval != p_drv->device.config.baud_rate) { - p_drv->device.config.baud_rate = argval; - return _fdcan_configure(&p_drv->device, &p_drv->device.config); + struct can_configure new_config = p_drv->device.config; + + new_config.baud_rate = argval; + return _fdcan_configure(&p_drv->device, &new_config); } break; @@ -867,8 +1131,10 @@ static rt_err_t _fdcan_control(struct rt_can_device *can, int cmd, void *arg) } if (argval != p_drv->device.config.baud_rate_fd) { - p_drv->device.config.baud_rate_fd = argval; - return _fdcan_configure(&p_drv->device, &p_drv->device.config); + struct can_configure new_config = p_drv->device.config; + + new_config.baud_rate_fd = argval; + return _fdcan_configure(&p_drv->device, &new_config); } #endif } @@ -893,7 +1159,7 @@ static rt_err_t _fdcan_control(struct rt_can_device *can, int cmd, void *arg) *\*\param buf : *\*\ Pointer to the CAN message to be sent *\*\param box_no : - *\*\ TX Buffer index (0 ~ FDCAN_TX_BUF_NUM-1) + *\*\ TX Buffer index (0 ~ configured TxBufferSize-1) *\*\return RT_EOK on success, or negative error code on failure */ static rt_ssize_t _fdcan_sendmsg(struct rt_can_device *can, const void *buf, rt_uint32_t box_no) @@ -1093,7 +1359,7 @@ static rt_ssize_t _fdcan_sendmsg_nonblocking(struct rt_can_device *can, const vo RT_ASSERT(p_drv != RT_NULL); /* Scan dedicated TX Buffers for a free one */ - for (rt_uint32_t i = 0; i < FDCAN_TX_BUF_NUM; i++) + for (rt_uint32_t i = 0; i < p_drv->init_struct.TxBufferSize; i++) { if (FDCAN_CheckTxBufRequest(p_drv->fdcan_x, FDCAN_TX_BUFFER0 << i) == RESET) { @@ -1205,7 +1471,7 @@ static void _fdcan_int1_isr(struct n32_fdcan *p_drv) rt_uint32_t buffer_idx = 0; rt_bool_t found = RT_FALSE; - for (rt_uint32_t i = 0; i < FDCAN_TX_BUF_NUM; i++) + for (rt_uint32_t i = 0; i < p_drv->init_struct.TxBufferSize; i++) { rt_uint32_t bit = FDCAN_TX_BUFFER0 << i; if ((p_drv->tx_pending_mask & bit) && !(fdcan->TXBRP & bit)) @@ -1222,7 +1488,7 @@ static void _fdcan_int1_isr(struct n32_fdcan *p_drv) * dropping the event. */ if (!found) { - for (rt_uint32_t i = 0; i < FDCAN_TX_BUF_NUM; i++) + for (rt_uint32_t i = 0; i < p_drv->init_struct.TxBufferSize; i++) { rt_uint32_t bit = FDCAN_TX_BUFFER0 << i; if (p_drv->tx_pending_mask & bit) @@ -1258,7 +1524,7 @@ static void _fdcan_int1_isr(struct n32_fdcan *p_drv) /* PSR.BO == 1 means this IR.BO edge is a Bus-Off *entry*; == 0 * would mean leaving Bus-Off (recovery is kicked off separately * by the ARB_PROTOCOL_ERROR branch below). */ - for (rt_uint32_t i = 0; i < FDCAN_TX_BUF_NUM; i++) + for (rt_uint32_t i = 0; i < p_drv->init_struct.TxBufferSize; i++) { rt_uint32_t bit = FDCAN_TX_BUFFER0 << i; if (p_drv->tx_pending_mask & bit) @@ -1368,7 +1634,7 @@ void FDCAN3_INT1_IRQHandler(void) } #endif /* BSP_USING_FDCAN3 */ -#ifdef BSP_USING_FDCAN4 +#if defined(SOC_SERIES_N32H7xx) && defined(BSP_USING_FDCAN4) void FDCAN4_INT0_IRQHandler(void) { rt_interrupt_enter(); @@ -1384,7 +1650,7 @@ void FDCAN4_INT1_IRQHandler(void) } #endif /* BSP_USING_FDCAN4 */ -#ifdef BSP_USING_FDCAN5 +#if defined(SOC_SERIES_N32H7xx) && defined(BSP_USING_FDCAN5) void FDCAN5_INT0_IRQHandler(void) { rt_interrupt_enter(); @@ -1400,7 +1666,7 @@ void FDCAN5_INT1_IRQHandler(void) } #endif /* BSP_USING_FDCAN5 */ -#ifdef BSP_USING_FDCAN6 +#if defined(SOC_SERIES_N32H7xx) && defined(BSP_USING_FDCAN6) void FDCAN6_INT0_IRQHandler(void) { rt_interrupt_enter(); @@ -1416,7 +1682,7 @@ void FDCAN6_INT1_IRQHandler(void) } #endif /* BSP_USING_FDCAN6 */ -#ifdef BSP_USING_FDCAN7 +#if defined(SOC_SERIES_N32H7xx) && defined(BSP_USING_FDCAN7) void FDCAN7_INT0_IRQHandler(void) { rt_interrupt_enter(); @@ -1432,7 +1698,7 @@ void FDCAN7_INT1_IRQHandler(void) } #endif /* BSP_USING_FDCAN7 */ -#ifdef BSP_USING_FDCAN8 +#if defined(SOC_SERIES_N32H7xx) && defined(BSP_USING_FDCAN8) void FDCAN8_INT0_IRQHandler(void) { rt_interrupt_enter(); @@ -1464,12 +1730,13 @@ void FDCAN8_INT1_IRQHandler(void) static int rt_hw_fdcan_init(void) { struct can_configure config; + struct n32_fdcan_resource_config resource; FDCAN_FilterType default_filter; /* Default CAN configuration */ config.baud_rate = CAN1MBaud; config.msgboxsz = RT_CANMSG_BOX_SZ; - config.sndboxnumber = FDCAN_TX_BUF_NUM; + config.sndboxnumber = 1; config.mode = RT_CAN_MODE_NORMAL; config.privmode = RT_CAN_MODE_NOPRIV; config.ticks = 50; @@ -1490,7 +1757,23 @@ static int rt_hw_fdcan_init(void) default_filter.FilterID2 = 0x000; default_filter.RxBufferIndex = 0; +#if defined(SOC_SERIES_N32H47x_48x) + /* RCC_Configuration() selects the kernel clock; enable APB gating here. */ + RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_FDCAN1 | + RCC_APB1_PERIPH_FDCAN2 | + RCC_APB1_PERIPH_FDCAN3, + ENABLE); +#elif defined(SOC_SERIES_N32H49x) + /* RCC_Configuration() selects the kernel clock; enable APB gating here. */ + RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPHEN_FDCAN1 | + RCC_APB1_PERIPHEN_FDCAN2 | + RCC_APB1_PERIPHEN_FDCAN3, + ENABLE); +#endif + #ifdef BSP_USING_FDCAN1 + _fdcan_get_resource_config(FDCAN1, _drv_fdcan1.config, &resource); + config.sndboxnumber = resource.tx_buffer_size; _drv_fdcan1.fdcan_x = FDCAN1; _drv_fdcan1.filter_cfg = default_filter; _drv_fdcan1.device.config = config; @@ -1499,6 +1782,8 @@ static int rt_hw_fdcan_init(void) #endif #ifdef BSP_USING_FDCAN2 + _fdcan_get_resource_config(FDCAN2, _drv_fdcan2.config, &resource); + config.sndboxnumber = resource.tx_buffer_size; _drv_fdcan2.fdcan_x = FDCAN2; _drv_fdcan2.filter_cfg = default_filter; _drv_fdcan2.device.config = config; @@ -1507,6 +1792,8 @@ static int rt_hw_fdcan_init(void) #endif #ifdef BSP_USING_FDCAN3 + _fdcan_get_resource_config(FDCAN3, _drv_fdcan3.config, &resource); + config.sndboxnumber = resource.tx_buffer_size; _drv_fdcan3.fdcan_x = FDCAN3; _drv_fdcan3.filter_cfg = default_filter; _drv_fdcan3.device.config = config; @@ -1514,7 +1801,9 @@ static int rt_hw_fdcan_init(void) LOG_I("FDCAN3 registered"); #endif -#ifdef BSP_USING_FDCAN4 +#if defined(SOC_SERIES_N32H7xx) && defined(BSP_USING_FDCAN4) + _fdcan_get_resource_config(FDCAN4, _drv_fdcan4.config, &resource); + config.sndboxnumber = resource.tx_buffer_size; _drv_fdcan4.fdcan_x = FDCAN4; _drv_fdcan4.filter_cfg = default_filter; _drv_fdcan4.device.config = config; @@ -1522,7 +1811,9 @@ static int rt_hw_fdcan_init(void) LOG_I("FDCAN4 registered"); #endif -#ifdef BSP_USING_FDCAN5 +#if defined(SOC_SERIES_N32H7xx) && defined(BSP_USING_FDCAN5) + _fdcan_get_resource_config(FDCAN5, _drv_fdcan5.config, &resource); + config.sndboxnumber = resource.tx_buffer_size; _drv_fdcan5.fdcan_x = FDCAN5; _drv_fdcan5.filter_cfg = default_filter; _drv_fdcan5.device.config = config; @@ -1530,7 +1821,9 @@ static int rt_hw_fdcan_init(void) LOG_I("FDCAN5 registered"); #endif -#ifdef BSP_USING_FDCAN6 +#if defined(SOC_SERIES_N32H7xx) && defined(BSP_USING_FDCAN6) + _fdcan_get_resource_config(FDCAN6, _drv_fdcan6.config, &resource); + config.sndboxnumber = resource.tx_buffer_size; _drv_fdcan6.fdcan_x = FDCAN6; _drv_fdcan6.filter_cfg = default_filter; _drv_fdcan6.device.config = config; @@ -1538,7 +1831,9 @@ static int rt_hw_fdcan_init(void) LOG_I("FDCAN6 registered"); #endif -#ifdef BSP_USING_FDCAN7 +#if defined(SOC_SERIES_N32H7xx) && defined(BSP_USING_FDCAN7) + _fdcan_get_resource_config(FDCAN7, _drv_fdcan7.config, &resource); + config.sndboxnumber = resource.tx_buffer_size; _drv_fdcan7.fdcan_x = FDCAN7; _drv_fdcan7.filter_cfg = default_filter; _drv_fdcan7.device.config = config; @@ -1546,7 +1841,9 @@ static int rt_hw_fdcan_init(void) LOG_I("FDCAN7 registered"); #endif -#ifdef BSP_USING_FDCAN8 +#if defined(SOC_SERIES_N32H7xx) && defined(BSP_USING_FDCAN8) + _fdcan_get_resource_config(FDCAN8, _drv_fdcan8.config, &resource); + config.sndboxnumber = resource.tx_buffer_size; _drv_fdcan8.fdcan_x = FDCAN8; _drv_fdcan8.filter_cfg = default_filter; _drv_fdcan8.device.config = config; diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_fdcan.h b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_fdcan.h index 4b7e676825d..4e49c31d276 100644 --- a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_fdcan.h +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_fdcan.h @@ -6,14 +6,16 @@ * Change Logs: * Date Author Notes * 2026-06-22 ox-horse first version - N32H7xx FDCAN driver + * 2026-08-05 ox-horse add N32H47x/48x support + * 2026-08-06 ox-horse add N32H49x support */ #ifndef __DRV_FDCAN_H__ #define __DRV_FDCAN_H__ +#include #include #include -#include #ifdef __cplusplus extern "C" { @@ -27,9 +29,9 @@ struct n32_fdcan_arb_timing { uint32_t baud_rate; /**< baud rate in bps */ uint16_t prescaler; /**< prescaler (1~512) */ - uint8_t sjw; /**< synchronization jump width (1~128) */ + uint8_t sjw; /**< synchronization jump width (1~128) */ uint16_t tseg1; /**< time segment 1 (2~256) */ - uint8_t tseg2; /**< time segment 2 (2~128) */ + uint8_t tseg2; /**< time segment 2 (2~128) */ }; /** @@ -40,27 +42,30 @@ struct n32_fdcan_data_timing { uint32_t baud_rate; /**< data phase baud rate in bps */ uint16_t prescaler; /**< data phase prescaler (1~32) */ - uint8_t sjw; /**< data phase synchronization jump width (1~16) */ + uint8_t sjw; /**< data phase synchronization jump width (1~16) */ uint16_t tseg1; /**< data phase time segment 1 (1~32) */ - uint8_t tseg2; /**< data phase time segment 2 (1~16) */ + uint8_t tseg2; /**< data phase time segment 2 (1~16) */ }; +struct n32_fdcan_config; + /** *\*\name n32_fdcan. *\*\brief N32 FDCAN device structure. *\*\note GPIO pin initialization is handled by CubeMX-generated code - *\*\ in n32h7xx_cfg.c. This driver only handles peripheral configuration. + *\*\ in Cube-generated board code. This driver only handles peripheral configuration. */ struct n32_fdcan { - const char *name; /**< device name */ - FDCAN_Module *fdcan_x; /**< FDCAN peripheral base address (FDCAN1~FDCAN8) */ - FDCAN_InitType init_struct; /**< FDCAN init parameters */ - FDCAN_MsgRamType msg_ram; /**< Message RAM block config */ - FDCAN_FilterType filter_cfg; /**< default filter configuration */ - FDCAN_TxHeaderType tx_header; /**< TX header cache */ - FDCAN_RxHeaderType rx_header; /**< RX header cache */ - rt_uint32_t tx_pending_mask; /**< software mask of TX buffers with a pending request + const char *name; /**< device name */ + const struct n32_fdcan_config *config; /**< instance resource configuration */ + FDCAN_Module *fdcan_x; /**< FDCAN peripheral base address */ + FDCAN_InitType init_struct; /**< FDCAN init parameters */ + FDCAN_MsgRamType msg_ram; /**< Message RAM block config */ + FDCAN_FilterType filter_cfg; /**< default filter configuration */ + FDCAN_TxHeaderType tx_header; /**< TX header cache */ + FDCAN_RxHeaderType rx_header; /**< RX header cache */ + rt_uint32_t tx_pending_mask; /**< software mask of TX buffers with a pending request (FDCAN_TX_BUFFER0< +#include + +#ifdef BSP_USING_ON_CHIP_FLASH + +#include +#include "drv_flash_h47x_48x.h" +#include "n32h47x_48x_flash.h" +#include "n32h47x_48x_rcc.h" + +#ifdef RT_USING_FAL +#include +#endif + +#define LOG_TAG "drv.flash" +#include + +#define N32_FLASH_PAGE_SIZE ((rt_uint32_t)0x2000U) +#define N32_FLASH_PROGRAM_SIZE ((rt_uint32_t)0x0008U) + +static struct rt_mutex _flash_mutex; + +static rt_bool_t n32_flash_range_is_valid(rt_uint32_t addr, size_t size) +{ + if ((size == 0U) || (addr < N32_FLASH_START_ADRESS) || + (addr >= N32_FLASH_END_ADDRESS)) + { + return RT_FALSE; + } + + if (size > (size_t)(N32_FLASH_END_ADDRESS - addr)) + { + return RT_FALSE; + } + + return RT_TRUE; +} + +static rt_err_t n32_flash_prepare(void) +{ + RCC_EnableHsi(ENABLE); + if (RCC_WaitHsiStable() != SUCCESS) + { + LOG_E("HSI is not ready"); + return -RT_ERROR; + } + + FLASH_Unlock(); + if (Flash_GetLockStatus() != RESET) + { + LOG_E("unlock failed"); + return -RT_ERROR; + } + + return RT_EOK; +} + +static int n32_flash_lock_take(void) +{ + if (rt_mutex_take(&_flash_mutex, RT_WAITING_FOREVER) != RT_EOK) + { + return -RT_EBUSY; + } + + return RT_EOK; +} + +int n32_flash_read(rt_uint32_t addr, rt_uint8_t *buf, size_t size) +{ + int result; + + if ((buf == RT_NULL) || !n32_flash_range_is_valid(addr, size)) + { + LOG_E("invalid read: addr=0x%08x, size=%u", addr, (unsigned int)size); + return -RT_EINVAL; + } + + result = n32_flash_lock_take(); + if (result != RT_EOK) + { + return result; + } + + rt_memcpy(buf, (const void *)addr, size); + rt_mutex_release(&_flash_mutex); + + return (int)size; +} + +int n32_flash_write(rt_uint32_t addr, const rt_uint8_t *buf, size_t size) +{ + FLASH_STS status; + rt_uint32_t data[2]; + rt_uint32_t write_addr; + size_t offset; + size_t i; + int result; + + if ((buf == RT_NULL) || !n32_flash_range_is_valid(addr, size) || + ((addr & (N32_FLASH_PROGRAM_SIZE - 1U)) != 0U) || + ((size & (N32_FLASH_PROGRAM_SIZE - 1U)) != 0U)) + { + LOG_E("invalid write: addr=0x%08x, size=%u", addr, (unsigned int)size); + return -RT_EINVAL; + } + + result = n32_flash_lock_take(); + if (result != RT_EOK) + { + return result; + } + + for (i = 0; i < size; i++) + { + if (*(const rt_uint8_t *)(addr + i) != 0xFFU) + { + LOG_E("write target is not erased: addr=0x%08x", addr + (rt_uint32_t)i); + result = -RT_ERROR; + goto __exit; + } + } + + result = n32_flash_prepare(); + if (result != RT_EOK) + { + goto __exit; + } + + for (offset = 0; offset < size; offset += N32_FLASH_PROGRAM_SIZE) + { + write_addr = addr + (rt_uint32_t)offset; + rt_memcpy(data, buf + offset, sizeof(data)); + + status = FLASH_ProgramdoubleWord(write_addr, data[0], data[1]); + if (status != FLASH_EOP) + { + LOG_E("program failed: addr=0x%08x, status=%d", write_addr, status); + result = -RT_ERROR; + goto __lock_exit; + } + + if (rt_memcmp((const void *)write_addr, buf + offset, + N32_FLASH_PROGRAM_SIZE) != 0) + { + LOG_E("verify failed: addr=0x%08x", write_addr); + result = -RT_ERROR; + goto __lock_exit; + } + } + + result = (int)size; + +__lock_exit: + FLASH_Lock(); +__exit: + rt_mutex_release(&_flash_mutex); + return result; +} + +int n32_flash_erase(rt_uint32_t addr, size_t size) +{ + FLASH_STS status; + rt_uint32_t erase_addr; + rt_uint32_t end_addr; + int result; + + if (!n32_flash_range_is_valid(addr, size)) + { + LOG_E("invalid erase: addr=0x%08x, size=%u", addr, (unsigned int)size); + return -RT_EINVAL; + } + + result = n32_flash_lock_take(); + if (result != RT_EOK) + { + return result; + } + + result = n32_flash_prepare(); + if (result != RT_EOK) + { + goto __exit; + } + + erase_addr = addr & ~(N32_FLASH_PAGE_SIZE - 1U); + end_addr = addr + (rt_uint32_t)size; + + while (erase_addr < end_addr) + { + status = FLASH_EraseOnePage(erase_addr); + if (status != FLASH_EOP) + { + LOG_E("erase failed: addr=0x%08x, status=%d", erase_addr, status); + result = -RT_ERROR; + goto __lock_exit; + } + + erase_addr += N32_FLASH_PAGE_SIZE; + } + + result = (int)size; + +__lock_exit: + FLASH_Lock(); +__exit: + rt_mutex_release(&_flash_mutex); + return result; +} + +static int n32_flash_init(void) +{ + return rt_mutex_init(&_flash_mutex, "flash", RT_IPC_FLAG_PRIO); +} +INIT_DEVICE_EXPORT(n32_flash_init); + +#ifdef RT_USING_FAL + +static int fal_flash_read(long offset, rt_uint8_t *buf, size_t size); +static int fal_flash_write(long offset, const rt_uint8_t *buf, size_t size); +static int fal_flash_erase(long offset, size_t size); + +const struct fal_flash_dev n32_onchip_flash = { + "onchip_flash", + N32_FLASH_START_ADRESS, + N32_FLASH_SIZE, + N32_FLASH_PAGE_SIZE, + { RT_NULL, fal_flash_read, fal_flash_write, fal_flash_erase } +}; + +static int fal_flash_read(long offset, rt_uint8_t *buf, size_t size) +{ + return n32_flash_read(n32_onchip_flash.addr + offset, buf, size); +} + +static int fal_flash_write(long offset, const rt_uint8_t *buf, size_t size) +{ + return n32_flash_write(n32_onchip_flash.addr + offset, buf, size); +} + +static int fal_flash_erase(long offset, size_t size) +{ + return n32_flash_erase(n32_onchip_flash.addr + offset, size); +} + +#endif /* RT_USING_FAL */ + +#endif /* BSP_USING_ON_CHIP_FLASH */ diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_flash/drv_flash_h47x_48x.h b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_flash/drv_flash_h47x_48x.h new file mode 100644 index 00000000000..d6c85fc6127 --- /dev/null +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_flash/drv_flash_h47x_48x.h @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2006-2026, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2026-08-06 li.mengmeng implement for N32H47x/48x + */ + +#ifndef __DRV_FLASH_H47X_48X_H__ +#define __DRV_FLASH_H47X_48X_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +int n32_flash_read(rt_uint32_t addr, rt_uint8_t *buf, size_t size); +int n32_flash_write(rt_uint32_t addr, const rt_uint8_t *buf, size_t size); +int n32_flash_erase(rt_uint32_t addr, size_t size); + +#ifdef __cplusplus +} +#endif + +#endif /* __DRV_FLASH_H47X_48X_H__ */ diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_flash/drv_flash_h49x.c b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_flash/drv_flash_h49x.c new file mode 100644 index 00000000000..b899e606de6 --- /dev/null +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_flash/drv_flash_h49x.c @@ -0,0 +1,315 @@ +/* + * Copyright (c) 2006-2026, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2026-08-07 li.mengmeng implement for N32H49x dual-bank mode + */ + +#include +#include + +#ifdef BSP_USING_ON_CHIP_FLASH + +#include +#include "drv_flash_h49x.h" +#include "n32h49x_flash.h" +#include "n32h49x_rcc.h" + +#ifdef RT_USING_FAL +#include +#endif + +#define LOG_TAG "drv.flash" +#include + +#define N32_FLASH_PAGE_SIZE ((rt_uint32_t)0x2000U) +#define N32_FLASH_PROGRAM_SIZE ((rt_uint32_t)0x0008U) + +static struct rt_mutex _flash_mutex; + +static rt_bool_t n32_flash_range_is_valid(rt_uint32_t addr, size_t size) +{ + if ((size == 0U) || (addr < N32_FLASH_START_ADRESS) || + (addr >= N32_FLASH_END_ADDRESS)) + { + return RT_FALSE; + } + + if (size > (size_t)(N32_FLASH_END_ADDRESS - addr)) + { + return RT_FALSE; + } + + return RT_TRUE; +} + +static rt_bool_t n32_flash_dual_bank_is_active(void) +{ + return FLASH_GetFlagSTS(FLASH_FLAG_BANKMODE) == SET ? RT_TRUE : RT_FALSE; +} + +static rt_bool_t n32_flash_dcache_suspend(void) +{ + rt_bool_t enabled; + + enabled = (FLASH->AC & FLASH_AC_DCAHEN) != 0U ? RT_TRUE : RT_FALSE; + if (enabled) + { + FLASH_DCacheCmd(FLASH_DCache_DIS); + FLASH_DCacheRST(); + } + + return enabled; +} + +static void n32_flash_dcache_restore(rt_bool_t enabled) +{ + if (enabled) + { + FLASH_DCacheRST(); + FLASH_DCacheCmd(FLASH_DCache_EN); + } +} + +static rt_err_t n32_flash_prepare(void) +{ + RCC_EnableHsi(ENABLE); + if (RCC_WaitHsiStable() != SUCCESS) + { + LOG_E("HSI is not ready"); + return -RT_ERROR; + } + + FLASH_Unlock(); + if (Flash_GetLockStatus() != RESET) + { + LOG_E("unlock failed"); + return -RT_ERROR; + } + + return RT_EOK; +} + +static int n32_flash_lock_take(void) +{ + if (rt_mutex_take(&_flash_mutex, RT_WAITING_FOREVER) != RT_EOK) + { + return -RT_EBUSY; + } + + return RT_EOK; +} + +int n32_flash_read(rt_uint32_t addr, rt_uint8_t *buf, size_t size) +{ + rt_bool_t dcache_enabled; + int result; + + if ((buf == RT_NULL) || !n32_flash_range_is_valid(addr, size)) + { + LOG_E("invalid read: addr=0x%08x, size=%u", addr, (unsigned int)size); + return -RT_EINVAL; + } + + result = n32_flash_lock_take(); + if (result != RT_EOK) + { + return result; + } + + dcache_enabled = n32_flash_dcache_suspend(); + rt_memcpy(buf, (const void *)addr, size); + n32_flash_dcache_restore(dcache_enabled); + rt_mutex_release(&_flash_mutex); + + return (int)size; +} + +int n32_flash_write(rt_uint32_t addr, const rt_uint8_t *buf, size_t size) +{ + FLASH_STS status; + rt_uint32_t data[2]; + rt_uint32_t write_addr; + rt_bool_t dcache_enabled; + size_t offset; + size_t i; + int result; + + if ((buf == RT_NULL) || !n32_flash_range_is_valid(addr, size) || + ((addr & (N32_FLASH_PROGRAM_SIZE - 1U)) != 0U) || + ((size & (N32_FLASH_PROGRAM_SIZE - 1U)) != 0U)) + { + LOG_E("invalid write: addr=0x%08x, size=%u", addr, (unsigned int)size); + return -RT_EINVAL; + } + + if (!n32_flash_dual_bank_is_active()) + { + LOG_E("write rejected: Flash is not in dual-bank mode"); + return -RT_ERROR; + } + + result = n32_flash_lock_take(); + if (result != RT_EOK) + { + return result; + } + + dcache_enabled = n32_flash_dcache_suspend(); + + for (i = 0; i < size; i++) + { + if (*(const rt_uint8_t *)(addr + i) != 0xFFU) + { + LOG_E("write target is not erased: addr=0x%08x", addr + (rt_uint32_t)i); + result = -RT_ERROR; + goto __exit; + } + } + + result = n32_flash_prepare(); + if (result != RT_EOK) + { + goto __exit; + } + + for (offset = 0; offset < size; offset += N32_FLASH_PROGRAM_SIZE) + { + write_addr = addr + (rt_uint32_t)offset; + rt_memcpy(data, buf + offset, sizeof(data)); + + status = FLASH_ProgramdoubleWord(write_addr, data[0], data[1]); + if (status != FLASH_EOP) + { + LOG_E("program failed: addr=0x%08x, status=%d", write_addr, status); + result = -RT_ERROR; + goto __lock_exit; + } + + if (rt_memcmp((const void *)write_addr, buf + offset, + N32_FLASH_PROGRAM_SIZE) != 0) + { + LOG_E("verify failed: addr=0x%08x", write_addr); + result = -RT_ERROR; + goto __lock_exit; + } + } + + result = (int)size; + +__lock_exit: + FLASH_Lock(); +__exit: + n32_flash_dcache_restore(dcache_enabled); + rt_mutex_release(&_flash_mutex); + return result; +} + +int n32_flash_erase(rt_uint32_t addr, size_t size) +{ + FLASH_STS status; + rt_uint32_t erase_addr; + rt_uint32_t end_addr; + rt_bool_t dcache_enabled; + int result; + + if (!n32_flash_range_is_valid(addr, size)) + { + LOG_E("invalid erase: addr=0x%08x, size=%u", addr, (unsigned int)size); + return -RT_EINVAL; + } + + if (!n32_flash_dual_bank_is_active()) + { + LOG_E("erase rejected: Flash is not in dual-bank mode"); + return -RT_ERROR; + } + + result = n32_flash_lock_take(); + if (result != RT_EOK) + { + return result; + } + + dcache_enabled = n32_flash_dcache_suspend(); + result = n32_flash_prepare(); + if (result != RT_EOK) + { + goto __exit; + } + + erase_addr = addr & ~(N32_FLASH_PAGE_SIZE - 1U); + end_addr = addr + (rt_uint32_t)size; + + while (erase_addr < end_addr) + { + status = FLASH_EraseOnePage(erase_addr); + if (status != FLASH_EOP) + { + LOG_E("erase failed: addr=0x%08x, status=%d", erase_addr, status); + result = -RT_ERROR; + goto __lock_exit; + } + + erase_addr += N32_FLASH_PAGE_SIZE; + } + + result = (int)size; + +__lock_exit: + FLASH_Lock(); +__exit: + n32_flash_dcache_restore(dcache_enabled); + rt_mutex_release(&_flash_mutex); + return result; +} + +static int n32_flash_init(void) +{ + rt_err_t result; + + result = rt_mutex_init(&_flash_mutex, "flash", RT_IPC_FLAG_PRIO); + if ((result == RT_EOK) && !n32_flash_dual_bank_is_active()) + { + LOG_E("single-bank mode detected; erase/write are disabled"); + } + + return result; +} +INIT_DEVICE_EXPORT(n32_flash_init); + +#ifdef RT_USING_FAL + +static int fal_flash_read(long offset, rt_uint8_t *buf, size_t size); +static int fal_flash_write(long offset, const rt_uint8_t *buf, size_t size); +static int fal_flash_erase(long offset, size_t size); + +const struct fal_flash_dev n32_onchip_flash = { + "onchip_flash", + N32_FLASH_START_ADRESS, + N32_FLASH_SIZE, + N32_FLASH_PAGE_SIZE, + { RT_NULL, fal_flash_read, fal_flash_write, fal_flash_erase } +}; + +static int fal_flash_read(long offset, rt_uint8_t *buf, size_t size) +{ + return n32_flash_read(n32_onchip_flash.addr + offset, buf, size); +} + +static int fal_flash_write(long offset, const rt_uint8_t *buf, size_t size) +{ + return n32_flash_write(n32_onchip_flash.addr + offset, buf, size); +} + +static int fal_flash_erase(long offset, size_t size) +{ + return n32_flash_erase(n32_onchip_flash.addr + offset, size); +} + +#endif /* RT_USING_FAL */ + +#endif /* BSP_USING_ON_CHIP_FLASH */ diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_flash/drv_flash_h49x.h b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_flash/drv_flash_h49x.h new file mode 100644 index 00000000000..daee2ee408e --- /dev/null +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_flash/drv_flash_h49x.h @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2006-2026, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2026-08-07 li.mengmeng implement for N32H49x + */ + +#ifndef __DRV_FLASH_H49X_H__ +#define __DRV_FLASH_H49X_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +int n32_flash_read(rt_uint32_t addr, rt_uint8_t *buf, size_t size); +int n32_flash_write(rt_uint32_t addr, const rt_uint8_t *buf, size_t size); +int n32_flash_erase(rt_uint32_t addr, size_t size); + +#ifdef __cplusplus +} +#endif + +#endif /* __DRV_FLASH_H49X_H__ */ diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_gpio.h b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_gpio.h index 2b9d4f9abfc..db0ff4852b9 100644 --- a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_gpio.h +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_gpio.h @@ -18,10 +18,10 @@ extern "C" { #endif -#define __N32_PORT(port) GPIO##port##_BASE +#define __N32_PORT(port) GPIO##port##_BASE -#define GET_PIN(PORTx,PIN) (rt_base_t)((16 * ( ((rt_base_t)__N32_PORT(PORTx) - (rt_base_t)GPIOA_BASE)/(0x0400UL) )) + PIN) +#define GET_PIN(PORTx, PIN) (rt_base_t)((16 * (((rt_base_t)__N32_PORT(PORTx) - (rt_base_t)GPIOA_BASE) / (0x0400UL))) + PIN) struct pin_irq_map diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_hard_i2c.c b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_hard_i2c.c index 0b271367003..3fa639d58d5 100644 --- a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_hard_i2c.c +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_hard_i2c.c @@ -19,26 +19,26 @@ defined(BSP_USING_HARD_I2C6) || defined(BSP_USING_HARD_I2C7) || defined(BSP_USING_HARD_I2C8) || defined(BSP_USING_HARD_I2C9) || defined(BSP_USING_HARD_I2C10) -#define I2C_CTRL2_NBYTES_POS (16U) -#define MAX_NBYTE_SIZE (255U) +#define I2C_CTRL2_NBYTES_POS (16U) +#define MAX_NBYTE_SIZE (255U) -#define I2C_NO_STARTSTOP (0x00000000U) -#define I2C_START_READ (I2C_CTRL2_START | I2C_CTRL2_RWN) -#define I2C_START_WRITE (I2C_CTRL2_START) +#define I2C_NO_STARTSTOP (0x00000000U) +#define I2C_START_READ (I2C_CTRL2_START | I2C_CTRL2_RWN) +#define I2C_START_WRITE (I2C_CTRL2_START) -#define I2C_RELOAD_MODE (CTRL2_REFILL_ENABLE) -#define I2C_AUTOEND_MODE (CTRL2_AUTO_STOP) -#define I2C_SOFTEND_MODE (0x00000000U) +#define I2C_RELOAD_MODE (CTRL2_REFILL_ENABLE) +#define I2C_AUTOEND_MODE (CTRL2_AUTO_STOP) +#define I2C_SOFTEND_MODE (0x00000000U) -#define I2C_FIRST_FRAME ((uint32_t)I2C_SOFTEND_MODE) -#define I2C_FIRST_AND_NEXT_FRAME ((uint32_t)(I2C_RELOAD_MODE | I2C_SOFTEND_MODE)) -#define I2C_NEXT_FRAME ((uint32_t)(I2C_RELOAD_MODE | I2C_SOFTEND_MODE)) -#define I2C_FIRST_AND_LAST_FRAME ((uint32_t)I2C_AUTOEND_MODE) -#define I2C_LAST_FRAME ((uint32_t)I2C_AUTOEND_MODE) -#define I2C_LAST_FRAME_NO_STOP ((uint32_t)I2C_SOFTEND_MODE) +#define I2C_FIRST_FRAME ((uint32_t)I2C_SOFTEND_MODE) +#define I2C_FIRST_AND_NEXT_FRAME ((uint32_t)(I2C_RELOAD_MODE | I2C_SOFTEND_MODE)) +#define I2C_NEXT_FRAME ((uint32_t)(I2C_RELOAD_MODE | I2C_SOFTEND_MODE)) +#define I2C_FIRST_AND_LAST_FRAME ((uint32_t)I2C_AUTOEND_MODE) +#define I2C_LAST_FRAME ((uint32_t)I2C_AUTOEND_MODE) +#define I2C_LAST_FRAME_NO_STOP ((uint32_t)I2C_SOFTEND_MODE) /* Slave address | Transfer direction | START generation | STOP generation | Number of bytes | NBYTES reload mode | Automatic end mode */ -#define I2C_CTRL2_CLEAR (I2C_CTRL2_SADR | I2C_CTRL2_RWN | I2C_CTRL2_START | I2C_CTRL2_STOP | I2C_CTRL2_BYTECNT | I2C_CTRL2_REFILL | I2C_CTRL2_AUTOSTOP) +#define I2C_CTRL2_CLEAR (I2C_CTRL2_SADR | I2C_CTRL2_RWN | I2C_CTRL2_START | I2C_CTRL2_STOP | I2C_CTRL2_BYTECNT | I2C_CTRL2_REFILL | I2C_CTRL2_AUTOSTOP) //#define DRV_DEBUG #define LOG_TAG "drv.i2c.hw" @@ -82,8 +82,7 @@ enum #endif /* BSP_USING_HARD_I2C10 */ }; -static struct n32_i2c_config i2c_config[] = -{ +static struct n32_i2c_config i2c_config[] = { #ifdef BSP_USING_HARD_I2C1 I2C1_BUS_CONFIG, #endif /* BSP_USING_HARD_I2C1 */ @@ -116,7 +115,7 @@ static struct n32_i2c_config i2c_config[] = #endif /* BSP_USING_HARD_I2C10 */ }; -static struct n32_i2c i2c_objs[sizeof(i2c_config) / sizeof(i2c_config[0])] = {0}; +static struct n32_i2c i2c_objs[sizeof(i2c_config) / sizeof(i2c_config[0])] = { 0 }; static rt_ssize_t n32_iic_transfer_by_dma(struct n32_i2c_config *config, uint8_t *pData, uint16_t Size, rt_bool_t is_rx) { @@ -186,12 +185,12 @@ static rt_err_t n32_i2c_dma_init(struct n32_i2c_config *config, rt_bool_t is_rx) /* DMA channel struct configuration */ DMA_ChannelStructInit(&DMA_ChInitStr); - DMA_ChInitStr.SrcTfrWidth = DMA_CH_TRANSFER_WIDTH_8; - DMA_ChInitStr.DstTfrWidth = DMA_CH_TRANSFER_WIDTH_8; - DMA_ChInitStr.DstBurstLen = DMA_CH_BURST_LENGTH_1; - DMA_ChInitStr.SrcBurstLen = DMA_CH_BURST_LENGTH_1; - DMA_ChInitStr.ChannelPriority = DMA_CH_PRIORITY_7; - DMA_ChInitStr.TfrType = DMA_CH_TRANSFER_TYPE_SINGLE_BLOCK; + DMA_ChInitStr.SrcTfrWidth = DMA_CH_TRANSFER_WIDTH_8; + DMA_ChInitStr.DstTfrWidth = DMA_CH_TRANSFER_WIDTH_8; + DMA_ChInitStr.DstBurstLen = DMA_CH_BURST_LENGTH_1; + DMA_ChInitStr.SrcBurstLen = DMA_CH_BURST_LENGTH_1; + DMA_ChInitStr.ChannelPriority = DMA_CH_PRIORITY_7; + DMA_ChInitStr.TfrType = DMA_CH_TRANSFER_TYPE_SINGLE_BLOCK; /* Read by DMA */ if (is_rx) @@ -202,13 +201,13 @@ static rt_err_t n32_i2c_dma_init(struct n32_i2c_config *config, rt_bool_t is_rx) RCC_EnableAHB1PeriphClk3(dma_config->dma_rcc, ENABLE); /* DMA channel struct configuration */ - DMA_ChInitStr.SrcAddr = (uint32_t)&config->Instance->RDR; - DMA_ChInitStr.DstAddr = (uint32_t)RT_NULL; - DMA_ChInitStr.DstAddrCountMode = DMA_CH_ADDRESS_COUNT_MODE_INCREMENT; - DMA_ChInitStr.SrcAddrCountMode = DMA_CH_ADDRESS_COUNT_MODE_NO_CHANGE; - DMA_ChInitStr.TfrTypeFlowCtrl = DMA_CH_TRANSFER_FLOW_P2M_DMA; - DMA_ChInitStr.SrcHandshaking = DMA_CH_SRC_HANDSHAKING_HARDWARE; - DMA_ChInitStr.SrcHsInterface = dma_config->HsInterface; + DMA_ChInitStr.SrcAddr = (uint32_t)&config->Instance->RDR; + DMA_ChInitStr.DstAddr = (uint32_t)RT_NULL; + DMA_ChInitStr.DstAddrCountMode = DMA_CH_ADDRESS_COUNT_MODE_INCREMENT; + DMA_ChInitStr.SrcAddrCountMode = DMA_CH_ADDRESS_COUNT_MODE_NO_CHANGE; + DMA_ChInitStr.TfrTypeFlowCtrl = DMA_CH_TRANSFER_FLOW_P2M_DMA; + DMA_ChInitStr.SrcHandshaking = DMA_CH_SRC_HANDSHAKING_HARDWARE; + DMA_ChInitStr.SrcHsInterface = dma_config->HsInterface; } /* Write by DMA */ else @@ -219,13 +218,13 @@ static rt_err_t n32_i2c_dma_init(struct n32_i2c_config *config, rt_bool_t is_rx) RCC_EnableAHB1PeriphClk3(dma_config->dma_rcc, ENABLE); /* DMA channel struct configuration */ - DMA_ChInitStr.SrcAddr = (uint32_t) RT_NULL; - DMA_ChInitStr.DstAddr = (uint32_t)&config->Instance->WDR; - DMA_ChInitStr.DstAddrCountMode = DMA_CH_ADDRESS_COUNT_MODE_NO_CHANGE; - DMA_ChInitStr.SrcAddrCountMode = DMA_CH_ADDRESS_COUNT_MODE_INCREMENT; - DMA_ChInitStr.TfrTypeFlowCtrl = DMA_CH_TRANSFER_FLOW_M2P_DMA; - DMA_ChInitStr.DstHandshaking = DMA_CH_DST_HANDSHAKING_HARDWARE; - DMA_ChInitStr.DstHsInterface = dma_config->HsInterface; + DMA_ChInitStr.SrcAddr = (uint32_t)RT_NULL; + DMA_ChInitStr.DstAddr = (uint32_t)&config->Instance->WDR; + DMA_ChInitStr.DstAddrCountMode = DMA_CH_ADDRESS_COUNT_MODE_NO_CHANGE; + DMA_ChInitStr.SrcAddrCountMode = DMA_CH_ADDRESS_COUNT_MODE_INCREMENT; + DMA_ChInitStr.TfrTypeFlowCtrl = DMA_CH_TRANSFER_FLOW_M2P_DMA; + DMA_ChInitStr.DstHandshaking = DMA_CH_DST_HANDSHAKING_HARDWARE; + DMA_ChInitStr.DstHsInterface = dma_config->HsInterface; } /* DMA controller must be enabled before initializing the channel */ @@ -236,11 +235,10 @@ static rt_err_t n32_i2c_dma_init(struct n32_i2c_config *config, rt_bool_t is_rx) { return -RT_ERROR; } -#endif - /* enable dma irq */ NVIC_SetPriority(dma_config->dma_irq, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 0, 0)); NVIC_EnableIRQ(dma_config->dma_irq); +#endif return RT_EOK; } @@ -248,7 +246,7 @@ static rt_err_t n32_i2c_dma_init(struct n32_i2c_config *config, rt_bool_t is_rx) static rt_err_t n32_i2c_init(struct n32_i2c *i2c_drv) { rt_err_t ret; - uint32_t BusTim_Reg; + uint32_t BusTim_Reg = 0; I2C_InitType I2C_InitStructure; RT_ASSERT(i2c_drv != RT_NULL); @@ -284,14 +282,14 @@ static rt_err_t n32_i2c_init(struct n32_i2c *i2c_drv) I2C_DeInit(cfg->Instance); I2C_InitStruct(&I2C_InitStructure); - I2C_InitStructure.Timing = ((BusTim_Reg != 0) ? BusTim_Reg : cfg->timing); - I2C_InitStructure.OwnAddress1 = 0x0; - I2C_InitStructure.AddressingMode = I2C_ADDRESSINGMODE_7BIT; - I2C_InitStructure.DualAddressMode = I2C_DUALADDRESS_DISABLE; - I2C_InitStructure.OwnAddress2 = 0x0; + I2C_InitStructure.Timing = ((BusTim_Reg != 0) ? BusTim_Reg : cfg->timing); + I2C_InitStructure.OwnAddress1 = 0x0; + I2C_InitStructure.AddressingMode = I2C_ADDRESSINGMODE_7BIT; + I2C_InitStructure.DualAddressMode = I2C_DUALADDRESS_DISABLE; + I2C_InitStructure.OwnAddress2 = 0x0; I2C_InitStructure.OwnAddress2Masks = I2C_ADDRESS2MASK_NONE; - I2C_InitStructure.GeneralCallMode = I2C_GENERALCALL_DISABLE; - I2C_InitStructure.NoStretchMode = I2C_NOSTRCH_DISABLE; + I2C_InitStructure.GeneralCallMode = I2C_GENERALCALL_DISABLE; + I2C_InitStructure.NoStretchMode = I2C_NOSTRCH_DISABLE; I2C_Init(cfg->Instance, &I2C_InitStructure); I2C_Enable(cfg->Instance, ENABLE); @@ -569,7 +567,7 @@ static rt_ssize_t n32_i2c_master_xfer(struct rt_i2c_bus_device *bus, struct rt_i2c_msg msgs[], rt_uint32_t num) { -#define DMA_TRANS_MIN_LEN 2 /* only buffer length >= DMA_TRANS_MIN_LEN will use DMA mode */ +#define DMA_TRANS_MIN_LEN 2 /* only buffer length >= DMA_TRANS_MIN_LEN will use DMA mode */ #define TRANS_TIMEOUT_PERSEC 8 /* per ms will trans nums bytes */ rt_int32_t i, ret; @@ -621,8 +619,8 @@ static rt_ssize_t n32_i2c_master_xfer(struct rt_i2c_bus_device *bus, if (msg->flags & RT_I2C_RD) { LOG_D("xfer rec msgs[%d] i2c mode = %s", i, mode == I2C_FIRST_AND_NEXT_FRAME ? "I2C_FIRST_AND_NEXT_FRAME" : mode == I2C_LAST_FRAME_NO_STOP ? "I2C_FIRST_FRAME/I2C_LAST_FRAME_NO_STOP" - : mode == I2C_LAST_FRAME ? "I2C_LAST_FRAME" - : "nuknown mode"); + : mode == I2C_LAST_FRAME ? "I2C_LAST_FRAME" + : "nuknown mode"); if ((i2c_obj->i2c_dma_flag & I2C_USING_RX_DMA_FLAG) && (msg->len >= DMA_TRANS_MIN_LEN)) { ret = n32_i2c_master_seq_receive_dma(i2c_obj, (msg->addr << 1), msg->buf, msg->len, mode); @@ -640,14 +638,13 @@ static rt_ssize_t n32_i2c_master_xfer(struct rt_i2c_bus_device *bus, { LOG_D("receive time out"); goto out; - } } else { LOG_D("xfer trans msgs[%d] hal mode = %s", i, mode == I2C_FIRST_AND_NEXT_FRAME ? "I2C_FIRST_AND_NEXT_FRAME" : mode == I2C_LAST_FRAME_NO_STOP ? "I2C_FIRST_FRAME/I2C_LAST_FRAME_NO_STOP" - : mode == I2C_LAST_FRAME ? "I2C_LAST_FRAME" - : "nuknown mode"); + : mode == I2C_LAST_FRAME ? "I2C_LAST_FRAME" + : "nuknown mode"); if ((i2c_obj->i2c_dma_flag & I2C_USING_TX_DMA_FLAG) && (msg->len >= DMA_TRANS_MIN_LEN)) { ret = n32_i2c_master_seq_send_dma(i2c_obj, (msg->addr << 1), msg->buf, msg->len, mode); @@ -675,23 +672,27 @@ static rt_ssize_t n32_i2c_master_xfer(struct rt_i2c_bus_device *bus, timeout = msg->len / TRANS_TIMEOUT_PERSEC + 2; if (msg->flags & RT_I2C_NO_STOP) + { mode = I2C_LAST_FRAME_NO_STOP; + } else + { mode = I2C_LAST_FRAME; + } LOG_D("xfer last msgs[%d] addr=0x%2x buf= 0x%x len= 0x%x flags = 0x%x", i, msg->addr, msg->buf, msg->len, msg->flags); if (msg->flags & RT_I2C_RD) { LOG_D("xfer rec msgs[%d] hal mode=%s", i, mode == I2C_FIRST_AND_NEXT_FRAME ? "I2C_FIRST_AND_NEXT_FRAME" : mode == I2C_LAST_FRAME_NO_STOP ? "I2C_FIRST_FRAME/I2C_LAST_FRAME_NO_STOP" - : mode == I2C_LAST_FRAME ? "I2C_LAST_FRAME" - : "nuknown mode"); + : mode == I2C_LAST_FRAME ? "I2C_LAST_FRAME" + : "nuknown mode"); if ((i2c_obj->i2c_dma_flag & I2C_USING_RX_DMA_FLAG) && (msg->len >= DMA_TRANS_MIN_LEN)) { ret = n32_i2c_master_seq_receive_dma(i2c_obj, (msg->addr << 1), msg->buf, msg->len, mode); } else { - uint32_t itflags = READ_REG(i2c_obj->config->Instance->STSINT); + uint32_t itflags = READ_REG(i2c_obj->config->Instance->STSINT); ret = n32_i2c_master_seq_receive_it(i2c_obj, (msg->addr << 1), msg->buf, msg->len, mode); } if (ret != RT_EOK) @@ -708,8 +709,8 @@ static rt_ssize_t n32_i2c_master_xfer(struct rt_i2c_bus_device *bus, else { LOG_D("xfer trans msgs[%d] hal mode = %s", i, mode == I2C_FIRST_AND_NEXT_FRAME ? "I2C_FIRST_AND_NEXT_FRAME" : mode == I2C_LAST_FRAME ? "I2C_LAST_FRAME" - : mode == I2C_LAST_FRAME_NO_STOP ? "I2C_FIRST_FRAME/I2C_LAST_FRAME_NO_STOP" - : "nuknown mode"); + : mode == I2C_LAST_FRAME_NO_STOP ? "I2C_FIRST_FRAME/I2C_LAST_FRAME_NO_STOP" + : "nuknown mode"); if ((i2c_obj->i2c_dma_flag & I2C_USING_TX_DMA_FLAG) && (msg->len >= DMA_TRANS_MIN_LEN)) { ret = n32_i2c_master_seq_send_dma(i2c_obj, (msg->addr << 1), msg->buf, msg->len, mode); @@ -727,7 +728,6 @@ static rt_ssize_t n32_i2c_master_xfer(struct rt_i2c_bus_device *bus, { LOG_D("transmit time out"); goto out; - } } LOG_D("xfer end %d mags\r\n", num); @@ -738,8 +738,7 @@ static rt_ssize_t n32_i2c_master_xfer(struct rt_i2c_bus_device *bus, } -static const struct rt_i2c_bus_device_ops n32_i2c_ops = -{ +static const struct rt_i2c_bus_device_ops n32_i2c_ops = { .master_xfer = n32_i2c_master_xfer, RT_NULL, RT_NULL @@ -914,7 +913,7 @@ static void i2c_it_error_handler(struct n32_i2c *drv_i2c, uint32_t itflags) } if (((((itflags & I2C_STSINT_NAKF) == I2C_STSINT_NAKF) ? SET : RESET) != RESET) || - ((((itflags & I2C_STSINT_BSER) == I2C_STSINT_BSER) ? SET : RESET) != RESET)) + ((((itflags & I2C_STSINT_BSER) == I2C_STSINT_BSER) ? SET : RESET) != RESET)) { /* Send stop signal to prevent bus lock-up */ LOG_D("I2C NACK Error or BUS Error now stoped"); @@ -1009,7 +1008,7 @@ static void i2c_master_ev_isr_handler_it(struct n32_i2c *drv_i2c) uint16_t devaddress; uint32_t setmask; /* Get current IT Flags and IT sources value */ - volatile uint32_t itflags = READ_REG(drv_i2c->config->Instance->STSINT); + volatile uint32_t itflags = READ_REG(drv_i2c->config->Instance->STSINT); volatile uint32_t itsources = READ_REG(drv_i2c->config->Instance->CTRL1); /* It takes more than 100 microseconds to clear the TC flag after starting, so wait for the TC flag to clear */ @@ -1026,7 +1025,7 @@ static void i2c_master_ev_isr_handler_it(struct n32_i2c *drv_i2c) } if (((((itflags & I2C_STSINT_NAKF) == I2C_STSINT_NAKF) ? SET : RESET) != RESET) && - ((((itsources & I2C_CTRL1_NAKIE) == I2C_CTRL1_NAKIE) ? SET : RESET) != RESET)) + ((((itsources & I2C_CTRL1_NAKIE) == I2C_CTRL1_NAKIE) ? SET : RESET) != RESET)) { /* Clear Not Acknowledge received flag */ drv_i2c->config->Instance->INTCLR = I2C_INTCLR_NAKCLR; @@ -1122,7 +1121,7 @@ static void i2c_master_ev_isr_handler_it(struct n32_i2c *drv_i2c) } if (((((itflags & I2C_STSINT_STOPF) == I2C_STSINT_STOPF) ? SET : RESET) != RESET) && - ((((itsources & I2C_CTRL1_STOPIE) == I2C_CTRL1_STOPIE) ? SET : RESET) != RESET)) + ((((itsources & I2C_CTRL1_STOPIE) == I2C_CTRL1_STOPIE) ? SET : RESET) != RESET)) { i2c_it_master_complete(drv_i2c, itflags); } @@ -1134,11 +1133,11 @@ static void i2c_master_ev_isr_handler_dma(struct n32_i2c *drv_i2c) uint32_t setmask; uint32_t xfermode; /* Get current IT Flags and IT sources value */ - volatile uint32_t itflags = READ_REG(drv_i2c->config->Instance->STSINT); + volatile uint32_t itflags = READ_REG(drv_i2c->config->Instance->STSINT); volatile uint32_t itsources = READ_REG(drv_i2c->config->Instance->CTRL1); if (((((itflags & I2C_STSINT_NAKF) == I2C_STSINT_NAKF) ? SET : RESET) != RESET) && - ((((itsources & I2C_CTRL1_NAKIE) == I2C_CTRL1_NAKIE) ? SET : RESET) != RESET)) + ((((itsources & I2C_CTRL1_NAKIE) == I2C_CTRL1_NAKIE) ? SET : RESET) != RESET)) { /* Clear Not Acknowledge received flag */ drv_i2c->config->Instance->INTCLR = I2C_INTCLR_NAKCLR; @@ -1233,12 +1232,12 @@ static void i2c_master_ev_isr_handler_dma(struct n32_i2c *drv_i2c) static void i2c_master_er_isr_handler(struct n32_i2c *drv_i2c) { uint32_t tmperror = 0; - volatile uint32_t itflags = READ_REG(drv_i2c->config->Instance->STSINT); + volatile uint32_t itflags = READ_REG(drv_i2c->config->Instance->STSINT); volatile uint32_t itsources = READ_REG(drv_i2c->config->Instance->CTRL1); /* I2C Bus error interrupt occurred */ if (((((itflags & I2C_STSINT_BSER) == I2C_STSINT_BSER) ? SET : RESET) != RESET) && - ((((itsources & I2C_CTRL1_ERRIE) == I2C_CTRL1_ERRIE) ? SET : RESET) != RESET)) + ((((itsources & I2C_CTRL1_ERRIE) == I2C_CTRL1_ERRIE) ? SET : RESET) != RESET)) { tmperror |= I2C_STSINT_BSER; @@ -1247,7 +1246,7 @@ static void i2c_master_er_isr_handler(struct n32_i2c *drv_i2c) /* I2C Over-Run/Under-Run interrupt occurred */ if (((((itflags & I2C_STSINT_OVF) == I2C_STSINT_OVF) ? SET : RESET) != RESET) && - ((((itsources & I2C_CTRL1_ERRIE) == I2C_CTRL1_ERRIE) ? SET : RESET) != RESET)) + ((((itsources & I2C_CTRL1_ERRIE) == I2C_CTRL1_ERRIE) ? SET : RESET) != RESET)) { tmperror |= I2C_STSINT_OVF; @@ -1256,7 +1255,7 @@ static void i2c_master_er_isr_handler(struct n32_i2c *drv_i2c) /* I2C Arbitration Loss error interrupt occurred */ if (((((itflags & I2C_STSINT_ABLO) == I2C_STSINT_ABLO) ? SET : RESET) != RESET) && - ((((itsources & I2C_CTRL1_ERRIE) == I2C_CTRL1_ERRIE) ? SET : RESET) != RESET)) + ((((itsources & I2C_CTRL1_ERRIE) == I2C_CTRL1_ERRIE) ? SET : RESET) != RESET)) { tmperror |= I2C_STSINT_ABLO; @@ -1265,7 +1264,7 @@ static void i2c_master_er_isr_handler(struct n32_i2c *drv_i2c) /* I2C PEC error interrupt occurred */ if (((((itflags & I2C_STSINT_CRCERR) == I2C_STSINT_CRCERR) ? SET : RESET) != RESET) && - ((((itsources & I2C_CTRL1_ERRIE) == I2C_CTRL1_ERRIE) ? SET : RESET) != RESET)) + ((((itsources & I2C_CTRL1_ERRIE) == I2C_CTRL1_ERRIE) ? SET : RESET) != RESET)) { tmperror |= I2C_STSINT_CRCERR; @@ -1274,7 +1273,7 @@ static void i2c_master_er_isr_handler(struct n32_i2c *drv_i2c) /* I2C PEC error interrupt occurred */ if (((((itflags & I2C_STSINT_TMOUT) == I2C_STSINT_TMOUT) ? SET : RESET) != RESET) && - ((((itsources & I2C_CTRL1_ERRIE) == I2C_CTRL1_ERRIE) ? SET : RESET) != RESET)) + ((((itsources & I2C_CTRL1_ERRIE) == I2C_CTRL1_ERRIE) ? SET : RESET) != RESET)) { tmperror |= I2C_STSINT_TMOUT; diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_hard_i2c.h b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_hard_i2c.h index 2b4a96f569c..28c83ec6de3 100644 --- a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_hard_i2c.h +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_hard_i2c.h @@ -21,34 +21,33 @@ #ifdef __cplusplus -extern "C" -{ +extern "C" { #endif -#define I2C_USING_TX_DMA_FLAG (1U) -#define I2C_USING_RX_DMA_FLAG (1U << 1) +#define I2C_USING_TX_DMA_FLAG (1U) +#define I2C_USING_RX_DMA_FLAG (1U << 1) typedef enum { - I2C_RESET = 0x00U, - I2C_READY = 0x01U, + I2C_RESET = 0x00U, + I2C_READY = 0x01U, I2C_BUSY_TX = 0x02U, I2C_BUSY_RX = 0x03U, } I2C_StateTypeDef; struct n32_i2c_config { - const char *name; - I2C_Module *Instance; - rt_uint32_t timing; - rt_uint32_t timeout; - IRQn_Type evirq_type; - IRQn_Type erirq_type; + const char *name; + I2C_Module *Instance; + rt_uint32_t timing; + rt_uint32_t timeout; + IRQn_Type evirq_type; + IRQn_Type erirq_type; - rt_uint32_t scl_af_width; /* SCL Analog Filter Width */ - rt_uint32_t sda_af_width; /* SDA Analog Filter Width */ - rt_uint32_t df_width; /* Digital Filter Width */ + rt_uint32_t scl_af_width; /* SCL Analog Filter Width */ + rt_uint32_t sda_af_width; /* SDA Analog Filter Width */ + rt_uint32_t df_width; /* Digital Filter Width */ uint32_t periph; void (*EnablePeriphClk)(uint32_t periph, FunctionalState cmd); @@ -71,16 +70,15 @@ struct n32_i2c { struct hard_i2c_transfer transfer; - struct n32_i2c_config *config; - struct rt_i2c_bus_device i2c_bus; - rt_uint8_t i2c_dma_flag; + struct n32_i2c_config *config; + struct rt_i2c_bus_device i2c_bus; + rt_uint8_t i2c_dma_flag; struct rt_completion completion; void (*i2c_isr_callback)(struct n32_i2c *drv_i2c); }; - #ifdef __cplusplus } #endif diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_lptim.h b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_lptim.h index 8391d92c644..751cc2b895e 100644 --- a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_lptim.h +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_lptim.h @@ -17,9 +17,9 @@ typedef enum { DRV_HW_LPTIMER_CTRL_GET_TICK_MAX = 0x20, /* get the maximum tick value */ - DRV_HW_LPTIMER_CTRL_GET_FREQ = 0X21, /* get the timer frequency */ - DRV_HW_LPTIMER_CTRL_START = 0X22, /* set the timeout value */ - DRV_HW_LPTIMER_CTRL_GET_COUNT = 0X23, /* get the current count value */ + DRV_HW_LPTIMER_CTRL_GET_FREQ = 0X21, /* get the timer frequency */ + DRV_HW_LPTIMER_CTRL_START = 0X22, /* set the timeout value */ + DRV_HW_LPTIMER_CTRL_GET_COUNT = 0X23, /* get the current count value */ } drv_hw_lptimer_ctrl_t; #endif /* __DRV_LPTIM_H__ */ diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_rtc.c b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_rtc.c index 0d5b769c616..a4339f00793 100644 --- a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_rtc.c +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_rtc.c @@ -16,11 +16,11 @@ #ifdef BSP_USING_ONCHIP_RTC #ifndef RTC_BKP_REG1 - #define RTC_BKP_REG1 1U +#define RTC_BKP_REG1 1U #endif //#define DRV_DEBUG -#define LOG_TAG "drv.rtc" +#define LOG_TAG "drv.rtc" #include @@ -28,14 +28,14 @@ struct rtc_device_object { - rt_rtc_dev_t rtc_dev; + rt_rtc_dev_t rtc_dev; #ifdef RT_USING_ALARM - struct rt_rtc_wkalarm wkalarm; + struct rt_rtc_wkalarm wkalarm; #endif }; #ifdef RT_USING_ALARM -static rt_err_t rtc_alarm_time_set(struct rtc_device_object* p_dev); +static rt_err_t rtc_alarm_time_set(struct rtc_device_object *p_dev); static int rt_rtc_alarm_init(void); static RTC_AlarmType Alarm_InitStruct = { 0 }; static EXTI_InitType EXTI_InitStructure = { 0 }; @@ -59,25 +59,25 @@ static rt_err_t n32_rtc_get_timeval(struct timeval *tv) { uint32_t SubSeconds; uint32_t Div_Sync; - RTC_TimeType RTC_TimeStruct = {0}; - RTC_DateType RTC_DateStruct = {0}; - struct tm tm_new = {0}; + RTC_TimeType RTC_TimeStruct = { 0 }; + RTC_DateType RTC_DateStruct = { 0 }; + struct tm tm_new = { 0 }; RTC_GetTime(RTC_FORMAT_BIN, &RTC_TimeStruct); RTC_GetDate(RTC_FORMAT_BIN, &RTC_DateStruct); - tm_new.tm_sec = RTC_TimeStruct.Seconds; - tm_new.tm_min = RTC_TimeStruct.Minutes; + tm_new.tm_sec = RTC_TimeStruct.Seconds; + tm_new.tm_min = RTC_TimeStruct.Minutes; tm_new.tm_hour = RTC_TimeStruct.Hours; tm_new.tm_mday = RTC_DateStruct.Date; - tm_new.tm_mon = RTC_DateStruct.Month - 1; + tm_new.tm_mon = RTC_DateStruct.Month - 1; tm_new.tm_year = RTC_DateStruct.Year + 100; tv->tv_sec = timegm(&tm_new); SubSeconds = (uint32_t)(RTC->SUBS); - Div_Sync = (uint32_t)((RTC->PRE) & 0x00007FFFU); + Div_Sync = (uint32_t)((RTC->PRE) & 0x00007FFFU); tv->tv_usec = ((Div_Sync * 1.0) - (SubSeconds * 1.0)) / ((Div_Sync + 1U) * 1.0) * 1000.0 * 1000.0; return RT_EOK; @@ -86,9 +86,9 @@ static rt_err_t n32_rtc_get_timeval(struct timeval *tv) static rt_err_t set_rtc_time_stamp(time_t time_stamp) { - RTC_TimeType RTC_TimeStruct = {0}; - RTC_DateType RTC_DateStruct = {0}; - struct tm tm = {0}; + RTC_TimeType RTC_TimeStruct = { 0 }; + RTC_DateType RTC_DateStruct = { 0 }; + struct tm tm = { 0 }; gmtime_r(&time_stamp, &tm); if (tm.tm_year < 100) @@ -96,12 +96,12 @@ static rt_err_t set_rtc_time_stamp(time_t time_stamp) return -RT_ERROR; } - RTC_TimeStruct.Seconds = tm.tm_sec ; - RTC_TimeStruct.Minutes = tm.tm_min ; - RTC_TimeStruct.Hours = tm.tm_hour; - RTC_DateStruct.Date = tm.tm_mday; - RTC_DateStruct.Month = tm.tm_mon + 1 ; - RTC_DateStruct.Year = tm.tm_year - 100; + RTC_TimeStruct.Seconds = tm.tm_sec; + RTC_TimeStruct.Minutes = tm.tm_min; + RTC_TimeStruct.Hours = tm.tm_hour; + RTC_DateStruct.Date = tm.tm_mday; + RTC_DateStruct.Month = tm.tm_mon + 1; + RTC_DateStruct.Year = tm.tm_year - 100; RTC_DateStruct.WeekDay = tm.tm_wday + 1; if (RTC_ConfigTime(RTC_FORMAT_BIN, &RTC_TimeStruct) == ERROR) @@ -122,8 +122,8 @@ static rt_err_t set_rtc_time_stamp(time_t time_stamp) static rt_err_t rt_rtc_config(void) { - uint32_t SynchPrediv, AsynchPrediv; - RTC_InitType RTC_InitStructure = { 0 }; + uint32_t SynchPrediv = 0, AsynchPrediv = 0; + RTC_InitType RTC_InitStructure = { 0 }; #if defined(SOC_SERIES_N32H7xx) /* Enable the PWR clock */ @@ -133,24 +133,43 @@ static rt_err_t rt_rtc_config(void) /* Disable RTC clock */ RCC_EnableAPB5PeriphClk2(RCC_APB5_PERIPHEN_M7_RTCPCLK, DISABLE); +#elif defined(SOC_SERIES_N32H47x_48x) + /* Enable the PWR clock */ + RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_PWR | RCC_APB1_PERIPH_BKP, ENABLE); +#elif defined(SOC_SERIES_N32H49x) + /* Enable the PWR clock */ + RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPHEN_PWR | RCC_APB1_PERIPHEN_BKP, ENABLE); +#endif + +#if defined(SOC_SERIES_N32H47x_48x) || defined(SOC_SERIES_N32H49x) + /* Allow access to RTC */ + PWR_BackupAccessEnable(ENABLE); + + /* Disable RTC clock */ + RCC_EnableRtcClk(DISABLE); #endif #if defined(BSP_RTC_USING_LSI) -#if defined(SOC_SERIES_N32H7xx) /* Enable the LSI OSC */ RCC_EnableLsi(ENABLE); if (RCC_WaitLsiStable() == ERROR) { return -RT_ERROR; } + +#if defined(SOC_SERIES_N32H7xx) RCC_ConfigRtcClk(RCC_RTCCLK_SRC_LSI, RCC_RTCCLK_HSEDIV63); -#endif - SynchPrediv = 0xF9; + + SynchPrediv = 0xF9; AsynchPrediv = 0x7F; +#elif defined(SOC_SERIES_N32H49x) || defined(SOC_SERIES_N32H47x_48x) + RCC_ConfigRtcClk(RCC_RTCCLK_SRC_LSI); + + SynchPrediv = 0xFB; + AsynchPrediv = 0x7F; +#endif #elif defined(BSP_RTC_USING_LSE) -#if defined(SOC_SERIES_N32H7xx) /* Enable the LSI */ - RCC_EnableLsi(ENABLE); RCC_ConfigLse(RCC_LSE_ENABLE); /****Waite LSE Ready *****/ @@ -159,44 +178,69 @@ static rt_err_t rt_rtc_config(void) return -RT_ERROR; } +#if defined(SOC_SERIES_N32H7xx) RCC_ConfigRtcClk(RCC_RTCCLK_SRC_LSE, RCC_RTCCLK_HSEDIV_MASK); +#elif defined(SOC_SERIES_N32H49x) || defined(SOC_SERIES_N32H47x_48x) + RCC_ConfigRtcClk(RCC_RTCCLK_SRC_LSE); #endif - SynchPrediv = 0xFF; + SynchPrediv = 0xFF; AsynchPrediv = 0x7F; #else -#if defined(SOC_SERIES_N32H7xx) /* Enable HSE */ - RCC_EnableLsi(ENABLE); RCC_ConfigHse(RCC_HSE_ENABLE); if (RCC_WaitHseStable() == ERROR) { return -RT_ERROR; } + +#if defined(SOC_SERIES_N32H7xx) RCC_ConfigRtcClk(RCC_RTCCLK_SRC_HSEDIV, RCC_RTCCLK_HSEDIV50); -#endif - SynchPrediv = 0x1387; + + SynchPrediv = 0x1387; AsynchPrediv = 0x63; +#elif defined(SOC_SERIES_N32H49x) || defined(SOC_SERIES_N32H47x_48x) + RCC_ConfigRtcClk(RCC_RTCCLK_SRC_HSE_DIV128); + + SynchPrediv = 0x3E7; + AsynchPrediv = 0x7C; +#endif #endif #if defined(SOC_SERIES_N32H7xx) /* Enable the RTC Clock */ RCC_EnableAPB5PeriphClk2(RCC_APB5_PERIPHEN_M7_RTCPCLK, ENABLE); RCC_EnableAPB5PeriphClk2(RCC_APB5_PERIPHEN_M7_RTCPCLKLP, ENABLE); +#endif RCC_EnableRtcClk(ENABLE); - if (RTC_WaitForSynchro() == ERROR) + /* Wait for RTC register synchronization */ + rt_uint32_t sync_try; + rt_bool_t synced = RT_FALSE; + + for (sync_try = 0; sync_try < 3; sync_try++) { + if (RTC_WaitForSynchro() == SUCCESS) + { + synced = RT_TRUE; + break; + } + + LOG_W("RTC sync not ready (try %d/3)", sync_try + 1); + } + + if (!synced) + { + LOG_E("RTC sync timeout, RTC may be unusable."); return -RT_ERROR; } -#endif if (RTC_BKUP_Read(RTC_BKP_REG1) != BKUP_REG_DATA) { LOG_I("RTC hasn't been configured, please use command to config."); RTC_InitStructure.RTC_AsynchPrediv = AsynchPrediv; - RTC_InitStructure.RTC_SynchPrediv = SynchPrediv; - RTC_InitStructure.RTC_HourFormat = RTC_24HOUR_FORMAT; + RTC_InitStructure.RTC_SynchPrediv = SynchPrediv; + RTC_InitStructure.RTC_HourFormat = RTC_24HOUR_FORMAT; if (RTC_Init(&RTC_InitStructure) == ERROR) { @@ -225,7 +269,7 @@ static rt_err_t n32_rtc_get_secs(time_t *sec) struct timeval tv; n32_rtc_get_timeval(&tv); - *(time_t *) sec = tv.tv_sec; + *(time_t *)sec = tv.tv_sec; LOG_D("RTC: get rtc_time %d", *sec); return RT_EOK; @@ -268,12 +312,12 @@ static rt_err_t n32_rtc_set_alarm(struct rt_rtc_wkalarm *alarm) LOG_D("RT_DEVICE_CTRL_RTC_SET_ALARM"); if (alarm != RT_NULL) { - rtc_device.wkalarm.enable = alarm->enable; + rtc_device.wkalarm.enable = alarm->enable; rtc_device.wkalarm.tm_hour = alarm->tm_hour; - rtc_device.wkalarm.tm_min = alarm->tm_min; - rtc_device.wkalarm.tm_sec = alarm->tm_sec; + rtc_device.wkalarm.tm_min = alarm->tm_min; + rtc_device.wkalarm.tm_sec = alarm->tm_sec; rtc_device.wkalarm.tm_mday = alarm->tm_mday; - rtc_device.wkalarm.tm_mon = alarm->tm_mon; + rtc_device.wkalarm.tm_mon = alarm->tm_mon; rtc_device.wkalarm.tm_year = alarm->tm_year; rtc_alarm_time_set(&rtc_device); } @@ -292,8 +336,7 @@ static rt_err_t n32_rtc_set_alarm(struct rt_rtc_wkalarm *alarm) } -static const struct rt_rtc_ops n32_rtc_ops = -{ +static const struct rt_rtc_ops n32_rtc_ops = { n32_rtc_init, n32_rtc_get_secs, n32_rtc_set_secs, @@ -304,7 +347,6 @@ static const struct rt_rtc_ops n32_rtc_ops = }; - #ifdef RT_USING_ALARM void rt_rtc_alarm_enable(void) { @@ -324,23 +366,26 @@ void rt_rtc_alarm_enable(void) Alarm_InitStruct.AlarmTime.Minutes, Alarm_InitStruct.AlarmTime.Seconds); - RTC_ClrIntPendingBit(RTC_INT_ALRA); EXTI_ClrITPendBit(EXTI_LINE17); EXTI_InitStruct(&EXTI_InitStructure); -#if defined(SOC_SERIES_N32H7xx) - EXTI_InitStructure.EXTI_Line = EXTI_LINE17; -#endif - EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; + EXTI_InitStructure.EXTI_Line = EXTI_LINE17; + EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_InitPeripheral(&EXTI_InitStructure); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); + +#if defined(SOC_SERIES_N32H7xx) NVIC_SetPriority(RTC_ALARM_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 0x02, 0)); NVIC_EnableIRQ(RTC_ALARM_IRQn); +#elif defined(SOC_SERIES_N32H49x) || defined(SOC_SERIES_N32H47x_48x) + NVIC_SetPriority(RTCAlarm_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 0x02, 0)); + NVIC_EnableIRQ(RTCAlarm_IRQn); +#endif } void rt_rtc_alarm_disable(void) @@ -348,15 +393,18 @@ void rt_rtc_alarm_disable(void) /* Disable the AlarmX */ RTC_EnableAlarm(RTC_A_ALARM, DISABLE); + /* Disable EXTI Line */ EXTI_InitStructure.EXTI_LineCmd = DISABLE; -#if defined(SOC_SERIES_N32H7xx) - EXTI_InitStructure.EXTI_Line = EXTI_LINE17; + EXTI_InitStructure.EXTI_Line = EXTI_LINE17; EXTI_InitPeripheral(&EXTI_InitStructure); EXTI_ClrITPendBit(EXTI_LINE17); -#endif +#if defined(SOC_SERIES_N32H7xx) NVIC_DisableIRQ(RTC_ALARM_IRQn); +#elif defined(SOC_SERIES_N32H49x) || defined(SOC_SERIES_N32H47x_48x) + NVIC_DisableIRQ(RTCAlarm_IRQn); +#endif } static int rt_rtc_alarm_init(void) @@ -364,21 +412,21 @@ static int rt_rtc_alarm_init(void) return RT_EOK; } -static rt_err_t rtc_alarm_time_set(struct rtc_device_object* p_dev) +static rt_err_t rtc_alarm_time_set(struct rtc_device_object *p_dev) { if (p_dev->wkalarm.enable) { /* Disable the AlarmX */ RTC_EnableAlarm(RTC_A_ALARM, DISABLE); - Alarm_InitStruct.AlarmTime.Hours = p_dev->wkalarm.tm_hour; + Alarm_InitStruct.AlarmTime.Hours = p_dev->wkalarm.tm_hour; Alarm_InitStruct.AlarmTime.Minutes = p_dev->wkalarm.tm_min; Alarm_InitStruct.AlarmTime.Seconds = p_dev->wkalarm.tm_sec; - Alarm_InitStruct.DateWeekValue = p_dev->wkalarm.tm_mday; + Alarm_InitStruct.DateWeekValue = p_dev->wkalarm.tm_mday; - Alarm_InitStruct.AlarmTime.H12 = RTC_AM_H12; - Alarm_InitStruct.DateWeekMode = RTC_ALARM_SEL_WEEKDAY_DATE; - Alarm_InitStruct.AlarmMask = RTC_ALARMMASK_NONE; + Alarm_InitStruct.AlarmTime.H12 = RTC_AM_H12; + Alarm_InitStruct.DateWeekMode = RTC_ALARM_SEL_WEEKDAY_DATE; + Alarm_InitStruct.AlarmMask = RTC_ALARMMASK_NONE; LOG_D("alarm set:%d:%d:%d", Alarm_InitStruct.AlarmTime.Hours, Alarm_InitStruct.AlarmTime.Minutes, @@ -389,14 +437,16 @@ static rt_err_t rtc_alarm_time_set(struct rtc_device_object* p_dev) return RT_EOK; } - +#if defined(SOC_SERIES_N32H7xx) void RTC_ALARM_IRQHandler(void) +#elif defined(SOC_SERIES_N32H49x) || defined(SOC_SERIES_N32H47x_48x) +void RTCAlarm_IRQHandler(void) +#endif { rt_interrupt_enter(); -#if defined(SOC_SERIES_N32H7xx) + /* Clear EXTI Line Pend Bit */ EXTI_ClrITPendBit(EXTI_LINE17); -#endif if (RTC_GetITStatus(RTC_INT_ALRA) != RESET) { diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_sdmmc.c b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_sdmmc.c new file mode 100644 index 00000000000..20dd26ddb94 --- /dev/null +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_sdmmc.c @@ -0,0 +1,909 @@ +/* + * Copyright (c) 2006-2026, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2026-07-10 Claude N32 SDMMC driver with rt_mmcsd_host_ops, + * SDMMC1/SDMMC2 dual-instance support. + * + * Low-level SDHOST ops (request/set_iocfg/get_card_status/enable_sdio_irq). + * Data transfer: configurable CPU FIFO polling or SDMA. + * INTSTS.CMDC unreliable → poll CMDINHC. + */ + +#include "drv_sdmmc.h" +#include "n32h7xx_rcc.h" +#include "n32h7xx_pwr.h" +#include "n32h7xx_gpio.h" +#include +#include + +#define DRV_DBG_TAG "drv.sdmmc" +#define DRV_DBG_LVL DBG_INFO +#include + +#ifdef RT_USING_SDIO + +#define N32_SDIO_CMD_TIMEOUT_MS 100U +#define N32_SDIO_DATA_TIMEOUT_MS 2000U +#define N32_SDIO_BUSY_TIMEOUT_MS 1000U + +/* ═══════════════════════════════════════════════════════════════════════ + * Instance selection — matches STM32 convention: BSP_USING_SDIOx + * ═══════════════════════════════════════════════════════════════════ */ + +#if defined(BSP_USING_SDIO1) && defined(BSP_USING_SDIO2) +#error "Only one SDIO instance supported per configuration" +#endif + +#if defined(BSP_USING_SDIO1) + +static struct n32_sdio_config sdio_cfg = { + .sdhost = SDHOST1, + .sdmmc = SDMMC1, + .irqn = SDMMC1_IRQn, + .clkfb_val = SDMMC1_CLKFB, + .pwrctrl_val = HSC1_SDMMC1_PWRCTRL, + .lpclk_en = RCC_AXI_PERIPHEN_M7_SDMMC1LP, + .periphrst_val = (RCC_AXI_PERIPHRST_SDMMC1 | RCC_AXI_PERIPHRST_SDHOST1), + .name = "sd0", +}; +#define SDMMC_ISR SDMMC1_IRQHandler +#define SDMMC_ENABLE_CLK_FN RCC_EnableAXIPeriphClk1 +#define SDMMC_ENABLE_RST_FN RCC_EnableAXIPeriphReset1 + +#elif defined(BSP_USING_SDIO2) + +static struct n32_sdio_config sdio_cfg = { + .sdhost = SDHOST2, + .sdmmc = SDMMC2, + .irqn = SDMMC2_IRQn, + .clkfb_val = SDMMC2_CLKFB, + .pwrctrl_val = HSC2_SDMMC2_PWRCTRL, + .lpclk_en = RCC_AHB1_PERIPHEN_M7_SDMMC2LP, + .periphrst_val = (RCC_AHB1_PERIPHRST_SDMMC2 | RCC_AHB1_PERIPHRST_SDHOST2), + .name = "sd0", +}; +#define SDMMC_ISR SDMMC2_IRQHandler +#define SDMMC_ENABLE_CLK_FN RCC_EnableAHB1PeriphClk1 +#define SDMMC_ENABLE_RST_FN RCC_EnableAHB1PeriphReset1 + +#else +#error "Define BSP_USING_SDIO1 or BSP_USING_SDIO2" +#endif + +/* ═══════════════════════════════════════════════════════════════════════ + * Helpers + * ═══════════════════════════════════════════════════════════════════════ */ + +/* RT-Thread → N32 response type mapping. + * RT-Thread uses bits [0:3] of flags, N32 uses CARD_ResponseType enum. */ +static SDMMC_CardRspType _map_resp_type(struct rt_mmcsd_cmd *cmd) +{ + switch (resp_type(cmd)) + { + case RESP_NONE: + return CARD_ResponseTypeNone; + case RESP_R1: + return CARD_ResponseTypeR1; + case RESP_R1B: + return CARD_ResponseTypeR1b; + case RESP_R2: + return CARD_ResponseTypeR2; + case RESP_R3: + return CARD_ResponseTypeR3; + case RESP_R4: + return CARD_ResponseTypeR4; + case RESP_R6: + return CARD_ResponseTypeR6; + case RESP_R7: + return CARD_ResponseTypeR7; + case RESP_R5: + return CARD_ResponseTypeR5; + default: + return CARD_ResponseTypeR1; + } +} + +/* ── R2 response normalisation ─────────────────────────────────────── + * N32 SDHOST stores R2 byte-shifted; shift 8 bits left to match + * the SDHCI layout expected by mmcsd_decode_cid / mmcsd_decode_csd. */ +static void _fixup_r2_resp(SDHOST_Module *sdhost, rt_uint32_t resp[4]) +{ + rt_uint32_t r0 = sdhost->CMDRSP0; + rt_uint32_t r1 = sdhost->CMDRSP1; + rt_uint32_t r2 = sdhost->CMDRSP2; + rt_uint32_t r3 = sdhost->CMDRSP3; + + /* N32 numbers R2 words from least to most significant, while + * RT-Thread expects resp[0] to hold bits 127:96. */ + resp[0] = (r3 << 8U) | (r2 >> 24U); + resp[1] = (r2 << 8U) | (r1 >> 24U); + resp[2] = (r1 << 8U) | (r0 >> 24U); + resp[3] = r0 << 8U; +} + +static rt_bool_t _wait_present_clear(SDHOST_Module *sdhost, + rt_uint32_t mask, + rt_uint32_t timeout_ms) +{ + rt_tick_t start = rt_tick_get(); + rt_tick_t timeout = rt_tick_from_millisecond((rt_int32_t)timeout_ms); + + while (sdhost->PRESTS & mask) + { + if ((rt_tick_get() - start) >= timeout) + { + return RT_FALSE; + } + } + + return RT_TRUE; +} + +static rt_bool_t _wait_data_status(SDHOST_Module *sdhost, + rt_uint32_t ready_mask, + rt_uint32_t timeout_ms, + rt_uint32_t *status) +{ + rt_tick_t start = rt_tick_get(); + rt_tick_t timeout = rt_tick_from_millisecond((rt_int32_t)timeout_ms); + + do + { + *status = sdhost->INTSTS; + if (*status & (ready_mask | SDHOST_DataErrorFlag | SDHOST_DmaErrorFlag)) + { + return RT_TRUE; + } + } while ((rt_tick_get() - start) < timeout); + + return RT_FALSE; +} + +#ifdef BSP_USING_SDIO_SDMA +static rt_bool_t _dcache_is_enabled(void) +{ +#if defined(__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + return (SCB->CCR & SCB_CCR_DC_Msk) != 0U ? RT_TRUE : RT_FALSE; +#else + return RT_FALSE; +#endif +} + +static void _config_sdma_boundary(SDHOST_Module *sdhost, + const void *buffer, + rt_uint32_t length) +{ + rt_uint32_t address = (rt_uint32_t)buffer; + SDHOST_SDMA_Buffer_Size size; + + if (length + (address % 0x1000U) <= 0x1000U) + { + size = SDHOST_SDMABUFFERSIZE_4KB; + } + else if (length + (address % 0x2000U) <= 0x2000U) + { + size = SDHOST_SDMABUFFERSIZE_8KB; + } + else if (length + (address % 0x4000U) <= 0x4000U) + { + size = SDHOST_SDMABUFFERSIZE_16KB; + } + else if (length + (address % 0x8000U) <= 0x8000U) + { + size = SDHOST_SDMABUFFERSIZE_32KB; + } + else if (length + (address % 0x10000U) <= 0x10000U) + { + size = SDHOST_SDMABUFFERSIZE_64KB; + } + else if (length + (address % 0x20000U) <= 0x20000U) + { + size = SDHOST_SDMABUFFERSIZE_128KB; + } + else if (length + (address % 0x40000U) <= 0x40000U) + { + size = SDHOST_SDMABUFFERSIZE_256KB; + } + else + { + size = SDHOST_SDMABUFFERSIZE_512KB; + } + + SDMMC_ConfigSDMABufferSize(sdhost, size); +} +#endif + +/* ═══════════════════════════════════════════════════════════════════════ + * Hardware setup (called once at host creation) + * ═══════════════════════════════════════════════════════════════════════ */ + +static int _hw_setup(struct n32_sdio *sdio) +{ + const struct n32_sdio_config *c = &sdio->cfg; + int i; + + /* 1. Power enable */ + PWR_MoudlePowerEnable(c->pwrctrl_val, ENABLE); + + /* 2. LP clock enable */ + SDMMC_ENABLE_CLK_FN(c->lpclk_en, ENABLE); + + /* 3. Peripheral reset (de-assert) */ + SDMMC_ENABLE_RST_FN(c->periphrst_val); + + /* 4. Clock-feedback select */ + AFIO_SDMMCClkSel(c->clkfb_val, ENABLE); + + /* 6. SDMMC wrapper configuration */ + { + SDMMC_WrapperType w; + SDMMC_StructWrapperInit(&w); + w.MaxBlockLen = SDMMC_MAXBLOCKLEN_512B; + w.SDBaseCLKFreq = 25; + w.TimeOutUnit = SDMMC_TIMEOUTCLKUNIT_KHZ; + w.TuningCNT = 0x20; + w.WKUPSignalMode = SDMMC_ASYNCWKUP; + w.SPIBlockMode = SDMMC_SPIBLOCKMODEUNSUPPORT; + w.SPIMode = SDMMC_SPIMODEUNSUPPORT; + w.DDR50 = SDMMC_DDR50SUPPORT; + w.SDR104 = SDMMC_SDR104SUPPORT; + w.SDR50 = SDMMC_SDR50SUPPORT; + w.SlotType = SDMMC_SDTYPE; + w.AsyncInt = SDMMC_ASYNCINTSUPPORT; + w.Suspend_Resume = SDMMC_SUSRESUNSUPPORT; + w.SDMA = SDMMC_SDMASUPPORT; + w.HS = SDMMC_HSSUPPORT; + w.ADMA2 = SDMMC_ADMA2SUPPORT; + w.Embedded_8bit = SDMMC_EMBEDDEDUNSUPPORT; + w.UseTuningSDR50 = SDMMC_SDR50TUNING; + w.DSSDCLKFreq = 0x04; + w.INITSDCLKFreq = 0x00; + w.SDR12SDCLKFreq = 0x04; + w.HSSDCLKFreq = 0x02; + w.SDR50SDCLKFreq = 0x01; + w.SDR25SDCLKFreq = 0x02; + w.SDR104SDCLKFreq = 0x00; + w.DDR50SDCLKFreq = 0x02; + SDMMC_WrapperConfig(c->sdmmc, &w); + } + + /* 7. Card detect — poll with timeout */ + SDMMC_ConfigCardDetectSignal(c->sdhost, + SDMMC_CARDDETECT_TEST, + SDMMC_CARDTESTLEVEL_HIGH); + + for (i = 0; + SDMMC_GetPresentFlagStatus(c->sdhost, SDHOST_CardInsertedFlag) != SET && i < 1000; + i++) + { + rt_thread_mdelay(1); + } + if (i >= 1000) + { + LOG_E("%s: no card detected", c->name); + return -RT_ERROR; + } + LOG_D("%s: card detected", c->name); + + /* 8. Power on + init clock (400 kHz identification) */ + SDMMC_EnablePower(c->sdhost, ENABLE); + { + uint32_t ps; + if (((SD_XIN_CLK % 400000U) != 0) || ((SD_XIN_CLK / 400000U) % 2 != 0)) + { + ps = SD_XIN_CLK / 400000U / 2 + 1; + } + else + { + ps = SD_XIN_CLK / 400000U / 2; + } + SDMMC_SetSdClock(c->sdhost, DISABLE, ps); + } + + /* Status bits must be enabled even when signal interrupts are disabled. */ + SDMMC_EnableFlagStatus(c->sdhost, SDHOST_AllInterruptFlags, ENABLE); + + LOG_I("%s: hw init done, data path %s", c->name, +#ifdef BSP_USING_SDIO_SDMA + "SDMA"); +#else + "PIO"); +#endif + return RT_EOK; +} + +/* ═══════════════════════════════════════════════════════════════════════ + * rt_mmcsd_host_ops + * ═══════════════════════════════════════════════════════════════════════ */ + +/* ── request() ─────────────────────────────────────────────────────── */ + +static void n32_sdio_request(struct rt_mmcsd_host *host, + struct rt_mmcsd_req *req) +{ + struct n32_sdio *sdio = host->private_data; + SDHOST_Module *sdh = sdio->cfg.sdhost; + struct rt_mmcsd_cmd *cmd = req->cmd; + struct rt_mmcsd_data *data; + SDMMC_CMD sc; + SDHOST_TMODE_struct tm; +#ifdef BSP_USING_SDIO_SDMA + rt_uint32_t total_bytes; +#endif + + RT_ASSERT(cmd != RT_NULL); + + /* ── N32 SDHOST quirks ───────────────────────────────────────── + * CMD5: memory cards return bogus R4 → skip init_sdio() path. */ + if (cmd->cmd_code == SD_IO_SEND_OP_COND) + { + cmd->err = -RT_ERROR; + mmcsd_req_complete(host); + return; + } + + data = cmd->data; + cmd->err = RT_EOK; + if (data != RT_NULL) + { + data->err = RT_EOK; + } + + rt_memset(&sc, 0, sizeof(sc)); + SDMMC_TModeStructInit(&tm); + + /* Do not let status from the previous transaction poison this request. */ + SDMMC_ClrFlag(sdh, SDHOST_CommandFlag | SDHOST_DataFlag | + SDHOST_DmaErrorFlag | SDHOST_DmaCompleteFlag); + + /* ── Populate N32 command descriptor ─────────────────────── */ + sc.index = cmd->cmd_code; + sc.argument = cmd->arg; + sc.type = CARD_CommandTypeNormal; + sc.responseType = _map_resp_type(cmd); + sc.flags = 0; + sc.responseErrorFlags = 0; + + /* ── Data transfer setup ─────────────────────────────────── */ + if (data != RT_NULL) + { + sc.flags |= SDHOST_DataPresentFlag; + +#ifdef BSP_USING_SDIO_SDMA + tm.DMAE = SDHOST_TMODE_DMAENABLE; +#else + tm.DMAE = SDHOST_TMODE_DMADISABLE; +#endif + tm.DATDIR = (data->flags & DATA_DIR_READ) + ? SDHOST_TMODE_DATDIR_READ + : SDHOST_TMODE_DATDIR_WRITE; + tm.BCNTE = (data->blks > 1) + ? SDHOST_TMODE_BLOCKCNTENABLE + : SDHOST_TMODE_BLOCKCNTDISABLE; + tm.BLKSEL = (data->blks > 1) + ? SDHOST_TMODE_MULTIBLK + : SDHOST_TMODE_SINGLEBLK; + /* Auto CMD12 disabled — driver sends CMD12 manually in _out */ + tm.ACMDE = SDHOST_TMODE_NOACMDEN; + + sdh->BLKCFG = (sdh->BLKCFG & ~(SDHOST_BLKCFG_CNT | SDHOST_BLKCFG_SIZE)) | ((data->blks << SDHOST_BLOCK_COUNT_OFFSET) & SDHOST_BLKCFG_CNT) | (data->blksize & SDHOST_BLKCFG_SIZE); + +#ifdef BSP_USING_SDIO_SDMA + total_bytes = data->blks * data->blksize; + + if ((((rt_uint32_t)data->buf) & 3U) != 0U) + { + data->err = -RT_EINVAL; + goto _out; + } + + _config_sdma_boundary(sdh, data->buf, total_bytes); + + /* ── SDMA: cache maintenance ──────────────────────────── */ +#if defined(__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + if (_dcache_is_enabled() && (data->flags & DATA_DIR_READ)) + { + SCB_CleanInvalidateDCache_by_Addr((uint32_t *)data->buf, + (int32_t)total_bytes); + } + else if (_dcache_is_enabled()) + { + SCB_CleanDCache_by_Addr((uint32_t *)data->buf, + (int32_t)total_bytes); + } +#endif + /* ── SDMA: system address + DMA mode ──────────────────── */ + sdh->DSADD = (uint32_t)(data->buf); + sdh->CTRL1 &= ~SDHOST_CTRL1_DMASEL; /* SDMA mode (DMASEL=0) */ +#endif + } + + /* ── Fire command ─────────────────────────────────────────── */ + SDMMC_SendCommand(sdh, &sc, &tm); + + /* ── Wait command completion (poll CMDINHC — INTSTS.CMDC unreliable) ── */ + if (!_wait_present_clear(sdh, SDHOST_CommandInhibitFlag, + N32_SDIO_CMD_TIMEOUT_MS)) + { + cmd->err = -RT_ETIMEOUT; + SDMMC_SoftWareReset(sdh, SDHOST_SOFTWARE_CMDLINE); + goto _out; + } + + /* ── Check hardware errors ────────────────────────────────── */ + { + uint32_t ints = sdh->INTSTS; + if (ints & SDHOST_CommandErrorFlag) + { + sdh->INTSTS = (ints & SDHOST_CommandErrorFlag); + cmd->err = (ints & SDHOST_CommandTimeoutFlag) + ? -RT_ETIMEOUT + : -RT_ERROR; + SDMMC_SoftWareReset(sdh, SDHOST_SOFTWARE_CMDLINE); + goto _out; + } + } + + /* ── Read response ────────────────────────────────────────── */ + if (sc.responseType == CARD_ResponseTypeR2) + { + _fixup_r2_resp(sdh, cmd->resp); + } + else if (sc.responseType != CARD_ResponseTypeNone) + { + cmd->resp[0] = sdh->CMDRSP0; + } + SDMMC_ClrFlag(sdh, SDHOST_CommandFlag); + + if (data == RT_NULL && sc.responseType == CARD_ResponseTypeR1b && + !_wait_present_clear(sdh, SDHOST_DataLineActiveFlag, + N32_SDIO_BUSY_TIMEOUT_MS)) + { + cmd->err = -RT_ETIMEOUT; + SDMMC_SoftWareReset(sdh, SDHOST_SOFTWARE_DATALINE); + goto _out; + } + + /* ── Data transfer ───────────────────────────────────────── */ + if (data != RT_NULL) + { +#ifdef BSP_USING_SDIO_SDMA + /* ── SDMA path ────────────────────────────────────────── */ + volatile uint32_t to; + uint32_t ints; + uint32_t sdma_addr; + + /* Poll for TC or error (HAL-style loop with DSADD re-write) */ + to = 0x800000U; + while (1) + { + ints = sdh->INTSTS; + + if (ints & SDHOST_DmaCompleteFlag) + { + sdh->INTSTS = SDHOST_DmaCompleteFlag; + sdma_addr = sdh->DSADD; + sdh->DSADD = sdma_addr; + } + + if (ints & (SDHOST_DataCompleteFlag | SDHOST_DataErrorFlag | SDHOST_DmaErrorFlag)) + { + break; + } + + if (--to == 0) + { + data->err = -RT_ETIMEOUT; + goto _data_error; + } + } + + if (ints & (SDHOST_DataErrorFlag | SDHOST_DmaErrorFlag)) + { + LOG_E("sdma cmd=%u failed: intsts=0x%08x prests=0x%08x dsadd=0x%08x", + cmd->cmd_code, ints, sdh->PRESTS, sdh->DSADD); + sdh->INTSTS = (ints & (SDHOST_DataErrorFlag | SDHOST_DmaErrorFlag)); + data->err = (ints & SDHOST_DataTimeoutFlag) + ? -RT_ETIMEOUT + : -RT_ERROR; + goto _data_error; + } + + sdh->INTSTS = SDHOST_DataCompleteFlag | SDHOST_DmaCompleteFlag; + +#if defined(__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + if (_dcache_is_enabled() && (data->flags & DATA_DIR_READ)) + { + SCB_InvalidateDCache_by_Addr((uint32_t *)data->buf, + (int32_t)total_bytes); + } +#endif +#else + /* ── CPU FIFO path ────────────────────────────────────── */ + rt_uint32_t block; + rt_uint32_t i; + rt_uint32_t words_per_block; + uint32_t ints; + + if ((data->blksize & 3U) != 0U) + { + data->err = -RT_EINVAL; + goto _data_error; + } + words_per_block = data->blksize / 4U; + + if (data->flags & DATA_DIR_READ) + { + rt_uint32_t *dst = (rt_uint32_t *)data->buf; + for (block = 0; block < data->blks; block++) + { + if (!_wait_data_status(sdh, SDHOST_BufferReadReadyFlag, + N32_SDIO_DATA_TIMEOUT_MS, &ints)) + { + data->err = -RT_ETIMEOUT; + goto _data_error; + } + if (ints & (SDHOST_DataErrorFlag | SDHOST_DmaErrorFlag)) + { + data->err = (ints & SDHOST_DataTimeoutFlag) + ? -RT_ETIMEOUT + : -RT_ERROR; + goto _data_error; + } + + /* One BUFRRDY event makes one complete block available. */ + SDMMC_ClrFlag(sdh, SDHOST_BufferReadReadyFlag); + for (i = 0; i < words_per_block; i++) + { + *dst++ = SDMMC_ReadData(sdh); + } + } + } + else + { + const rt_uint32_t *src = (const rt_uint32_t *)data->buf; + for (block = 0; block < data->blks; block++) + { + if (!_wait_data_status(sdh, SDHOST_BufferWriteReadyFlag, + N32_SDIO_DATA_TIMEOUT_MS, &ints)) + { + data->err = -RT_ETIMEOUT; + goto _data_error; + } + if (ints & (SDHOST_DataErrorFlag | SDHOST_DmaErrorFlag)) + { + data->err = (ints & SDHOST_DataTimeoutFlag) + ? -RT_ETIMEOUT + : -RT_ERROR; + goto _data_error; + } + + /* One BUFWRDY event accepts one complete block. */ + SDMMC_ClrFlag(sdh, SDHOST_BufferWriteReadyFlag); + for (i = 0; i < words_per_block; i++) + { + SDMMC_WriteData(sdh, *src++); + } + } + } + + if (!_wait_data_status(sdh, SDHOST_DataCompleteFlag, + N32_SDIO_DATA_TIMEOUT_MS, &ints)) + { + data->err = -RT_ETIMEOUT; + goto _data_error; + } + if (ints & (SDHOST_DataErrorFlag | SDHOST_DmaErrorFlag)) + { + data->err = (ints & SDHOST_DataTimeoutFlag) + ? -RT_ETIMEOUT + : -RT_ERROR; + goto _data_error; + } + SDMMC_ClrFlag(sdh, SDHOST_DataFlag | SDHOST_DmaCompleteFlag); +#endif + + /* Multi-block transfers are terminated by CMD12 below. */ + if (req->stop == RT_NULL && + !_wait_present_clear(sdh, SDHOST_DataLineActiveFlag, + N32_SDIO_BUSY_TIMEOUT_MS)) + { + data->err = -RT_ETIMEOUT; + goto _data_error; + } + } + + goto _out; + +_data_error: +#ifdef BSP_USING_SDIO_SDMA + LOG_E("sdma cmd=%u data error=%d: intsts=0x%08x prests=0x%08x dsadd=0x%08x", + cmd->cmd_code, data != RT_NULL ? data->err : 0, + sdh->INTSTS, sdh->PRESTS, sdh->DSADD); +#endif + SDMMC_ClrFlag(sdh, SDHOST_DataFlag | SDHOST_DmaErrorFlag | + SDHOST_DmaCompleteFlag); + SDMMC_SoftWareReset(sdh, SDHOST_SOFTWARE_DATALINE); + +_out: + /* ── Stop command (CMD12) if multi-block ─────────────────── */ + if (req->stop != RT_NULL) + { + SDMMC_CMD sc_s; + SDHOST_TMODE_struct tm_s; + + rt_memset(&sc_s, 0, sizeof(sc_s)); + SDMMC_TModeStructInit(&tm_s); + + sc_s.index = req->stop->cmd_code; + sc_s.argument = req->stop->arg; + sc_s.type = CARD_CommandTypeAbort; + sc_s.responseType = _map_resp_type(req->stop); + sc_s.flags = 0; + sc_s.responseErrorFlags = 0; + + SDMMC_ClrFlag(sdh, SDHOST_CommandFlag); + SDMMC_SendCommand(sdh, &sc_s, &tm_s); + if (!_wait_present_clear(sdh, SDHOST_CommandInhibitFlag, + N32_SDIO_CMD_TIMEOUT_MS)) + { + req->stop->err = -RT_ETIMEOUT; + SDMMC_SoftWareReset(sdh, SDHOST_SOFTWARE_CMDLINE); + } + else + { + uint32_t ints = sdh->INTSTS; + if (ints & SDHOST_CommandErrorFlag) + { + req->stop->err = (ints & SDHOST_CommandTimeoutFlag) + ? -RT_ETIMEOUT + : -RT_ERROR; + } + else + { + if (sc_s.responseType == CARD_ResponseTypeR2) + { + _fixup_r2_resp(sdh, req->stop->resp); + } + else if (sc_s.responseType != CARD_ResponseTypeNone) + { + req->stop->resp[0] = sdh->CMDRSP0; + } + req->stop->err = RT_EOK; + + if (!_wait_present_clear(sdh, SDHOST_DataLineActiveFlag, + N32_SDIO_BUSY_TIMEOUT_MS)) + { + req->stop->err = -RT_ETIMEOUT; + SDMMC_SoftWareReset(sdh, SDHOST_SOFTWARE_DATALINE); + } + } + SDMMC_ClrFlag(sdh, SDHOST_CommandFlag); + } + } + + mmcsd_req_complete(host); +} + +/* ── set_iocfg() ───────────────────────────────────────────────────── */ + +static void n32_sdio_set_iocfg(struct rt_mmcsd_host *host, + struct rt_mmcsd_io_cfg *io_cfg) +{ + struct n32_sdio *sdio = host->private_data; + SDHOST_Module *sdh = sdio->cfg.sdhost; + rt_uint32_t clk = io_cfg->clock; + rt_uint32_t ps; + + /* ── Power mode ─────────────────────────────────────────── */ + switch (io_cfg->power_mode) + { + case MMCSD_POWER_OFF: + SDMMC_EnablePower(sdh, DISABLE); + return; + case MMCSD_POWER_UP: + /* clock stopped during power-up transition */ + SDMMC_EnablePower(sdh, ENABLE); + SDMMC_SetSdClock(sdh, DISABLE, 0); + return; + case MMCSD_POWER_ON: + break; /* proceed to clock + bus width config */ + default: + return; + } + + /* ── Sanity checks ───────────────────────────────────────── */ + if (clk == 0U) + { + LOG_W("%s: zero clock requested, keeping current", sdio->cfg.name); + return; + } + + if (clk > host->freq_max) + { + clk = host->freq_max; + } + + if (clk > (SD_XIN_CLK / 2U)) + { + LOG_W("%s: clk %u > max %u, clamping", + sdio->cfg.name, clk, SD_XIN_CLK / 2U); + clk = SD_XIN_CLK / 2U; + } + + /* SDCLK = SD_XIN_CLK / (2 * prescaler) */ + ps = (SD_XIN_CLK + (2U * clk) - 1U) / (2U * clk); + if (ps < 1U) + { + ps = 1U; + } + + LOG_D("%s: set clk req=%u real=%u ps=%lu bus=%s", + sdio->cfg.name, + clk / 1000U, + (SD_XIN_CLK / (2U * ps)) / 1000U, + ps, + io_cfg->bus_width == MMCSD_BUS_WIDTH_4 ? "4-bit" : io_cfg->bus_width == MMCSD_BUS_WIDTH_8 ? "8-bit" + : "1-bit"); + + /* ── Apply clock ─────────────────────────────────────────── */ + SDMMC_SetSdClock(sdh, DISABLE, ps); + + /* ── Bus width ───────────────────────────────────────────── */ + if (io_cfg->bus_width == MMCSD_BUS_WIDTH_4) + { + SDMMC_ConfigBusWidth(sdh, SDHOST_DataBusWidth4Bit); + } + else if (io_cfg->bus_width == MMCSD_BUS_WIDTH_8) + { + SDMMC_ConfigBusWidth(sdh, SDHOST_DataBusWidth8Bit); + } + else + { + SDMMC_ConfigBusWidth(sdh, SDHOST_DataBusWidth1Bit); + } +} + +/* ── get_card_status() ─────────────────────────────────────────────── */ + +static rt_int32_t n32_sdio_get_card_status(struct rt_mmcsd_host *host) +{ + struct n32_sdio *sdio = host->private_data; + + if (SDMMC_GetPresentFlagStatus(sdio->cfg.sdhost, + SDHOST_CardInsertedFlag) == SET) + { + return 1; /* card present */ + } + return 0; +} + +/* ── enable_sdio_irq() ─────────────────────────────────────────────── */ + +static void n32_sdio_enable_sdio_irq(struct rt_mmcsd_host *host, + rt_int32_t enable) +{ + struct n32_sdio *sdio = host->private_data; + SDHOST_Module *sdh = sdio->cfg.sdhost; + + if (enable) + { + LOG_D("%s: enable sdio irq", sdio->cfg.name); + SDMMC_ClrFlag(sdh, SDHOST_CardInterruptFlag); + SDMMC_EnableFlagStatus(sdh, SDHOST_CardInterruptFlag, ENABLE); + SDMMC_ConfigInt(sdh, SDHOST_CardInterruptFlag, ENABLE); + NVIC_SetPriority(sdio->cfg.irqn, 1); + NVIC_EnableIRQ(sdio->cfg.irqn); + } + else + { + LOG_D("%s: disable sdio irq", sdio->cfg.name); + NVIC_DisableIRQ(sdio->cfg.irqn); + SDMMC_ConfigInt(sdh, SDHOST_CardInterruptFlag, DISABLE); + SDMMC_EnableFlagStatus(sdh, SDHOST_CardInterruptFlag, DISABLE); + } +} + +/* ═══════════════════════════════════════════════════════════════════════ + * Host ops table + * ═══════════════════════════════════════════════════════════════════════ */ + +static const struct rt_mmcsd_host_ops n32_sdio_ops = { + .request = n32_sdio_request, + .set_iocfg = n32_sdio_set_iocfg, + .get_card_status = n32_sdio_get_card_status, + .enable_sdio_irq = n32_sdio_enable_sdio_irq, + /* tuning / card_busy / signal_voltage_switch → deferred to future */ +}; + +/* ═══════════════════════════════════════════════════════════════════════ + * ISR — forwards to RT-Thread SDIO framework + * ═══════════════════════════════════════════════════════════════════════ */ + +static struct n32_sdio *sdio_inst = RT_NULL; /* singleton for ISR */ + +void SDMMC_ISR(void) +{ + rt_interrupt_enter(); + + if (sdio_inst != RT_NULL && sdio_inst->host != RT_NULL) + { + uint32_t pending = sdio_inst->cfg.sdhost->INTSTS & SDHOST_CardInterruptFlag; + + /* Card interrupt (SDIO I/O) → wake up sdio_irq thread */ + if (pending & SDHOST_INTSTS_CINT) + { + SDMMC_ClrFlag(sdio_inst->cfg.sdhost, SDHOST_CardInterruptFlag); + sdio_irq_wakeup(sdio_inst->host); + } + } + + rt_interrupt_leave(); +} + +/* ═══════════════════════════════════════════════════════════════════════ + * Initialisation + * ═══════════════════════════════════════════════════════════════════════ */ + +int n32_hw_sdio_init(void) +{ + struct n32_sdio *sdio; + struct rt_mmcsd_host *host; + int ret; + + sdio = (struct n32_sdio *)rt_malloc(sizeof(*sdio)); + if (sdio == RT_NULL) + { + LOG_E("malloc n32_sdio failed"); + return -RT_ENOMEM; + } + rt_memset(sdio, 0, sizeof(*sdio)); + sdio->cfg = sdio_cfg; /* copy per-instance config */ + + /* ── Hardware init ──────────────────────────────────────── */ + ret = _hw_setup(sdio); + if (ret != RT_EOK) + { + rt_free(sdio); + return ret; + } + + /* ── Allocate & configure mmcsd host ─────────────────────── */ + host = mmcsd_alloc_host(); + if (host == RT_NULL) + { + LOG_E("mmcsd_alloc_host failed"); + rt_free(sdio); + return -RT_ENOMEM; + } + + host->name[0] = 's'; + host->name[1] = 'd'; + host->name[2] = '0'; + host->name[3] = '\0'; + host->ops = &n32_sdio_ops; + host->freq_min = SD_INIT_FREQ; + host->freq_max = SDIO_MAX_FREQ; + host->valid_ocr = 0x00FFFF80U; /* 1.65V – 3.6V (same as STM32) */ + host->flags = MMCSD_BUSWIDTH_4 | MMCSD_MUTBLKWRITE | MMCSD_SUP_HIGHSPEED; + host->max_seg_size = SDIO_BUFF_SIZE; + host->max_dma_segs = 1; + host->max_blk_size = 512; + host->max_blk_count = 256; + + host->private_data = sdio; + sdio->host = host; + sdio_inst = sdio; /* for ISR */ + + mmcsd_change(host); + + LOG_I("n32 sdio host registered as sd0"); + return RT_EOK; +} +INIT_DEVICE_EXPORT(n32_hw_sdio_init); + +#endif /* RT_USING_SDIO */ diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_sdmmc.h b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_sdmmc.h new file mode 100644 index 00000000000..1b3f93a893f --- /dev/null +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_sdmmc.h @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2006-2026, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2026-07-10 Claude N32 SDMMC driver with rt_mmcsd_host_ops + */ + +#ifndef __DRV_SDMMC_H__ +#define __DRV_SDMMC_H__ + +#include +#include "n32h7xx_sdmmc.h" /* BEFORE mmcsd_cmd.h — avoids SWITCH macro clash */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* ── SDMMC clock frequencies ─────────────────────────────────────────── */ +#define SD_XIN_CLK 100000000U /* SDMMC module base clock (Hz) */ +#define SD_INIT_FREQ 400000U /* Identification mode: 400 kHz */ +#define SD_NORMAL_SPEED_FREQ 25000000U /* Default speed: 25 MHz */ +#define SD_HIGH_SPEED_FREQ 50000000U /* High speed: 50 MHz */ + +#ifndef SDIO_MAX_FREQ +#define SDIO_MAX_FREQ SD_HIGH_SPEED_FREQ +#endif + +/* ── Data buffer ─────────────────────────────────────────────────────── */ +#ifndef SDIO_BUFF_SIZE +#define SDIO_BUFF_SIZE 4096 +#endif + +#ifndef SDIO_ALIGN_LEN +#define SDIO_ALIGN_LEN 32 +#endif + +/* ── N32 per-instance descriptor ─────────────────────────────────────── */ +struct n32_sdio_config +{ + SDHOST_Module *sdhost; /* SDHOST register base */ + SDMMC_Module *sdmmc; /* SDMMC wrapper register base */ + IRQn_Type irqn; /* IRQ number */ + uint32_t clkfb_val; /* AFIO clock feedback select */ + uint32_t pwrctrl_val; /* PWR power control bit */ + uint32_t lpclk_en; /* RCC LP clock enable bit */ + uint32_t periphrst_val; /* RCC peripheral reset mask */ + const char *name; /* device name ("sd0") */ +}; + +struct n32_sdio +{ + struct n32_sdio_config cfg; + struct rt_mmcsd_host *host; +}; + +/* ── Public API ──────────────────────────────────────────────────────── */ +int n32_hw_sdio_init(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __DRV_SDMMC_H__ */ diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_spi.c b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_spi.c index 62a747423b9..5188b2639a8 100644 --- a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_spi.c +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_spi.c @@ -22,7 +22,7 @@ #include //#define DRV_DEBUG -#define LOG_TAG "drv.spi" +#define LOG_TAG "drv.spi" #include enum @@ -51,8 +51,7 @@ enum }; -static struct n32_spi_config spi_config[] = -{ +static struct n32_spi_config spi_config[] = { #ifdef BSP_USING_SPI1 SPI1_BUS_CONFIG, #endif @@ -103,10 +102,12 @@ static rt_err_t SPI_DMA_TransmitReceive(struct n32_spi *spi_drv, uint8_t *pTxDat DMA_ChannelCmd(spi_drv->config->dma_rx->Instance, spi_drv->config->dma_rx->dma_channel, DISABLE); if (!DMA_ControllerIsEnabled(spi_drv->config->dma_rx->Instance)) + { DMA_ControllerCmd(spi_drv->config->dma_rx->Instance, ENABLE); + } - spi_drv->dma.RX_DMA_ChInitStr.IntEn = 1U; - spi_drv->dma.RX_DMA_ChInitStr.DstAddr = (uint32_t)pRxData; + spi_drv->dma.RX_DMA_ChInitStr.IntEn = 1U; + spi_drv->dma.RX_DMA_ChInitStr.DstAddr = (uint32_t)pRxData; spi_drv->dma.RX_DMA_ChInitStr.BlkTfrSize = Size; DMA_ControllerCmd(spi_drv->config->dma_rx->Instance, ENABLE); @@ -135,10 +136,12 @@ static rt_err_t SPI_DMA_TransmitReceive(struct n32_spi *spi_drv, uint8_t *pTxDat DMA_ChannelCmd(spi_drv->config->dma_tx->Instance, spi_drv->config->dma_tx->dma_channel, DISABLE); if (!DMA_ControllerIsEnabled(spi_drv->config->dma_tx->Instance)) + { DMA_ControllerCmd(spi_drv->config->dma_tx->Instance, ENABLE); + } - spi_drv->dma.TX_DMA_ChInitStr.IntEn = 1U; - spi_drv->dma.TX_DMA_ChInitStr.SrcAddr = (uint32_t)pTxData; + spi_drv->dma.TX_DMA_ChInitStr.IntEn = 1U; + spi_drv->dma.TX_DMA_ChInitStr.SrcAddr = (uint32_t)pTxData; spi_drv->dma.TX_DMA_ChInitStr.BlkTfrSize = Size; DMA_ControllerCmd(spi_drv->config->dma_tx->Instance, ENABLE); @@ -172,7 +175,9 @@ static rt_err_t SPI_DMA_TransmitReceive(struct n32_spi *spi_drv, uint8_t *pTxDat /* Check if the SPI is already enabled */ if ((spi_drv->config->SPIx->CTRL2 & SPI_CTRL2_SPIEN) != SPI_CTRL2_SPIEN) + { SPI_Enable(spi_drv->config->SPIx, ENABLE); + } return RT_EOK; } @@ -182,7 +187,7 @@ static rt_err_t SPI_DMA_Transmit(struct n32_spi *spi_drv, uint8_t *pData, uint16 RT_ASSERT(spi_drv != RT_NULL); if (spi_drv->SPI_InitStructure.DataDirection == SPI_DIR_SINGLELINE_RX || - spi_drv->SPI_InitStructure.DataDirection == SPI_DIR_SINGLELINE_TX) + spi_drv->SPI_InitStructure.DataDirection == SPI_DIR_SINGLELINE_TX) { /* Disable the sFLASH_SPI */ SPI_Enable(spi_drv->config->SPIx, DISABLE); @@ -199,10 +204,12 @@ static rt_err_t SPI_DMA_Transmit(struct n32_spi *spi_drv, uint8_t *pData, uint16 DMA_ChannelCmd(spi_drv->config->dma_rx->Instance, spi_drv->config->dma_rx->dma_channel, DISABLE); if (!DMA_ControllerIsEnabled(spi_drv->config->dma_rx->Instance)) + { DMA_ControllerCmd(spi_drv->config->dma_rx->Instance, ENABLE); + } - spi_drv->dma.RX_DMA_ChInitStr.IntEn = 0U; - spi_drv->dma.RX_DMA_ChInitStr.DstAddr = NULL; + spi_drv->dma.RX_DMA_ChInitStr.IntEn = 0U; + spi_drv->dma.RX_DMA_ChInitStr.DstAddr = NULL; spi_drv->dma.RX_DMA_ChInitStr.BlkTfrSize = 0U; DMA_ControllerCmd(spi_drv->config->dma_rx->Instance, ENABLE); @@ -220,10 +227,12 @@ static rt_err_t SPI_DMA_Transmit(struct n32_spi *spi_drv, uint8_t *pData, uint16 DMA_ChannelCmd(spi_drv->config->dma_tx->Instance, spi_drv->config->dma_tx->dma_channel, DISABLE); if (!DMA_ControllerIsEnabled(spi_drv->config->dma_tx->Instance)) + { DMA_ControllerCmd(spi_drv->config->dma_tx->Instance, ENABLE); + } - spi_drv->dma.TX_DMA_ChInitStr.IntEn = 1U; - spi_drv->dma.TX_DMA_ChInitStr.SrcAddr = (uint32_t)pData; + spi_drv->dma.TX_DMA_ChInitStr.IntEn = 1U; + spi_drv->dma.TX_DMA_ChInitStr.SrcAddr = (uint32_t)pData; spi_drv->dma.TX_DMA_ChInitStr.BlkTfrSize = Size; DMA_ControllerCmd(spi_drv->config->dma_tx->Instance, ENABLE); @@ -250,7 +259,9 @@ static rt_err_t SPI_DMA_Transmit(struct n32_spi *spi_drv, uint8_t *pData, uint16 /* Check if the SPI is already enabled */ if ((spi_drv->config->SPIx->CTRL2 & SPI_CTRL2_SPIEN) != SPI_CTRL2_SPIEN) + { SPI_Enable(spi_drv->config->SPIx, ENABLE); + } return RT_EOK; } @@ -265,7 +276,7 @@ static rt_err_t SPI_DMA_Receive(struct n32_spi *spi_drv, uint8_t *pData, uint16_ } if (spi_drv->SPI_InitStructure.DataDirection == SPI_DIR_SINGLELINE_RX || - spi_drv->SPI_InitStructure.DataDirection == SPI_DIR_SINGLELINE_TX) + spi_drv->SPI_InitStructure.DataDirection == SPI_DIR_SINGLELINE_TX) { /* Disable the sFLASH_SPI */ SPI_Enable(spi_drv->config->SPIx, DISABLE); @@ -282,10 +293,12 @@ static rt_err_t SPI_DMA_Receive(struct n32_spi *spi_drv, uint8_t *pData, uint16_ DMA_ChannelCmd(spi_drv->config->dma_rx->Instance, spi_drv->config->dma_rx->dma_channel, DISABLE); if (!DMA_ControllerIsEnabled(spi_drv->config->dma_rx->Instance)) + { DMA_ControllerCmd(spi_drv->config->dma_rx->Instance, ENABLE); + } - spi_drv->dma.RX_DMA_ChInitStr.IntEn = 1U; - spi_drv->dma.RX_DMA_ChInitStr.DstAddr = (uint32_t)pData; + spi_drv->dma.RX_DMA_ChInitStr.IntEn = 1U; + spi_drv->dma.RX_DMA_ChInitStr.DstAddr = (uint32_t)pData; spi_drv->dma.RX_DMA_ChInitStr.BlkTfrSize = Size; DMA_ControllerCmd(spi_drv->config->dma_rx->Instance, ENABLE); @@ -313,10 +326,12 @@ static rt_err_t SPI_DMA_Receive(struct n32_spi *spi_drv, uint8_t *pData, uint16_ DMA_ChannelCmd(spi_drv->config->dma_tx->Instance, spi_drv->config->dma_tx->dma_channel, DISABLE); if (!DMA_ControllerIsEnabled(spi_drv->config->dma_tx->Instance)) + { DMA_ControllerCmd(spi_drv->config->dma_tx->Instance, ENABLE); + } - spi_drv->dma.TX_DMA_ChInitStr.IntEn = 0U; - spi_drv->dma.TX_DMA_ChInitStr.SrcAddr = NULL; + spi_drv->dma.TX_DMA_ChInitStr.IntEn = 0U; + spi_drv->dma.TX_DMA_ChInitStr.SrcAddr = NULL; spi_drv->dma.TX_DMA_ChInitStr.BlkTfrSize = 0U; DMA_ControllerCmd(spi_drv->config->dma_tx->Instance, ENABLE); @@ -340,7 +355,9 @@ static rt_err_t SPI_DMA_Receive(struct n32_spi *spi_drv, uint8_t *pData, uint16_ /* Check if the SPI is already enabled */ if ((spi_drv->config->SPIx->CTRL2 & SPI_CTRL2_SPIEN) != SPI_CTRL2_SPIEN) + { SPI_Enable(spi_drv->config->SPIx, ENABLE); + } return RT_EOK; } @@ -360,7 +377,9 @@ static rt_err_t SPI_Transmit_Receive(struct n32_spi *spi_drv, uint8_t *pTxData, } if ((spi_drv->config->SPIx->CTRL2 & SPI_CTRL2_SPIEN) != SPI_CTRL2_SPIEN) + { SPI_Enable(spi_drv->config->SPIx, ENABLE); + } if (spi_drv->SPI_InitStructure.DataLen == SPI_DATA_SIZE_16BITS) { @@ -379,7 +398,7 @@ static rt_err_t SPI_Transmit_Receive(struct n32_spi *spi_drv, uint8_t *pTxData, /* Loop while DAT register in not emplty */ while (SPI_I2S_GetStatus(spi_drv->config->SPIx, SPI_I2S_TE_FLAG) == RESET) { - if ((((rt_tick_get() - tickstart) >= Timeout) && (Timeout != 0xFFFFFFFFU)) || (Timeout == 0U)) + if ((((rt_tick_get() - tickstart) >= Timeout) && (Timeout != 0xFFFFFFFFU)) || (Timeout == 0U)) { LOG_E("Checking TE flag timeout befor send data in full-duplex mode."); return -RT_ETIMEOUT; @@ -397,7 +416,7 @@ static rt_err_t SPI_Transmit_Receive(struct n32_spi *spi_drv, uint8_t *pTxData, /* Wait for DATA send has complete */ while (SPI_I2S_GetStatus(spi_drv->config->SPIx, SPI_I2S_TE_FLAG) == RESET) { - if ((((rt_tick_get() - tickstart) >= Timeout) && (Timeout != 0xFFFFFFFFU)) || (Timeout == 0U)) + if ((((rt_tick_get() - tickstart) >= Timeout) && (Timeout != 0xFFFFFFFFU)) || (Timeout == 0U)) { LOG_E("Checking TE flag timeout after send data in full-duplex mode."); return -RT_ETIMEOUT; @@ -408,7 +427,7 @@ static rt_err_t SPI_Transmit_Receive(struct n32_spi *spi_drv, uint8_t *pTxData, /* Wait for SPI bus idle */ while (SPI_I2S_GetStatus(spi_drv->config->SPIx, SPI_I2S_BUSY_FLAG) != RESET) { - if ((((rt_tick_get() - tickstart) >= Timeout) && (Timeout != 0xFFFFFFFFU)) || (Timeout == 0U)) + if ((((rt_tick_get() - tickstart) >= Timeout) && (Timeout != 0xFFFFFFFFU)) || (Timeout == 0U)) { LOG_E("Checking BUSY flag timeout in full-duplex mode."); return -RT_ETIMEOUT; @@ -419,7 +438,7 @@ static rt_err_t SPI_Transmit_Receive(struct n32_spi *spi_drv, uint8_t *pTxData, /* Wait to receive a byte */ while (SPI_I2S_GetStatus(spi_drv->config->SPIx, SPI_I2S_RNE_FLAG) == RESET) { - if ((((rt_tick_get() - tickstart) >= Timeout) && (Timeout != 0xFFFFFFFFU)) || (Timeout == 0U)) + if ((((rt_tick_get() - tickstart) >= Timeout) && (Timeout != 0xFFFFFFFFU)) || (Timeout == 0U)) { LOG_E("Checking RNE flag timeout after send data in full-duplex mode."); return -RT_ETIMEOUT; @@ -450,7 +469,7 @@ static rt_err_t SPI_Transmit_Receive(struct n32_spi *spi_drv, uint8_t *pTxData, /* Loop while DAT register in not emplty */ while (SPI_I2S_GetStatus(spi_drv->config->SPIx, SPI_I2S_TE_FLAG) == RESET) { - if ((((rt_tick_get() - tickstart) >= Timeout) && (Timeout != 0xFFFFFFFFU)) || (Timeout == 0U)) + if ((((rt_tick_get() - tickstart) >= Timeout) && (Timeout != 0xFFFFFFFFU)) || (Timeout == 0U)) { LOG_E("Checking TE flag timeout befor send data in full-duplex mode."); return -RT_ETIMEOUT; @@ -468,7 +487,7 @@ static rt_err_t SPI_Transmit_Receive(struct n32_spi *spi_drv, uint8_t *pTxData, /* Wait for DATA send has complete */ while (SPI_I2S_GetStatus(spi_drv->config->SPIx, SPI_I2S_TE_FLAG) == RESET) { - if ((((rt_tick_get() - tickstart) >= Timeout) && (Timeout != 0xFFFFFFFFU)) || (Timeout == 0U)) + if ((((rt_tick_get() - tickstart) >= Timeout) && (Timeout != 0xFFFFFFFFU)) || (Timeout == 0U)) { LOG_E("Checking TE flag timeout after send data in full-duplex mode."); return -RT_ETIMEOUT; @@ -479,7 +498,7 @@ static rt_err_t SPI_Transmit_Receive(struct n32_spi *spi_drv, uint8_t *pTxData, /* Wait for SPI bus idle */ while (SPI_I2S_GetStatus(spi_drv->config->SPIx, SPI_I2S_BUSY_FLAG) != RESET) { - if ((((rt_tick_get() - tickstart) >= Timeout) && (Timeout != 0xFFFFFFFFU)) || (Timeout == 0U)) + if ((((rt_tick_get() - tickstart) >= Timeout) && (Timeout != 0xFFFFFFFFU)) || (Timeout == 0U)) { LOG_E("Checking BUSY flag timeout in full-duplex mode."); return -RT_ETIMEOUT; @@ -490,7 +509,7 @@ static rt_err_t SPI_Transmit_Receive(struct n32_spi *spi_drv, uint8_t *pTxData, /* Wait to receive a byte */ while (SPI_I2S_GetStatus(spi_drv->config->SPIx, SPI_I2S_RNE_FLAG) == RESET) { - if ((((rt_tick_get() - tickstart) >= Timeout) && (Timeout != 0xFFFFFFFFU)) || (Timeout == 0U)) + if ((((rt_tick_get() - tickstart) >= Timeout) && (Timeout != 0xFFFFFFFFU)) || (Timeout == 0U)) { LOG_E("Checking RNE flag timeout after send data in full-duplex mode."); return -RT_ETIMEOUT; @@ -529,7 +548,7 @@ static rt_err_t SPI_Transmit(struct n32_spi *spi_drv, uint8_t *pData, uint16_t S RT_ASSERT(spi_drv != RT_NULL); if (spi_drv->SPI_InitStructure.DataDirection == SPI_DIR_SINGLELINE_RX || - spi_drv->SPI_InitStructure.DataDirection == SPI_DIR_SINGLELINE_TX) + spi_drv->SPI_InitStructure.DataDirection == SPI_DIR_SINGLELINE_TX) { /* Disable the sFLASH_SPI */ SPI_Enable(spi_drv->config->SPIx, DISABLE); @@ -541,7 +560,9 @@ static rt_err_t SPI_Transmit(struct n32_spi *spi_drv, uint8_t *pData, uint16_t S } if ((spi_drv->config->SPIx->CTRL2 & SPI_CTRL2_SPIEN) != SPI_CTRL2_SPIEN) + { SPI_Enable(spi_drv->config->SPIx, ENABLE); + } if (spi_drv->SPI_InitStructure.DataLen == SPI_DATA_SIZE_16BITS) @@ -559,7 +580,7 @@ static rt_err_t SPI_Transmit(struct n32_spi *spi_drv, uint8_t *pData, uint16_t S /* Loop while DAT register in not emplty */ while (SPI_I2S_GetStatus(spi_drv->config->SPIx, SPI_I2S_TE_FLAG) == RESET) { - if ((((rt_tick_get() - tickstart) >= Timeout) && (Timeout != 0xFFFFFFFFU)) || (Timeout == 0U)) + if ((((rt_tick_get() - tickstart) >= Timeout) && (Timeout != 0xFFFFFFFFU)) || (Timeout == 0U)) { LOG_E("Checking TE flag timeout."); return -RT_ETIMEOUT; @@ -589,7 +610,7 @@ static rt_err_t SPI_Transmit(struct n32_spi *spi_drv, uint8_t *pData, uint16_t S /* Loop while DAT register in not emplty */ while (SPI_I2S_GetStatus(spi_drv->config->SPIx, SPI_I2S_TE_FLAG) == RESET) { - if ((((rt_tick_get() - tickstart) >= Timeout) && (Timeout != 0xFFFFFFFFU)) || (Timeout == 0U)) + if ((((rt_tick_get() - tickstart) >= Timeout) && (Timeout != 0xFFFFFFFFU)) || (Timeout == 0U)) { LOG_E("Checking TE flag timeout."); return -RT_ETIMEOUT; @@ -606,14 +627,13 @@ static rt_err_t SPI_Transmit(struct n32_spi *spi_drv, uint8_t *pData, uint16_t S } else { - } tickstart = rt_tick_get(); /* Wait for DATA send has complete */ while (SPI_I2S_GetStatus(spi_drv->config->SPIx, SPI_I2S_TE_FLAG) == RESET) { - if ((((rt_tick_get() - tickstart) >= Timeout) && (Timeout != 0xFFFFFFFFU)) || (Timeout == 0U)) + if ((((rt_tick_get() - tickstart) >= Timeout) && (Timeout != 0xFFFFFFFFU)) || (Timeout == 0U)) { LOG_E("After sending the data, check the TE flag for timeout."); return -RT_ETIMEOUT; @@ -624,7 +644,7 @@ static rt_err_t SPI_Transmit(struct n32_spi *spi_drv, uint8_t *pData, uint16_t S /* Wait for SPI bus idle */ while (SPI_I2S_GetStatus(spi_drv->config->SPIx, SPI_I2S_BUSY_FLAG) != RESET) { - if ((((rt_tick_get() - tickstart) >= Timeout) && (Timeout != 0xFFFFFFFFU)) || (Timeout == 0U)) + if ((((rt_tick_get() - tickstart) >= Timeout) && (Timeout != 0xFFFFFFFFU)) || (Timeout == 0U)) { LOG_E("After sending the data, check the BUSY flag for timeout."); return -RT_ETIMEOUT; @@ -658,7 +678,7 @@ static rt_err_t SP_Receive(struct n32_spi *spi_drv, uint8_t *pData, uint16_t Siz reg_tmp = spi_drv->config->SPIx->STS; (void)reg_tmp; - if ((((rt_tick_get() - tickstart) >= Timeout) && (Timeout != 0xFFFFFFFFU)) || (Timeout == 0U)) + if ((((rt_tick_get() - tickstart) >= Timeout) && (Timeout != 0xFFFFFFFFU)) || (Timeout == 0U)) { LOG_E("Before receiving data, check the OVER and RNE flags for timeout."); return -RT_ETIMEOUT; @@ -671,7 +691,7 @@ static rt_err_t SP_Receive(struct n32_spi *spi_drv, uint8_t *pData, uint16_t Siz } if (spi_drv->SPI_InitStructure.DataDirection == SPI_DIR_SINGLELINE_RX || - spi_drv->SPI_InitStructure.DataDirection == SPI_DIR_SINGLELINE_TX) + spi_drv->SPI_InitStructure.DataDirection == SPI_DIR_SINGLELINE_TX) { /* Disable the sFLASH_SPI */ SPI_Enable(spi_drv->config->SPIx, DISABLE); @@ -683,7 +703,9 @@ static rt_err_t SP_Receive(struct n32_spi *spi_drv, uint8_t *pData, uint16_t Siz } if ((spi_drv->config->SPIx->CTRL2 & SPI_CTRL2_SPIEN) != SPI_CTRL2_SPIEN) + { SPI_Enable(spi_drv->config->SPIx, ENABLE); + } if (spi_drv->SPI_InitStructure.DataLen == SPI_DATA_SIZE_16BITS) { @@ -693,7 +715,7 @@ static rt_err_t SP_Receive(struct n32_spi *spi_drv, uint8_t *pData, uint16_t Siz /* Wait to receive a byte */ while (SPI_I2S_GetStatus(spi_drv->config->SPIx, SPI_I2S_RNE_FLAG) == RESET) { - if ((((rt_tick_get() - tickstart) >= Timeout) && (Timeout != 0xFFFFFFFFU)) || (Timeout == 0U)) + if ((((rt_tick_get() - tickstart) >= Timeout) && (Timeout != 0xFFFFFFFFU)) || (Timeout == 0U)) { LOG_E("During receiving data, check the RNE flags for timeout."); return -RT_ETIMEOUT; @@ -715,7 +737,7 @@ static rt_err_t SP_Receive(struct n32_spi *spi_drv, uint8_t *pData, uint16_t Siz /* Wait to receive a byte */ while (SPI_I2S_GetStatus(spi_drv->config->SPIx, SPI_I2S_RNE_FLAG) == RESET) { - if ((((rt_tick_get() - tickstart) >= Timeout) && (Timeout != 0xFFFFFFFFU)) || (Timeout == 0U)) + if ((((rt_tick_get() - tickstart) >= Timeout) && (Timeout != 0xFFFFFFFFU)) || (Timeout == 0U)) { LOG_E("During receiving data, check the RNE flags for timeout."); return -RT_ETIMEOUT; @@ -731,12 +753,11 @@ static rt_err_t SP_Receive(struct n32_spi *spi_drv, uint8_t *pData, uint16_t Siz } else { - } if ((spi_drv->SPI_InitStructure.DataDirection == SPI_DIR_DOUBLELINE_RONLY || - spi_drv->SPI_InitStructure.DataDirection == SPI_DIR_SINGLELINE_RX) && - spi_drv->SPI_InitStructure.SpiMode == SPI_MODE_MASTER) + spi_drv->SPI_InitStructure.DataDirection == SPI_DIR_SINGLELINE_RX) && + spi_drv->SPI_InitStructure.SpiMode == SPI_MODE_MASTER) { /* Disable the sFLASH_SPI */ SPI_Enable(spi_drv->config->SPIx, DISABLE); @@ -746,9 +767,10 @@ static rt_err_t SP_Receive(struct n32_spi *spi_drv, uint8_t *pData, uint16_t Siz /* Wait to receive a byte */ while (SPI_I2S_GetStatus(spi_drv->config->SPIx, SPI_I2S_RNE_FLAG) == RESET) { - spi_drv->config->SPIx->DAT; + volatile rt_uint32_t dummy = spi_drv->config->SPIx->DAT; + (void)dummy; - if ((((rt_tick_get() - tickstart) >= Timeout) && (Timeout != 0xFFFFFFFFU)) || (Timeout == 0U)) + if ((((rt_tick_get() - tickstart) >= Timeout) && (Timeout != 0xFFFFFFFFU)) || (Timeout == 0U)) { LOG_E("After receiving data, check the RNE flags for timeout."); return -RT_ETIMEOUT; @@ -759,7 +781,7 @@ static rt_err_t SP_Receive(struct n32_spi *spi_drv, uint8_t *pData, uint16_t Siz /* Wait for SPI bus idle */ while (SPI_I2S_GetStatus(spi_drv->config->SPIx, SPI_I2S_BUSY_FLAG) != RESET) { - if ((((rt_tick_get() - tickstart) >= Timeout) && (Timeout != 0xFFFFFFFFU)) || (Timeout == 0U)) + if ((((rt_tick_get() - tickstart) >= Timeout) && (Timeout != 0xFFFFFFFFU)) || (Timeout == 0U)) { LOG_E("After receiving data, check the BUSY flags for timeout."); return -RT_ETIMEOUT; @@ -806,11 +828,11 @@ static rt_err_t n32_spi_init(struct n32_spi *spi_drv, struct rt_spi_configuratio if (cfg->data_width == 8) { - spi_drv->SPI_InitStructure.DataLen = SPI_DATA_SIZE_8BITS; + spi_drv->SPI_InitStructure.DataLen = SPI_DATA_SIZE_8BITS; } else if (cfg->data_width == 16) { - spi_drv->SPI_InitStructure.DataLen = SPI_DATA_SIZE_16BITS; + spi_drv->SPI_InitStructure.DataLen = SPI_DATA_SIZE_16BITS; } else { @@ -819,24 +841,24 @@ static rt_err_t n32_spi_init(struct n32_spi *spi_drv, struct rt_spi_configuratio if (cfg->mode & RT_SPI_CPHA) { - spi_drv->SPI_InitStructure.CLKPHA = SPI_CLKPHA_SECOND_EDGE; + spi_drv->SPI_InitStructure.CLKPHA = SPI_CLKPHA_SECOND_EDGE; } else { - spi_drv->SPI_InitStructure.CLKPHA = SPI_CLKPHA_FIRST_EDGE; + spi_drv->SPI_InitStructure.CLKPHA = SPI_CLKPHA_FIRST_EDGE; } if (cfg->mode & RT_SPI_CPOL) { - spi_drv->SPI_InitStructure.CLKPOL = SPI_CLKPOL_HIGH; + spi_drv->SPI_InitStructure.CLKPOL = SPI_CLKPOL_HIGH; } else { - spi_drv->SPI_InitStructure.CLKPOL = SPI_CLKPOL_LOW; + spi_drv->SPI_InitStructure.CLKPOL = SPI_CLKPOL_LOW; } - spi_drv->SPI_InitStructure.NSS = SPI_NSS_SOFT; - spi_drv->SPI_InitStructure.CRCPoly = 7; + spi_drv->SPI_InitStructure.NSS = SPI_NSS_SOFT; + spi_drv->SPI_InitStructure.CRCPoly = 7; uint32_t SPI_CLOCK = 0UL; @@ -865,45 +887,45 @@ static rt_err_t n32_spi_init(struct n32_spi *spi_drv, struct rt_spi_configuratio if (cfg->max_hz >= SPI_CLOCK / 2) { - spi_drv->SPI_InitStructure.BaudRatePres = SPI_BR_PRESCALER_2; + spi_drv->SPI_InitStructure.BaudRatePres = SPI_BR_PRESCALER_2; } else if (cfg->max_hz >= SPI_CLOCK / 4) { - spi_drv->SPI_InitStructure.BaudRatePres = SPI_BR_PRESCALER_4; + spi_drv->SPI_InitStructure.BaudRatePres = SPI_BR_PRESCALER_4; } else if (cfg->max_hz >= SPI_CLOCK / 8) { - spi_drv->SPI_InitStructure.BaudRatePres = SPI_BR_PRESCALER_8; + spi_drv->SPI_InitStructure.BaudRatePres = SPI_BR_PRESCALER_8; } else if (cfg->max_hz >= SPI_CLOCK / 16) { - spi_drv->SPI_InitStructure.BaudRatePres = SPI_BR_PRESCALER_16; + spi_drv->SPI_InitStructure.BaudRatePres = SPI_BR_PRESCALER_16; } else if (cfg->max_hz >= SPI_CLOCK / 32) { - spi_drv->SPI_InitStructure.BaudRatePres = SPI_BR_PRESCALER_32; + spi_drv->SPI_InitStructure.BaudRatePres = SPI_BR_PRESCALER_32; } else if (cfg->max_hz >= SPI_CLOCK / 64) { - spi_drv->SPI_InitStructure.BaudRatePres = SPI_BR_PRESCALER_64; + spi_drv->SPI_InitStructure.BaudRatePres = SPI_BR_PRESCALER_64; } else if (cfg->max_hz >= SPI_CLOCK / 128) { - spi_drv->SPI_InitStructure.BaudRatePres = SPI_BR_PRESCALER_128; + spi_drv->SPI_InitStructure.BaudRatePres = SPI_BR_PRESCALER_128; } else { /* min prescaler 256 */ - spi_drv->SPI_InitStructure.BaudRatePres = SPI_BR_PRESCALER_256; + spi_drv->SPI_InitStructure.BaudRatePres = SPI_BR_PRESCALER_256; } if (cfg->mode & RT_SPI_MSB) { - spi_drv->SPI_InitStructure.FirstBit = SPI_FB_MSB; + spi_drv->SPI_InitStructure.FirstBit = SPI_FB_MSB; } else { - spi_drv->SPI_InitStructure.FirstBit = SPI_FB_LSB; + spi_drv->SPI_InitStructure.FirstBit = SPI_FB_LSB; } /* Initializes the SPIx peripheral */ @@ -972,7 +994,7 @@ static rt_err_t spi_configure(struct rt_spi_device *device, RT_ASSERT(device != RT_NULL); RT_ASSERT(configuration != RT_NULL); - struct n32_spi *spi_drv = rt_container_of(device->bus, struct n32_spi, spi_bus); + struct n32_spi *spi_drv = rt_container_of(device->bus, struct n32_spi, spi_bus); spi_drv->cfg = configuration; return n32_spi_init(spi_drv, configuration); @@ -981,7 +1003,7 @@ static rt_err_t spi_configure(struct rt_spi_device *device, static rt_ssize_t spixfer(struct rt_spi_device *device, struct rt_spi_message *message) { -#define DMA_TRANS_MIN_LEN 10 /* only buffer length >= DMA_TRANS_MIN_LEN will use DMA mode */ +#define DMA_TRANS_MIN_LEN 10 /* only buffer length >= DMA_TRANS_MIN_LEN will use DMA mode */ rt_err_t state = RT_EOK; uint32_t tickstart; @@ -994,7 +1016,7 @@ static rt_ssize_t spixfer(struct rt_spi_device *device, struct rt_spi_message *m RT_ASSERT(device->bus != RT_NULL); RT_ASSERT(message != RT_NULL); - struct n32_spi *spi_drv = rt_container_of(device->bus, struct n32_spi, spi_bus); + struct n32_spi *spi_drv = rt_container_of(device->bus, struct n32_spi, spi_bus); if (message->cs_take && !(device->config.mode & RT_SPI_NO_CS) && (device->cs_pin != PIN_NONE)) { @@ -1063,8 +1085,10 @@ static rt_ssize_t spixfer(struct rt_spi_device *device, struct rt_spi_message *m rt_memcpy(dma_aligned_buffer, send_buf, send_length); p_txrx_buffer = dma_aligned_buffer; } - if ((SCB->CCR &(uint32_t)SCB_CCR_DC_Msk) != 0U) - rt_hw_cpu_dcache_ops(RT_HW_CACHE_FLUSH, dma_aligned_buffer, send_length); + if ((SCB->CCR & (uint32_t)SCB_CCR_DC_Msk) != 0U) + { + rt_hw_cpu_dcache_ops(RT_HW_CACHE_FLUSH, dma_aligned_buffer, send_length); + } #else if (RT_IS_ALIGN((rt_uint32_t)send_buf, 4) && send_buf != RT_NULL) /* aligned with 4 bytes? */ { @@ -1085,7 +1109,8 @@ static rt_ssize_t spixfer(struct rt_spi_device *device, struct rt_spi_message *m while (SPI_I2S_GetStatus(spi_drv->config->SPIx, SPI_I2S_RNE_FLAG) != RESET) { /*clear RX buff*/ - spi_drv->config->SPIx->DAT; + volatile rt_uint32_t dummy = spi_drv->config->SPIx->DAT; + (void)dummy; if ((rt_tick_get() - tickstart) > 1000U) { @@ -1100,7 +1125,8 @@ static rt_ssize_t spixfer(struct rt_spi_device *device, struct rt_spi_message *m while (SPI_I2S_GetStatus(spi_drv->config->SPIx, SPI_I2S_OVER_FLAG) != RESET) { /*clear RX buff*/ - spi_drv->config->SPIx->DAT; + volatile rt_uint32_t dummy = spi_drv->config->SPIx->DAT; + (void)dummy; SPI_I2S_GetStatus(spi_drv->config->SPIx, SPI_I2S_OVER_FLAG); if ((rt_tick_get() - tickstart) > 1000U) @@ -1215,8 +1241,10 @@ static rt_ssize_t spixfer(struct rt_spi_device *device, struct rt_spi_message *m if (recv_buf != RT_NULL) { #if defined(SOC_SERIES_N32H7xx) - if ((SCB->CCR &(uint32_t)SCB_CCR_DC_Msk) != 0U) - rt_hw_cpu_dcache_ops(RT_HW_CACHE_INVALIDATE, p_txrx_buffer, send_length); + if ((SCB->CCR & (uint32_t)SCB_CCR_DC_Msk) != 0U) + { + rt_hw_cpu_dcache_ops(RT_HW_CACHE_INVALIDATE, p_txrx_buffer, send_length); + } #endif /* SOC_SERIES_N32H7xx */ rt_memcpy(recv_buf, p_txrx_buffer, send_length); } @@ -1231,9 +1259,13 @@ static rt_ssize_t spixfer(struct rt_spi_device *device, struct rt_spi_message *m if (message->cs_release && !(device->config.mode & RT_SPI_NO_CS) && (device->cs_pin != PIN_NONE)) { if (device->config.mode & RT_SPI_CS_HIGH) + { rt_pin_write(device->cs_pin, PIN_LOW); + } else + { rt_pin_write(device->cs_pin, PIN_HIGH); + } } if (state != RT_EOK) @@ -1243,14 +1275,12 @@ static rt_ssize_t spixfer(struct rt_spi_device *device, struct rt_spi_message *m return message->length; } -static const struct rt_spi_ops n32_spi_ops = -{ +static const struct rt_spi_ops n32_spi_ops = { .configure = spi_configure, .xfer = spixfer, }; - static int rt_hw_spi_bus_init(void) { rt_err_t result; @@ -1272,29 +1302,29 @@ static int rt_hw_spi_bus_init(void) /* Receive DMA Config */ DMA_ChannelStructInit(&spi_bus_obj[i].dma.RX_DMA_ChInitStr); - spi_bus_obj[i].dma.RX_DMA_ChInitStr.IntEn = 0x1U; - spi_bus_obj[i].dma.RX_DMA_ChInitStr.SrcAddr = (uint32_t)&spi_bus_obj[i].config->SPIx->DAT; - spi_bus_obj[i].dma.RX_DMA_ChInitStr.DstAddr = NULL; - spi_bus_obj[i].dma.RX_DMA_ChInitStr.SrcTfrWidth = DMA_CH_TRANSFER_WIDTH_8; - spi_bus_obj[i].dma.RX_DMA_ChInitStr.DstTfrWidth = DMA_CH_TRANSFER_WIDTH_8; - spi_bus_obj[i].dma.RX_DMA_ChInitStr.DstAddrCountMode = DMA_CH_ADDRESS_COUNT_MODE_INCREMENT; - spi_bus_obj[i].dma.RX_DMA_ChInitStr.SrcAddrCountMode = DMA_CH_ADDRESS_COUNT_MODE_NO_CHANGE; - spi_bus_obj[i].dma.RX_DMA_ChInitStr.DstBurstLen = DMA_CH_BURST_LENGTH_1; - spi_bus_obj[i].dma.RX_DMA_ChInitStr.SrcBurstLen = DMA_CH_BURST_LENGTH_1; - spi_bus_obj[i].dma.RX_DMA_ChInitStr.SrcGatherEn = 0x0U; - spi_bus_obj[i].dma.RX_DMA_ChInitStr.DstScatterEn = 0x0U; - spi_bus_obj[i].dma.RX_DMA_ChInitStr.TfrTypeFlowCtrl = DMA_CH_TRANSFER_FLOW_P2M_DMA; - spi_bus_obj[i].dma.RX_DMA_ChInitStr.BlkTfrSize = 0U; - spi_bus_obj[i].dma.RX_DMA_ChInitStr.pLinkListItem = NULL; - spi_bus_obj[i].dma.RX_DMA_ChInitStr.SrcGatherInterval = 0x0U; - spi_bus_obj[i].dma.RX_DMA_ChInitStr.SrcGatherCount = 0x0U; + spi_bus_obj[i].dma.RX_DMA_ChInitStr.IntEn = 0x1U; + spi_bus_obj[i].dma.RX_DMA_ChInitStr.SrcAddr = (uint32_t)&spi_bus_obj[i].config->SPIx->DAT; + spi_bus_obj[i].dma.RX_DMA_ChInitStr.DstAddr = NULL; + spi_bus_obj[i].dma.RX_DMA_ChInitStr.SrcTfrWidth = DMA_CH_TRANSFER_WIDTH_8; + spi_bus_obj[i].dma.RX_DMA_ChInitStr.DstTfrWidth = DMA_CH_TRANSFER_WIDTH_8; + spi_bus_obj[i].dma.RX_DMA_ChInitStr.DstAddrCountMode = DMA_CH_ADDRESS_COUNT_MODE_INCREMENT; + spi_bus_obj[i].dma.RX_DMA_ChInitStr.SrcAddrCountMode = DMA_CH_ADDRESS_COUNT_MODE_NO_CHANGE; + spi_bus_obj[i].dma.RX_DMA_ChInitStr.DstBurstLen = DMA_CH_BURST_LENGTH_1; + spi_bus_obj[i].dma.RX_DMA_ChInitStr.SrcBurstLen = DMA_CH_BURST_LENGTH_1; + spi_bus_obj[i].dma.RX_DMA_ChInitStr.SrcGatherEn = 0x0U; + spi_bus_obj[i].dma.RX_DMA_ChInitStr.DstScatterEn = 0x0U; + spi_bus_obj[i].dma.RX_DMA_ChInitStr.TfrTypeFlowCtrl = DMA_CH_TRANSFER_FLOW_P2M_DMA; + spi_bus_obj[i].dma.RX_DMA_ChInitStr.BlkTfrSize = 0U; + spi_bus_obj[i].dma.RX_DMA_ChInitStr.pLinkListItem = NULL; + spi_bus_obj[i].dma.RX_DMA_ChInitStr.SrcGatherInterval = 0x0U; + spi_bus_obj[i].dma.RX_DMA_ChInitStr.SrcGatherCount = 0x0U; spi_bus_obj[i].dma.RX_DMA_ChInitStr.DstScatterInterval = 0x0U; - spi_bus_obj[i].dma.RX_DMA_ChInitStr.DstScatterCount = 0x0U; - spi_bus_obj[i].dma.RX_DMA_ChInitStr.TfrType = DMA_CH_TRANSFER_TYPE_SINGLE_BLOCK; - spi_bus_obj[i].dma.RX_DMA_ChInitStr.ChannelPriority = DMA_CH_PRIORITY_7; - spi_bus_obj[i].dma.RX_DMA_ChInitStr.SrcHandshaking = DMA_CH_SRC_HANDSHAKING_HARDWARE; - spi_bus_obj[i].dma.RX_DMA_ChInitStr.DstHandshaking = DMA_CH_DST_HANDSHAKING_SOFTWARE; - spi_bus_obj[i].dma.RX_DMA_ChInitStr.SrcHsInterface = spi_bus_obj[i].config->dma_rx->HsInterface; + spi_bus_obj[i].dma.RX_DMA_ChInitStr.DstScatterCount = 0x0U; + spi_bus_obj[i].dma.RX_DMA_ChInitStr.TfrType = DMA_CH_TRANSFER_TYPE_SINGLE_BLOCK; + spi_bus_obj[i].dma.RX_DMA_ChInitStr.ChannelPriority = DMA_CH_PRIORITY_7; + spi_bus_obj[i].dma.RX_DMA_ChInitStr.SrcHandshaking = DMA_CH_SRC_HANDSHAKING_HARDWARE; + spi_bus_obj[i].dma.RX_DMA_ChInitStr.DstHandshaking = DMA_CH_DST_HANDSHAKING_SOFTWARE; + spi_bus_obj[i].dma.RX_DMA_ChInitStr.SrcHsInterface = spi_bus_obj[i].config->dma_rx->HsInterface; /* DMA controller must be enabled before initializing the channel */ DMA_ControllerCmd(spi_bus_obj[i].config->dma_rx->Instance, ENABLE); @@ -1326,29 +1356,29 @@ static int rt_hw_spi_bus_init(void) /* SPI_MASTER_Tx_DMA_Channel DMA1 Channel1 configuration ---------------------------------------------*/ DMA_ChannelStructInit(&spi_bus_obj[i].dma.TX_DMA_ChInitStr); - spi_bus_obj[i].dma.TX_DMA_ChInitStr.IntEn = 0x1U; - spi_bus_obj[i].dma.TX_DMA_ChInitStr.DstAddr = (uint32_t)&spi_bus_obj[i].config->SPIx->DAT; - spi_bus_obj[i].dma.TX_DMA_ChInitStr.SrcAddr = NULL; - spi_bus_obj[i].dma.TX_DMA_ChInitStr.SrcTfrWidth = DMA_CH_TRANSFER_WIDTH_8; - spi_bus_obj[i].dma.TX_DMA_ChInitStr.DstTfrWidth = DMA_CH_TRANSFER_WIDTH_8; - spi_bus_obj[i].dma.TX_DMA_ChInitStr.DstAddrCountMode = DMA_CH_ADDRESS_COUNT_MODE_NO_CHANGE; - spi_bus_obj[i].dma.TX_DMA_ChInitStr.SrcAddrCountMode = DMA_CH_ADDRESS_COUNT_MODE_INCREMENT; - spi_bus_obj[i].dma.TX_DMA_ChInitStr.DstBurstLen = DMA_CH_BURST_LENGTH_1; - spi_bus_obj[i].dma.TX_DMA_ChInitStr.SrcBurstLen = DMA_CH_BURST_LENGTH_1; - spi_bus_obj[i].dma.TX_DMA_ChInitStr.SrcGatherEn = 0x0U; - spi_bus_obj[i].dma.TX_DMA_ChInitStr.DstScatterEn = 0x0U; - spi_bus_obj[i].dma.TX_DMA_ChInitStr.TfrTypeFlowCtrl = DMA_CH_TRANSFER_FLOW_M2P_DMA; - spi_bus_obj[i].dma.TX_DMA_ChInitStr.BlkTfrSize = 0U; - spi_bus_obj[i].dma.TX_DMA_ChInitStr.pLinkListItem = NULL; - spi_bus_obj[i].dma.TX_DMA_ChInitStr.SrcGatherInterval = 0x0U; - spi_bus_obj[i].dma.TX_DMA_ChInitStr.SrcGatherCount = 0x0U; + spi_bus_obj[i].dma.TX_DMA_ChInitStr.IntEn = 0x1U; + spi_bus_obj[i].dma.TX_DMA_ChInitStr.DstAddr = (uint32_t)&spi_bus_obj[i].config->SPIx->DAT; + spi_bus_obj[i].dma.TX_DMA_ChInitStr.SrcAddr = NULL; + spi_bus_obj[i].dma.TX_DMA_ChInitStr.SrcTfrWidth = DMA_CH_TRANSFER_WIDTH_8; + spi_bus_obj[i].dma.TX_DMA_ChInitStr.DstTfrWidth = DMA_CH_TRANSFER_WIDTH_8; + spi_bus_obj[i].dma.TX_DMA_ChInitStr.DstAddrCountMode = DMA_CH_ADDRESS_COUNT_MODE_NO_CHANGE; + spi_bus_obj[i].dma.TX_DMA_ChInitStr.SrcAddrCountMode = DMA_CH_ADDRESS_COUNT_MODE_INCREMENT; + spi_bus_obj[i].dma.TX_DMA_ChInitStr.DstBurstLen = DMA_CH_BURST_LENGTH_1; + spi_bus_obj[i].dma.TX_DMA_ChInitStr.SrcBurstLen = DMA_CH_BURST_LENGTH_1; + spi_bus_obj[i].dma.TX_DMA_ChInitStr.SrcGatherEn = 0x0U; + spi_bus_obj[i].dma.TX_DMA_ChInitStr.DstScatterEn = 0x0U; + spi_bus_obj[i].dma.TX_DMA_ChInitStr.TfrTypeFlowCtrl = DMA_CH_TRANSFER_FLOW_M2P_DMA; + spi_bus_obj[i].dma.TX_DMA_ChInitStr.BlkTfrSize = 0U; + spi_bus_obj[i].dma.TX_DMA_ChInitStr.pLinkListItem = NULL; + spi_bus_obj[i].dma.TX_DMA_ChInitStr.SrcGatherInterval = 0x0U; + spi_bus_obj[i].dma.TX_DMA_ChInitStr.SrcGatherCount = 0x0U; spi_bus_obj[i].dma.TX_DMA_ChInitStr.DstScatterInterval = 0x0U; - spi_bus_obj[i].dma.TX_DMA_ChInitStr.DstScatterCount = 0x0U; - spi_bus_obj[i].dma.TX_DMA_ChInitStr.TfrType = DMA_CH_TRANSFER_TYPE_SINGLE_BLOCK; - spi_bus_obj[i].dma.TX_DMA_ChInitStr.ChannelPriority = DMA_CH_PRIORITY_7; - spi_bus_obj[i].dma.TX_DMA_ChInitStr.SrcHandshaking = DMA_CH_SRC_HANDSHAKING_SOFTWARE; - spi_bus_obj[i].dma.TX_DMA_ChInitStr.DstHandshaking = DMA_CH_DST_HANDSHAKING_HARDWARE; - spi_bus_obj[i].dma.TX_DMA_ChInitStr.DstHsInterface = spi_bus_obj[i].config->dma_tx->HsInterface; + spi_bus_obj[i].dma.TX_DMA_ChInitStr.DstScatterCount = 0x0U; + spi_bus_obj[i].dma.TX_DMA_ChInitStr.TfrType = DMA_CH_TRANSFER_TYPE_SINGLE_BLOCK; + spi_bus_obj[i].dma.TX_DMA_ChInitStr.ChannelPriority = DMA_CH_PRIORITY_7; + spi_bus_obj[i].dma.TX_DMA_ChInitStr.SrcHandshaking = DMA_CH_SRC_HANDSHAKING_SOFTWARE; + spi_bus_obj[i].dma.TX_DMA_ChInitStr.DstHandshaking = DMA_CH_DST_HANDSHAKING_HARDWARE; + spi_bus_obj[i].dma.TX_DMA_ChInitStr.DstHsInterface = spi_bus_obj[i].config->dma_tx->HsInterface; /* DMA controller must be enabled before initializing the channel */ DMA_ControllerCmd(spi_bus_obj[i].config->dma_tx->Instance, ENABLE); @@ -1412,12 +1442,12 @@ rt_err_t rt_hw_spi_device_attach(const char *bus_name, const char *device_name, } -#if defined(BSP_SPI1_RX_USING_DMA) || defined(BSP_SPI1_TX_USING_DMA) || \ - defined(BSP_SPI2_RX_USING_DMA) || defined(BSP_SPI2_TX_USING_DMA) || \ - defined(BSP_SPI3_RX_USING_DMA) || defined(BSP_SPI3_TX_USING_DMA) || \ - defined(BSP_SPI4_RX_USING_DMA) || defined(BSP_SPI4_TX_USING_DMA) || \ - defined(BSP_SPI5_RX_USING_DMA) || defined(BSP_SPI5_TX_USING_DMA) || \ - defined(BSP_SPI6_RX_USING_DMA) || defined(BSP_SPI6_TX_USING_DMA) || \ +#if defined(BSP_SPI1_RX_USING_DMA) || defined(BSP_SPI1_TX_USING_DMA) || \ + defined(BSP_SPI2_RX_USING_DMA) || defined(BSP_SPI2_TX_USING_DMA) || \ + defined(BSP_SPI3_RX_USING_DMA) || defined(BSP_SPI3_TX_USING_DMA) || \ + defined(BSP_SPI4_RX_USING_DMA) || defined(BSP_SPI4_TX_USING_DMA) || \ + defined(BSP_SPI5_RX_USING_DMA) || defined(BSP_SPI5_TX_USING_DMA) || \ + defined(BSP_SPI6_RX_USING_DMA) || defined(BSP_SPI6_TX_USING_DMA) || \ defined(BSP_SPI7_RX_USING_DMA) || defined(BSP_SPI7_TX_USING_DMA) static void spi_isr(struct n32_spi *spi_drv) { @@ -1446,12 +1476,12 @@ static void spi_isr(struct n32_spi *spi_drv) } } -#if defined(BSP_SPI1_RX_USING_DMA) || \ - defined(BSP_SPI2_RX_USING_DMA) || \ - defined(BSP_SPI3_RX_USING_DMA) || \ - defined(BSP_SPI4_RX_USING_DMA) || \ - defined(BSP_SPI5_RX_USING_DMA) || \ - defined(BSP_SPI6_RX_USING_DMA) || \ +#if defined(BSP_SPI1_RX_USING_DMA) || \ + defined(BSP_SPI2_RX_USING_DMA) || \ + defined(BSP_SPI3_RX_USING_DMA) || \ + defined(BSP_SPI4_RX_USING_DMA) || \ + defined(BSP_SPI5_RX_USING_DMA) || \ + defined(BSP_SPI6_RX_USING_DMA) || \ defined(BSP_SPI7_RX_USING_DMA) static void spi_rx_dma_isr(struct n32_spi *spi_drv) { @@ -1484,7 +1514,7 @@ static void spi_rx_dma_isr(struct n32_spi *spi_drv) else if (spi_drv->Direct == SPI_Rx) { if (spi_drv->SPI_InitStructure.SpiMode == SPI_MODE_MASTER && (spi_drv->SPI_InitStructure.DataDirection == SPI_DIR_SINGLELINE_RX || - spi_drv->SPI_InitStructure.DataDirection == SPI_DIR_DOUBLELINE_RONLY)) + spi_drv->SPI_InitStructure.DataDirection == SPI_DIR_DOUBLELINE_RONLY)) { SPI_Enable(spi_drv->config->SPIx, DISABLE); } @@ -1617,7 +1647,6 @@ void SPI2_TX_DMA_IRQHandler(void) #endif /* defined(BSP_USING_SPI2) && defined(BSP_SPI2_TX_USING_DMA) */ - #if defined(BSP_SPI3_TX_USING_DMA) || defined(BSP_SPI3_RX_USING_DMA) void SPI3_IRQHandler(void) { @@ -1656,7 +1685,6 @@ void SPI3_TX_DMA_IRQHandler(void) #endif /* defined(BSP_USING_SPI3) && defined(BSP_SPI3_TX_USING_DMA) */ - #if defined(BSP_SPI4_TX_USING_DMA) || defined(BSP_SPI4_RX_USING_DMA) void SPI4_IRQHandler(void) { @@ -1695,8 +1723,6 @@ void SPI4_TX_DMA_IRQHandler(void) #endif /* defined(BSP_USING_SPI4) && defined(BSP_SPI4_TX_USING_DMA) */ - - #if defined(BSP_SPI5_TX_USING_DMA) || defined(BSP_SPI5_RX_USING_DMA) void SPI5_IRQHandler(void) { @@ -1735,8 +1761,6 @@ void SPI5_TX_DMA_IRQHandler(void) #endif /* defined(BSP_USING_SPI5) && defined(BSP_SPI5_TX_USING_DMA) */ - - #if defined(BSP_SPI6_TX_USING_DMA) || defined(BSP_SPI6_RX_USING_DMA) void SPI6_IRQHandler(void) { @@ -1775,7 +1799,6 @@ void SPI6_TX_DMA_IRQHandler(void) #endif /* defined(BSP_USING_SPI6) && defined(BSP_SPI6_TX_USING_DMA) */ - #if defined(BSP_SPI7_TX_USING_DMA) || defined(BSP_SPI7_RX_USING_DMA) void SPI7_IRQHandler(void) { diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_spi.h b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_spi.h index d34d610bede..073831568b9 100644 --- a/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_spi.h +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/drivers/drv_spi.h @@ -44,8 +44,8 @@ struct n32_spi_device }; -#define SPI_USING_RX_DMA_FLAG (1<<0) -#define SPI_USING_TX_DMA_FLAG (1<<1) +#define SPI_USING_RX_DMA_FLAG (1 << 0) +#define SPI_USING_TX_DMA_FLAG (1 << 1) typedef enum { diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/drv_common.c b/bsp/n32/n32hxxx/libraries/N32_Drivers/drv_common.c index 02ba9b7e5c2..62cd26d2b56 100644 --- a/bsp/n32/n32hxxx/libraries/N32_Drivers/drv_common.c +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/drv_common.c @@ -12,15 +12,15 @@ #include #ifdef RT_USING_PIN - #include +#include #endif #ifdef RT_USING_SERIAL - #ifdef RT_USING_SERIAL_V2 - #include - #else - #include - #endif /* RT_USING_SERIAL */ +#ifdef RT_USING_SERIAL_V2 +#include +#else +#include +#endif /* RT_USING_SERIAL */ #endif /* RT_USING_SERIAL_V2 */ #define DBG_TAG "drv_common" @@ -63,7 +63,9 @@ void rt_hw_systick_init(void) _systick_ms = 1000u / RT_TICK_PER_SECOND; if (_systick_ms == 0) + { _systick_ms = 1; + } } void System_Tick_Increase(void) @@ -74,7 +76,9 @@ void System_Tick_Increase(void) uint32_t System_Tick_Get(void) { if (SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) + { System_Tick_Increase(); + } return uwTick; } @@ -89,7 +93,9 @@ void SysTick_Handler(void) rt_interrupt_enter(); if (SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) + { System_Tick_Increase(); + } rt_tick_increase(); diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/drv_common.h b/bsp/n32/n32hxxx/libraries/N32_Drivers/drv_common.h index 9c983354680..b92eb7261dc 100644 --- a/bsp/n32/n32hxxx/libraries/N32_Drivers/drv_common.h +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/drv_common.h @@ -15,7 +15,7 @@ #include #include #ifdef RT_USING_DEVICE - #include +#include #endif /* RT_USING_DEVICE */ #ifdef __cplusplus diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/nano/drv_console.c b/bsp/n32/n32hxxx/libraries/N32_Drivers/nano/drv_console.c index dedb6fd5e34..3e0e97f3da4 100644 --- a/bsp/n32/n32hxxx/libraries/N32_Drivers/nano/drv_console.c +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/nano/drv_console.c @@ -204,13 +204,13 @@ void rt_hw_console_init(void) USART_DeInit(USARTx); USART_StructInit(&USART_InitStructure); - USART_InitStructure.BaudRate = 115200; - USART_InitStructure.WordLength = USART_WL_8B; - USART_InitStructure.StopBits = USART_STPB_1; - USART_InitStructure.Parity = USART_PE_NO; + USART_InitStructure.BaudRate = 115200; + USART_InitStructure.WordLength = USART_WL_8B; + USART_InitStructure.StopBits = USART_STPB_1; + USART_InitStructure.Parity = USART_PE_NO; USART_InitStructure.HardwareFlowControl = USART_HFCTRL_NONE; - USART_InitStructure.OverSampling = USART_16OVER; - USART_InitStructure.Mode = USART_MODE_RX | USART_MODE_TX; + USART_InitStructure.OverSampling = USART_16OVER; + USART_InitStructure.Mode = USART_MODE_RX | USART_MODE_TX; USART_Init(USARTx, &USART_InitStructure); USART_Enable(USARTx, ENABLE); } diff --git a/bsp/n32/n32hxxx/libraries/N32_Drivers/nano/drv_gpio.h b/bsp/n32/n32hxxx/libraries/N32_Drivers/nano/drv_gpio.h index 7970318d277..0db697df88d 100644 --- a/bsp/n32/n32hxxx/libraries/N32_Drivers/nano/drv_gpio.h +++ b/bsp/n32/n32hxxx/libraries/N32_Drivers/nano/drv_gpio.h @@ -16,8 +16,8 @@ extern "C" { #endif -#define PIN_LOW 0x00 -#define PIN_HIGH 0x01 +#define PIN_LOW 0x00 +#define PIN_HIGH 0x01 #define PIN_MODE_OUTPUT 0x00 #define PIN_MODE_INPUT 0x01 @@ -25,7 +25,7 @@ extern "C" { #define PIN_MODE_INPUT_PULLDOWN 0x03 #define PIN_MODE_OUTPUT_OD 0x04 -#define GET_PIN(PORTx,PIN) (rt_uint64_t)((((rt_uint64_t)GPIO_PIN_##PIN) << 32) | (rt_uint64_t)(rt_ubase_t)GPIO##PORTx) +#define GET_PIN(PORTx, PIN) (rt_uint64_t)((((rt_uint64_t)GPIO_PIN_##PIN) << 32) | (rt_uint64_t)(rt_ubase_t)GPIO##PORTx) void rt_pin_mode(rt_uint64_t pin, rt_uint8_t mode); void rt_pin_write(rt_uint64_t pin, rt_uint8_t value); diff --git a/bsp/n32/n32hxxx/n32h487zgl7-evb/.config b/bsp/n32/n32hxxx/n32h487zgl7-evb/.config index b7be3cf1cf3..4d4870d5357 100644 --- a/bsp/n32/n32hxxx/n32h487zgl7-evb/.config +++ b/bsp/n32/n32hxxx/n32h487zgl7-evb/.config @@ -1499,6 +1499,9 @@ CONFIG_BSP_USING_UART1=y # CONFIG_BSP_UART1_TX_USING_DMA is not set # CONFIG_BSP_USING_UART2 is not set # CONFIG_BSP_USING_UART3 is not set +# CONFIG_BSP_USING_ON_CHIP_FLASH is not set +# CONFIG_BSP_USING_ONCHIP_RTC is not set +# CONFIG_BSP_USING_FDCAN is not set # end of On-chip Peripheral Drivers # diff --git a/bsp/n32/n32hxxx/n32h487zgl7-evb/board/Cube_Config/Cube_Config.ntfx b/bsp/n32/n32hxxx/n32h487zgl7-evb/board/Cube_Config/Cube_Config.ntfx index cac1fa8b026..468240de0ee 100644 Binary files a/bsp/n32/n32hxxx/n32h487zgl7-evb/board/Cube_Config/Cube_Config.ntfx and b/bsp/n32/n32hxxx/n32h487zgl7-evb/board/Cube_Config/Cube_Config.ntfx differ diff --git a/bsp/n32/n32hxxx/n32h487zgl7-evb/board/Cube_Config/USER/inc/n32h47x_48x_cfg.h b/bsp/n32/n32hxxx/n32h487zgl7-evb/board/Cube_Config/USER/inc/n32h47x_48x_cfg.h index 0500cab396d..5bed7aa8f8d 100644 --- a/bsp/n32/n32hxxx/n32h487zgl7-evb/board/Cube_Config/USER/inc/n32h47x_48x_cfg.h +++ b/bsp/n32/n32hxxx/n32h487zgl7-evb/board/Cube_Config/USER/inc/n32h47x_48x_cfg.h @@ -15,7 +15,7 @@ extern "C" { /* NTFx CODE START Extern*/ extern void SysTick_Delayms(uint32_t Delayms); -extern void DMA_SetPerMemAddr(DMA_ChannelType* DMAChx, uint32_t periphAddr, uint32_t memAddr, uint32_t bufSize); +extern void DMA_SetPerMemAddr(DMA_ChannelType* DMAChx, uint32_t periphAddr,uint32_t memAddr,uint32_t bufSize ); extern bool RCC_Configuration(void); extern bool GPIO_Configuration(void); extern bool NVIC_Configuration(void); diff --git a/bsp/n32/n32hxxx/n32h487zgl7-evb/board/Cube_Config/USER/src/n32h47x_48x_cfg.c b/bsp/n32/n32hxxx/n32h487zgl7-evb/board/Cube_Config/USER/src/n32h47x_48x_cfg.c index 7bd530175bf..607700155c7 100644 --- a/bsp/n32/n32hxxx/n32h487zgl7-evb/board/Cube_Config/USER/src/n32h47x_48x_cfg.c +++ b/bsp/n32/n32hxxx/n32h487zgl7-evb/board/Cube_Config/USER/src/n32h47x_48x_cfg.c @@ -10,44 +10,44 @@ __IO uint32_t mwTick; void SysTick_Delayms(uint32_t Delayms) { uint32_t tickstart = mwTick; - uint32_t wait = Delayms; + uint32_t wait=Delayms; /* Add 1 to guarantee minimum wait */ if (wait < 0xFFFFFFFFU) { - wait += 1; + wait +=1; } while ((mwTick - tickstart) < wait) { } } -/** -*@name DMA_SetPerMemAddr. -*@brief Set peripher address and memory address of DMA -*@param DMAChx (The input parameters must be the following values): -* - DMA1_CH1 -* - DMA1_CH2 -* - DMA1_CH3 -* - DMA1_CH4 -* - DMA1_CH5 -* - DMA1_CH6 -* - DMA1_CH7 -* - DMA1_CH8 -* - DMA2_CH1 -* - DMA2_CH2 -* - DMA2_CH3 -* - DMA2_CH4 -* - DMA2_CH5 -* - DMA2_CH6 -* - DMA2_CH7 -* - DMA2_CH8 -*@param periphAddr peripher address -*@param memAddr memory address -*@param bufSize buff size -*@return status -*/ -void DMA_SetPerMemAddr(DMA_ChannelType* DMAChx, uint32_t periphAddr, uint32_t memAddr, uint32_t bufSize) -{ - /* DMAy Channelx TXNUM Configuration */ + /** + *@name DMA_SetPerMemAddr. + *@brief Set peripher address and memory address of DMA + *@param DMAChx (The input parameters must be the following values): + * - DMA1_CH1 + * - DMA1_CH2 + * - DMA1_CH3 + * - DMA1_CH4 + * - DMA1_CH5 + * - DMA1_CH6 + * - DMA1_CH7 + * - DMA1_CH8 + * - DMA2_CH1 + * - DMA2_CH2 + * - DMA2_CH3 + * - DMA2_CH4 + * - DMA2_CH5 + * - DMA2_CH6 + * - DMA2_CH7 + * - DMA2_CH8 + *@param periphAddr peripher address + *@param memAddr memory address + *@param bufSize buff size + *@return status + */ + void DMA_SetPerMemAddr(DMA_ChannelType* DMAChx, uint32_t periphAddr,uint32_t memAddr,uint32_t bufSize ) + { + /* DMAy Channelx TXNUM Configuration */ /* Write to DMAy Channelx TXNUM */ DMAChx->TXNUM = bufSize; @@ -58,22 +58,22 @@ void DMA_SetPerMemAddr(DMA_ChannelType* DMAChx, uint32_t periphAddr, uint32_t me /* DMAy Channelx MADDR Configuration */ /* Write to DMAy Channelx MADDR */ DMAChx->MADDR = memAddr; -} -/** -*@name RCC_InitSHRTPLL. -*@brief Initialze the SHRTPLL clock source and multiplication factor. -*@param SHRTPLL_source(SHRTPLL entry clock source): -* - RCC_SHRTPLL_SRC_HSI HSI oscillator clock selected as SHRTPLL clock entry -* - RCC_SHRTPLL_SRC_HSE HSE oscillator clock selected as SHRTPLL clock entry -*@param CLKF(SHRTPLL Multiple coefficient) -*@param CLKR(SHRTPLL division coefficient) -*@param BWTRIM(Bandwidth adjustment) -*@return none: -*note SHRTPLL = SHRTPLL_source*(CLKF[25:0]/16384)/(CLKR[5:0] +1)/4 -*/ + } + /** + *@name RCC_InitSHRTPLL. + *@brief Initialze the SHRTPLL clock source and multiplication factor. + *@param SHRTPLL_source(SHRTPLL entry clock source): + * - RCC_SHRTPLL_SRC_HSI HSI oscillator clock selected as SHRTPLL clock entry + * - RCC_SHRTPLL_SRC_HSE HSE oscillator clock selected as SHRTPLL clock entry + *@param CLKF(SHRTPLL Multiple coefficient) + *@param CLKR(SHRTPLL division coefficient) + *@param BWTRIM(Bandwidth adjustment) + *@return none: + *note SHRTPLL = SHRTPLL_source*(CLKF[25:0]/16384)/(CLKR[5:0] +1)/4 + */ void RCC_InitSHRTPLL(uint32_t SHRTPLL_source, uint32_t CLKF, uint32_t CLKR, uint32_t BWTRIM) { - uint32_t temp_value1, temp_value2, temp_value3; + uint32_t temp_value1,temp_value2,temp_value3; /* Enable SHRTPLL module power */ @@ -86,8 +86,8 @@ void RCC_InitSHRTPLL(uint32_t SHRTPLL_source, uint32_t CLKF, uint32_t CLKR, uint /* Configure the work mode to normal */ RCC->SHRTPLLCTRL1 &= (~RCC_SHRTPLLMODE_PD); /* Enable Saturation and fraction accumulation function */ - RCC->SHRTPLLCTRL1 |= (RCC_SHRTPLL_SATEN | RCC_SHRTPLL_FRACEN); - + RCC->SHRTPLLCTRL1 |= (RCC_SHRTPLL_SATEN|RCC_SHRTPLL_FRACEN); + /* get the SHRTPLL value */ temp_value1 = RCC->SHRTPLLCTRL1; temp_value2 = RCC->SHRTPLLCTRL2; @@ -103,15 +103,15 @@ void RCC_InitSHRTPLL(uint32_t SHRTPLL_source, uint32_t CLKF, uint32_t CLKR, uint /* Set CLKF[25:0] bits */ temp_value1 |= (uint32_t)CLKF; /* Set CLKR[5:0] bits */ - temp_value2 |= ((uint32_t)CLKR << 26); + temp_value2 |= ((uint32_t)CLKR<<26); /* Set BWTRIM[11:0] bits */ - temp_value3 |= ((uint32_t)BWTRIM << 12); + temp_value3 |= ((uint32_t)BWTRIM<<12); /* Store the new value */ RCC->SHRTPLLCTRL1 = temp_value1; RCC->SHRTPLLCTRL2 = temp_value2; RCC->SHRTPLLCTRL3 = temp_value3; - + /* Reset SHRTPLL */ RCC_EnableAHBPeriphReset(RCC_AHB_PERIPHRST_SHRTPLL); @@ -128,13 +128,13 @@ bool RCC_Configuration(void) { ErrorStatus ClockStatus; RCC_DeInit(); - + RCC_EnableHsi(ENABLE); /* Wait till HSI is ready */ ClockStatus = RCC_WaitHsiStable(); if (ClockStatus != SUCCESS) return false; - - RCC_ConfigPll(RCC_PLL_SRC_HSI, RCC_PLL_PRE_2, RCC_PLL_MUL_60, RCC_PLLOUT_DIV_1); + + RCC_ConfigPll(RCC_PLL_SRC_HSI,RCC_PLL_PRE_2,RCC_PLL_MUL_60,RCC_PLLOUT_DIV_1); /* Enable PLL */ RCC_EnablePll(ENABLE); /* Wait till PLL is ready */ @@ -142,27 +142,27 @@ bool RCC_Configuration(void) RCC_ConfigHclk(RCC_SYSCLK_DIV1); RCC_ConfigPclk2(RCC_HCLK_DIV2); RCC_ConfigPclk1(RCC_HCLK_DIV2); - + /* Disable Prefetch Buffer */ FLASH_PrefetchBufSet(FLASH_PrefetchBuf_DIS); FLASH_iCacheCmd(FLASH_iCache_EN); /* Flash wait state */ FLASH_SetLatency(FLASH_LATENCY_5); - + /*config RNG clock*/ RCC_ConfigTrng1mClk(RCC_TRNG1MCLK_SRC_HSI, RCC_TRNG1MCLK_DIV8); RCC_EnableTrng1mClk(ENABLE); RCC_ConfigRngcClk(RCC_RNGCCLK_SYSCLK_DIV1); /*config TRACE clock*/ RCC_ConfigTraceClk(RCC_TRACECLK_DIV1); - + /* Select PLL as system clock source */ RCC_ConfigSysclk(RCC_SYSCLK_SRC_PLL); /* Wait till PLL is used as system clock source */ while (RCC_GetSysclkSrc() != RCC_CFG_SCLKSTS_PLL) ; /* Configure the SysTick to have interrupt in 1ms time basis*/ SysTick_Config(240000); - /* NTFx CODE END */ +/* NTFx CODE END */ return true; } /* NTFx CODE START */ @@ -175,12 +175,16 @@ bool GPIO_Configuration(void) { GPIO_InitType GPIO_InitStructure; GPIO_InitStruct(&GPIO_InitStructure); - + /* Enable the GPIO clock*/ RCC_EnableAHB1PeriphClk(RCC_AHB_PERIPHEN_GPIOA | RCC_AHB_PERIPHEN_GPIOH, ENABLE); - RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_AFIO, ENABLE); - - + RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_AFIO,ENABLE); + + + + /*********Initialize USART1 GPIO function *********/ + /********PA9->USART1.TX********/ + /********PA10->USART1.RX********/ /*Initialize AF_PP GPIO */ GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AF_PP; GPIO_InitStructure.GPIO_Pull = GPIO_PULL_UP; @@ -188,18 +192,19 @@ bool GPIO_Configuration(void) GPIO_InitStructure.GPIO_Current = GPIO_DS_2mA; GPIO_InitStructure.GPIO_Alternate = GPIO_AF5; GPIO_InitStructure.Pin = GPIO_PIN_9; - GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure); - + GPIO_InitPeripheral(GPIOA,&GPIO_InitStructure); + /*Initialize input GPIO */ GPIO_InitStructure.GPIO_Mode = GPIO_MODE_INPUT; GPIO_InitStructure.GPIO_Pull = GPIO_PULL_UP; GPIO_InitStructure.GPIO_Alternate = GPIO_AF5; GPIO_InitStructure.Pin = GPIO_PIN_10; - GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure); - - GPIO_ConfigPinRemap(0, 0, GPIO_RMP_SWJ_SWD); - - /* NTFx CODE END */ + GPIO_InitPeripheral(GPIOA,&GPIO_InitStructure); + + GPIO_ConfigPinRemap(0,0,GPIO_RMP_SWJ_SWD); + + +/* NTFx CODE END */ return true; } /* NTFx CODE START */ @@ -216,8 +221,8 @@ bool NVIC_Configuration(void) - Lower values gives higher priority */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); - NVIC_SetPriority(SysTick_IRQn, NVIC_EncodePriority(4, 0, 0)); - /* NTFx CODE END */ + NVIC_SetPriority(SysTick_IRQn,NVIC_EncodePriority(4,0,0)); +/* NTFx CODE END */ return true; } /* NTFx CODE START */ @@ -228,7 +233,7 @@ bool NVIC_Configuration(void) */ bool DMA_Configuration(void) { - /* NTFx CODE END */ +/* NTFx CODE END */ return true; } /* NTFx CODE START */ @@ -242,24 +247,24 @@ bool USART_Configuration(void) USART_InitType USART_InitStructure; USART_StructInit(&USART_InitStructure); /* Enable USART1 clock */ - RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_USART1, ENABLE); - - + RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_USART1,ENABLE); + + /*********initialize the USART1************/ USART_DeInit(USART1); USART_InitStructure.BaudRate = 115200; USART_InitStructure.WordLength = USART_WL_8B; USART_InitStructure.StopBits = USART_STPB_1; - USART_InitStructure.Parity = USART_PE_NO; - USART_InitStructure.HardwareFlowControl = USART_HFCTRL_NONE; - USART_InitStructure.Mode = USART_MODE_RX | USART_MODE_TX; - USART_InitStructure.OverSampling = USART_16OVER ; + USART_InitStructure.Parity = USART_PE_NO; + USART_InitStructure.HardwareFlowControl = USART_HFCTRL_NONE; + USART_InitStructure.Mode = USART_MODE_RX | USART_MODE_TX; + USART_InitStructure.OverSampling = USART_16OVER ; /* Configure USART1 */ USART_Init(USART1, &USART_InitStructure); - - + + /* Enable the USART1 */ USART_Enable(USART1, ENABLE); - /* NTFx CODE END */ +/* NTFx CODE END */ return true; } diff --git a/bsp/n32/n32hxxx/n32h487zgl7-evb/board/Kconfig b/bsp/n32/n32hxxx/n32h487zgl7-evb/board/Kconfig index 011a2a9ce60..c0b5821609b 100644 --- a/bsp/n32/n32hxxx/n32h487zgl7-evb/board/Kconfig +++ b/bsp/n32/n32hxxx/n32h487zgl7-evb/board/Kconfig @@ -60,6 +60,329 @@ menu "On-chip Peripheral Drivers" endif + config BSP_USING_ON_CHIP_FLASH + bool "Enable on-chip FLASH" + default n + + menuconfig BSP_USING_ONCHIP_RTC + bool "Enable RTC" + select RT_USING_RTC + default n + if BSP_USING_ONCHIP_RTC + choice BSP_RTC_LS_SEL + prompt "Select clock source" + default BSP_RTC_USING_LSE + + config BSP_RTC_USING_LSE + bool "RTC USING LSE" + + config BSP_RTC_USING_LSI + bool "RTC USING LSI" + endchoice + endif + + menuconfig BSP_USING_FDCAN + bool "Enable FDCAN (CAN FD)" + default n + select RT_USING_CAN + select RT_CAN_USING_CANFD + select RT_CAN_USING_HDR + if BSP_USING_FDCAN + config BSP_FDCAN_MSG_RAM_WORDS + int "Shared Message RAM size (32-bit words)" + range 1 4480 + default 768 + help + One continuous Message RAM array shared by FDCAN1/2/3. + Enabled instances are packed in instance order using + each instance's configured resource requirement. + + config BSP_USING_FDCAN1 + bool "Enable FDCAN1" + default n + if BSP_USING_FDCAN1 + menu "FDCAN1 resource configuration" + config BSP_FDCAN1_USING_TDC + bool "Enable transmitter delay compensation" + default n + + if BSP_FDCAN1_USING_TDC + config BSP_FDCAN1_TDC_OFFSET + int "TDC offset" + range 0 127 + default 0 + + config BSP_FDCAN1_TDC_FILTER + int "TDC filter window" + range 0 127 + default 0 + endif + + config BSP_FDCAN1_STD_FILTER_SIZE + int "Standard ID filter elements" + range 0 128 + default 2 + + config BSP_FDCAN1_EXT_FILTER_SIZE + int "Extended ID filter elements" + range 0 64 + default 2 + + config BSP_FDCAN1_RX_FIFO0_SIZE + int "RX FIFO0 elements" + range 1 64 + default 8 + + config BSP_FDCAN1_RX_FIFO0_DATA_BYTES + int "RX FIFO0 data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN1_RX_FIFO1_SIZE + int "RX FIFO1 elements" + range 0 64 + default 0 + + config BSP_FDCAN1_RX_FIFO1_DATA_BYTES + int "RX FIFO1 data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN1_RX_BUFFER_SIZE + int "Dedicated RX buffer elements" + range 0 64 + default 0 + + config BSP_FDCAN1_RX_BUFFER_DATA_BYTES + int "Dedicated RX buffer data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN1_TX_EVENT_FIFO_SIZE + int "TX event FIFO elements" + range 0 32 + default 0 + + config BSP_FDCAN1_TX_BUFFER_SIZE + int "Dedicated TX buffer elements" + range 1 32 + default 3 + + config BSP_FDCAN1_TX_BUFFER_DATA_BYTES + int "TX buffer/FIFO data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN1_TX_QUEUE_MODE + bool "Use TX Queue mode (otherwise FIFO mode)" + default n + + config BSP_FDCAN1_TX_FIFO_QUEUE_SIZE + int "TX FIFO/Queue elements" + range 0 31 + default 0 + endmenu + endif + + config BSP_USING_FDCAN2 + bool "Enable FDCAN2" + default n + if BSP_USING_FDCAN2 + menu "FDCAN2 resource configuration" + config BSP_FDCAN2_USING_TDC + bool "Enable transmitter delay compensation" + default n + + if BSP_FDCAN2_USING_TDC + config BSP_FDCAN2_TDC_OFFSET + int "TDC offset" + range 0 127 + default 0 + + config BSP_FDCAN2_TDC_FILTER + int "TDC filter window" + range 0 127 + default 0 + endif + + config BSP_FDCAN2_STD_FILTER_SIZE + int "Standard ID filter elements" + range 0 128 + default 2 + + config BSP_FDCAN2_EXT_FILTER_SIZE + int "Extended ID filter elements" + range 0 64 + default 2 + + config BSP_FDCAN2_RX_FIFO0_SIZE + int "RX FIFO0 elements" + range 1 64 + default 8 + + config BSP_FDCAN2_RX_FIFO0_DATA_BYTES + int "RX FIFO0 data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN2_RX_FIFO1_SIZE + int "RX FIFO1 elements" + range 0 64 + default 0 + + config BSP_FDCAN2_RX_FIFO1_DATA_BYTES + int "RX FIFO1 data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN2_RX_BUFFER_SIZE + int "Dedicated RX buffer elements" + range 0 64 + default 0 + + config BSP_FDCAN2_RX_BUFFER_DATA_BYTES + int "Dedicated RX buffer data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN2_TX_EVENT_FIFO_SIZE + int "TX event FIFO elements" + range 0 32 + default 0 + + config BSP_FDCAN2_TX_BUFFER_SIZE + int "Dedicated TX buffer elements" + range 1 32 + default 3 + + config BSP_FDCAN2_TX_BUFFER_DATA_BYTES + int "TX buffer/FIFO data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN2_TX_QUEUE_MODE + bool "Use TX Queue mode (otherwise FIFO mode)" + default n + + config BSP_FDCAN2_TX_FIFO_QUEUE_SIZE + int "TX FIFO/Queue elements" + range 0 31 + default 0 + endmenu + endif + + config BSP_USING_FDCAN3 + bool "Enable FDCAN3" + default n + if BSP_USING_FDCAN3 + menu "FDCAN3 resource configuration" + config BSP_FDCAN3_USING_TDC + bool "Enable transmitter delay compensation" + default n + + if BSP_FDCAN3_USING_TDC + config BSP_FDCAN3_TDC_OFFSET + int "TDC offset" + range 0 127 + default 0 + + config BSP_FDCAN3_TDC_FILTER + int "TDC filter window" + range 0 127 + default 0 + endif + + config BSP_FDCAN3_STD_FILTER_SIZE + int "Standard ID filter elements" + range 0 128 + default 2 + + config BSP_FDCAN3_EXT_FILTER_SIZE + int "Extended ID filter elements" + range 0 64 + default 2 + + config BSP_FDCAN3_RX_FIFO0_SIZE + int "RX FIFO0 elements" + range 1 64 + default 8 + + config BSP_FDCAN3_RX_FIFO0_DATA_BYTES + int "RX FIFO0 data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN3_RX_FIFO1_SIZE + int "RX FIFO1 elements" + range 0 64 + default 0 + + config BSP_FDCAN3_RX_FIFO1_DATA_BYTES + int "RX FIFO1 data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN3_RX_BUFFER_SIZE + int "Dedicated RX buffer elements" + range 0 64 + default 0 + + config BSP_FDCAN3_RX_BUFFER_DATA_BYTES + int "Dedicated RX buffer data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN3_TX_EVENT_FIFO_SIZE + int "TX event FIFO elements" + range 0 32 + default 0 + + config BSP_FDCAN3_TX_BUFFER_SIZE + int "Dedicated TX buffer elements" + range 1 32 + default 3 + + config BSP_FDCAN3_TX_BUFFER_DATA_BYTES + int "TX buffer/FIFO data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN3_TX_QUEUE_MODE + bool "Use TX Queue mode (otherwise FIFO mode)" + default n + + config BSP_FDCAN3_TX_FIFO_QUEUE_SIZE + int "TX FIFO/Queue elements" + range 0 31 + default 0 + endmenu + endif + endif + source "$BSP_DIR/../libraries/N32_Drivers/drivers/Kconfig" endmenu diff --git a/bsp/n32/n32hxxx/n32h487zgl7-evb/project.uvprojx b/bsp/n32/n32hxxx/n32h487zgl7-evb/project.uvprojx index c5230dbddc3..fe858ae7b63 100644 --- a/bsp/n32/n32hxxx/n32h487zgl7-evb/project.uvprojx +++ b/bsp/n32/n32hxxx/n32h487zgl7-evb/project.uvprojx @@ -337,9 +337,9 @@ 0 - N32H488, __CLK_TCK=RT_TICK_PER_SECOND, USE_STDPERIPH_DRIVER, __STDC_LIMIT_MACROS, CORE_CM4, __RTTHREAD__, RT_USING_ARMLIBC, RT_USING_LIBC + __RTTHREAD__, USE_STDPERIPH_DRIVER, __STDC_LIMIT_MACROS, __CLK_TCK=RT_TICK_PER_SECOND, CORE_CM4, RT_USING_ARMLIBC, N32H488, RT_USING_LIBC - ..\libraries\N32_Drivers\drivers;..\..\..\..\components\libc\posix\io\poll;packages\n32h47x_48x_cmsis_driver-latest\device;..\..\..\..\components\finsh;applications;board;.;..\..\..\..\components\drivers\include;..\..\..\..\components\libc\posix\ipc;..\..\..\..\libcpu\arm\common;packages\n32h47x_48x_std_driver-latest\n32h47x_48x_std_periph_driver\inc;board\Cube_Config\USER\inc;..\..\..\..\components\drivers\phy;..\..\..\..\components\libc\compilers\common\include;..\..\..\..\include;..\..\..\..\components\libc\posix\io\eventfd;..\..\..\..\components\libc\posix\io\epoll;..\libraries\N32_Drivers\drivers\config;..\..\..\..\components\libc\compilers\common\extension\fcntl\octal;..\..\..\..\components\drivers\include;..\..\..\..\components\drivers\include;..\libraries\N32_Drivers;..\..\..\..\libcpu\arm\cortex-m4;..\..\..\..\components\libc\compilers\common\extension;..\..\..\..\components\drivers\include;..\..\..\..\components\drivers\include;..\..\..\..\components\net\utest;board\ports;..\..\..\..\components\drivers\smp_call;..\..\..\..\components\drivers\include;packages\CMSIS-Core-latest\Include + board;packages\n32h47x_48x_cmsis_driver-latest\device;..\..\..\..\components\libc\posix\io\eventfd;packages\CMSIS-Core-latest\Include;..\..\..\..\libcpu\arm\common;..\..\..\..\components\drivers\include;board\ports;..\..\..\..\components\libc\posix\io\poll;packages\n32h47x_48x_std_driver-latest\n32h47x_48x_std_periph_driver\inc;..\..\..\..\components\finsh;..\..\..\..\components\drivers\include;..\..\..\..\include;..\..\..\..\components\net\utest;..\libraries\N32_Drivers\drivers;..\..\..\..\components\drivers\smp_call;applications;..\..\..\..\components\libc\posix\io\epoll;..\..\..\..\libcpu\arm\cortex-m4;..\..\..\..\components\libc\posix\ipc;board\Cube_Config\USER\inc;..\..\..\..\components\libc\compilers\common\extension\fcntl\octal;..\..\..\..\components\drivers\include;..\..\..\..\components\drivers\include;..\..\..\..\components\drivers\include;applications\test_file;..\..\..\..\components\libc\compilers\common\include;..\libraries\N32_Drivers\drivers\config;..\libraries\N32_Drivers;.;..\..\..\..\components\libc\compilers\common\extension diff --git a/bsp/n32/n32hxxx/n32h497zgl7-evb/.config b/bsp/n32/n32hxxx/n32h497zgl7-evb/.config index c82965c6e32..2d3a0eda5f9 100644 --- a/bsp/n32/n32hxxx/n32h497zgl7-evb/.config +++ b/bsp/n32/n32hxxx/n32h497zgl7-evb/.config @@ -1499,6 +1499,9 @@ CONFIG_BSP_USING_UART1=y # CONFIG_BSP_UART1_TX_USING_DMA is not set # CONFIG_BSP_USING_UART2 is not set # CONFIG_BSP_USING_UART3 is not set +# CONFIG_BSP_USING_ON_CHIP_FLASH is not set +# CONFIG_BSP_USING_ONCHIP_RTC is not set +# CONFIG_BSP_USING_FDCAN is not set # end of On-chip Peripheral Drivers # diff --git a/bsp/n32/n32hxxx/n32h497zgl7-evb/board/Cube_Config/Cube_Config.ntfx b/bsp/n32/n32hxxx/n32h497zgl7-evb/board/Cube_Config/Cube_Config.ntfx index c52178ba3cf..e5a1e567ef6 100644 Binary files a/bsp/n32/n32hxxx/n32h497zgl7-evb/board/Cube_Config/Cube_Config.ntfx and b/bsp/n32/n32hxxx/n32h497zgl7-evb/board/Cube_Config/Cube_Config.ntfx differ diff --git a/bsp/n32/n32hxxx/n32h497zgl7-evb/board/Cube_Config/USER/inc/n32h49x_cfg.h b/bsp/n32/n32hxxx/n32h497zgl7-evb/board/Cube_Config/USER/inc/n32h49x_cfg.h index 91455084464..b846e4e837a 100644 --- a/bsp/n32/n32hxxx/n32h497zgl7-evb/board/Cube_Config/USER/inc/n32h49x_cfg.h +++ b/bsp/n32/n32hxxx/n32h497zgl7-evb/board/Cube_Config/USER/inc/n32h49x_cfg.h @@ -22,7 +22,7 @@ extern "C" { /* NTFx CODE START Extern*/ extern void SysTick_Delayms(uint32_t Delayms); -extern void DMA_SetPerMemAddr(DMA_ChannelType* DMAChx, uint32_t periphAddr, uint32_t memAddr, uint32_t bufSize); +extern void DMA_SetPerMemAddr(DMA_ChannelType* DMAChx, uint32_t periphAddr,uint32_t memAddr,uint32_t bufSize ); extern bool RCC_Configuration(void); extern bool GPIO_Configuration(void); extern bool NVIC_Configuration(void); diff --git a/bsp/n32/n32hxxx/n32h497zgl7-evb/board/Cube_Config/USER/src/n32h49x_cfg.c b/bsp/n32/n32hxxx/n32h497zgl7-evb/board/Cube_Config/USER/src/n32h49x_cfg.c index 4c50a8abc37..f7d06beb454 100644 --- a/bsp/n32/n32hxxx/n32h497zgl7-evb/board/Cube_Config/USER/src/n32h49x_cfg.c +++ b/bsp/n32/n32hxxx/n32h497zgl7-evb/board/Cube_Config/USER/src/n32h49x_cfg.c @@ -10,44 +10,44 @@ __IO uint32_t mwTick; void SysTick_Delayms(uint32_t Delayms) { uint32_t tickstart = mwTick; - uint32_t wait = Delayms; + uint32_t wait=Delayms; /* Add 1 to guarantee minimum wait */ if (wait < 0xFFFFFFFFU) { - wait += 1; + wait +=1; } while ((mwTick - tickstart) < wait) { } } -/** -*@name DMA_SetPerMemAddr. -*@brief Set peripher address and memory address of DMA -*@param DMAChx (The input parameters must be the following values): -* - DMA1_CH1 -* - DMA1_CH2 -* - DMA1_CH3 -* - DMA1_CH4 -* - DMA1_CH5 -* - DMA1_CH6 -* - DMA1_CH7 -* - DMA1_CH8 -* - DMA2_CH1 -* - DMA2_CH2 -* - DMA2_CH3 -* - DMA2_CH4 -* - DMA2_CH5 -* - DMA2_CH6 -* - DMA2_CH7 -* - DMA2_CH8 -*@param periphAddr peripher address -*@param memAddr memory address -*@param bufSize buff size -*@return status -*/ -void DMA_SetPerMemAddr(DMA_ChannelType* DMAChx, uint32_t periphAddr, uint32_t memAddr, uint32_t bufSize) -{ - /* DMAy Channelx TXNUM Configuration */ + /** + *@name DMA_SetPerMemAddr. + *@brief Set peripher address and memory address of DMA + *@param DMAChx (The input parameters must be the following values): + * - DMA1_CH1 + * - DMA1_CH2 + * - DMA1_CH3 + * - DMA1_CH4 + * - DMA1_CH5 + * - DMA1_CH6 + * - DMA1_CH7 + * - DMA1_CH8 + * - DMA2_CH1 + * - DMA2_CH2 + * - DMA2_CH3 + * - DMA2_CH4 + * - DMA2_CH5 + * - DMA2_CH6 + * - DMA2_CH7 + * - DMA2_CH8 + *@param periphAddr peripher address + *@param memAddr memory address + *@param bufSize buff size + *@return status + */ + void DMA_SetPerMemAddr(DMA_ChannelType* DMAChx, uint32_t periphAddr,uint32_t memAddr,uint32_t bufSize ) + { + /* DMAy Channelx TXNUM Configuration */ /* Write to DMAy Channelx TXNUM */ DMAChx->TXNUM = bufSize; @@ -58,7 +58,7 @@ void DMA_SetPerMemAddr(DMA_ChannelType* DMAChx, uint32_t periphAddr, uint32_t me /* DMAy Channelx MADDR Configuration */ /* Write to DMAy Channelx MADDR */ DMAChx->MADDR = memAddr; -} + } /* NTFx CODE END */ /* NTFx CODE START */ @@ -71,13 +71,13 @@ bool RCC_Configuration(void) { ErrorStatus ClockStatus; RCC_DeInit(); - + RCC_EnableHsi(ENABLE); /* Wait till HSI is ready */ ClockStatus = RCC_WaitHsiStable(); if (ClockStatus != SUCCESS) return false; - - RCC_ConfigPll(RCC_PLL_SRC_HSI, RCC_PLL_PRE_2, RCC_PLL_MUL_60, RCC_PLLOUT_DIV_1); + + RCC_ConfigPll(RCC_PLL_SRC_HSI,RCC_PLL_PRE_2,RCC_PLL_MUL_60,RCC_PLLOUT_DIV_1); /* Enable PLL */ RCC_EnablePll(ENABLE); /* Wait till PLL is ready */ @@ -86,24 +86,24 @@ bool RCC_Configuration(void) RCC_ConfigPclk2(RCC_HCLK_DIV2); RCC_ConfigPclk1(RCC_HCLK_DIV2); RCC_ConfigPeriphClk(RCC_PERIPH_HCLK_DIV1); - + /* Enable Prefetch Buffer */ FLASH_PrefetchBufSet(FLASH_PrefetchBuf_EN); /* Flash wait state */ FLASH_SetLatency(FLASH_LATENCY_4); - + /*config RNG clock*/ RCC_ConfigTrng1mClk(RCC_TRNG1MCLK_SRC_HSI, RCC_TRNG1MCLK_DIV8); RCC_EnableTrng1mClk(ENABLE); RCC_ConfigRngcClk(RCC_RNGCCLK_SYSCLK_DIV1); - + /* Select PLL as system clock source */ RCC_ConfigSysclk(RCC_SYSCLK_SRC_PLL); /* Wait till PLL is used as system clock source */ while (RCC_GetSysclkSrc() != RCC_CFG_SCLKSTS_PLL) ; /* Configure the SysTick to have interrupt in 1ms time basis*/ SysTick_Config(240000); - /* NTFx CODE END */ +/* NTFx CODE END */ return true; } /* NTFx CODE START */ @@ -116,13 +116,13 @@ bool GPIO_Configuration(void) { GPIO_InitType GPIO_InitStructure; GPIO_InitStruct(&GPIO_InitStructure); - + /* Enable the GPIO clock*/ RCC_EnableAHB1PeriphClk(RCC_AHB_PERIPHEN_GPIOH | RCC_AHB_PERIPHEN_GPIOA, ENABLE); - RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPHEN_AFIO, ENABLE); - - - + RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPHEN_AFIO,ENABLE); + + + /*********Initialize USART1 GPIO function *********/ /********PA9->USART1.TX********/ /********PA10->USART1.RX********/ @@ -133,19 +133,19 @@ bool GPIO_Configuration(void) GPIO_InitStructure.GPIO_Current = GPIO_DS_2mA; GPIO_InitStructure.GPIO_Alternate = GPIO_AF5; GPIO_InitStructure.Pin = GPIO_PIN_9; - GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure); - + GPIO_InitPeripheral(GPIOA,&GPIO_InitStructure); + /*Initialize input GPIO */ GPIO_InitStructure.GPIO_Mode = GPIO_MODE_INPUT; GPIO_InitStructure.GPIO_Pull = GPIO_PULL_UP; GPIO_InitStructure.GPIO_Alternate = GPIO_AF5; GPIO_InitStructure.Pin = GPIO_PIN_10; - GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure); - - GPIO_ConfigPinRemap(0, 0, GPIO_RMP_SWJ_SWD); - - - /* NTFx CODE END */ + GPIO_InitPeripheral(GPIOA,&GPIO_InitStructure); + + GPIO_ConfigPinRemap(0,0,GPIO_RMP_SWJ_SWD); + + +/* NTFx CODE END */ return true; } /* NTFx CODE START */ @@ -162,8 +162,8 @@ bool NVIC_Configuration(void) - Lower values gives higher priority */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); - NVIC_SetPriority(SysTick_IRQn, NVIC_EncodePriority(4, 15, 0)); - /* NTFx CODE END */ + NVIC_SetPriority(SysTick_IRQn,NVIC_EncodePriority(4,15,0)); +/* NTFx CODE END */ return true; } /* NTFx CODE START */ @@ -174,7 +174,7 @@ bool NVIC_Configuration(void) */ bool DMA_Configuration(void) { - /* NTFx CODE END */ +/* NTFx CODE END */ return true; } /* NTFx CODE START */ @@ -188,24 +188,24 @@ bool USART_Configuration(void) USART_InitType USART_InitStructure; USART_StructInit(&USART_InitStructure); /* Enable USART1 clock */ - RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPHEN_USART1, ENABLE); - - + RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPHEN_USART1,ENABLE); + + /*********initialize the USART1************/ USART_DeInit(USART1); USART_InitStructure.BaudRate = 115200; USART_InitStructure.WordLength = USART_WL_8B; USART_InitStructure.StopBits = USART_STPB_1; - USART_InitStructure.Parity = USART_PE_NO; - USART_InitStructure.HardwareFlowControl = USART_HFCTRL_NONE; - USART_InitStructure.Mode = USART_MODE_RX | USART_MODE_TX; - USART_InitStructure.OverSampling = USART_16OVER ; + USART_InitStructure.Parity = USART_PE_NO; + USART_InitStructure.HardwareFlowControl = USART_HFCTRL_NONE; + USART_InitStructure.Mode = USART_MODE_RX | USART_MODE_TX; + USART_InitStructure.OverSampling = USART_16OVER ; /* Configure USART1 */ USART_Init(USART1, &USART_InitStructure); - - + + /* Enable the USART1 */ USART_Enable(USART1, ENABLE); - /* NTFx CODE END */ +/* NTFx CODE END */ return true; } diff --git a/bsp/n32/n32hxxx/n32h497zgl7-evb/board/Kconfig b/bsp/n32/n32hxxx/n32h497zgl7-evb/board/Kconfig index 011a2a9ce60..5d70700412b 100644 --- a/bsp/n32/n32hxxx/n32h497zgl7-evb/board/Kconfig +++ b/bsp/n32/n32hxxx/n32h497zgl7-evb/board/Kconfig @@ -60,6 +60,329 @@ menu "On-chip Peripheral Drivers" endif + config BSP_USING_ON_CHIP_FLASH + bool "Enable on-chip FLASH" + default n + + menuconfig BSP_USING_ONCHIP_RTC + bool "Enable RTC" + select RT_USING_RTC + default n + if BSP_USING_ONCHIP_RTC + choice BSP_RTC_LS_SEL + prompt "Select clock source" + default BSP_RTC_USING_LSE + + config BSP_RTC_USING_LSE + bool "RTC USING LSE" + + config BSP_RTC_USING_LSI + bool "RTC USING LSI" + endchoice + endif + + menuconfig BSP_USING_FDCAN + bool "Enable FDCAN (CAN FD)" + default n + select RT_USING_CAN + select RT_CAN_USING_CANFD + select RT_CAN_USING_HDR + if BSP_USING_FDCAN + config BSP_FDCAN_MSG_RAM_WORDS + int "Shared Message RAM size (32-bit words)" + range 1 4480 + default 768 + help + One continuous Message RAM array shared by FDCAN1/2/3. + Enabled instances are packed in instance order using + each instance's configured resource requirement. + + config BSP_USING_FDCAN1 + bool "Enable FDCAN1" + default n + if BSP_USING_FDCAN1 + menu "FDCAN1 resource configuration" + config BSP_FDCAN1_USING_TDC + bool "Enable transmitter delay compensation" + default n + + if BSP_FDCAN1_USING_TDC + config BSP_FDCAN1_TDC_OFFSET + int "TDC offset" + range 0 127 + default 0 + + config BSP_FDCAN1_TDC_FILTER + int "TDC filter window" + range 0 127 + default 0 + endif + + config BSP_FDCAN1_STD_FILTER_SIZE + int "Standard ID filter elements" + range 0 128 + default 2 + + config BSP_FDCAN1_EXT_FILTER_SIZE + int "Extended ID filter elements" + range 0 64 + default 2 + + config BSP_FDCAN1_RX_FIFO0_SIZE + int "RX FIFO0 elements" + range 1 64 + default 8 + + config BSP_FDCAN1_RX_FIFO0_DATA_BYTES + int "RX FIFO0 data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN1_RX_FIFO1_SIZE + int "RX FIFO1 elements" + range 0 64 + default 0 + + config BSP_FDCAN1_RX_FIFO1_DATA_BYTES + int "RX FIFO1 data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN1_RX_BUFFER_SIZE + int "Dedicated RX buffer elements" + range 0 64 + default 0 + + config BSP_FDCAN1_RX_BUFFER_DATA_BYTES + int "Dedicated RX buffer data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN1_TX_EVENT_FIFO_SIZE + int "TX event FIFO elements" + range 0 32 + default 0 + + config BSP_FDCAN1_TX_BUFFER_SIZE + int "Dedicated TX buffer elements" + range 1 32 + default 3 + + config BSP_FDCAN1_TX_BUFFER_DATA_BYTES + int "TX buffer/FIFO data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN1_TX_QUEUE_MODE + bool "Use TX Queue mode (otherwise FIFO mode)" + default n + + config BSP_FDCAN1_TX_FIFO_QUEUE_SIZE + int "TX FIFO/Queue elements" + range 0 31 + default 0 + endmenu + endif + + config BSP_USING_FDCAN2 + bool "Enable FDCAN2" + default n + if BSP_USING_FDCAN2 + menu "FDCAN2 resource configuration" + config BSP_FDCAN2_USING_TDC + bool "Enable transmitter delay compensation" + default n + + if BSP_FDCAN2_USING_TDC + config BSP_FDCAN2_TDC_OFFSET + int "TDC offset" + range 0 127 + default 0 + + config BSP_FDCAN2_TDC_FILTER + int "TDC filter window" + range 0 127 + default 0 + endif + + config BSP_FDCAN2_STD_FILTER_SIZE + int "Standard ID filter elements" + range 0 128 + default 2 + + config BSP_FDCAN2_EXT_FILTER_SIZE + int "Extended ID filter elements" + range 0 64 + default 2 + + config BSP_FDCAN2_RX_FIFO0_SIZE + int "RX FIFO0 elements" + range 1 64 + default 8 + + config BSP_FDCAN2_RX_FIFO0_DATA_BYTES + int "RX FIFO0 data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN2_RX_FIFO1_SIZE + int "RX FIFO1 elements" + range 0 64 + default 0 + + config BSP_FDCAN2_RX_FIFO1_DATA_BYTES + int "RX FIFO1 data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN2_RX_BUFFER_SIZE + int "Dedicated RX buffer elements" + range 0 64 + default 0 + + config BSP_FDCAN2_RX_BUFFER_DATA_BYTES + int "Dedicated RX buffer data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN2_TX_EVENT_FIFO_SIZE + int "TX event FIFO elements" + range 0 32 + default 0 + + config BSP_FDCAN2_TX_BUFFER_SIZE + int "Dedicated TX buffer elements" + range 1 32 + default 3 + + config BSP_FDCAN2_TX_BUFFER_DATA_BYTES + int "TX buffer/FIFO data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN2_TX_QUEUE_MODE + bool "Use TX Queue mode (otherwise FIFO mode)" + default n + + config BSP_FDCAN2_TX_FIFO_QUEUE_SIZE + int "TX FIFO/Queue elements" + range 0 31 + default 0 + endmenu + endif + + config BSP_USING_FDCAN3 + bool "Enable FDCAN3" + default n + if BSP_USING_FDCAN3 + menu "FDCAN3 resource configuration" + config BSP_FDCAN3_USING_TDC + bool "Enable transmitter delay compensation" + default n + + if BSP_FDCAN3_USING_TDC + config BSP_FDCAN3_TDC_OFFSET + int "TDC offset" + range 0 127 + default 0 + + config BSP_FDCAN3_TDC_FILTER + int "TDC filter window" + range 0 127 + default 0 + endif + + config BSP_FDCAN3_STD_FILTER_SIZE + int "Standard ID filter elements" + range 0 128 + default 2 + + config BSP_FDCAN3_EXT_FILTER_SIZE + int "Extended ID filter elements" + range 0 64 + default 2 + + config BSP_FDCAN3_RX_FIFO0_SIZE + int "RX FIFO0 elements" + range 1 64 + default 8 + + config BSP_FDCAN3_RX_FIFO0_DATA_BYTES + int "RX FIFO0 data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN3_RX_FIFO1_SIZE + int "RX FIFO1 elements" + range 0 64 + default 0 + + config BSP_FDCAN3_RX_FIFO1_DATA_BYTES + int "RX FIFO1 data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN3_RX_BUFFER_SIZE + int "Dedicated RX buffer elements" + range 0 64 + default 0 + + config BSP_FDCAN3_RX_BUFFER_DATA_BYTES + int "Dedicated RX buffer data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN3_TX_EVENT_FIFO_SIZE + int "TX event FIFO elements" + range 0 32 + default 0 + + config BSP_FDCAN3_TX_BUFFER_SIZE + int "Dedicated TX buffer elements" + range 1 32 + default 3 + + config BSP_FDCAN3_TX_BUFFER_DATA_BYTES + int "TX buffer/FIFO data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN3_TX_QUEUE_MODE + bool "Use TX Queue mode (otherwise FIFO mode)" + default n + + config BSP_FDCAN3_TX_FIFO_QUEUE_SIZE + int "TX FIFO/Queue elements" + range 0 31 + default 0 + endmenu + endif + endif + source "$BSP_DIR/../libraries/N32_Drivers/drivers/Kconfig" endmenu diff --git a/bsp/n32/n32hxxx/n32h497zgl7-evb/project.uvoptx b/bsp/n32/n32hxxx/n32h497zgl7-evb/project.uvoptx index 32182abdec2..a3c52beefe5 100644 --- a/bsp/n32/n32hxxx/n32h497zgl7-evb/project.uvoptx +++ b/bsp/n32/n32hxxx/n32h497zgl7-evb/project.uvoptx @@ -176,7 +176,7 @@ Applications - 1 + 0 0 0 0 diff --git a/bsp/n32/n32hxxx/n32h497zgl7-evb/project.uvprojx b/bsp/n32/n32hxxx/n32h497zgl7-evb/project.uvprojx index cb3c0c32afa..82afbf362ce 100644 --- a/bsp/n32/n32hxxx/n32h497zgl7-evb/project.uvprojx +++ b/bsp/n32/n32hxxx/n32h497zgl7-evb/project.uvprojx @@ -337,9 +337,9 @@ 0 - RT_USING_ARMLIBC, __RTTHREAD__, RT_USING_LIBC, USE_STDPERIPH_DRIVER, __STDC_LIMIT_MACROS, N32H49x, CORE_CM4, __CLK_TCK=RT_TICK_PER_SECOND + N32H49x, __CLK_TCK=RT_TICK_PER_SECOND, RT_USING_LIBC, __STDC_LIMIT_MACROS, CORE_CM4, __RTTHREAD__, RT_USING_ARMLIBC, USE_STDPERIPH_DRIVER - ..\..\..\..\libcpu\arm\common;..\..\..\..\components\drivers\include;..\libraries\N32_Drivers\drivers\config;applications;board\Cube_Config\USER\inc;..\..\..\..\components\libc\posix\io\poll;..\..\..\..\components\drivers\include;..\..\..\..\components\libc\compilers\common\include;packages\CMSIS-Core-latest\Include;..\..\..\..\components\drivers\include;..\..\..\..\components\libc\posix\io\eventfd;..\libraries\N32_Drivers\drivers;..\..\..\..\components\libc\compilers\common\extension\fcntl\octal;..\..\..\..\components\drivers\include;.;packages\n32h49x_cmsis_driver-latest\device;board;..\..\..\..\components\drivers\include;..\..\..\..\components\drivers\include;..\..\..\..\libcpu\arm\cortex-m4;packages\n32h49x_std_driver-latest\n32h49x_std_periph_driver\inc;board\ports;..\..\..\..\components\net\utest;..\..\..\..\components\libc\compilers\common\extension;..\..\..\..\components\drivers\smp_call;..\..\..\..\components\libc\posix\io\epoll;..\..\..\..\components\drivers\phy;..\libraries\N32_Drivers;..\..\..\..\include;..\..\..\..\components\finsh;..\..\..\..\components\libc\posix\ipc + ..\libraries\N32_Drivers\drivers\config;..\..\..\..\libcpu\arm\cortex-m4;packages\CMSIS-Core-latest\Include;..\..\..\..\components\drivers\include;..\..\..\..\components\drivers\smp_call;..\..\..\..\components\finsh;board\Cube_Config\USER\inc;..\..\..\..\components\libc\posix\ipc;..\libraries\N32_Drivers;..\..\..\..\libcpu\arm\common;..\..\..\..\components\net\utest;..\libraries\N32_Drivers\drivers;board\ports;packages\n32h49x_std_driver-latest\n32h49x_std_periph_driver\inc;..\..\..\..\components\drivers\include;.;..\..\..\..\components\libc\posix\io\poll;..\..\..\..\components\drivers\include;board;packages\n32h49x_cmsis_driver-latest\device;..\..\..\..\components\libc\posix\io\epoll;..\..\..\..\components\drivers\include;..\..\..\..\components\libc\compilers\common\extension\fcntl\octal;..\..\..\..\components\libc\compilers\common\include;..\..\..\..\include;..\..\..\..\components\libc\posix\io\eventfd;..\..\..\..\components\drivers\include;applications\test_file;..\..\..\..\components\libc\compilers\common\extension;applications diff --git a/bsp/n32/n32hxxx/n32h760zil7-stb/.config b/bsp/n32/n32hxxx/n32h760zil7-stb/.config index e495a65abe9..d13e20053d6 100644 --- a/bsp/n32/n32hxxx/n32h760zil7-stb/.config +++ b/bsp/n32/n32hxxx/n32h760zil7-stb/.config @@ -224,7 +224,22 @@ CONFIG_FINSH_USING_OPTION_COMPLETION=y # # DFS: device virtual file system # -# CONFIG_RT_USING_DFS is not set +CONFIG_RT_USING_DFS=y +CONFIG_DFS_USING_POSIX=y +CONFIG_DFS_USING_WORKDIR=y +# CONFIG_RT_USING_DFS_MNTTABLE is not set +CONFIG_DFS_FD_MAX=16 +CONFIG_RT_USING_DFS_V1=y +# CONFIG_RT_USING_DFS_V2 is not set +CONFIG_DFS_FILESYSTEMS_MAX=4 +CONFIG_DFS_FILESYSTEM_TYPES_MAX=4 +# CONFIG_RT_USING_DFS_ELMFAT is not set +CONFIG_RT_USING_DFS_DEVFS=y +# CONFIG_RT_USING_DFS_ROMFS is not set +# CONFIG_RT_USING_DFS_CROMFS is not set +# CONFIG_RT_USING_DFS_RAMFS is not set +# CONFIG_RT_USING_DFS_TMPFS is not set +# CONFIG_RT_USING_DFS_MQUEUE is not set # end of DFS: device virtual file system # CONFIG_RT_USING_FAL is not set @@ -1507,7 +1522,9 @@ CONFIG_BSP_USING_UART1=y # CONFIG_BSP_USING_ONCHIP_RTC is not set # CONFIG_BSP_USING_ADC is not set # CONFIG_BSP_USING_WDT is not set +# CONFIG_BSP_USING_QSPI is not set # CONFIG_BSP_USING_ON_CHIP_FLASH is not set +# CONFIG_BSP_USING_SDIO is not set # CONFIG_BSP_USING_FDCAN is not set # CONFIG_BSP_USING_DAC is not set # CONFIG_BSP_USING_CLOCK_TIMER is not set diff --git a/bsp/n32/n32hxxx/n32h760zil7-stb/board/Cube_Config/Cube.ntfx b/bsp/n32/n32hxxx/n32h760zil7-stb/board/Cube_Config/Cube.ntfx index 506b1fb808b..f79a41c17ec 100644 Binary files a/bsp/n32/n32hxxx/n32h760zil7-stb/board/Cube_Config/Cube.ntfx and b/bsp/n32/n32hxxx/n32h760zil7-stb/board/Cube_Config/Cube.ntfx differ diff --git a/bsp/n32/n32hxxx/n32h760zil7-stb/board/Cube_Config/USER/inc/n32h7xx_cfg.h b/bsp/n32/n32hxxx/n32h760zil7-stb/board/Cube_Config/USER/inc/n32h7xx_cfg.h index 8015ca89bd3..419e3c61145 100644 --- a/bsp/n32/n32hxxx/n32h760zil7-stb/board/Cube_Config/USER/inc/n32h7xx_cfg.h +++ b/bsp/n32/n32hxxx/n32h760zil7-stb/board/Cube_Config/USER/inc/n32h7xx_cfg.h @@ -29,7 +29,7 @@ extern "C" { /* NTFx CODE START Extern*/ extern void SysTick_Delayms(uint32_t Delayms); -extern void DMA_SetPerMemAddr(DMA_ChannelType *DMAChx, uint32_t periphAddr, uint32_t memAddr, uint32_t bufSize); +extern void DMA_SetPerMemAddr(DMA_ChannelType* DMAChx, uint32_t periphAddr,uint32_t memAddr,uint32_t bufSize ); extern bool RCC_Configuration(void); extern bool NVIC_Configuration(void); extern bool DMA_Configuration(void); diff --git a/bsp/n32/n32hxxx/n32h760zil7-stb/board/Cube_Config/USER/src/n32h7xx_cfg.c b/bsp/n32/n32hxxx/n32h760zil7-stb/board/Cube_Config/USER/src/n32h7xx_cfg.c index 82162ec4a73..b248af7d7e6 100644 --- a/bsp/n32/n32hxxx/n32h760zil7-stb/board/Cube_Config/USER/src/n32h7xx_cfg.c +++ b/bsp/n32/n32hxxx/n32h760zil7-stb/board/Cube_Config/USER/src/n32h7xx_cfg.c @@ -9,76 +9,76 @@ __IO uint32_t mwTick; void SysTick_Delayms(uint32_t Delayms) { uint32_t tickstart = mwTick; - uint32_t wait = Delayms; + uint32_t wait=Delayms; /* Add 1 to guarantee minimum wait */ if (wait < 0xFFFFFFFFU) { - wait += 1; + wait +=1; } while ((mwTick - tickstart) < wait) { } } -/** -*@name DMA_SetSrcDstAddr. -*@brief Set peripher address and memory address of DMA -*param DMAy (The input parameters must be the following values): -* - DMA1 -* - DMA2 -* - DMA3 -*param ChNum (The input parameters must be the following values): -* - DMA_CHANNEL_0 -* - DMA_CHANNEL_1 -* - DMA_CHANNEL_2 -* - DMA_CHANNEL_3 -* - DMA_CHANNEL_4 -* - DMA_CHANNEL_5 -* - DMA_CHANNEL_6 -* - DMA_CHANNEL_7 -*@param SrcAddr Source address -*@param DstAddr Destination address -*@return status -*/ -void DMA_SetSrcDstAddr(DMA_Module * const DMAy, DMA_ChNumType ChNum, uint32_t SrcAddr, uint32_t DstAddr) -{ + /** + *@name DMA_SetSrcDstAddr. + *@brief Set peripher address and memory address of DMA + *param DMAy (The input parameters must be the following values): + * - DMA1 + * - DMA2 + * - DMA3 + *param ChNum (The input parameters must be the following values): + * - DMA_CHANNEL_0 + * - DMA_CHANNEL_1 + * - DMA_CHANNEL_2 + * - DMA_CHANNEL_3 + * - DMA_CHANNEL_4 + * - DMA_CHANNEL_5 + * - DMA_CHANNEL_6 + * - DMA_CHANNEL_7 + *@param SrcAddr Source address + *@param DstAddr Destination address + *@return status + */ + void DMA_SetSrcDstAddr(DMA_Module *const DMAy,DMA_ChNumType ChNum, uint32_t SrcAddr,uint32_t DstAddr ) + { /* Sets channel n source address register */ WRITE_REG(DMAy->CH[ChNum].SA, SrcAddr); /* Sets channel n destination address register */ WRITE_REG(DMAy->CH[ChNum].DA, DstAddr); -} -/** -*@name MDMA_SetSrcDstAddr. -*@brief Set peripher address and memory address of MDMA -*param MDMAy (The input parameters must be the following values): -* - MDMA -*param ChNum (The input parameters must be the following values): -* - MDMA_CHANNEL_0 -* - MDMA_CHANNEL_1 -* - MDMA_CHANNEL_2 -* - MDMA_CHANNEL_3 -* - MDMA_CHANNEL_4 -* - MDMA_CHANNEL_5 -* - MDMA_CHANNEL_6 -* - MDMA_CHANNEL_7 -* - MDMA_CHANNEL_8 -* - MDMA_CHANNEL_9 -* - MDMA_CHANNEL_10 -* - MDMA_CHANNEL_11 -* - MDMA_CHANNEL_12 -* - MDMA_CHANNEL_13 -* - MDMA_CHANNEL_14 -* - MDMA_CHANNEL_15 -*@param SrcAddr Source address -*@param DstAddr Destination address -*@return status -*/ -void MDMA_SetSrcDstAddr(MDMA_Module * const MDMAy, MDMA_ChNumType ChNum, uint32_t SrcAddr, uint32_t DstAddr) -{ + } + /** + *@name MDMA_SetSrcDstAddr. + *@brief Set peripher address and memory address of MDMA + *param MDMAy (The input parameters must be the following values): + * - MDMA + *param ChNum (The input parameters must be the following values): + * - MDMA_CHANNEL_0 + * - MDMA_CHANNEL_1 + * - MDMA_CHANNEL_2 + * - MDMA_CHANNEL_3 + * - MDMA_CHANNEL_4 + * - MDMA_CHANNEL_5 + * - MDMA_CHANNEL_6 + * - MDMA_CHANNEL_7 + * - MDMA_CHANNEL_8 + * - MDMA_CHANNEL_9 + * - MDMA_CHANNEL_10 + * - MDMA_CHANNEL_11 + * - MDMA_CHANNEL_12 + * - MDMA_CHANNEL_13 + * - MDMA_CHANNEL_14 + * - MDMA_CHANNEL_15 + *@param SrcAddr Source address + *@param DstAddr Destination address + *@return status + */ + void MDMA_SetSrcDstAddr(MDMA_Module *const MDMAy,MDMA_ChNumType ChNum, uint32_t SrcAddr,uint32_t DstAddr ) + { /* Sets channel n source address register */ WRITE_REG(MDMAy->CH[ChNum].SA, SrcAddr); /* Sets channel n destination address register */ WRITE_REG(MDMAy->CH[ChNum].DA, DstAddr); -} + } /* NTFx CODE END */ /* NTFx CODE START */ @@ -90,20 +90,17 @@ void MDMA_SetSrcDstAddr(MDMA_Module * const MDMAy, MDMA_ChNumType ChNum, uint32_ bool RCC_Configuration(void) { ErrorStatus ClockStatus; - + RCC_ConfigHSIclkDivider(RCC_HSICLK_DIV1); RCC_EnableHsi(ENABLE); /* Wait till HSI is ready */ ClockStatus = RCC_WaitHsiStable(); - if (ClockStatus != SUCCESS) - { - return false; - } + if (ClockStatus != SUCCESS) return false; RCC_ConfigSysclkDivider(RCC_SYSCLK_DIV1); RCC_ConfigSysbusDivider(RCC_BUSCLK_DIV2); /*Configures the Periph clock source as HSI*/ RCC_ConfigPeriphClk(RCC_PERIPHCLK_SRC_HSI); - + /* Configure APB1 clock is AHB1/2 = 150.000M */ /* Configure APB2 clock is AHB2/2 = 150.000M */ /* Configure APB5 clock is AHB5/2 = 150.000M */ @@ -111,7 +108,7 @@ bool RCC_Configuration(void) RCC_ConfigAPBclkDivider(RCC_APB1CLK_DIV2, RCC_APB2CLK_DIV2, RCC_APB5CLK_DIV2, RCC_APB6CLK_DIV2); /*Configures the PLL1 clock source and multiplication factor,Fin=64M,Fout=600M*/ //RCC_ConfigPll1(RCC_PLL_SRC_HSI,64000000,600000000,ENABLE); - RCC_ConfigPll1_NoCalculate(RCC_PLL_SRC_HSI, 0, 153600, 3, ENABLE); + RCC_ConfigPll1_NoCalculate(RCC_PLL_SRC_HSI,0,153600,3,ENABLE); /*Configure PLL1 divider value to Pll1A*/ RCC_ConfigPLL1ADivider(RCC_PLLA_DIV1); /*Configure PLL1 divider value to Pll1B*/ @@ -127,18 +124,18 @@ bool RCC_Configuration(void) /* configure sys_clk source is PLL1A */ RCC_ConfigSysclk(RCC_SYSCLK_SRC_PLL1A); /* Check if sys_clk source is PLL1A */ - while (RCC_GetSysclkSrc() != RCC_SYSCLK_STS_PLL1A); - + while(RCC_GetSysclkSrc() != RCC_SYSCLK_STS_PLL1A); + /*Config the USART1/2 PCLK divider from ahb1*/ RCC_ConfigUSARTPClk(RCC_USARTPCLK_AHB1_DIV1); - + /*Config the TRNG clock*/ - RCC_ConfigTRNGClk(RCC_TRNGCLK_SRC_SYSBUSDIV, RCC_TRNGCLK_SYSBUSDIV2); - - + RCC_ConfigTRNGClk(RCC_TRNGCLK_SRC_SYSBUSDIV,RCC_TRNGCLK_SYSBUSDIV2); + + /*Enables the APB1 peripheral clock 3 .*/ - RCC_EnableAPB1PeriphClk3(RCC_APB1_PERIPHEN_M7_USART1, ENABLE); - /* NTFx CODE END */ + RCC_EnableAPB1PeriphClk3(RCC_APB1_PERIPHEN_M7_USART1 ,ENABLE); +/* NTFx CODE END */ return true; } @@ -150,7 +147,8 @@ bool RCC_Configuration(void) */ bool NVIC_Configuration(void) { - /* NTFx CODE END */ + +/* NTFx CODE END */ return true; } @@ -162,7 +160,8 @@ bool NVIC_Configuration(void) */ bool DMA_Configuration(void) { - /* NTFx CODE END */ + +/* NTFx CODE END */ return true; } @@ -174,30 +173,35 @@ bool DMA_Configuration(void) */ bool GPIO_Configuration(void) { + GPIO_InitType GPIO_InitStructure; GPIO_InitStruct(&GPIO_InitStructure); /* Enable the GPIO clock*/ - RCC_EnableAHB5PeriphClk1(RCC_AHB5_PERIPHEN_M7_GPIOA | RCC_AHB5_PERIPHEN_M7_GPIOC | RCC_AHB5_PERIPHEN_M7_GPIOH | RCC_AHB5_PERIPHEN_M4_GPIOA | RCC_AHB5_PERIPHEN_M4_GPIOC | RCC_AHB5_PERIPHEN_M4_GPIOH, ENABLE); - RCC_EnableAHB5PeriphClk2(RCC_AHB5_PERIPHEN_M7_AFIO | RCC_AHB5_PERIPHEN_M4_AFIO, ENABLE); - - + RCC_EnableAHB5PeriphClk1(RCC_AHB5_PERIPHEN_M7_GPIOA | RCC_AHB5_PERIPHEN_M7_GPIOC | RCC_AHB5_PERIPHEN_M7_GPIOH, ENABLE); + RCC_EnableAHB5PeriphClk2(RCC_AHB5_PERIPHEN_M7_AFIO,ENABLE); + + + + /*********Initialize USART1 GPIO function *********/ + /********PA10->USART1.RX********/ + /********PA9->USART1.TX********/ /*Initialize input GPIO */ - GPIO_InitStructure.GPIO_Mode = GPIO_MODE_INPUT; - GPIO_InitStructure.GPIO_Pull = GPIO_PULL_UP; + GPIO_InitStructure.GPIO_Mode = GPIO_MODE_INPUT; + GPIO_InitStructure.GPIO_Pull = GPIO_PULL_UP; GPIO_InitStructure.GPIO_Alternate = GPIO_AF5; - GPIO_InitStructure.Pin = GPIO_PIN_10; - GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure); - + GPIO_InitStructure.Pin = GPIO_PIN_10; + GPIO_InitPeripheral(GPIOA,&GPIO_InitStructure); + /*Initialize AF_PP GPIO */ - GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AF_PP; - GPIO_InitStructure.GPIO_Pull = GPIO_PULL_UP; + GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AF_PP; + GPIO_InitStructure.GPIO_Pull = GPIO_PULL_UP; GPIO_InitStructure.GPIO_Slew_Rate = GPIO_SLEW_RATE_SLOW; - GPIO_InitStructure.GPIO_Current = GPIO_DC_2mA; + GPIO_InitStructure.GPIO_Current = GPIO_DC_2mA; GPIO_InitStructure.GPIO_Alternate = GPIO_AF7; - GPIO_InitStructure.Pin = GPIO_PIN_9; - GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure); - - /* NTFx CODE END */ + GPIO_InitStructure.Pin = GPIO_PIN_9; + GPIO_InitPeripheral(GPIOA,&GPIO_InitStructure); + +/* NTFx CODE END */ return true; } @@ -211,24 +215,24 @@ bool USART_Configuration(void) { USART_InitType USART_InitStructure; USART_StructInit(&USART_InitStructure); - - + + /*********initialize the USART1************/ USART_DeInit(USART1); - USART_InitStructure.BaudRate = 115200; - USART_InitStructure.WordLength = USART_WL_8B; - USART_InitStructure.StopBits = USART_STPB_1; - USART_InitStructure.Parity = USART_PE_NO; - USART_InitStructure.HardwareFlowControl = USART_HFCTRL_NONE; - USART_InitStructure.Mode = USART_MODE_RX | USART_MODE_TX; - USART_InitStructure.OverSampling = USART_16OVER; + USART_InitStructure.BaudRate = 115200; + USART_InitStructure.WordLength = USART_WL_8B; + USART_InitStructure.StopBits = USART_STPB_1; + USART_InitStructure.Parity = USART_PE_NO; + USART_InitStructure.HardwareFlowControl = USART_HFCTRL_NONE; + USART_InitStructure.Mode = USART_MODE_RX | USART_MODE_TX; + USART_InitStructure.OverSampling = USART_16OVER ; /* Configure USART1 */ USART_Init(USART1, &USART_InitStructure); - - + + /* Enable the USART1 */ USART_Enable(USART1, ENABLE); - /* NTFx CODE END */ +/* NTFx CODE END */ return true; } diff --git a/bsp/n32/n32hxxx/n32h760zil7-stb/board/Kconfig b/bsp/n32/n32hxxx/n32h760zil7-stb/board/Kconfig index 1f1614fdd46..9e5790c972f 100644 --- a/bsp/n32/n32hxxx/n32h760zil7-stb/board/Kconfig +++ b/bsp/n32/n32hxxx/n32h760zil7-stb/board/Kconfig @@ -403,6 +403,28 @@ menu "On-chip Peripheral Drivers" config BSP_USING_ON_CHIP_FLASH bool "Enable on-chip FLASH" default n + + menuconfig BSP_USING_SDIO + bool "Enable SD/MMC" + select RT_USING_SDIO + select RT_USING_BLK + default n + if BSP_USING_SDIO + choice BSP_SDIO_SEL + prompt "Select SDIO Instance" + default BSP_USING_SDIO1 + + config BSP_USING_SDIO1 + bool "SDIO1 (SDMMC1, AXI bus)" + + config BSP_USING_SDIO2 + bool "SDIO2 (SDMMC2, AHB1 bus)" + endchoice + + config BSP_USING_SDIO_SDMA + bool "Enable SDMA data transfer" + default n + endif menuconfig BSP_USING_FDCAN bool "Enable FDCAN (CAN FD)" @@ -414,27 +436,762 @@ menu "On-chip Peripheral Drivers" config BSP_USING_FDCAN1 bool "Enable FDCAN1" default n + if BSP_USING_FDCAN1 + menu "FDCAN1 resource configuration" + config BSP_FDCAN1_USING_TDC + bool "Enable transmitter delay compensation" + default n + + if BSP_FDCAN1_USING_TDC + config BSP_FDCAN1_TDC_OFFSET + int "TDC offset" + range 0 127 + default 0 + + config BSP_FDCAN1_TDC_FILTER + int "TDC filter window" + range 0 127 + default 0 + endif + + config BSP_FDCAN1_STD_FILTER_SIZE + int "Standard ID filter elements" + range 0 128 + default 2 + + config BSP_FDCAN1_EXT_FILTER_SIZE + int "Extended ID filter elements" + range 0 64 + default 2 + + config BSP_FDCAN1_RX_FIFO0_SIZE + int "RX FIFO0 elements" + range 1 64 + default 8 + + config BSP_FDCAN1_RX_FIFO0_DATA_BYTES + int "RX FIFO0 data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN1_RX_FIFO1_SIZE + int "RX FIFO1 elements" + range 0 64 + default 0 + + config BSP_FDCAN1_RX_FIFO1_DATA_BYTES + int "RX FIFO1 data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN1_RX_BUFFER_SIZE + int "Dedicated RX buffer elements" + range 0 64 + default 0 + + config BSP_FDCAN1_RX_BUFFER_DATA_BYTES + int "Dedicated RX buffer data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN1_TX_EVENT_FIFO_SIZE + int "TX event FIFO elements" + range 0 32 + default 0 + + config BSP_FDCAN1_TX_BUFFER_SIZE + int "Dedicated TX buffer elements" + range 1 32 + default 3 + + config BSP_FDCAN1_TX_BUFFER_DATA_BYTES + int "TX buffer/FIFO data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN1_TX_QUEUE_MODE + bool "Use TX Queue mode (otherwise FIFO mode)" + default n + + config BSP_FDCAN1_TX_FIFO_QUEUE_SIZE + int "TX FIFO/Queue elements" + range 0 31 + default 0 + endmenu + endif + config BSP_USING_FDCAN2 bool "Enable FDCAN2" default n + if BSP_USING_FDCAN2 + menu "FDCAN2 resource configuration" + config BSP_FDCAN2_USING_TDC + bool "Enable transmitter delay compensation" + default n + + if BSP_FDCAN2_USING_TDC + config BSP_FDCAN2_TDC_OFFSET + int "TDC offset" + range 0 127 + default 0 + + config BSP_FDCAN2_TDC_FILTER + int "TDC filter window" + range 0 127 + default 0 + endif + + config BSP_FDCAN2_STD_FILTER_SIZE + int "Standard ID filter elements" + range 0 128 + default 2 + + config BSP_FDCAN2_EXT_FILTER_SIZE + int "Extended ID filter elements" + range 0 64 + default 2 + + config BSP_FDCAN2_RX_FIFO0_SIZE + int "RX FIFO0 elements" + range 1 64 + default 8 + + config BSP_FDCAN2_RX_FIFO0_DATA_BYTES + int "RX FIFO0 data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN2_RX_FIFO1_SIZE + int "RX FIFO1 elements" + range 0 64 + default 0 + + config BSP_FDCAN2_RX_FIFO1_DATA_BYTES + int "RX FIFO1 data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN2_RX_BUFFER_SIZE + int "Dedicated RX buffer elements" + range 0 64 + default 0 + + config BSP_FDCAN2_RX_BUFFER_DATA_BYTES + int "Dedicated RX buffer data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN2_TX_EVENT_FIFO_SIZE + int "TX event FIFO elements" + range 0 32 + default 0 + + config BSP_FDCAN2_TX_BUFFER_SIZE + int "Dedicated TX buffer elements" + range 1 32 + default 3 + + config BSP_FDCAN2_TX_BUFFER_DATA_BYTES + int "TX buffer/FIFO data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN2_TX_QUEUE_MODE + bool "Use TX Queue mode (otherwise FIFO mode)" + default n + + config BSP_FDCAN2_TX_FIFO_QUEUE_SIZE + int "TX FIFO/Queue elements" + range 0 31 + default 0 + endmenu + endif + config BSP_USING_FDCAN3 bool "Enable FDCAN3" default n + if BSP_USING_FDCAN3 + menu "FDCAN3 resource configuration" + config BSP_FDCAN3_USING_TDC + bool "Enable transmitter delay compensation" + default n + + if BSP_FDCAN3_USING_TDC + config BSP_FDCAN3_TDC_OFFSET + int "TDC offset" + range 0 127 + default 0 + + config BSP_FDCAN3_TDC_FILTER + int "TDC filter window" + range 0 127 + default 0 + endif + + config BSP_FDCAN3_STD_FILTER_SIZE + int "Standard ID filter elements" + range 0 128 + default 2 + + config BSP_FDCAN3_EXT_FILTER_SIZE + int "Extended ID filter elements" + range 0 64 + default 2 + + config BSP_FDCAN3_RX_FIFO0_SIZE + int "RX FIFO0 elements" + range 1 64 + default 8 + + config BSP_FDCAN3_RX_FIFO0_DATA_BYTES + int "RX FIFO0 data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN3_RX_FIFO1_SIZE + int "RX FIFO1 elements" + range 0 64 + default 0 + + config BSP_FDCAN3_RX_FIFO1_DATA_BYTES + int "RX FIFO1 data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN3_RX_BUFFER_SIZE + int "Dedicated RX buffer elements" + range 0 64 + default 0 + + config BSP_FDCAN3_RX_BUFFER_DATA_BYTES + int "Dedicated RX buffer data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN3_TX_EVENT_FIFO_SIZE + int "TX event FIFO elements" + range 0 32 + default 0 + + config BSP_FDCAN3_TX_BUFFER_SIZE + int "Dedicated TX buffer elements" + range 1 32 + default 3 + + config BSP_FDCAN3_TX_BUFFER_DATA_BYTES + int "TX buffer/FIFO data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN3_TX_QUEUE_MODE + bool "Use TX Queue mode (otherwise FIFO mode)" + default n + + config BSP_FDCAN3_TX_FIFO_QUEUE_SIZE + int "TX FIFO/Queue elements" + range 0 31 + default 0 + endmenu + endif + config BSP_USING_FDCAN4 bool "Enable FDCAN4" default n + if BSP_USING_FDCAN4 + menu "FDCAN4 resource configuration" + config BSP_FDCAN4_USING_TDC + bool "Enable transmitter delay compensation" + default n + + if BSP_FDCAN4_USING_TDC + config BSP_FDCAN4_TDC_OFFSET + int "TDC offset" + range 0 127 + default 0 + + config BSP_FDCAN4_TDC_FILTER + int "TDC filter window" + range 0 127 + default 0 + endif + + config BSP_FDCAN4_STD_FILTER_SIZE + int "Standard ID filter elements" + range 0 128 + default 2 + + config BSP_FDCAN4_EXT_FILTER_SIZE + int "Extended ID filter elements" + range 0 64 + default 2 + + config BSP_FDCAN4_RX_FIFO0_SIZE + int "RX FIFO0 elements" + range 1 64 + default 8 + + config BSP_FDCAN4_RX_FIFO0_DATA_BYTES + int "RX FIFO0 data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN4_RX_FIFO1_SIZE + int "RX FIFO1 elements" + range 0 64 + default 0 + + config BSP_FDCAN4_RX_FIFO1_DATA_BYTES + int "RX FIFO1 data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN4_RX_BUFFER_SIZE + int "Dedicated RX buffer elements" + range 0 64 + default 0 + + config BSP_FDCAN4_RX_BUFFER_DATA_BYTES + int "Dedicated RX buffer data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN4_TX_EVENT_FIFO_SIZE + int "TX event FIFO elements" + range 0 32 + default 0 + + config BSP_FDCAN4_TX_BUFFER_SIZE + int "Dedicated TX buffer elements" + range 1 32 + default 3 + + config BSP_FDCAN4_TX_BUFFER_DATA_BYTES + int "TX buffer/FIFO data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN4_TX_QUEUE_MODE + bool "Use TX Queue mode (otherwise FIFO mode)" + default n + + config BSP_FDCAN4_TX_FIFO_QUEUE_SIZE + int "TX FIFO/Queue elements" + range 0 31 + default 0 + endmenu + endif + config BSP_USING_FDCAN5 bool "Enable FDCAN5" default n + if BSP_USING_FDCAN5 + menu "FDCAN5 resource configuration" + config BSP_FDCAN5_USING_TDC + bool "Enable transmitter delay compensation" + default n + + if BSP_FDCAN5_USING_TDC + config BSP_FDCAN5_TDC_OFFSET + int "TDC offset" + range 0 127 + default 0 + + config BSP_FDCAN5_TDC_FILTER + int "TDC filter window" + range 0 127 + default 0 + endif + + config BSP_FDCAN5_STD_FILTER_SIZE + int "Standard ID filter elements" + range 0 128 + default 2 + + config BSP_FDCAN5_EXT_FILTER_SIZE + int "Extended ID filter elements" + range 0 64 + default 2 + + config BSP_FDCAN5_RX_FIFO0_SIZE + int "RX FIFO0 elements" + range 1 64 + default 8 + + config BSP_FDCAN5_RX_FIFO0_DATA_BYTES + int "RX FIFO0 data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN5_RX_FIFO1_SIZE + int "RX FIFO1 elements" + range 0 64 + default 0 + + config BSP_FDCAN5_RX_FIFO1_DATA_BYTES + int "RX FIFO1 data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN5_RX_BUFFER_SIZE + int "Dedicated RX buffer elements" + range 0 64 + default 0 + + config BSP_FDCAN5_RX_BUFFER_DATA_BYTES + int "Dedicated RX buffer data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN5_TX_EVENT_FIFO_SIZE + int "TX event FIFO elements" + range 0 32 + default 0 + + config BSP_FDCAN5_TX_BUFFER_SIZE + int "Dedicated TX buffer elements" + range 1 32 + default 3 + + config BSP_FDCAN5_TX_BUFFER_DATA_BYTES + int "TX buffer/FIFO data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN5_TX_QUEUE_MODE + bool "Use TX Queue mode (otherwise FIFO mode)" + default n + + config BSP_FDCAN5_TX_FIFO_QUEUE_SIZE + int "TX FIFO/Queue elements" + range 0 31 + default 0 + endmenu + endif + config BSP_USING_FDCAN6 bool "Enable FDCAN6" default n + if BSP_USING_FDCAN6 + menu "FDCAN6 resource configuration" + config BSP_FDCAN6_USING_TDC + bool "Enable transmitter delay compensation" + default n + + if BSP_FDCAN6_USING_TDC + config BSP_FDCAN6_TDC_OFFSET + int "TDC offset" + range 0 127 + default 0 + + config BSP_FDCAN6_TDC_FILTER + int "TDC filter window" + range 0 127 + default 0 + endif + + config BSP_FDCAN6_STD_FILTER_SIZE + int "Standard ID filter elements" + range 0 128 + default 2 + + config BSP_FDCAN6_EXT_FILTER_SIZE + int "Extended ID filter elements" + range 0 64 + default 2 + + config BSP_FDCAN6_RX_FIFO0_SIZE + int "RX FIFO0 elements" + range 1 64 + default 8 + + config BSP_FDCAN6_RX_FIFO0_DATA_BYTES + int "RX FIFO0 data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN6_RX_FIFO1_SIZE + int "RX FIFO1 elements" + range 0 64 + default 0 + + config BSP_FDCAN6_RX_FIFO1_DATA_BYTES + int "RX FIFO1 data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN6_RX_BUFFER_SIZE + int "Dedicated RX buffer elements" + range 0 64 + default 0 + + config BSP_FDCAN6_RX_BUFFER_DATA_BYTES + int "Dedicated RX buffer data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN6_TX_EVENT_FIFO_SIZE + int "TX event FIFO elements" + range 0 32 + default 0 + + config BSP_FDCAN6_TX_BUFFER_SIZE + int "Dedicated TX buffer elements" + range 1 32 + default 3 + + config BSP_FDCAN6_TX_BUFFER_DATA_BYTES + int "TX buffer/FIFO data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN6_TX_QUEUE_MODE + bool "Use TX Queue mode (otherwise FIFO mode)" + default n + + config BSP_FDCAN6_TX_FIFO_QUEUE_SIZE + int "TX FIFO/Queue elements" + range 0 31 + default 0 + endmenu + endif + config BSP_USING_FDCAN7 bool "Enable FDCAN7" default n + if BSP_USING_FDCAN7 + menu "FDCAN7 resource configuration" + config BSP_FDCAN7_USING_TDC + bool "Enable transmitter delay compensation" + default n + + if BSP_FDCAN7_USING_TDC + config BSP_FDCAN7_TDC_OFFSET + int "TDC offset" + range 0 127 + default 0 + + config BSP_FDCAN7_TDC_FILTER + int "TDC filter window" + range 0 127 + default 0 + endif + + config BSP_FDCAN7_STD_FILTER_SIZE + int "Standard ID filter elements" + range 0 128 + default 2 + + config BSP_FDCAN7_EXT_FILTER_SIZE + int "Extended ID filter elements" + range 0 64 + default 2 + + config BSP_FDCAN7_RX_FIFO0_SIZE + int "RX FIFO0 elements" + range 1 64 + default 8 + + config BSP_FDCAN7_RX_FIFO0_DATA_BYTES + int "RX FIFO0 data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN7_RX_FIFO1_SIZE + int "RX FIFO1 elements" + range 0 64 + default 0 + + config BSP_FDCAN7_RX_FIFO1_DATA_BYTES + int "RX FIFO1 data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN7_RX_BUFFER_SIZE + int "Dedicated RX buffer elements" + range 0 64 + default 0 + + config BSP_FDCAN7_RX_BUFFER_DATA_BYTES + int "Dedicated RX buffer data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN7_TX_EVENT_FIFO_SIZE + int "TX event FIFO elements" + range 0 32 + default 0 + + config BSP_FDCAN7_TX_BUFFER_SIZE + int "Dedicated TX buffer elements" + range 1 32 + default 3 + + config BSP_FDCAN7_TX_BUFFER_DATA_BYTES + int "TX buffer/FIFO data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN7_TX_QUEUE_MODE + bool "Use TX Queue mode (otherwise FIFO mode)" + default n + + config BSP_FDCAN7_TX_FIFO_QUEUE_SIZE + int "TX FIFO/Queue elements" + range 0 31 + default 0 + endmenu + endif + config BSP_USING_FDCAN8 bool "Enable FDCAN8" default n + if BSP_USING_FDCAN8 + menu "FDCAN8 resource configuration" + config BSP_FDCAN8_USING_TDC + bool "Enable transmitter delay compensation" + default n + + if BSP_FDCAN8_USING_TDC + config BSP_FDCAN8_TDC_OFFSET + int "TDC offset" + range 0 127 + default 0 + + config BSP_FDCAN8_TDC_FILTER + int "TDC filter window" + range 0 127 + default 0 + endif + + config BSP_FDCAN8_STD_FILTER_SIZE + int "Standard ID filter elements" + range 0 128 + default 2 + + config BSP_FDCAN8_EXT_FILTER_SIZE + int "Extended ID filter elements" + range 0 64 + default 2 + + config BSP_FDCAN8_RX_FIFO0_SIZE + int "RX FIFO0 elements" + range 1 64 + default 8 + + config BSP_FDCAN8_RX_FIFO0_DATA_BYTES + int "RX FIFO0 data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN8_RX_FIFO1_SIZE + int "RX FIFO1 elements" + range 0 64 + default 0 + + config BSP_FDCAN8_RX_FIFO1_DATA_BYTES + int "RX FIFO1 data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN8_RX_BUFFER_SIZE + int "Dedicated RX buffer elements" + range 0 64 + default 0 + + config BSP_FDCAN8_RX_BUFFER_DATA_BYTES + int "Dedicated RX buffer data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN8_TX_EVENT_FIFO_SIZE + int "TX event FIFO elements" + range 0 32 + default 0 + + config BSP_FDCAN8_TX_BUFFER_SIZE + int "Dedicated TX buffer elements" + range 1 32 + default 3 + + config BSP_FDCAN8_TX_BUFFER_DATA_BYTES + int "TX buffer/FIFO data bytes per element" + range 8 64 + default 64 + help + Valid values: 8, 12, 16, 20, 24, 32, 48 or 64. + + config BSP_FDCAN8_TX_QUEUE_MODE + bool "Use TX Queue mode (otherwise FIFO mode)" + default n + + config BSP_FDCAN8_TX_FIFO_QUEUE_SIZE + int "TX FIFO/Queue elements" + range 0 31 + default 0 + endmenu + endif endif menuconfig BSP_USING_DAC diff --git a/bsp/n32/n32hxxx/n32h760zil7-stb/board/board.c b/bsp/n32/n32hxxx/n32h760zil7-stb/board/board.c index d5709fcc273..032b69058e9 100644 --- a/bsp/n32/n32hxxx/n32h760zil7-stb/board/board.c +++ b/bsp/n32/n32hxxx/n32h760zil7-stb/board/board.c @@ -31,16 +31,16 @@ void MPU_Config(void) */ MPU_Disable(); - MPU_InitStruct.Enable = MPU_REGION_ENABLE; - MPU_InitStruct.Size = MPU_REGION_SIZE_256MB; + MPU_InitStruct.Enable = MPU_REGION_ENABLE; + MPU_InitStruct.Size = MPU_REGION_SIZE_256MB; MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS; - MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE; - MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE; - MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE; - MPU_InitStruct.Number = MPU_REGION_NUMBER0; - MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1; + MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE; + MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE; + MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE; + MPU_InitStruct.Number = MPU_REGION_NUMBER0; + MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1; MPU_InitStruct.SubRegionDisable = 0x00; - MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE; + MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE; #ifdef BSP_USING_NAND_BANK1 MPU_InitStruct.BaseAddress = ((uint32_t)0xA0000000); diff --git a/bsp/n32/n32hxxx/n32h760zil7-stb/board/board.h b/bsp/n32/n32hxxx/n32h760zil7-stb/board/board.h index b5d9eabd87c..216a69cea14 100644 --- a/bsp/n32/n32hxxx/n32h760zil7-stb/board/board.h +++ b/bsp/n32/n32hxxx/n32h760zil7-stb/board/board.h @@ -28,12 +28,12 @@ extern "C" { #endif -#define N32_FLASH_START_ADRESS ((uint32_t)0x15000000) -#define N32_FLASH_SIZE ((2 *1024 * 1024) - (128 * 1024)) -#define N32_FLASH_END_ADDRESS ((uint32_t)(N32_FLASH_START_ADRESS + N32_FLASH_SIZE)) +#define N32_FLASH_START_ADRESS ((uint32_t)0x15000000) +#define N32_FLASH_SIZE ((2 * 1024 * 1024) - (128 * 1024)) +#define N32_FLASH_END_ADDRESS ((uint32_t)(N32_FLASH_START_ADRESS + N32_FLASH_SIZE)) -#define N32_SRAM_SIZE (128) -#define N32_SRAM_END (0x24000000 + N32_SRAM_SIZE * 1024) +#define N32_SRAM_SIZE (128) +#define N32_SRAM_END (0x24000000 + N32_SRAM_SIZE * 1024) #if defined(__ARMCC_VERSION) extern int Image$$RW_AXI_SRAM$$ZI$$Limit; @@ -43,7 +43,7 @@ extern int _app_estack; #define HEAP_BEGIN (&_app_estack) #endif -#define HEAP_END N32_SRAM_END +#define HEAP_END N32_SRAM_END void System_Initialize(void); diff --git a/bsp/n32/n32hxxx/n32h760zil7-stb/board/ports/sd_host.h b/bsp/n32/n32hxxx/n32h760zil7-stb/board/ports/sd_host.h new file mode 100644 index 00000000000..ce192b82ff7 --- /dev/null +++ b/bsp/n32/n32hxxx/n32h760zil7-stb/board/ports/sd_host.h @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2006-2026, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2026-08-11 ox-horse first version + */ + +#ifndef __SD_HOST_H__ +#define __SD_HOST_H__ + +#include "board.h" + +/* SD card product name length united as bytes. */ +#define SD_PRODUCT_NAME_BYTES (5U) + +/* SD card CID register */ +typedef struct +{ + uint8_t manufacturerID; /* Manufacturer ID [127:120] */ + uint16_t applicationID; /* OEM/Application ID [119:104] */ + uint8_t productName[SD_PRODUCT_NAME_BYTES]; /* Product name [103:64] */ + uint8_t productVersion; /* Product revision [63:56] */ + uint32_t productSerialNumber; /* Product serial number [55:24] */ + uint16_t manufacturerData; /* Manufacturing date [19:8] */ +} sd_cid; + +/* SD card CSD register */ +typedef struct +{ + uint8_t csdStructure; /* CSD structure [127:126] */ + uint8_t dataReadAccessTime1; /* Data read access-time-1 [119:112] */ + uint8_t dataReadAccessTime2; /* Data read access-time-2 in clock cycles (NSAC*100) [111:104] */ + uint8_t transferSpeed; /* Maximum data transfer rate [103:96] */ + uint16_t cardCommandClass; /* Card command classes [95:84] */ + uint8_t readBlockLength; /* Maximum read data block length [83:80] */ + uint16_t flags; /* Flags in _sd_csd_flag */ + uint32_t deviceSize; /* Device size [73:62] */ + /* Following fields from 'readCurrentVddMin' to 'deviceSizeMultiplier' exist in CSD version 1 */ + uint8_t readCurrentVddMin; /* Maximum read current at VDD min [61:59] */ + uint8_t readCurrentVddMax; /* Maximum read current at VDD max [58:56] */ + uint8_t writeCurrentVddMin; /* Maximum write current at VDD min [55:53] */ + uint8_t writeCurrentVddMax; /* Maximum write current at VDD max [52:50] */ + uint8_t deviceSizeMultiplier; /* Device size multiplier [49:47] */ + + uint8_t eraseSectorSize; /* Erase sector size [45:39] */ + uint8_t writeProtectGroupSize; /* Write protect group size [38:32] */ + uint8_t writeSpeedFactor; /* Write speed factor [28:26] */ + uint8_t writeBlockLength; /* Maximum write data block length [25:22] */ + uint8_t fileFormat; /* File format [11:10] */ +} sd_csd_t; + +/* SD card SCR register */ +typedef struct _sd_scr +{ + uint8_t scrStructure; /* SCR Structure [63:60] */ + uint8_t sdSpecification; /* SD memory card specification version [59:56] */ + uint16_t flags; /* SCR flags in _sd_scr_flag */ + uint8_t sdSecurity; /* Security specification supported [54:52] */ + uint8_t sdBusWidths; /* Data bus widths supported [51:48] */ + uint8_t commandSupport; /* Command support bits [33:32] 33-support CMD23, 32-support cmd20*/ + uint32_t reservedForManufacturer; /* reserved for manufacturer usage [31:0] */ +} sd_scr_t; + +/* Record information of card */ +typedef struct +{ + uint32_t flags; /* sd card Flags */ + uint32_t busy; /* busy status */ + uint32_t ocr; /* Raw OCR content,, only 24bit avalible for SDIO card */ + sd_cid cid; /* CID */ + uint32_t rca; /* Relative address of the card */ + sd_csd_t csd; /* CSD */ + uint32_t blockCount; /* Card total block number */ + uint32_t blockSize; /* Card block size */ + sd_scr_t scr; /* SCR */ + uint32_t version; /* Card version */ +// sd_status_t stat; /* sd 512 bit status */ +} sd_card_info; + + +/* card bus width */ +typedef enum +{ + SDMMC_BusWdith1Bit = 0U, /* card bus 1 width */ + SDMMC_BusWdith4Bit = 1U, /* card bus 4 width */ + SDMMC_BusWdith8Bit = 2U, /* card bus 8 width */ +} sd_buswidth_t; + +/* dma mode */ +typedef enum +{ + SDMMC_NODMA = 0U, /* no use dma */ + SDMMC_SDMA = 1U, /* use sdma */ + SDMMC_ADMA = 2U, /* use adma */ +} sd_dma_t; + +/* card operation voltage */ +typedef enum +{ + SD_OperationVoltageNone = 0U, /* indicate current voltage setting is not setting by suser*/ + SD_OperationVoltage330V = 1U, /* card operation voltage around 3.3v */ + SD_OperationVoltage300V = 2U, /* card operation voltage around 3.0v */ + SD_OperationVoltage180V = 3U, /* card operation voltage around 1.8v */ +} sd_operation_voltage_t; + +/* SD card communication method and speed */ +typedef struct +{ + uint32_t busClock_Hz; /* SD bus clock frequency united in Hz */ + sd_buswidth_t busWidth; /* set DATA bus width */ + SD_ModeConfig mode; /* work mode */ + sd_dma_t dma; /* dma mode */ + sd_operation_voltage_t operationVoltageflag; /* card current operation voltage */ +} sd_card_workmode; + +/* SD card state + * Define the card structure including the necessary fields to identify and describe the card. + */ +typedef struct +{ + SDHOST_Module *SDHOSTx; /* Host device */ + SDMMC_Module *SDMMCx; /* SDMMC */ + SDMMC_CMD command; + sd_card_info sd_card_information; + sd_card_workmode card_workmode; + SDHOST_TMODE_struct TMODE_truct; +} sd_card_t; + +#ifdef __cplusplus +} +#endif + +#endif /* __SD_HOST_H__ */ diff --git a/bsp/n32/n32hxxx/n32h760zil7-stb/project.uvoptx b/bsp/n32/n32hxxx/n32h760zil7-stb/project.uvoptx index 8646d492b6e..bb174321204 100644 --- a/bsp/n32/n32hxxx/n32h760zil7-stb/project.uvoptx +++ b/bsp/n32/n32hxxx/n32h760zil7-stb/project.uvoptx @@ -526,42 +526,6 @@ 0 0 0 - ..\..\..\..\components\dfs\dfs_v1\filesystems\elmfat\dfs_elm.c - dfs_elm.c - 0 - 0 - - - 5 - 27 - 1 - 0 - 0 - 0 - ..\..\..\..\components\dfs\dfs_v1\filesystems\elmfat\ff.c - ff.c - 0 - 0 - - - 5 - 28 - 1 - 0 - 0 - 0 - ..\..\..\..\components\dfs\dfs_v1\filesystems\elmfat\ffunicode.c - ffunicode.c - 0 - 0 - - - 5 - 29 - 1 - 0 - 0 - 0 ..\..\..\..\components\dfs\dfs_v1\src\dfs.c dfs.c 0 @@ -569,7 +533,7 @@ 5 - 30 + 27 1 0 0 @@ -581,7 +545,7 @@ 5 - 31 + 28 1 0 0 @@ -593,7 +557,7 @@ 5 - 32 + 29 1 0 0 @@ -613,7 +577,7 @@ 0 6 - 33 + 30 1 0 0 @@ -625,7 +589,7 @@ 6 - 34 + 31 1 0 0 @@ -637,7 +601,7 @@ 6 - 35 + 32 1 0 0 @@ -649,7 +613,7 @@ 6 - 36 + 33 1 0 0 @@ -661,7 +625,7 @@ 6 - 37 + 34 1 0 0 @@ -681,7 +645,7 @@ 0 7 - 38 + 35 1 0 0 @@ -693,7 +657,7 @@ 7 - 39 + 36 1 0 0 @@ -705,7 +669,7 @@ 7 - 40 + 37 1 0 0 @@ -717,7 +681,7 @@ 7 - 41 + 38 1 0 0 @@ -729,7 +693,7 @@ 7 - 42 + 39 1 0 0 @@ -741,7 +705,7 @@ 7 - 43 + 40 1 0 0 @@ -753,7 +717,7 @@ 7 - 44 + 41 1 0 0 @@ -765,7 +729,7 @@ 7 - 45 + 42 1 0 0 @@ -777,7 +741,7 @@ 7 - 46 + 43 1 0 0 @@ -789,7 +753,7 @@ 7 - 47 + 44 1 0 0 @@ -801,7 +765,7 @@ 7 - 48 + 45 1 0 0 @@ -813,7 +777,7 @@ 7 - 49 + 46 1 0 0 @@ -825,7 +789,7 @@ 7 - 50 + 47 1 0 0 @@ -837,7 +801,7 @@ 7 - 51 + 48 1 0 0 @@ -849,7 +813,7 @@ 7 - 52 + 49 1 0 0 @@ -869,7 +833,7 @@ 0 8 - 53 + 50 1 0 0 @@ -881,7 +845,7 @@ 8 - 54 + 51 1 0 0 @@ -893,7 +857,7 @@ 8 - 55 + 52 1 0 0 @@ -905,7 +869,7 @@ 8 - 56 + 53 1 0 0 @@ -917,7 +881,7 @@ 8 - 57 + 54 1 0 0 @@ -929,7 +893,7 @@ 8 - 58 + 55 1 0 0 @@ -941,7 +905,7 @@ 8 - 59 + 56 1 0 0 @@ -953,7 +917,7 @@ 8 - 60 + 57 1 0 0 @@ -965,7 +929,7 @@ 8 - 61 + 58 1 0 0 @@ -977,7 +941,7 @@ 8 - 62 + 59 1 0 0 @@ -989,7 +953,7 @@ 8 - 63 + 60 1 0 0 @@ -1001,7 +965,7 @@ 8 - 64 + 61 1 0 0 @@ -1013,7 +977,7 @@ 8 - 65 + 62 1 0 0 @@ -1033,7 +997,7 @@ 0 9 - 66 + 63 1 0 0 @@ -1045,7 +1009,7 @@ 9 - 67 + 64 1 0 0 @@ -1057,7 +1021,7 @@ 9 - 68 + 65 1 0 0 @@ -1069,7 +1033,7 @@ 9 - 69 + 66 1 0 0 @@ -1081,7 +1045,7 @@ 9 - 70 + 67 1 0 0 @@ -1093,7 +1057,7 @@ 9 - 71 + 68 1 0 0 @@ -1105,7 +1069,7 @@ 9 - 72 + 69 1 0 0 @@ -1117,7 +1081,7 @@ 9 - 73 + 70 1 0 0 @@ -1129,7 +1093,7 @@ 9 - 74 + 71 1 0 0 @@ -1141,7 +1105,7 @@ 9 - 75 + 72 1 0 0 @@ -1161,7 +1125,7 @@ 0 10 - 76 + 73 1 0 0 @@ -1173,7 +1137,7 @@ 10 - 77 + 74 2 0 0 @@ -1185,7 +1149,7 @@ 10 - 78 + 75 1 0 0 diff --git a/bsp/n32/n32hxxx/n32h760zil7-stb/project.uvprojx b/bsp/n32/n32hxxx/n32h760zil7-stb/project.uvprojx index d0e5eb56e71..8b5e81d988f 100644 --- a/bsp/n32/n32hxxx/n32h760zil7-stb/project.uvprojx +++ b/bsp/n32/n32hxxx/n32h760zil7-stb/project.uvprojx @@ -337,9 +337,9 @@ 0 - N32H76x, RT_USING_LIBC, __ICACHE_PRESENT=1, __CLK_TCK=RT_TICK_PER_SECOND, __DCACHE_PRESENT=1, CORE_CM7, USE_STDPERIPH_DRIVER, RT_USING_ARMLIBC, __STDC_LIMIT_MACROS, USING_TCM, __RTTHREAD__ + N32H76x, __DCACHE_PRESENT=1, USING_TCM, __ICACHE_PRESENT=1, USE_STDPERIPH_DRIVER, __STDC_LIMIT_MACROS, __RTTHREAD__, CORE_CM7, __CLK_TCK=RT_TICK_PER_SECOND, RT_USING_ARMLIBC, RT_USING_LIBC - ..\..\..\..\components\drivers\phy;..\..\..\..\components\drivers\include;..\..\..\..\include;board;..\..\..\..\components\libc\posix\ipc;..\libraries\N32_Drivers\drivers\config;..\..\..\..\components\libc\posix\io\eventfd;..\..\..\..\components\drivers\include;..\..\..\..\components\dfs\dfs_v1\include;applications;..\..\..\..\components\dfs\dfs_v1\filesystems\devfs;..\..\..\..\components\libc\compilers\common\include;board\ports;..\..\..\..\components\drivers\smp_call;..\..\..\..\components\drivers\include;..\..\..\..\components\drivers\include;..\..\..\..\components\net\utest;board\Cube_Config\USER\inc;..\..\..\..\libcpu\arm\cortex-m7;..\..\..\..\components\drivers\include;packages\n32h7xx_std_driver-latest\n32h7xx_std_periph_driver\inc;..\..\..\..\components\libc\posix\io\poll;..\..\..\..\components\libc\compilers\common\extension\fcntl\octal;..\..\..\..\components\dfs\dfs_v1\filesystems\elmfat;..\..\..\..\components\drivers\include;packages\CMSIS-Core-latest\Include;packages\n32h7xx_cmsis_driver-latest\device;..\..\..\..\components\libc\posix\io\epoll;..\..\..\..\libcpu\arm\common;..\libraries\N32_Drivers;..\..\..\..\components\finsh;..\libraries\N32_Drivers\drivers;..\..\..\..\components\libc\compilers\common\extension;. + ..\libraries\N32_Drivers\drivers\config;..\..\..\..\components\libc\compilers\common\extension;packages\n32h7xx_cmsis_driver-latest\device;..\..\..\..\components\drivers\include;.;..\..\..\..\components\dfs\dfs_v1\filesystems\devfs;applications;..\..\..\..\components\libc\posix\io\poll;..\..\..\..\components\drivers\include;..\..\..\..\components\dfs\dfs_v1\include;..\libraries\N32_Drivers;packages\CMSIS-Core-latest\Include;..\..\..\..\libcpu\arm\cortex-m7;..\..\..\..\components\drivers\include;..\..\..\..\components\drivers\include;..\..\..\..\components\libc\posix\io\epoll;..\..\..\..\components\libc\posix\io\eventfd;board;applications\test_file;board\Cube_Config\USER\inc;..\libraries\N32_Drivers\drivers;..\..\..\..\components\drivers\smp_call;..\..\..\..\components\finsh;..\..\..\..\libcpu\arm\common;..\..\..\..\components\net\utest;..\..\..\..\components\libc\posix\ipc;..\..\..\..\components\drivers\include;..\..\..\..\components\libc\compilers\common\include;..\..\..\..\include;..\..\..\..\components\libc\compilers\common\extension\fcntl\octal;board\ports;packages\n32h7xx_std_driver-latest\n32h7xx_std_periph_driver\inc @@ -1191,174 +1191,6 @@ - - dfs_elm.c - 1 - ..\..\..\..\components\dfs\dfs_v1\filesystems\elmfat\dfs_elm.c - - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 - - --c99 - - - - - - - - - - ff.c - 1 - ..\..\..\..\components\dfs\dfs_v1\filesystems\elmfat\ff.c - - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 - - --c99 - - - - - - - - - - ffunicode.c - 1 - ..\..\..\..\components\dfs\dfs_v1\filesystems\elmfat\ffunicode.c - - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 - - --c99 - - - - - - - - dfs.c 1 @@ -2615,13 +2447,4 @@ - - - - project - 1 - - - - diff --git a/bsp/n32/n32hxxx/n32h760zil7-stb/rtconfig.h b/bsp/n32/n32hxxx/n32h760zil7-stb/rtconfig.h index 69dc683521d..0f435a1c0f4 100644 --- a/bsp/n32/n32hxxx/n32h760zil7-stb/rtconfig.h +++ b/bsp/n32/n32hxxx/n32h760zil7-stb/rtconfig.h @@ -140,6 +140,14 @@ /* DFS: device virtual file system */ +#define RT_USING_DFS +#define DFS_USING_POSIX +#define DFS_USING_WORKDIR +#define DFS_FD_MAX 16 +#define RT_USING_DFS_V1 +#define DFS_FILESYSTEMS_MAX 4 +#define DFS_FILESYSTEM_TYPES_MAX 4 +#define RT_USING_DFS_DEVFS /* end of DFS: device virtual file system */ /* Device Drivers */