1.CH32-V307串口驱动适配DMA。

2.路径移动。
This commit is contained in:
MacRsh
2024-05-08 23:55:02 +08:00
parent 4eb92c4f31
commit d4bdfd2ade
19 changed files with 282 additions and 59 deletions

View File

@@ -138,7 +138,9 @@ extern "C" {
.instance = USART1, .clock = RCC_APB2Periph_USART1, \ .instance = USART1, .clock = RCC_APB2Periph_USART1, \
.gpio_clock = RCC_APB2Periph_GPIOA, .rx_port = GPIOA, \ .gpio_clock = RCC_APB2Periph_GPIOA, .rx_port = GPIOA, \
.rx_pin = GPIO_Pin_10, .tx_port = GPIOA, .tx_pin = GPIO_Pin_9, \ .rx_pin = GPIO_Pin_10, .tx_port = GPIOA, .tx_pin = GPIO_Pin_9, \
.irq = USART1_IRQn, .remap = 0 \ .irq = USART1_IRQn, .remap = 0, .rx_dma_channel = DMA1_Channel5, \
.rx_dma_clock = RCC_AHBPeriph_DMA1, .rx_dma_irq = DMA1_Channel5_IRQn, \
.rx_dma_irq_it = DMA1_IT_TC5 \
} }
#elif (MR_CFG_UART1_GROUP == 2) #elif (MR_CFG_UART1_GROUP == 2)
#define _DRIVER_UART1_CONFIG \ #define _DRIVER_UART1_CONFIG \
@@ -146,7 +148,9 @@ extern "C" {
.instance = USART1, .clock = RCC_APB2Periph_USART1, \ .instance = USART1, .clock = RCC_APB2Periph_USART1, \
.gpio_clock = RCC_APB2Periph_GPIOB, .rx_port = GPIOB, \ .gpio_clock = RCC_APB2Periph_GPIOB, .rx_port = GPIOB, \
.rx_pin = GPIO_Pin_7, .tx_port = GPIOB, .tx_pin = GPIO_Pin_6, \ .rx_pin = GPIO_Pin_7, .tx_port = GPIOB, .tx_pin = GPIO_Pin_6, \
.irq = USART1_IRQn, .remap = GPIO_Remap_USART1 \ .irq = USART1_IRQn, .remap = GPIO_Remap_USART1, \
.rx_dma_channel = DMA1_Channel5, .rx_dma_clock = RCC_AHBPeriph_DMA1, \
.rx_dma_irq = DMA1_Channel5_IRQn, .rx_dma_irq_it = DMA1_IT_TC5 \
} }
#elif (MR_CFG_UART1_GROUP == 3) #elif (MR_CFG_UART1_GROUP == 3)
#define _DRIVER_UART1_CONFIG \ #define _DRIVER_UART1_CONFIG \
@@ -154,7 +158,9 @@ extern "C" {
.instance = USART1, .clock = RCC_APB2Periph_USART1, \ .instance = USART1, .clock = RCC_APB2Periph_USART1, \
.gpio_clock = RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, \ .gpio_clock = RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, \
.rx_port = GPIOA, .rx_pin = GPIO_Pin_8, .tx_port = GPIOB, \ .rx_port = GPIOA, .rx_pin = GPIO_Pin_8, .tx_port = GPIOB, \
.tx_pin = GPIO_Pin_15, .irq = USART1_IRQn, .remap = 0 \ .tx_pin = GPIO_Pin_15, .irq = USART1_IRQn, .remap = 0, \
.rx_dma_channel = DMA1_Channel5, .rx_dma_clock = RCC_AHBPeriph_DMA1, \
.rx_dma_irq = DMA1_Channel5_IRQn, .rx_dma_irq_it = DMA1_IT_TC5 \
} }
#elif (MR_CFG_UART1_GROUP == 4) #elif (MR_CFG_UART1_GROUP == 4)
#define _DRIVER_UART1_CONFIG \ #define _DRIVER_UART1_CONFIG \
@@ -162,7 +168,9 @@ extern "C" {
.instance = USART1, .clock = RCC_APB2Periph_USART1, \ .instance = USART1, .clock = RCC_APB2Periph_USART1, \
.gpio_clock = RCC_APB2Periph_GPIOA, .rx_port = GPIOA, \ .gpio_clock = RCC_APB2Periph_GPIOA, .rx_port = GPIOA, \
.rx_pin = GPIO_Pin_7, .tx_port = GPIOA, .tx_pin = GPIO_Pin_6, \ .rx_pin = GPIO_Pin_7, .tx_port = GPIOA, .tx_pin = GPIO_Pin_6, \
.irq = USART1_IRQn, .remap = GPIO_Remap_USART1 \ .irq = USART1_IRQn, .remap = GPIO_Remap_USART1, \
.rx_dma_channel = DMA1_Channel5, .rx_dma_clock = RCC_AHBPeriph_DMA1, \
.rx_dma_irq = DMA1_Channel5_IRQn, .rx_dma_irq_it = DMA1_IT_TC5 \
} }
#endif /* MR_CFG_UART1_GROUP */ #endif /* MR_CFG_UART1_GROUP */
@@ -172,7 +180,9 @@ extern "C" {
.instance = USART2, .clock = RCC_APB1Periph_USART2, \ .instance = USART2, .clock = RCC_APB1Periph_USART2, \
.gpio_clock = RCC_APB2Periph_GPIOA, .rx_port = GPIOA, \ .gpio_clock = RCC_APB2Periph_GPIOA, .rx_port = GPIOA, \
.rx_pin = GPIO_Pin_3, .tx_port = GPIOA, .tx_pin = GPIO_Pin_2, \ .rx_pin = GPIO_Pin_3, .tx_port = GPIOA, .tx_pin = GPIO_Pin_2, \
.irq = USART2_IRQn, .remap = 0 \ .irq = USART2_IRQn, .remap = 0, .rx_dma_channel = DMA1_Channel6, \
.rx_dma_clock = RCC_AHBPeriph_DMA1, .rx_dma_irq = DMA1_Channel6_IRQn, \
.rx_dma_irq_it = DMA1_IT_TC6 \
} }
#elif (MR_CFG_UART2_GROUP == 2) #elif (MR_CFG_UART2_GROUP == 2)
#define _DRIVER_UART2_CONFIG \ #define _DRIVER_UART2_CONFIG \
@@ -180,7 +190,9 @@ extern "C" {
.instance = USART2, .clock = RCC_APB1Periph_USART2, \ .instance = USART2, .clock = RCC_APB1Periph_USART2, \
.gpio_clock = RCC_APB2Periph_GPIOD, .rx_port = GPIOD, \ .gpio_clock = RCC_APB2Periph_GPIOD, .rx_port = GPIOD, \
.rx_pin = GPIO_Pin_6, .tx_port = GPIOD, .tx_pin = GPIO_Pin_5, \ .rx_pin = GPIO_Pin_6, .tx_port = GPIOD, .tx_pin = GPIO_Pin_5, \
.irq = USART2_IRQn, .remap = GPIO_Remap_USART2 \ .irq = USART2_IRQn, .remap = GPIO_Remap_USART2, \
.rx_dma_channel = DMA1_Channel6, .rx_dma_clock = RCC_AHBPeriph_DMA1, \
.rx_dma_irq = DMA1_Channel6_IRQn, .rx_dma_irq_it = DMA1_IT_TC6 \
} }
#endif /* MR_CFG_UART2_GROUP */ #endif /* MR_CFG_UART2_GROUP */
@@ -190,7 +202,9 @@ extern "C" {
.instance = USART3, .clock = RCC_APB1Periph_USART3, \ .instance = USART3, .clock = RCC_APB1Periph_USART3, \
.gpio_clock = RCC_APB2Periph_GPIOB, .rx_port = GPIOB, \ .gpio_clock = RCC_APB2Periph_GPIOB, .rx_port = GPIOB, \
.rx_pin = GPIO_Pin_11, .tx_port = GPIOB, .tx_pin = GPIO_Pin_10, \ .rx_pin = GPIO_Pin_11, .tx_port = GPIOB, .tx_pin = GPIO_Pin_10, \
.irq = USART3_IRQn, .remap = 0 \ .irq = USART3_IRQn, .remap = 0, .rx_dma_channel = DMA1_Channel3, \
.rx_dma_clock = RCC_AHBPeriph_DMA1, .rx_dma_irq = DMA1_Channel3_IRQn, \
.rx_dma_irq_it = DMA1_IT_TC3 \
} }
#elif (MR_CFG_UART3_GROUP == 2) #elif (MR_CFG_UART3_GROUP == 2)
#define _DRIVER_UART3_CONFIG \ #define _DRIVER_UART3_CONFIG \
@@ -198,7 +212,9 @@ extern "C" {
.instance = USART3, .clock = RCC_APB1Periph_USART3, \ .instance = USART3, .clock = RCC_APB1Periph_USART3, \
.gpio_clock = RCC_APB2Periph_GPIOC, .rx_port = GPIOC, \ .gpio_clock = RCC_APB2Periph_GPIOC, .rx_port = GPIOC, \
.rx_pin = GPIO_Pin_11, .tx_port = GPIOC, .tx_pin = GPIO_Pin_10, \ .rx_pin = GPIO_Pin_11, .tx_port = GPIOC, .tx_pin = GPIO_Pin_10, \
.irq = USART3_IRQn, .remap = GPIO_PartialRemap_USART3 \ .irq = USART3_IRQn, .remap = GPIO_PartialRemap_USART3, \
.rx_dma_channel = DMA1_Channel3, .rx_dma_clock = RCC_AHBPeriph_DMA1, \
.rx_dma_irq = DMA1_Channel3_IRQn, .rx_dma_irq_it = DMA1_IT_TC3 \
} }
#elif (MR_CFG_UART3_GROUP == 3) #elif (MR_CFG_UART3_GROUP == 3)
#define _DRIVER_UART3_CONFIG \ #define _DRIVER_UART3_CONFIG \
@@ -206,7 +222,9 @@ extern "C" {
.instance = USART3, .clock = RCC_APB1Periph_USART3, \ .instance = USART3, .clock = RCC_APB1Periph_USART3, \
.gpio_clock = RCC_APB2Periph_GPIOA, .rx_port = GPIOA, \ .gpio_clock = RCC_APB2Periph_GPIOA, .rx_port = GPIOA, \
.rx_pin = GPIO_Pin_14, .tx_port = GPIOA, .tx_pin = GPIO_Pin_13, \ .rx_pin = GPIO_Pin_14, .tx_port = GPIOA, .tx_pin = GPIO_Pin_13, \
.irq = USART3_IRQn, .remap = GPIO_PartialRemap1_USART3 \ .irq = USART3_IRQn, .remap = GPIO_PartialRemap1_USART3, \
.rx_dma_channel = DMA1_Channel3, .rx_dma_clock = RCC_AHBPeriph_DMA1, \
.rx_dma_irq = DMA1_Channel3_IRQn, .rx_dma_irq_it = DMA1_IT_TC3 \
} }
#elif (MR_CFG_UART3_GROUP == 4) #elif (MR_CFG_UART3_GROUP == 4)
#define _DRIVER_UART3_CONFIG \ #define _DRIVER_UART3_CONFIG \
@@ -214,7 +232,9 @@ extern "C" {
.instance = USART3, .clock = RCC_APB1Periph_USART3, \ .instance = USART3, .clock = RCC_APB1Periph_USART3, \
.gpio_clock = RCC_APB2Periph_GPIOD, .rx_port = GPIOD, \ .gpio_clock = RCC_APB2Periph_GPIOD, .rx_port = GPIOD, \
.rx_pin = GPIO_Pin_9, .tx_port = GPIOD, .tx_pin = GPIO_Pin_8, \ .rx_pin = GPIO_Pin_9, .tx_port = GPIOD, .tx_pin = GPIO_Pin_8, \
.irq = USART3_IRQn, .remap = GPIO_FullRemap_USART3 \ .irq = USART3_IRQn, .remap = GPIO_FullRemap_USART3, \
.rx_dma_channel = DMA1_Channel3, .rx_dma_clock = RCC_AHBPeriph_DMA1, \
.rx_dma_irq = DMA1_Channel3_IRQn, .rx_dma_irq_it = DMA1_IT_TC3 \
} }
#endif /* MR_CFG_UART3_GROUP */ #endif /* MR_CFG_UART3_GROUP */
@@ -224,7 +244,9 @@ extern "C" {
.nstance = UART4, .clock = RCC_APB1Periph_UART4, \ .nstance = UART4, .clock = RCC_APB1Periph_UART4, \
.pio_clock = RCC_APB2Periph_GPIOC, .rx_port = GPIOC, \ .pio_clock = RCC_APB2Periph_GPIOC, .rx_port = GPIOC, \
.rx_pin = GPIO_Pin_11, .x_port = GPIOC, .tx_pin = GPIO_Pin_10, \ .rx_pin = GPIO_Pin_11, .x_port = GPIOC, .tx_pin = GPIO_Pin_10, \
.irq = UART4_IRQn, .remap = 0 \ .irq = UART4_IRQn, .remap = 0, .rx_dma_channel = DMA2_Channel3, \
.rx_dma_clock = RCC_AHBPeriph_DMA2, .rx_dma_irq = DMA2_Channel3_IRQn, \
.rx_dma_irq_it = DMA2_IT_TC3 \
} }
#elif (MR_CFG_UART4_GROUP == 2) #elif (MR_CFG_UART4_GROUP == 2)
#define _DRIVER_UART4_CONFIG \ #define _DRIVER_UART4_CONFIG \
@@ -232,7 +254,9 @@ extern "C" {
.instance = UART4, .clock = RCC_APB1Periph_UART4, \ .instance = UART4, .clock = RCC_APB1Periph_UART4, \
.gpio_clock = RCC_APB2Periph_GPIOB, .rx_port = GPIOB, \ .gpio_clock = RCC_APB2Periph_GPIOB, .rx_port = GPIOB, \
.rx_pin = GPIO_Pin_1, .tx_port = GPIOB, .tx_pin = GPIO_Pin_0, \ .rx_pin = GPIO_Pin_1, .tx_port = GPIOB, .tx_pin = GPIO_Pin_0, \
.irq = UART4_IRQn, .remap = GPIO_PartialRemap_USART4 \ .irq = UART4_IRQn, .remap = GPIO_PartialRemap_USART4, \
.rx_dma_channel = DMA2_Channel3, .rx_dma_clock = RCC_AHBPeriph_DMA2, \
.rx_dma_irq = DMA2_Channel3_IRQn, .rx_dma_irq_it = DMA2_IT_TC3 \
} }
#elif (MR_CFG_UART4_GROUP == 3) #elif (MR_CFG_UART4_GROUP == 3)
#define _DRIVER_UART4_CONFIG \ #define _DRIVER_UART4_CONFIG \
@@ -240,7 +264,9 @@ extern "C" {
.instance = UART4, .clock = RCC_APB1Periph_UART4, \ .instance = UART4, .clock = RCC_APB1Periph_UART4, \
.gpio_clock = RCC_APB2Periph_GPIOE, .rx_port = GPIOE, \ .gpio_clock = RCC_APB2Periph_GPIOE, .rx_port = GPIOE, \
.rx_pin = GPIO_Pin_1, .tx_port = GPIOE, .tx_pin = GPIO_Pin_0, \ .rx_pin = GPIO_Pin_1, .tx_port = GPIOE, .tx_pin = GPIO_Pin_0, \
.irq = UART4_IRQn, .remap = GPIO_FullRemap_USART4 \ .irq = UART4_IRQn, .remap = GPIO_FullRemap_USART4, \
.rx_dma_channel = DMA2_Channel3, .rx_dma_clock = RCC_AHBPeriph_DMA2, \
.rx_dma_irq = DMA2_Channel3_IRQn, .rx_dma_irq_it = DMA2_IT_TC3 \
} }
#endif /* MR_CFG_UART4_GROUP */ #endif /* MR_CFG_UART4_GROUP */
@@ -250,7 +276,9 @@ extern "C" {
.instance = UART5, .clock = RCC_APB1Periph_UART5, \ .instance = UART5, .clock = RCC_APB1Periph_UART5, \
.gpio_clock = RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD, \ .gpio_clock = RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD, \
.rx_port = GPIOD, .rx_pin = GPIO_Pin_2, .tx_port = GPIOC, \ .rx_port = GPIOD, .rx_pin = GPIO_Pin_2, .tx_port = GPIOC, \
.tx_pin = GPIO_Pin_12, .irq = UART5_IRQn, .remap = 0 \ .tx_pin = GPIO_Pin_12, .irq = UART5_IRQn, .remap = 0, \
.rx_dma_channel = DMA2_Channel2, .rx_dma_clock = RCC_AHBPeriph_DMA2, \
.rx_dma_irq = DMA2_Channel2_IRQn, .rx_dma_irq_it = DMA2_IT_TC2 \
} }
#elif (MR_CFG_UART5_GROUP == 2) #elif (MR_CFG_UART5_GROUP == 2)
#define _DRIVER_UART5_CONFIG \ #define _DRIVER_UART5_CONFIG \
@@ -258,7 +286,9 @@ extern "C" {
.instance = UART5, .clock = RCC_APB1Periph_UART5, \ .instance = UART5, .clock = RCC_APB1Periph_UART5, \
.gpio_clock = RCC_APB2Periph_GPIOB, .rx_port = GPIOB, \ .gpio_clock = RCC_APB2Periph_GPIOB, .rx_port = GPIOB, \
.rx_pin = GPIO_Pin_5, .tx_port = GPIOB, .tx_pin = GPIO_Pin_4, \ .rx_pin = GPIO_Pin_5, .tx_port = GPIOB, .tx_pin = GPIO_Pin_4, \
.irq = UART5_IRQn, .remap = GPIO_PartialRemap_USART5 \ .irq = UART5_IRQn, .remap = GPIO_PartialRemap_USART5, \
.rx_dma_channel = DMA2_Channel2, .rx_dma_clock = RCC_AHBPeriph_DMA2, \
.rx_dma_irq = DMA2_Channel2_IRQn, .rx_dma_irq_it = DMA2_IT_TC2 \
} }
#elif (MR_CFG_UART5_GROUP == 3) #elif (MR_CFG_UART5_GROUP == 3)
#define _DRIVER_UART5_CONFIG \ #define _DRIVER_UART5_CONFIG \
@@ -266,7 +296,9 @@ extern "C" {
.instance = UART5, .clock = RCC_APB1Periph_UART5, \ .instance = UART5, .clock = RCC_APB1Periph_UART5, \
.gpio_clock = RCC_APB2Periph_GPIOE, .rx_port = GPIOE, \ .gpio_clock = RCC_APB2Periph_GPIOE, .rx_port = GPIOE, \
.rx_pin = GPIO_Pin_9, .tx_port = GPIOE, .tx_pin = GPIO_Pin_8, \ .rx_pin = GPIO_Pin_9, .tx_port = GPIOE, .tx_pin = GPIO_Pin_8, \
.irq = UART5_IRQn, .remap = GPIO_FullRemap_USART5 \ .irq = UART5_IRQn, .remap = GPIO_FullRemap_USART5, \
.rx_dma_channel = DMA2_Channel2, .rx_dma_clock = RCC_AHBPeriph_DMA2, \
.rx_dma_irq = DMA2_Channel2_IRQn, .rx_dma_irq_it = DMA2_IT_TC2 \
} }
#endif /* MR_CFG_UART5_GROUP */ #endif /* MR_CFG_UART5_GROUP */
@@ -276,7 +308,9 @@ extern "C" {
.instance = UART6, .clock = RCC_APB1Periph_UART6, \ .instance = UART6, .clock = RCC_APB1Periph_UART6, \
.gpio_clock = RCC_APB2Periph_GPIOC, .rx_port = GPIOC, \ .gpio_clock = RCC_APB2Periph_GPIOC, .rx_port = GPIOC, \
.rx_pin = GPIO_Pin_1, .tx_port = GPIOC, .tx_pin = GPIO_Pin_0, \ .rx_pin = GPIO_Pin_1, .tx_port = GPIOC, .tx_pin = GPIO_Pin_0, \
.irq = UART6_IRQn, .remap = 0 \ .irq = UART6_IRQn, .remap = 0, .rx_dma_channel = DMA2_Channel7, \
.rx_dma_clock = RCC_AHBPeriph_DMA2, .rx_dma_irq = DMA2_Channel7_IRQn, \
.rx_dma_irq_it = DMA2_IT_TC7 \
} }
#elif (MR_CFG_UART6_GROUP == 2) #elif (MR_CFG_UART6_GROUP == 2)
#define _DRIVER_UART6_CONFIG \ #define _DRIVER_UART6_CONFIG \
@@ -284,7 +318,9 @@ extern "C" {
.instance = UART6, .clock = RCC_APB1Periph_UART6, \ .instance = UART6, .clock = RCC_APB1Periph_UART6, \
.gpio_clock = RCC_APB2Periph_GPIOB, .rx_port = GPIOB, \ .gpio_clock = RCC_APB2Periph_GPIOB, .rx_port = GPIOB, \
.rx_pin = GPIO_Pin_9, .tx_port = GPIOB, .tx_pin = GPIO_Pin_8, \ .rx_pin = GPIO_Pin_9, .tx_port = GPIOB, .tx_pin = GPIO_Pin_8, \
.irq = UART6_IRQn, .remap = GPIO_PartialRemap_USART6 \ .irq = UART6_IRQn, .remap = GPIO_PartialRemap_USART6, \
.rx_dma_channel = DMA2_Channel7, .rx_dma_clock = RCC_AHBPeriph_DMA2, \
.rx_dma_irq = DMA2_Channel7_IRQn, .rx_dma_irq_it = DMA2_IT_TC7 \
} }
#elif (MR_CFG_UART6_GROUP == 3) #elif (MR_CFG_UART6_GROUP == 3)
#define _DRIVER_UART6_CONFIG \ #define _DRIVER_UART6_CONFIG \
@@ -292,7 +328,9 @@ extern "C" {
.instance = UART6, .clock = RCC_APB1Periph_UART6, \ .instance = UART6, .clock = RCC_APB1Periph_UART6, \
.gpio_clock = RCC_APB2Periph_GPIOE, .rx_port = GPIOE, \ .gpio_clock = RCC_APB2Periph_GPIOE, .rx_port = GPIOE, \
.rx_pin = GPIO_Pin_11, .tx_port = GPIOE, .tx_pin = GPIO_Pin_10, \ .rx_pin = GPIO_Pin_11, .tx_port = GPIOE, .tx_pin = GPIO_Pin_10, \
.irq = UART6_IRQn, .remap = GPIO_FullRemap_USART6 \ .irq = UART6_IRQn, .remap = GPIO_FullRemap_USART6, \
.rx_dma_channel = DMA2_Channel7, .rx_dma_clock = RCC_AHBPeriph_DMA2, \
.rx_dma_irq = DMA2_Channel7_IRQn, .rx_dma_irq_it = DMA2_IT_TC7 \
} }
#endif /* MR_CFG_UART6_GROUP */ #endif /* MR_CFG_UART6_GROUP */
@@ -302,7 +340,9 @@ extern "C" {
.instance = UART7, .clock = RCC_APB1Periph_UART7, \ .instance = UART7, .clock = RCC_APB1Periph_UART7, \
.gpio_clock = RCC_APB2Periph_GPIOC, .rx_port = GPIOC, \ .gpio_clock = RCC_APB2Periph_GPIOC, .rx_port = GPIOC, \
.rx_pin = GPIO_Pin_3, .tx_port = GPIOC, .tx_pin = GPIO_Pin_2, \ .rx_pin = GPIO_Pin_3, .tx_port = GPIOC, .tx_pin = GPIO_Pin_2, \
.irq = UART7_IRQn, .remap = 0 \ .irq = UART7_IRQn, .remap = 0, .rx_dma_channel = DMA2_Channel9, \
.rx_dma_clock = RCC_AHBPeriph_DMA2, .rx_dma_irq = DMA2_Channel9_IRQn, \
.rx_dma_irq_it = DMA2_IT_TC9 \
} }
#elif (MR_CFG_UART7_GROUP == 2) #elif (MR_CFG_UART7_GROUP == 2)
#define _DRIVER_UART7_CONFIG \ #define _DRIVER_UART7_CONFIG \
@@ -310,7 +350,9 @@ extern "C" {
.instance = UART7, .clock = RCC_APB1Periph_UART7, \ .instance = UART7, .clock = RCC_APB1Periph_UART7, \
.gpio_clock = RCC_APB2Periph_GPIOA, .rx_port = GPIOA, \ .gpio_clock = RCC_APB2Periph_GPIOA, .rx_port = GPIOA, \
.rx_pin = GPIO_Pin_7, .tx_port = GPIOA, .tx_pin = GPIO_Pin_6, \ .rx_pin = GPIO_Pin_7, .tx_port = GPIOA, .tx_pin = GPIO_Pin_6, \
.irq = UART7_IRQn, .remap = GPIO_PartialRemap_USART7 \ .irq = UART7_IRQn, .remap = GPIO_PartialRemap_USART7, \
.rx_dma_channel = DMA2_Channel9, .rx_dma_clock = RCC_AHBPeriph_DMA2, \
.rx_dma_irq = DMA2_Channel9_IRQn, .rx_dma_irq_it = DMA2_IT_TC9 \
} }
#elif (MR_CFG_UART7_GROUP == 3) #elif (MR_CFG_UART7_GROUP == 3)
#define _DRIVER_UART7_CONFIG \ #define _DRIVER_UART7_CONFIG \
@@ -318,7 +360,9 @@ extern "C" {
.instance = UART7, .clock = RCC_APB1Periph_UART7, \ .instance = UART7, .clock = RCC_APB1Periph_UART7, \
.gpio_clock = RCC_APB2Periph_GPIOE, .rx_port = GPIOE, \ .gpio_clock = RCC_APB2Periph_GPIOE, .rx_port = GPIOE, \
.rx_pin = GPIO_Pin_13, .tx_port = GPIOE, .tx_pin = GPIO_Pin_12, \ .rx_pin = GPIO_Pin_13, .tx_port = GPIOE, .tx_pin = GPIO_Pin_12, \
.irq = UART7_IRQn, .remap = GPIO_FullRemap_USART7 \ .irq = UART7_IRQn, .remap = GPIO_FullRemap_USART7, \
.rx_dma_channel = DMA2_Channel9, .rx_dma_clock = RCC_AHBPeriph_DMA2, \
.rx_dma_irq = DMA2_Channel9_IRQn, .rx_dma_irq_it = DMA2_IT_TC9 \
} }
#endif /* MR_CFG_UART7_GROUP */ #endif /* MR_CFG_UART7_GROUP */
@@ -328,7 +372,9 @@ extern "C" {
.instance = UART8, .clock = RCC_APB1Periph_UART8, \ .instance = UART8, .clock = RCC_APB1Periph_UART8, \
.gpio_clock = RCC_APB2Periph_GPIOC, .rx_port = GPIOC, \ .gpio_clock = RCC_APB2Periph_GPIOC, .rx_port = GPIOC, \
.rx_pin = GPIO_Pin_5, .tx_port = GPIOC, .tx_pin = GPIO_Pin_4, \ .rx_pin = GPIO_Pin_5, .tx_port = GPIOC, .tx_pin = GPIO_Pin_4, \
.irq = UART8_IRQn, .remap = 0 \ .irq = UART8_IRQn, .remap = 0, .rx_dma_channel = DMA2_Channel11, \
.rx_dma_clock = RCC_AHBPeriph_DMA2, .rx_dma_irq = DMA2_Channel11_IRQn, \
.rx_dma_irq_it = DMA2_IT_TC11 \
} }
#elif (MR_CFG_UART8_GROUP == 2) #elif (MR_CFG_UART8_GROUP == 2)
#define _DRIVER_UART8_CONFIG \ #define _DRIVER_UART8_CONFIG \
@@ -336,7 +382,9 @@ extern "C" {
.instance = UART8, .clock = RCC_APB1Periph_UART8, \ .instance = UART8, .clock = RCC_APB1Periph_UART8, \
.gpio_clock = RCC_APB2Periph_GPIOA, .rx_port = GPIOA, \ .gpio_clock = RCC_APB2Periph_GPIOA, .rx_port = GPIOA, \
.rx_pin = GPIO_Pin_15, .tx_port = GPIOA, .tx_pin = GPIO_Pin_14, \ .rx_pin = GPIO_Pin_15, .tx_port = GPIOA, .tx_pin = GPIO_Pin_14, \
.irq = UART8_IRQn, .remap = GPIO_PartialRemap_USART8 \ .irq = UART8_IRQn, .remap = GPIO_PartialRemap_USART8, \
.rx_dma_channel = DMA2_Channel11, .rx_dma_clock = RCC_AHBPeriph_DMA2, \
.rx_dma_irq = DMA2_Channel11_IRQn, .rx_dma_irq_it = DMA2_IT_TC11 \
} }
#elif (MR_CFG_UART8_GROUP == 3) #elif (MR_CFG_UART8_GROUP == 3)
#define _DRIVER_UART8_CONFIG \ #define _DRIVER_UART8_CONFIG \
@@ -344,7 +392,9 @@ extern "C" {
.instance = UART8, .clock = RCC_APB1Periph_UART8, \ .instance = UART8, .clock = RCC_APB1Periph_UART8, \
.gpio_clock = RCC_APB2Periph_GPIOE, .rx_port = GPIOE, \ .gpio_clock = RCC_APB2Periph_GPIOE, .rx_port = GPIOE, \
.rx_pin = GPIO_Pin_15, .tx_port = GPIOE, .tx_pin = GPIO_Pin_14, \ .rx_pin = GPIO_Pin_15, .tx_port = GPIOE, .tx_pin = GPIO_Pin_14, \
.irq = UART8_IRQn, .remap = GPIO_FullRemap_USART8 \ .irq = UART8_IRQn, .remap = GPIO_FullRemap_USART8, \
.rx_dma_channel = DMA2_Channel11, .rx_dma_clock = RCC_AHBPeriph_DMA2, \
.rx_dma_irq = DMA2_Channel11_IRQn, .rx_dma_irq_it = DMA2_IT_TC11 \
} }
#endif /* MR_CFG_UART8_GROUP */ #endif /* MR_CFG_UART8_GROUP */

