1.CH32-V307串口驱动适配DMA。
2.路径移动。
This commit is contained in:
@@ -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 */
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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++)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user