View File

@@ -1,4 +1,4 @@
menu "ADC driver configure" menu "Adc driver configure"
# Use ADC # Use ADC
if MR_USE_ADC if MR_USE_ADC
# ADC1 # ADC1

View File

@@ -9,7 +9,7 @@
#ifndef _MR_ADC_DRIVER_H_ #ifndef _MR_ADC_DRIVER_H_
#define _MR_ADC_DRIVER_H_ #define _MR_ADC_DRIVER_H_
#include "../mr-library/device/include/mr_adc.h" #include "../mr-library/include/device/mr_adc.h"
#include "../mr-library/driver/include/mr_board.h" #include "../mr-library/driver/include/mr_board.h"
#ifdef __cplusplus #ifdef __cplusplus

View File

@@ -9,7 +9,7 @@
#ifndef _MR_PIN_DRIVER_H_ #ifndef _MR_PIN_DRIVER_H_
#define _MR_PIN_DRIVER_H_ #define _MR_PIN_DRIVER_H_
#include "../mr-library/device/include/mr_pin.h" #include "../mr-library/include/device/mr_pin.h"
#include "../mr-library/driver/include/mr_board.h" #include "../mr-library/driver/include/mr_board.h"
#ifdef __cplusplus #ifdef __cplusplus

View File

@@ -9,7 +9,7 @@
#ifndef _MR_SERIAL_DRIVER_H_ #ifndef _MR_SERIAL_DRIVER_H_
#define _MR_SERIAL_DRIVER_H_ #define _MR_SERIAL_DRIVER_H_
#include "../mr-library/device/include/mr_serial.h" #include "../mr-library/include/device/mr_serial.h"
#include "../mr-library/driver/include/mr_board.h" #include "../mr-library/driver/include/mr_board.h"
#ifdef __cplusplus #ifdef __cplusplus
@@ -30,6 +30,12 @@ struct mr_serial_driver
uint32_t tx_pin; uint32_t tx_pin;
IRQn_Type irq; IRQn_Type irq;
uint32_t remap; uint32_t remap;
DMA_Channel_TypeDef *rx_dma_channel;
uint32_t rx_dma_clock;
IRQn_Type rx_dma_irq;
uint32_t rx_dma_irq_it;
size_t rx_dma_count;
}; };
#endif /* MR_USE_SERIAL */ #endif /* MR_USE_SERIAL */

View File

@@ -1,4 +1,4 @@
menu "UART driver configure" menu "Uart driver configure"
# Use Serial # Use Serial
if MR_USE_SERIAL if MR_USE_SERIAL
# UART1 # UART1
@@ -13,6 +13,10 @@ menu "UART driver configure"
int "Uart1 group" int "Uart1 group"
default 1 default 1
range 1 4 range 1 4
config MR_USE_UART1_DMA
bool "Use uart1 dma"
default n
endmenu endmenu
# UART2 # UART2
@@ -27,6 +31,10 @@ menu "UART driver configure"
int "Uart2 group" int "Uart2 group"
default 1 default 1
range 1 2 range 1 2
config MR_USE_UART2_DMA
bool "Use uart2 dma"
default n
endmenu endmenu
# UART3 # UART3
@@ -41,6 +49,10 @@ menu "UART driver configure"
int "Uart3 group" int "Uart3 group"
default 1 default 1
range 1 4 range 1 4
config MR_USE_UART3_DMA
bool "Use uart3 dma"
default n
endmenu endmenu
# UART4 # UART4
@@ -55,6 +67,10 @@ menu "UART driver configure"
int "Uart4 group" int "Uart4 group"
default 1 default 1
range 1 3 range 1 3
config MR_USE_UART4_DMA
bool "Use uart4 dma"
default n
endmenu endmenu
# UART5 # UART5
@@ -69,6 +85,10 @@ menu "UART driver configure"
int "Uart5 group" int "Uart5 group"
default 1 default 1
range 1 3 range 1 3
config MR_USE_UART5_DMA
bool "Use uart5 dma"
default n
endmenu endmenu
# UART6 # UART6
@@ -83,6 +103,10 @@ menu "UART driver configure"
int "Uart6 group" int "Uart6 group"
default 1 default 1
range 1 3 range 1 3
config MR_USE_UART6_DMA
bool "Use uart6 dma"
default n
endmenu endmenu
# UART7 # UART7
@@ -97,6 +121,10 @@ menu "UART driver configure"
int "Uart7 group" int "Uart7 group"
default 1 default 1
range 1 3 range 1 3
config MR_USE_UART7_DMA
bool "Use uart7 dma"
default n
endmenu endmenu
# UART8 # UART8
@@ -111,6 +139,10 @@ menu "UART driver configure"
int "Uart8 group" int "Uart8 group"
default 1 default 1
range 1 3 range 1 3
config MR_USE_UART8_DMA
bool "Use uart8 dma"
default n
endmenu endmenu
endif endif

View File

@@ -244,7 +244,7 @@ static int serial_driver_configure(struct mr_driver *driver, bool enable,
USART_Init(serial->instance, &USART_InitStructure); USART_Init(serial->instance, &USART_InitStructure);
USART_Cmd(serial->instance, enable); USART_Cmd(serial->instance, enable);
USART_ClearFlag(serial->instance, USART_FLAG_RXNE); USART_ClearFlag(serial->instance, USART_FLAG_RXNE);
USART_ClearFlag(serial->instance, USART_FLAG_TC); USART_ClearFlag(serial->instance, USART_FLAG_TXE);
/* Configure NVIC */ /* Configure NVIC */
NVIC_InitStructure.NVIC_IRQChannel = serial->irq; NVIC_InitStructure.NVIC_IRQChannel = serial->irq;
@@ -285,8 +285,7 @@ static int serial_driver_send(struct mr_driver *driver, uint8_t data)
size_t i = 0; size_t i = 0;
/* Write data to register */ /* Write data to register */
USART_SendData(serial->instance, data); while (USART_GetFlagStatus(serial->instance, USART_FLAG_TXE) == RESET)
while (USART_GetFlagStatus(serial->instance, USART_FLAG_TC) == RESET)
{ {
i++; i++;
if (i > UINT16_MAX) if (i > UINT16_MAX)
@@ -294,6 +293,7 @@ static int serial_driver_send(struct mr_driver *driver, uint8_t data)
return MR_ETIMEOUT; return MR_ETIMEOUT;
} }
} }
USART_SendData(serial->instance, data);
return MR_EOK; return MR_EOK;
} }
@@ -308,6 +308,58 @@ static int serial_driver_send_int_configure(struct mr_driver *driver,
return MR_EOK; return MR_EOK;
} }
static int serial_driver_receive_dma(struct mr_driver *driver, bool enable,
void *buf, size_t count)
{
struct mr_serial_driver *serial = (struct mr_serial_driver *)driver;
DMA_InitTypeDef DMA_InitStructure = {0};
NVIC_InitTypeDef NVIC_InitStructure = {0};
/* Configure clock */
RCC_AHBPeriphClockCmd(serial->rx_dma_clock, ENABLE);
/* Configure NVIC */
NVIC_InitStructure.NVIC_IRQChannel = serial->rx_dma_irq;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = enable;
NVIC_Init(&NVIC_InitStructure);
USART_ClearITPendingBit(serial->instance, USART_IT_RXNE);
USART_ITConfig(serial->instance, USART_IT_RXNE, !enable);
USART_ITConfig(serial->instance, USART_IT_IDLE, enable);
DMA_ClearITPendingBit(serial->rx_dma_irq_it);
DMA_ITConfig(serial->rx_dma_channel, DMA_IT_TC, enable);
if (enable == true)
{
USART_DMACmd(serial->instance, USART_DMAReq_Rx, ENABLE);
DMA_Cmd(serial->rx_dma_channel, DISABLE);
serial->rx_dma_count = count;
DMA_InitStructure.DMA_PeripheralBaseAddr =
(uint32_t)(&serial->instance->DATAR);
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)buf;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_BufferSize = count;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(serial->rx_dma_channel, &DMA_InitStructure);
DMA_Cmd(serial->rx_dma_channel, ENABLE);
USART_DMACmd(serial->instance, USART_DMAReq_Rx, ENABLE);
} else
{
USART_DMACmd(serial->instance, USART_DMAReq_Rx, ENABLE);
DMA_Cmd(serial->rx_dma_channel, DISABLE);
}
return MR_EOK;
}
MR_INLINE void serial_device_isr(struct mr_serial *serial) MR_INLINE void serial_device_isr(struct mr_serial *serial)
{ {
struct mr_device *device = (struct mr_device *)serial; struct mr_device *device = (struct mr_device *)serial;
@@ -319,12 +371,30 @@ MR_INLINE void serial_device_isr(struct mr_serial *serial)
mr_device_isr(device, MR_EVENT_SERIAL_RD_COMPLETE_INT, NULL); mr_device_isr(device, MR_EVENT_SERIAL_RD_COMPLETE_INT, NULL);
USART_ClearITPendingBit(_serial->instance, USART_IT_RXNE); USART_ClearITPendingBit(_serial->instance, USART_IT_RXNE);
} }
if (USART_GetITStatus(_serial->instance, USART_IT_TXE) != RESET) if (USART_GetITStatus(_serial->instance, USART_IT_TXE) != RESET)
{ {
mr_device_isr(device, MR_EVENT_SERIAL_WR_COMPLETE_INT, NULL); mr_device_isr(device, MR_EVENT_SERIAL_WR_COMPLETE_INT, NULL);
USART_ClearITPendingBit(_serial->instance, USART_IT_TXE); USART_ClearITPendingBit(_serial->instance, USART_IT_TXE);
} }
if (USART_GetITStatus(_serial->instance, USART_IT_IDLE) != RESET)
{
size_t count = _serial->rx_dma_count -
DMA_GetCurrDataCounter(_serial->rx_dma_channel);
mr_device_isr(device, MR_EVENT_SERIAL_RD_COMPLETE_DMA, &count);
/* Clear IDLE */
_serial->instance->STATR;
_serial->instance->DATAR;
}
if (DMA_GetITStatus(_serial->rx_dma_irq_it) != RESET)
{
size_t count = _serial->rx_dma_count -
DMA_GetCurrDataCounter(_serial->rx_dma_channel);
mr_device_isr(device, MR_EVENT_SERIAL_RD_COMPLETE_DMA, &count);
DMA_ClearITPendingBit(_serial->rx_dma_irq_it);
}
} }
#ifdef MR_USE_UART1 #ifdef MR_USE_UART1
@@ -333,6 +403,14 @@ void USART1_IRQHandler(void)
{ {
serial_device_isr(&_serial_device[_DRIVER_UART1_INDEX]); serial_device_isr(&_serial_device[_DRIVER_UART1_INDEX]);
} }
#ifdef MR_USE_UART1_DMA
void DMA1_Channel5_IRQHandler(void)
__attribute__((interrupt("WCH-Interrupt-fast")));
void DMA1_Channel5_IRQHandler(void)
{
serial_device_isr(&_serial_device[_DRIVER_UART1_INDEX]);
}
#endif /* MR_USE_UART1_DMA */
#endif /* MR_USE_UART1 */ #endif /* MR_USE_UART1 */
#ifdef MR_USE_UART2 #ifdef MR_USE_UART2
@@ -341,6 +419,14 @@ void USART2_IRQHandler(void)
{ {
serial_device_isr(&_serial_device[_DRIVER_UART2_INDEX]); serial_device_isr(&_serial_device[_DRIVER_UART2_INDEX]);
} }
#ifdef MR_USE_UART2_DMA
void DMA1_Channel6_IRQHandler(void)
__attribute__((interrupt("WCH-Interrupt-fast")));
void DMA1_Channel6_IRQHandler(void)
{
serial_device_isr(&_serial_device[_DRIVER_UART2_INDEX]);
}
#endif /* MR_USE_UART2_DMA */
#endif /* MR_USE_UART2 */ #endif /* MR_USE_UART2 */
#ifdef MR_USE_UART3 #ifdef MR_USE_UART3
@@ -349,6 +435,14 @@ void USART3_IRQHandler(void)
{ {
serial_device_isr(&_serial_device[_DRIVER_UART3_INDEX]); serial_device_isr(&_serial_device[_DRIVER_UART3_INDEX]);
} }
#ifdef MR_USE_UART3_DMA
void DMA1_Channel3_IRQHandler(void)
__attribute__((interrupt("WCH-Interrupt-fast")));
void DMA1_Channel3_IRQHandler(void)
{
serial_device_isr(&_serial_device[_DRIVER_UART3_INDEX]);
}
#endif /* MR_USE_UART3_DMA */
#endif /* MR_USE_UART3 */ #endif /* MR_USE_UART3 */
#ifdef MR_USE_UART4 #ifdef MR_USE_UART4
@@ -357,6 +451,14 @@ void UART4_IRQHandler(void)
{ {
serial_device_isr(&_serial_device[_DRIVER_UART4_INDEX]); serial_device_isr(&_serial_device[_DRIVER_UART4_INDEX]);
} }
#ifdef MR_USE_UART4_DMA
void DMA2_Channel3_IRQHandler(void)
__attribute__((interrupt("WCH-Interrupt-fast")));
void DMA2_Channel3_IRQHandler(void)
{
serial_device_isr(&_serial_device[_DRIVER_UART4_INDEX]);
}
#endif /* MR_USE_UART4_DMA */
#endif /* MR_USE_UART4 */ #endif /* MR_USE_UART4 */
#ifdef MR_USE_UART5 #ifdef MR_USE_UART5
@@ -365,6 +467,14 @@ void UART5_IRQHandler(void)
{ {
serial_device_isr(&_serial_device[_DRIVER_UART5_INDEX]); serial_device_isr(&_serial_device[_DRIVER_UART5_INDEX]);
} }
#ifdef MR_USE_UART5_DMA
void DMA2_Channel2_IRQHandler(void)
__attribute__((interrupt("WCH-Interrupt-fast")));
void DMA2_Channel2_IRQHandler(void)
{
serial_device_isr(&_serial_device[_DRIVER_UART5_INDEX]);
}
#endif /* MR_USE_UART5_DMA */
#endif /* MR_USE_UART5 */ #endif /* MR_USE_UART5 */
#ifdef MR_USE_UART6 #ifdef MR_USE_UART6
@@ -373,6 +483,14 @@ void UART6_IRQHandler(void)
{ {
serial_device_isr(&_serial_device[_DRIVER_UART6_INDEX]); serial_device_isr(&_serial_device[_DRIVER_UART6_INDEX]);
} }
#ifdef MR_USE_UART6_DMA
void DMA2_Channel7_IRQHandler(void)
__attribute__((interrupt("WCH-Interrupt-fast")));
void DMA2_Channel7_IRQHandler(void)
{
serial_device_isr(&_serial_device[_DRIVER_UART6_INDEX]);
}
#endif /* MR_USE_UART6_DMA */
#endif /* MR_USE_UART6 */ #endif /* MR_USE_UART6 */
#ifdef MR_USE_UART7 #ifdef MR_USE_UART7
@@ -381,6 +499,14 @@ void UART7_IRQHandler(void)
{ {
serial_device_isr(&_serial_device[_DRIVER_UART7_INDEX]); serial_device_isr(&_serial_device[_DRIVER_UART7_INDEX]);
} }
#ifdef MR_USE_UART7_DMA
void DMA2_Channel9_IRQHandler(void)
__attribute__((interrupt("WCH-Interrupt-fast")));
void DMA2_Channel9_IRQHandler(void)
{
serial_device_isr(&_serial_device[_DRIVER_UART7_INDEX]);
}
#endif /* MR_USE_UART7_DMA */
#endif /* MR_USE_UART7 */ #endif /* MR_USE_UART7 */
#ifdef MR_USE_UART8 #ifdef MR_USE_UART8
@@ -389,6 +515,14 @@ void UART8_IRQHandler(void)
{ {
serial_device_isr(&_serial_device[_DRIVER_UART8_INDEX]); serial_device_isr(&_serial_device[_DRIVER_UART8_INDEX]);
} }
#ifdef MR_USE_UART8_DMA
void DMA2_Channel11_IRQHandler(void)
__attribute__((interrupt("WCH-Interrupt-fast")));
void DMA2_Channel11_IRQHandler(void)
{
serial_device_isr(&_serial_device[_DRIVER_UART8_INDEX]);
}
#endif /* MR_USE_UART8_DMA */
#endif /* MR_USE_UART8 */ #endif /* MR_USE_UART8 */
static void serial_driver_init(void) static void serial_driver_init(void)
@@ -397,7 +531,8 @@ static void serial_driver_init(void)
.configure = serial_driver_configure, .configure = serial_driver_configure,
.receive = serial_driver_receive, .receive = serial_driver_receive,
.send = serial_driver_send, .send = serial_driver_send,
.send_int_configure = serial_driver_send_int_configure}; .send_int_configure = serial_driver_send_int_configure,
.receive_dma = serial_driver_receive_dma};
for (size_t i = 0; i < MR_ARRAY_NUM(_serial_device); i++) for (size_t i = 0; i < MR_ARRAY_NUM(_serial_device); i++)
{ {

View File

@@ -1,4 +1,4 @@
menu "ADC configure" menu "Adc configure"
config MR_USE_ADC config MR_USE_ADC
bool "Use adc" bool "Use adc"
default y default y

View File

@@ -6,7 +6,7 @@
* @date 2023-11-06 MacRsh First version * @date 2023-11-06 MacRsh First version
*/ */
#include "../mr-library/device/include/mr_adc.h" #include "../mr-library/include/device/mr_adc.h"
#ifdef MR_USE_ADC #ifdef MR_USE_ADC

View File

@@ -1,4 +1,4 @@
menu "PIN configure" menu "Pin configure"
config MR_USE_PIN config MR_USE_PIN
bool "Use pin" bool "Use pin"
default y default y

View File

@@ -6,7 +6,7 @@
* @date 2023-11-08 MacRsh First version * @date 2023-11-08 MacRsh First version
*/ */
#include "../mr-library/device/include/mr_pin.h" #include "../mr-library/include/device/mr_pin.h"
#ifdef MR_USE_PIN #ifdef MR_USE_PIN

View File

@@ -8,44 +8,44 @@ menu "Serial configure"
# RD-FIFO # RD-FIFO
config MR_CFG_SERIAL_RD_FIFO_SIZE config MR_CFG_SERIAL_RD_FIFO_SIZE
depends on MR_USE_SERIAL depends on MR_USE_SERIAL
int "Serial read FIFO size" int "Serial read fifo size"
range 0 2147483647 range 0 2147483647
default 64 default 128
help help
"This option sets the size of the read FIFO." "This option sets the size of the read fifo."
# WR-FIFO # WR-FIFO
config MR_CFG_SERIAL_WR_FIFO_SIZE config MR_CFG_SERIAL_WR_FIFO_SIZE
depends on MR_USE_SERIAL depends on MR_USE_SERIAL
int "Serial write FIFO size" int "Serial write fifo size"
range 0 2147483647 range 0 2147483647
default 0 default 0
help help
"This option sets the size of the write FIFO." "This option sets the size of the write fifo."
# DMA # DMA
config MR_USE_SERIAL_DMA config MR_USE_SERIAL_DMA
depends on MR_USE_SERIAL depends on MR_USE_SERIAL
bool "Use serial DMA" bool "Use serial dma"
default n default n
help help
"Use this option allows for the use of serial DMA." "Use this option allows for the use of serial dma."
# DMA RD-FIFO # DMA RD-FIFO
config MR_CFG_SERIAL_RD_DMA_FIFO_SIZE config MR_CFG_SERIAL_RD_DMA_FIFO_SIZE
depends on MR_USE_SERIAL_DMA depends on MR_USE_SERIAL_DMA
int "Serial read DMA FIFO size" int "Serial read dma fifo size"
range 0 2147483647 range 0 2147483647
default 128 default 128
help help
"This option sets the size of the read DMA FIFO." "This option sets the size of the read dma fifo."
# DMA WR-FIFO # DMA WR-FIFO
config MR_CFG_SERIAL_WR_DMA_FIFO_SIZE config MR_CFG_SERIAL_WR_DMA_FIFO_SIZE
depends on MR_USE_SERIAL_DMA depends on MR_USE_SERIAL_DMA
int "Serial write DMA FIFO size" int "Serial write dma fifo size"
range 0 2147483647 range 0 2147483647
default 128 default 128
help help
"This option sets the size of the write DMA FIFO." "This option sets the size of the write dma fifo."
endmenu endmenu

View File

@@ -7,14 +7,14 @@
* @date 2024-05-08 MacRsh Added support for DMA * @date 2024-05-08 MacRsh Added support for DMA
*/ */
#include "../mr-library/device/include/mr_serial.h" #include "../mr-library/include/device/mr_serial.h"
#ifdef MR_USE_SERIAL #ifdef MR_USE_SERIAL
#define _SERIAL_STATE_SEND_INT (0x01) #define _SERIAL_STATE_SEND_INT (0x01) /**< Send interrupt */
#define _SERIAL_STATE_RECEIVE_DMA (0x02 << 8) #define _SERIAL_STATE_RECEIVE_DMA (0x02 << 8) /**< Receive DMA */
#define _SERIAL_STATE_RECEIVE_DMA_TOP (0x04 << 8) #define _SERIAL_STATE_RECEIVE_DMA_TOP (0x04 << 8) /**< Receive DMA top */
#define _SERIAL_STATE_RECEIVE_DMA_BOT (0x08 << 8) #define _SERIAL_STATE_RECEIVE_DMA_BOT (0x08 << 8) /**< Receive DMA bot */
MR_INLINE ssize_t _serial_read_poll(struct mr_serial *serial, uint8_t *buf, MR_INLINE ssize_t _serial_read_poll(struct mr_serial *serial, uint8_t *buf,
size_t count) size_t count)
@@ -546,10 +546,10 @@ int mr_serial_register(struct mr_serial *serial, const char *path,
mr_fifo_init(&serial->rfifo, NULL, 0); mr_fifo_init(&serial->rfifo, NULL, 0);
mr_fifo_init(&serial->wfifo, NULL, 0); mr_fifo_init(&serial->wfifo, NULL, 0);
#ifndef MR_CFG_SERIAL_RD_FIFO_SIZE #ifndef MR_CFG_SERIAL_RD_FIFO_SIZE
#define MR_CFG_SERIAL_RD_FIFO_SIZE (64) #define MR_CFG_SERIAL_RD_FIFO_SIZE (128)
#endif /* MR_CFG_SERIAL_RD_FIFO_SIZE */ #endif /* MR_CFG_SERIAL_RD_FIFO_SIZE */
#ifndef MR_CFG_SERIAL_WR_FIFO_SIZE #ifndef MR_CFG_SERIAL_WR_FIFO_SIZE
#define MR_CFG_SERIAL_WR_FIFO_SIZE (0) #define MR_CFG_SERIAL_WR_FIFO_SIZE (0)
#endif /* MR_CFG_SERIAL_WR_FIFO_SIZE */ #endif /* MR_CFG_SERIAL_WR_FIFO_SIZE */
serial->rfifo_size = MR_CFG_SERIAL_RD_FIFO_SIZE; serial->rfifo_size = MR_CFG_SERIAL_RD_FIFO_SIZE;
serial->wfifo_size = MR_CFG_SERIAL_WR_FIFO_SIZE; serial->wfifo_size = MR_CFG_SERIAL_WR_FIFO_SIZE;

View File

@@ -6,7 +6,7 @@
* @date 2023-11-01 MacRsh First version * @date 2023-11-01 MacRsh First version
*/ */
#include "../mr-library/device/include/mr_spi.h" #include "../mr-library/include/device/mr_spi.h"
#ifdef MR_USE_SPI #ifdef MR_USE_SPI

View File

@@ -93,7 +93,7 @@ void mr_fifo_reset(struct mr_fifo *fifo);
int mr_fifo_allocate(struct mr_fifo *fifo, size_t size); int mr_fifo_allocate(struct mr_fifo *fifo, size_t size);
void mr_fifo_free(struct mr_fifo *fifo); void mr_fifo_free(struct mr_fifo *fifo);
size_t mr_fifo_used_get(const struct mr_fifo *fifo); size_t mr_fifo_used_get(const struct mr_fifo *fifo);
size_t mr_fifo_space_get(const struct mr_fifo *fifo); size_t mr_fifo_free_get(const struct mr_fifo *fifo);
size_t mr_fifo_size_get(const struct mr_fifo *fifo); size_t mr_fifo_size_get(const struct mr_fifo *fifo);
size_t mr_fifo_peek(const struct mr_fifo *fifo, void *_buf, size_t count); size_t mr_fifo_peek(const struct mr_fifo *fifo, void *_buf, size_t count);
size_t mr_fifo_discard(struct mr_fifo *fifo, size_t count); size_t mr_fifo_discard(struct mr_fifo *fifo, size_t count);