提交 574492a2 编写于 作者: S SummerGift

[bsp][stm32] Modify the DMA implementation

上级 d023fb47
...@@ -15,34 +15,46 @@ ...@@ -15,34 +15,46 @@
#if defined(BSP_USING_UART1) #if defined(BSP_USING_UART1)
#ifndef UART1_CONFIG #ifndef UART1_CONFIG
#define UART1_CONFIG \ #define UART1_CONFIG \
{ \ { \
.name = "uart1", \ .name = "uart1", \
.Instance = USART1, \ .Instance = USART1, \
.irq_type = USART1_IRQn, \ .irq_type = USART1_IRQn, \
.dma.Instance = DMA1_Channel3, \
.dma_rcc = RCC_AHBENR_DMA1EN, \
.dma_irq = DMA1_Ch2_3_DMA2_Ch1_2_IRQn, \
} }
#define USART1_RX_DMA_ISR DMA1_Ch2_3_DMA2_Ch1_2_IRQHandler
#endif /* UART1_CONFIG */ #endif /* UART1_CONFIG */
#endif /* BSP_USING_UART1 */ #endif /* BSP_USING_UART1 */
#if defined(BSP_UART1_RX_USING_DMA)
#ifndef UART1_DMA_CONFIG
#define UART1_DMA_CONFIG \
{ \
.Instance = USART1_RX_DMA_INSTANCE, \
.dma_rcc = USART1_RX_DMA_RCC, \
.dma_irq = USART1_RX_DMA_IRQ, \
}
#endif /* UART1_DMA_CONFIG */
#endif /* BSP_UART1_RX_USING_DMA */
#if defined(BSP_USING_UART2) #if defined(BSP_USING_UART2)
#ifndef UART2_CONFIG #ifndef UART2_CONFIG
#define UART2_CONFIG \ #define UART2_CONFIG \
{ \ { \
.name = "uart2", \ .name = "uart2", \
.Instance = USART2, \ .Instance = USART2, \
.irq_type = USART2_IRQn, \ .irq_type = USART2_IRQn, \
.dma.Instance = DMA1_Channel3, \
.dma_rcc = RCC_AHBENR_DMA1EN, \
.dma_irq = DMA1_Ch2_3_DMA2_Ch1_2_IRQn, \
} }
#define USART2_RX_DMA_ISR DMA1_Ch2_3_DMA2_Ch1_2_IRQHandler
#endif /* UART2_CONFIG */ #endif /* UART2_CONFIG */
#endif /* BSP_USING_UART2 */ #endif /* BSP_USING_UART2 */
#if defined(BSP_UART2_RX_USING_DMA)
#ifndef UART2_DMA_CONFIG
#define UART2_DMA_CONFIG \
{ \
.Instance = USART2_RX_DMA_INSTANCE, \
.dma_rcc = USART2_RX_DMA_RCC, \
.dma_irq = USART2_RX_DMA_IRQ, \
}
#endif /* UART2_DMA_CONFIG */
#endif /* BSP_UART2_RX_USING_DMA */
#endif /* __UART_CONFIG_H__ */ #endif /* __UART_CONFIG_H__ */
...@@ -5,7 +5,8 @@ ...@@ -5,7 +5,8 @@
* *
* Change Logs: * Change Logs:
* Date Author Notes * Date Author Notes
* 2018-11-06 SummerGift change to new framework * 2018-11-06 SummerGift first version
* 2019-01-05 SummerGift modify DMA support
*/ */
#ifndef __SPI_CONFIG_H__ #ifndef __SPI_CONFIG_H__
...@@ -14,55 +15,101 @@ ...@@ -14,55 +15,101 @@
#include <rtthread.h> #include <rtthread.h>
#ifdef BSP_USING_SPI1 #ifdef BSP_USING_SPI1
#define SPI1_BUS_CONFIG \ #ifndef SPI1_BUS_CONFIG
{ \ #define SPI1_BUS_CONFIG \
.Instance = SPI1, \ { \
.bus_name = "spi1", \ .Instance = SPI1, \
.dma_rx.dma_rcc = RCC_AHBENR_DMA1EN, \ .bus_name = "spi1", \
.dma_tx.dma_rcc = RCC_AHBENR_DMA1EN, \
.dma_rx.Instance = DMA1_Channel2, \
.dma_rx.dma_irq = DMA1_Channel2_IRQn, \
.dma_tx.Instance = DMA1_Channel3, \
.dma_tx.dma_irq = DMA1_Channel3_IRQn, \
} }
#endif /* SPI1_BUS_CONFIG */
#endif /* BSP_USING_SPI1 */
#ifdef BSP_SPI1_TX_USING_DMA
#ifndef SPI1_TX_DMA_CONFIG
#define SPI1_TX_DMA_CONFIG \
{ \
.dma_rcc = SPI1_TX_DMA_RCC, \
.Instance = SPI1_TX_DMA_INSTANCE, \
.dma_irq = SPI1_TX_DMA_IRQ, \
}
#endif /* SPI1_TX_DMA_CONFIG */
#endif /* BSP_SPI1_TX_USING_DMA */
#define SPI1_DMA_RX_IRQHandler DMA1_Channel2_IRQHandler #ifdef BSP_SPI1_RX_USING_DMA
#define SPI1_DMA_TX_IRQHandler DMA1_Channel3_IRQHandler #ifndef SPI1_RX_DMA_CONFIG
#endif #define SPI1_RX_DMA_CONFIG \
{ \
.dma_rcc = SPI1_RX_DMA_RCC, \
.Instance = SPI1_RX_DMA_INSTANCE, \
.dma_irq = SPI1_RX_DMA_IRQ, \
}
#endif /* SPI1_RX_DMA_CONFIG */
#endif /* BSP_SPI1_RX_USING_DMA */
#ifdef BSP_USING_SPI2 #ifdef BSP_USING_SPI2
#define SPI2_BUS_CONFIG \ #ifndef SPI2_BUS_CONFIG
{ \ #define SPI2_BUS_CONFIG \
.Instance = SPI2, \ { \
.bus_name = "spi2", \ .Instance = SPI2, \
.dma_rx.dma_rcc = RCC_AHBENR_DMA1EN, \ .bus_name = "spi2", \
.dma_tx.dma_rcc = RCC_AHBENR_DMA1EN, \
.dma_rx.Instance = DMA1_Channel4, \
.dma_rx.dma_irq = DMA1_Channel4_IRQn, \
.dma_tx.Instance = DMA1_Channel5, \
.dma_tx.dma_irq = DMA1_Channel5_IRQn, \
} }
#endif /* SPI2_BUS_CONFIG */
#endif /* BSP_USING_SPI2 */
#define SPI2_DMA_RX_IRQHandler DMA1_Channel4_IRQHandler #ifdef BSP_SPI2_TX_USING_DMA
#define SPI2_DMA_TX_IRQHandler DMA1_Channel5_IRQHandler #ifndef SPI2_TX_DMA_CONFIG
#endif #define SPI2_TX_DMA_CONFIG \
{ \
.dma_rcc = SPI2_TX_DMA_RCC, \
.Instance = SPI2_TX_DMA_INSTANCE, \
.dma_irq = SPI2_TX_DMA_IRQ, \
}
#endif /* SPI2_TX_DMA_CONFIG */
#endif /* BSP_SPI2_TX_USING_DMA */
#ifdef BSP_SPI2_RX_USING_DMA
#ifndef SPI2_RX_DMA_CONFIG
#define SPI2_RX_DMA_CONFIG \
{ \
.dma_rcc = SPI2_RX_DMA_RCC, \
.Instance = SPI2_RX_DMA_INSTANCE, \
.dma_irq = SPI2_RX_DMA_IRQ, \
}
#endif /* SPI2_RX_DMA_CONFIG */
#endif /* BSP_SPI2_RX_USING_DMA */
#ifdef BSP_USING_SPI3 #ifdef BSP_USING_SPI3
#define SPI3_BUS_CONFIG \ #ifndef SPI3_BUS_CONFIG
{ \ #define SPI3_BUS_CONFIG \
.Instance = SPI3, \ { \
.bus_name = "spi3", \ .Instance = SPI3, \
.dma_rx.dma_rcc = RCC_AHBENR_DMA2EN, \ .bus_name = "spi3", \
.dma_tx.dma_rcc = RCC_AHBENR_DMA2EN, \
.dma_rx.Instance = DMA2_Channel1, \
.dma_rx.dma_irq = DMA2_Channel1_IRQn, \
.dma_tx.Instance = DMA2_Channel2, \
.dma_tx.dma_irq = DMA2_Channel2_IRQn, \
} }
#endif /* SPI3_BUS_CONFIG */
#endif /* BSP_USING_SPI3 */
#define SPI3_DMA_RX_IRQHandler DMA2_Channel1_IRQHandler #ifdef BSP_SPI3_TX_USING_DMA
#define SPI3_DMA_TX_IRQHandler DMA2_Channel2_IRQHandler #ifndef SPI3_TX_DMA_CONFIG
#endif #define SPI3_TX_DMA_CONFIG \
{ \
.dma_rcc = SPI3_TX_DMA_RCC, \
.Instance = SPI3_TX_DMA_INSTANCE, \
.dma_irq = SPI3_TX_DMA_IRQ, \
}
#endif /* SPI3_TX_DMA_CONFIG */
#endif /* BSP_SPI3_TX_USING_DMA */
#ifdef BSP_SPI3_RX_USING_DMA
#ifndef SPI3_RX_DMA_CONFIG
#define SPI3_RX_DMA_CONFIG \
{ \
.dma_rcc = SPI3_RX_DMA_RCC, \
.Instance = SPI3_RX_DMA_INSTANCE, \
.dma_irq = SPI3_RX_DMA_IRQ, \
}
#endif /* SPI3_RX_DMA_CONFIG */
#endif /* BSP_SPI3_RX_USING_DMA */
#endif /*__SPI_CONFIG_H__ */ #endif /*__SPI_CONFIG_H__ */
......
...@@ -5,81 +5,122 @@ ...@@ -5,81 +5,122 @@
* *
* Change Logs: * Change Logs:
* Date Author Notes * Date Author Notes
* 2018-10-30 BalanceTWK change to new framework * 2018-10-30 BalanceTWK first version
* 2019-01-05 SummerGift modify DMA support
*/ */
#ifndef __UART_CONFIG_H__ #ifndef __UART_CONFIG_H__
#define __UART_CONFIG_H__ #define __UART_CONFIG_H__
#include <rtthread.h> #include <rtthread.h>
#include "dma_config.h"
#if defined(BSP_USING_UART1) #if defined(BSP_USING_UART1)
#define UART1_CONFIG \ #ifndef UART1_CONFIG
{ \ #define UART1_CONFIG \
.name = "uart1", \ { \
.Instance = USART1, \ .name = "uart1", \
.irq_type = USART1_IRQn, \ .Instance = USART1, \
.dma.channel.Instance = DMA1_Channel5, \ .irq_type = USART1_IRQn, \
.dma_rcc = RCC_AHBENR_DMA1EN, \
.dma_irq = DMA1_Channel5_IRQn, \
} }
#endif /* UART1_CONFIG */
#endif /* BSP_USING_UART1 */
#define USART1_RX_DMA_ISR DMA1_Channel5_IRQHandler #if defined(BSP_UART1_RX_USING_DMA)
#endif #ifndef UART1_DMA_CONFIG
#define UART1_DMA_CONFIG \
{ \
.Instance = USART1_RX_DMA_INSTANCE, \
.dma_rcc = USART1_RX_DMA_RCC, \
.dma_irq = USART1_RX_DMA_IRQ, \
}
#endif /* UART1_DMA_CONFIG */
#endif /* BSP_UART1_RX_USING_DMA */
#if defined(BSP_USING_UART2) #if defined(BSP_USING_UART2)
#ifndef UART2_CONFIG
#define UART2_CONFIG \
{ \
.name = "uart2", \
.Instance = USART2, \
.irq_type = USART2_IRQn, \
}
#endif /* UART2_CONFIG */
#endif /* BSP_USING_UART2 */
#define UART2_CONFIG \ #if defined(BSP_UART2_RX_USING_DMA)
{ \ #ifndef UART2_DMA_CONFIG
.name = "uart2", \ #define UART2_DMA_CONFIG \
.Instance = USART2, \ { \
.irq_type = USART2_IRQn, \ .Instance = USART2_RX_DMA_INSTANCE, \
.dma.channel.Instance = DMA1_Channel6, \ .dma_rcc = USART2_RX_DMA_RCC, \
.dma_rcc = RCC_AHBENR_DMA1EN, \ .dma_irq = USART2_RX_DMA_IRQ, \
.dma_irq = DMA1_Channel6_IRQn, \
} }
#endif /* UART2_DMA_CONFIG */
#endif /* BSP_UART2_RX_USING_DMA */
#define USART2_RX_DMA_ISR DMA1_Channel6_IRQHandler
#endif
#if defined(BSP_USING_UART3) #if defined(BSP_USING_UART3)
#ifndef UART3_CONFIG
#define UART3_CONFIG \ #define UART3_CONFIG \
{ \ { \
.name = "uart3", \ .name = "uart3", \
.Instance = USART3, \ .Instance = USART3, \
.irq_type = USART3_IRQn, \ .irq_type = USART3_IRQn, \
.dma.channel.Instance = DMA1_Channel3, \
.dma_rcc = RCC_AHBENR_DMA1EN, \
.dma_irq = DMA1_Channel3_IRQn, \
} }
#endif /* UART3_CONFIG */
#endif /* BSP_USING_UART3 */
#define USART3_RX_DMA_ISR DMA1_Channel3_IRQHandler #if defined(BSP_UART3_RX_USING_DMA)
#endif #ifndef UART3_DMA_CONFIG
#define UART3_DMA_CONFIG \
{ \
.Instance = USART3_RX_DMA_INSTANCE, \
.dma_rcc = USART3_RX_DMA_RCC, \
.dma_irq = USART3_RX_DMA_IRQ, \
}
#endif /* UART3_DMA_CONFIG */
#endif /* BSP_UART3_RX_USING_DMA */
#if defined(BSP_USING_UART4) #if defined(BSP_USING_UART4)
#ifndef UART4_CONFIG
#define UART4_CONFIG \ #define UART4_CONFIG \
{ \ { \
.name = "uart4", \ .name = "uart4", \
.Instance = UART4, \ .Instance = UART4, \
.irq_type = UART4_IRQn, \ .irq_type = UART4_IRQn, \
.dma.channel.Instance = DMA2_Channel3, \
.dma_rcc = RCC_AHBENR_DMA2EN, \
.dma_irq = DMA2_Channel3_IRQn, \
} }
#endif /* UART4_CONFIG */
#endif /* BSP_USING_UART4 */
#define USART4_RX_DMA_ISR DMA2_Channel3_IRQHandler #if defined(BSP_UART4_RX_USING_DMA)
#endif #ifndef UART4_DMA_CONFIG
#define UART4_DMA_CONFIG \
{ \
.Instance = USART4_RX_DMA_INSTANCE, \
.dma_rcc = USART4_RX_DMA_RCC, \
.dma_irq = USART4_RX_DMA_IRQ, \
}
#endif /* UART4_DMA_CONFIG */
#endif /* BSP_UART4_RX_USING_DMA */
#if defined(BSP_USING_UART5) #if defined(BSP_USING_UART5)
#ifndef UART5_CONFIG
#define UART5_CONFIG \
{ \
.name = "uart5", \
.Instance = UART5, \
.irq_type = UART5_IRQn, \
}
#endif /* UART5_CONFIG */
#endif /* BSP_USING_UART5 */
#define UART5_CONFIG \ #if defined(BSP_UART5_RX_USING_DMA)
{ \ #ifndef UART5_DMA_CONFIG
.name = "uart5", \ #define UART5_DMA_CONFIG \
.Instance = UART5, \ { \
.irq_type = UART5_IRQn, \ .Instance = DMA_NOT_AVAILABLE, \
.dma.channel.Instance = DMA_NOT_AVAILABLE, \
} }
#endif #endif /* UART5_DMA_CONFIG */
#endif /* BSP_UART5_RX_USING_DMA */
#endif #endif
...@@ -5,7 +5,8 @@ ...@@ -5,7 +5,8 @@
* *
* Change Logs: * Change Logs:
* Date Author Notes * Date Author Notes
* 2018-11-06 SummerGift change to new framework * 2018-11-06 SummerGift first version
* 2019-01-03 zylx modify DMA support
*/ */
#ifndef __SPI_CONFIG_H__ #ifndef __SPI_CONFIG_H__
...@@ -14,101 +15,173 @@ ...@@ -14,101 +15,173 @@
#include <rtthread.h> #include <rtthread.h>
#ifdef BSP_USING_SPI1 #ifdef BSP_USING_SPI1
#define SPI1_BUS_CONFIG \ #ifndef SPI1_BUS_CONFIG
{ \ #define SPI1_BUS_CONFIG \
.Instance = SPI1, \ { \
.bus_name = "spi1", \ .Instance = SPI1, \
.dma_rx.dma_rcc = RCC_AHB1ENR_DMA2EN, \ .bus_name = "spi1", \
.dma_tx.dma_rcc = RCC_AHB1ENR_DMA2EN, \
.dma_rx.Instance = DMA2_Stream2, \
.dma_rx.channel = DMA_CHANNEL_3, \
.dma_rx.dma_irq = DMA2_Stream2_IRQn, \
.dma_tx.Instance = DMA2_Stream3, \
.dma_tx.channel = DMA_CHANNEL_3, \
.dma_tx.dma_irq = DMA2_Stream3_IRQn, \
} }
#endif /* SPI1_BUS_CONFIG */
#define SPI1_DMA_RX_IRQHandler DMA2_Stream2_IRQHandler #endif /* BSP_USING_SPI1 */
#define SPI1_DMA_TX_IRQHandler DMA2_Stream3_IRQHandler
#endif #ifdef BSP_SPI1_TX_USING_DMA
#ifndef SPI1_TX_DMA_CONFIG
#define SPI1_TX_DMA_CONFIG \
{ \
.dma_rcc = SPI1_TX_DMA_RCC, \
.Instance = SPI1_TX_DMA_INSTANCE, \
.channel = SPI1_TX_DMA_CHANNEL, \
.dma_irq = SPI1_TX_DMA_IRQ, \
}
#endif /* SPI1_TX_DMA_CONFIG */
#endif /* BSP_SPI1_TX_USING_DMA */
#ifdef BSP_SPI1_RX_USING_DMA
#ifndef SPI1_RX_DMA_CONFIG
#define SPI1_RX_DMA_CONFIG \
{ \
.dma_rcc = SPI1_RX_DMA_RCC, \
.Instance = SPI1_RX_DMA_INSTANCE, \
.channel = SPI1_RX_DMA_CHANNEL, \
.dma_irq = SPI1_RX_DMA_IRQ, \
}
#endif /* SPI1_RX_DMA_CONFIG */
#endif /* BSP_SPI1_RX_USING_DMA */
#ifdef BSP_USING_SPI2 #ifdef BSP_USING_SPI2
#define SPI2_BUS_CONFIG \ #ifndef SPI2_BUS_CONFIG
{ \ #define SPI2_BUS_CONFIG \
.Instance = SPI2, \ { \
.bus_name = "spi2", \ .Instance = SPI2, \
.dma_rx.dma_rcc = RCC_AHB1ENR_DMA1EN, \ .bus_name = "spi2", \
.dma_tx.dma_rcc = RCC_AHB1ENR_DMA1EN, \
.dma_rx.Instance = DMA1_Stream3, \
.dma_rx.channel = DMA_CHANNEL_0, \
.dma_rx.dma_irq = DMA1_Stream3_IRQn, \
.dma_tx.Instance = DMA1_Stream4, \
.dma_tx.channel = DMA_CHANNEL_0, \
.dma_tx.dma_irq = DMA1_Stream4_IRQn, \
} }
#endif /* SPI2_BUS_CONFIG */
#define SPI2_DMA_RX_IRQHandler DMA1_Stream3_IRQHandler #endif /* BSP_USING_SPI2 */
#define SPI2_DMA_TX_IRQHandler DMA1_Stream4_IRQHandler
#endif #ifdef BSP_SPI2_TX_USING_DMA
#ifndef SPI2_TX_DMA_CONFIG
#define SPI2_TX_DMA_CONFIG \
{ \
.dma_rcc = SPI2_TX_DMA_RCC, \
.Instance = SPI2_TX_DMA_INSTANCE, \
.channel = SPI2_TX_DMA_CHANNEL, \
.dma_irq = SPI2_TX_DMA_IRQ, \
}
#endif /* SPI2_TX_DMA_CONFIG */
#endif /* BSP_SPI2_TX_USING_DMA */
#ifdef BSP_SPI2_RX_USING_DMA
#ifndef SPI2_RX_DMA_CONFIG
#define SPI2_RX_DMA_CONFIG \
{ \
.dma_rcc = SPI2_RX_DMA_RCC, \
.Instance = SPI2_RX_DMA_INSTANCE, \
.channel = SPI2_RX_DMA_CHANNEL, \
.dma_irq = SPI2_RX_DMA_IRQ, \
}
#endif /* SPI2_RX_DMA_CONFIG */
#endif /* BSP_SPI2_RX_USING_DMA */
#ifdef BSP_USING_SPI3 #ifdef BSP_USING_SPI3
#define SPI3_BUS_CONFIG \ #ifndef SPI3_BUS_CONFIG
{ \ #define SPI3_BUS_CONFIG \
.Instance = SPI3, \ { \
.bus_name = "spi3", \ .Instance = SPI3, \
.dma_rx.dma_rcc = RCC_AHB1ENR_DMA1EN, \ .bus_name = "spi3", \
.dma_tx.dma_rcc = RCC_AHB1ENR_DMA1EN, \
.dma_rx.Instance = DMA1_Stream0, \
.dma_rx.channel = DMA_CHANNEL_0, \
.dma_rx.dma_irq = DMA1_Stream0_IRQn, \
.dma_tx.Instance = DMA1_Stream5, \
.dma_tx.channel = DMA_CHANNEL_0, \
.dma_tx.dma_irq = DMA1_Stream5_IRQn, \
} }
#endif /* SPI3_BUS_CONFIG */
#define SPI3_DMA_RX_IRQHandler DMA1_Stream0_IRQHandler #endif /* BSP_USING_SPI3 */
#define SPI3_DMA_TX_IRQHandler DMA1_Stream5_IRQHandler
#endif #ifdef BSP_SPI3_TX_USING_DMA
#ifndef SPI3_TX_DMA_CONFIG
#define SPI3_TX_DMA_CONFIG \
{ \
.dma_rcc = SPI3_TX_DMA_RCC, \
.Instance = SPI3_TX_DMA_INSTANCE, \
.channel = SPI3_TX_DMA_CHANNEL, \
.dma_irq = SPI3_TX_DMA_IRQ, \
}
#endif /* SPI3_TX_DMA_CONFIG */
#endif /* BSP_SPI3_TX_USING_DMA */
#ifdef BSP_SPI3_RX_USING_DMA
#ifndef SPI3_RX_DMA_CONFIG
#define SPI3_RX_DMA_CONFIG \
{ \
.dma_rcc = SPI3_RX_DMA_RCC, \
.Instance = SPI3_RX_DMA_INSTANCE, \
.channel = SPI3_RX_DMA_CHANNEL, \
.dma_irq = SPI3_RX_DMA_IRQ, \
}
#endif /* SPI3_RX_DMA_CONFIG */
#endif /* BSP_SPI3_RX_USING_DMA */
#ifdef BSP_USING_SPI4 #ifdef BSP_USING_SPI4
#define SPI4_BUS_CONFIG \ #ifndef SPI4_BUS_CONFIG
{ \ #define SPI4_BUS_CONFIG \
.Instance = SPI4, \ { \
.bus_name = "spi4", \ .Instance = SPI4, \
.dma_rx.dma_rcc = RCC_AHB1ENR_DMA2EN, \ .bus_name = "spi4", \
.dma_tx.dma_rcc = RCC_AHB1ENR_DMA2EN, \
.dma_rx.Instance = DMA2_Stream0, \
.dma_rx.channel = DMA_CHANNEL_4, \
.dma_rx.dma_irq = DMA2_Stream0_IRQn, \
.dma_tx.Instance = DMA2_Stream1, \
.dma_tx.channel = DMA_CHANNEL_4, \
.dma_tx.dma_irq = DMA2_Stream1_IRQn, \
} }
#endif /* SPI4_BUS_CONFIG */
#define SPI4_DMA_RX_IRQHandler DMA2_Stream0_IRQHandler #endif /* BSP_USING_SPI4 */
#define SPI4_DMA_TX_IRQHandler DMA2_Stream1_IRQHandler
#endif #ifdef BSP_SPI4_TX_USING_DMA
#ifndef SPI4_TX_DMA_CONFIG
#define SPI4_TX_DMA_CONFIG \
{ \
.dma_rcc = SPI4_TX_DMA_RCC, \
.Instance = SPI4_TX_DMA_INSTANCE, \
.channel = SPI4_TX_DMA_CHANNEL, \
.dma_irq = SPI4_TX_DMA_IRQ, \
}
#endif /* SPI4_TX_DMA_CONFIG */
#endif /* BSP_SPI4_TX_USING_DMA */
#ifdef BSP_SPI4_RX_USING_DMA
#ifndef SPI4_RX_DMA_CONFIG
#define SPI4_RX_DMA_CONFIG \
{ \
.dma_rcc = SPI4_RX_DMA_RCC, \
.Instance = SPI4_RX_DMA_INSTANCE, \
.channel = SPI4_RX_DMA_CHANNEL, \
.dma_irq = SPI4_RX_DMA_IRQ, \
}
#endif /* SPI4_RX_DMA_CONFIG */
#endif /* BSP_SPI4_RX_USING_DMA */
#ifdef BSP_USING_SPI5 #ifdef BSP_USING_SPI5
#define SPI5_BUS_CONFIG \ #ifndef SPI5_BUS_CONFIG
{ \ #define SPI5_BUS_CONFIG \
.Instance = SPI5, \ { \
.bus_name = "spi5", \ .Instance = SPI5, \
.dma_rx.dma_rcc = RCC_AHB1ENR_DMA2EN, \ .bus_name = "spi5", \
.dma_tx.dma_rcc = RCC_AHB1ENR_DMA2EN, \
.dma_rx.Instance = DMA2_Stream3, \
.dma_rx.channel = DMA_CHANNEL_2, \
.dma_rx.dma_irq = DMA2_Stream3_IRQn, \
.dma_tx.Instance = DMA2_Stream4, \
.dma_tx.channel = DMA_CHANNEL_2, \
.dma_tx.dma_irq = DMA2_Stream4_IRQn, \
} }
#endif /* SPI5_BUS_CONFIG */
#define SPI5_DMA_RX_IRQHandler DMA2_Stream3_IRQHandler #endif /* BSP_USING_SPI5 */
#define SPI5_DMA_TX_IRQHandler DMA2_Stream4_IRQHandler
#endif #ifdef BSP_SPI5_TX_USING_DMA
#ifndef SPI5_TX_DMA_CONFIG
#define SPI5_TX_DMA_CONFIG \
{ \
.dma_rcc = SPI5_TX_DMA_RCC, \
.Instance = SPI5_TX_DMA_INSTANCE, \
.channel = SPI5_TX_DMA_CHANNEL, \
.dma_irq = SPI5_TX_DMA_IRQ, \
}
#endif /* SPI5_TX_DMA_CONFIG */
#endif /* BSP_SPI5_TX_USING_DMA */
#ifdef BSP_SPI5_RX_USING_DMA
#ifndef SPI5_RX_DMA_CONFIG
#define SPI5_RX_DMA_CONFIG \
{ \
.dma_rcc = SPI5_RX_DMA_RCC, \
.Instance = SPI5_RX_DMA_INSTANCE, \
.channel = SPI5_RX_DMA_CHANNEL, \
.dma_irq = SPI5_RX_DMA_IRQ, \
}
#endif /* SPI5_RX_DMA_CONFIG */
#endif /* BSP_SPI5_RX_USING_DMA */
#endif /*__SPI_CONFIG_H__ */ #endif /*__SPI_CONFIG_H__ */
...@@ -5,7 +5,8 @@ ...@@ -5,7 +5,8 @@
* *
* Change Logs: * Change Logs:
* Date Author Notes * Date Author Notes
* 2018-10-30 SummerGift change to new framework * 2018-10-30 SummerGift first version
* 2019-01-03 zylx modify dma support
*/ */
#ifndef __UART_CONFIG_H__ #ifndef __UART_CONFIG_H__
...@@ -14,78 +15,118 @@ ...@@ -14,78 +15,118 @@
#include <rtthread.h> #include <rtthread.h>
#if defined(BSP_USING_UART1) #if defined(BSP_USING_UART1)
#define UART1_CONFIG \ #ifndef UART1_CONFIG
{ \ #define UART1_CONFIG \
.name = "uart1", \ { \
.Instance = USART1, \ .name = "uart1", \
.irq_type = USART1_IRQn, \ .Instance = USART1, \
.dma.stream_channel.Instance = DMA2_Stream5, \ .irq_type = USART1_IRQn, \
.dma.stream_channel.channel = DMA_CHANNEL_4, \
.dma_rcc = RCC_AHB1ENR_DMA2EN, \
.dma_irq = DMA2_Stream5_IRQn, \
} }
#endif /* UART1_CONFIG */
#endif /* BSP_USING_UART1 */
#define USART1_RX_DMA_ISR DMA2_Stream5_IRQHandler #if defined(BSP_UART1_RX_USING_DMA)
#endif #ifndef UART1_DMA_CONFIG
#define UART1_DMA_CONFIG \
{ \
.Instance = USART1_RX_DMA_INSTANCE, \
.channel = USART1_RX_DMA_CHANNEL, \
.dma_rcc = USART1_RX_DMA_RCC, \
.dma_irq = USART1_RX_DMA_IRQ, \
}
#endif /* UART1_DMA_CONFIG */
#endif /* BSP_UART1_RX_USING_DMA */
#if defined(BSP_USING_UART2) #if defined(BSP_USING_UART2)
#define UART2_CONFIG \ #ifndef UART2_CONFIG
{ \ #define UART2_CONFIG \
.name = "uart2", \ { \
.Instance = USART2, \ .name = "uart2", \
.irq_type = USART2_IRQn, \ .Instance = USART2, \
.dma.stream_channel.Instance = DMA1_Stream5, \ .irq_type = USART2_IRQn, \
.dma.stream_channel.channel = DMA_CHANNEL_4, \
.dma_rcc = RCC_AHB1ENR_DMA1EN, \
.dma_irq = DMA1_Stream5_IRQn, \
} }
#endif /* UART2_CONFIG */
#endif /* BSP_USING_UART2 */
#define USART2_RX_DMA_ISR DMA1_Stream5_IRQHandler #if defined(BSP_UART2_RX_USING_DMA)
#endif #ifndef UART2_DMA_CONFIG
#define UART2_DMA_CONFIG \
{ \
.Instance = USART2_RX_DMA_INSTANCE, \
.channel = USART2_RX_DMA_CHANNEL, \
.dma_rcc = USART2_RX_DMA_RCC, \
.dma_irq = USART2_RX_DMA_IRQ, \
}
#endif /* UART2_DMA_CONFIG */
#endif /* BSP_UART2_RX_USING_DMA */
#if defined(BSP_USING_UART3) #if defined(BSP_USING_UART3)
#define UART3_CONFIG \ #ifndef UART3_CONFIG
{ \ #define UART3_CONFIG \
.name = "uart3", \ { \
.Instance = USART3, \ .name = "uart3", \
.irq_type = USART3_IRQn, \ .Instance = USART3, \
.dma.stream_channel.Instance = DMA1_Stream1, \ .irq_type = USART3_IRQn, \
.dma.stream_channel.channel = DMA_CHANNEL_4, \
.dma_rcc = RCC_AHB1ENR_DMA1EN, \
.dma_irq = DMA1_Stream1_IRQn, \
} }
#endif /* UART3_CONFIG */
#endif /* BSP_USING_UART3 */
#define USART3_RX_DMA_ISR DMA1_Stream1_IRQHandler #if defined(BSP_UART3_RX_USING_DMA)
#endif #ifndef UART3_DMA_CONFIG
#define UART3_DMA_CONFIG \
{ \
.Instance = USART3_RX_DMA_INSTANCE, \
.channel = USART3_RX_DMA_CHANNEL, \
.dma_rcc = USART3_RX_DMA_RCC, \
.dma_irq = USART3_RX_DMA_IRQ, \
}
#endif /* UART3_DMA_CONFIG */
#endif /* BSP_UART3_RX_USING_DMA */
#if defined(BSP_USING_UART4) #if defined(BSP_USING_UART4)
#define UART4_CONFIG \ #ifndef UART4_CONFIG
{ \ #define UART4_CONFIG \
.name = "uart4", \ { \
.Instance = UART4, \ .name = "uart4", \
.irq_type = UART4_IRQn, \ .Instance = UART4, \
.dma.stream_channel.Instance = DMA1_Stream2, \ .irq_type = UART4_IRQn, \
.dma.stream_channel.channel = DMA_CHANNEL_4, \
.dma_rcc = RCC_AHB1ENR_DMA1EN, \
.dma_irq = DMA1_Stream2_IRQn, \
} }
#endif /* UART4_CONFIG */
#endif /* BSP_USING_UART4 */
#define USART4_RX_DMA_ISR DMA1_Stream2_IRQHandler #if defined(BSP_UART4_RX_USING_DMA)
#endif #ifndef UART4_DMA_CONFIG
#define UART4_DMA_CONFIG \
{ \
.Instance = USART4_RX_DMA_INSTANCE, \
.channel = USART4_RX_DMA_CHANNEL, \
.dma_rcc = USART4_RX_DMA_RCC, \
.dma_irq = USART4_RX_DMA_IRQ, \
}
#endif /* UART4_DMA_CONFIG */
#endif /* BSP_UART4_RX_USING_DMA */
#if defined(BSP_USING_UART5) #if defined(BSP_USING_UART5)
#define UART5_CONFIG \ #ifndef UART5_CONFIG
{ \ #define UART5_CONFIG \
.name = "uart5", \ { \
.Instance = UART5, \ .name = "uart5", \
.irq_type = UART5_IRQn, \ .Instance = UART5, \
.dma.stream_channel.Instance = DMA1_Stream0, \ .irq_type = UART5_IRQn, \
.dma.stream_channel.channel = DMA_CHANNEL_4, \
.dma_rcc = RCC_AHB1ENR_DMA1EN, \
.dma_irq = DMA1_Stream0_IRQn, \
} }
#endif /* UART5_CONFIG */
#endif /* BSP_USING_UART5 */
#define USART5_RX_DMA_ISR DMA1_Stream0_IRQHandler #if defined(BSP_UART5_RX_USING_DMA)
#endif #ifndef UART5_DMA_CONFIG
#define UART5_DMA_CONFIG \
{ \
.Instance = USART5_RX_DMA_INSTANCE, \
.channel = USART5_RX_DMA_CHANNEL, \
.dma_rcc = USART5_RX_DMA_RCC, \
.dma_irq = USART5_RX_DMA_IRQ, \
}
#endif /* UART5_DMA_CONFIG */
#endif /* BSP_UART5_RX_USING_DMA */
#endif #endif
...@@ -24,13 +24,13 @@ ...@@ -24,13 +24,13 @@
} }
#endif /* QSPI_BUS_CONFIG */ #endif /* QSPI_BUS_CONFIG */
#endif /* BSP_USING_QSPI */ #endif /* BSP_USING_QSPI */
#ifdef BSP_QSPI_USING_DMA #ifdef BSP_QSPI_USING_DMA
#ifndef QSPI_DMA_CONFIG #ifndef QSPI_DMA_CONFIG
#define QSPI_DMA_CONFIG \ #define QSPI_DMA_CONFIG \
{ \ { \
.Instance = DMA2_Stream7, \ .Instance = QSPI_DMA_INSTANCE, \
.Init.Channel = DMA_CHANNEL_3, \ .Init.Channel = QSPI_DMA_CHANNEL, \
.Init.Direction = DMA_PERIPH_TO_MEMORY, \ .Init.Direction = DMA_PERIPH_TO_MEMORY, \
.Init.PeriphInc = DMA_PINC_DISABLE, \ .Init.PeriphInc = DMA_PINC_DISABLE, \
.Init.MemInc = DMA_MINC_ENABLE, \ .Init.MemInc = DMA_MINC_ENABLE, \
...@@ -42,10 +42,7 @@ ...@@ -42,10 +42,7 @@
#endif /* QSPI_DMA_CONFIG */ #endif /* QSPI_DMA_CONFIG */
#endif /* BSP_QSPI_USING_DMA */ #endif /* BSP_QSPI_USING_DMA */
#define QSPI_DMA_CLK_ENABLE __HAL_RCC_DMA2_CLK_ENABLE()
#define QSPI_IRQn QUADSPI_IRQn #define QSPI_IRQn QUADSPI_IRQn
#define QSPI_DMA_IRQn DMA2_Stream7_IRQn
#define QSPI_IRQHandler QUADSPI_IRQHandler #define QSPI_IRQHandler QUADSPI_IRQHandler
#define QSPI_DMA_IRQHandler DMA2_Stream7_IRQHandler
#endif /* __QSPI_CONFIG_H__ */ #endif /* __QSPI_CONFIG_H__ */
...@@ -14,120 +14,173 @@ ...@@ -14,120 +14,173 @@
#include <rtthread.h> #include <rtthread.h>
#ifdef BSP_USING_SPI1 #ifdef BSP_USING_SPI1
#define SPI1_BUS_CONFIG \ #ifndef SPI1_BUS_CONFIG
{ \ #define SPI1_BUS_CONFIG \
.Instance = SPI1, \ { \
.bus_name = "spi1", \ .Instance = SPI1, \
.dma_rx.dma_rcc = RCC_AHB1ENR_DMA2EN, \ .bus_name = "spi1", \
.dma_tx.dma_rcc = RCC_AHB1ENR_DMA2EN, \
.dma_rx.Instance = DMA2_Stream2, \
.dma_rx.channel = DMA_CHANNEL_3, \
.dma_rx.dma_irq = DMA2_Stream2_IRQn, \
.dma_tx.Instance = DMA2_Stream3, \
.dma_tx.channel = DMA_CHANNEL_3, \
.dma_tx.dma_irq = DMA2_Stream3_IRQn, \
} }
#endif /* SPI1_BUS_CONFIG */
#define SPI1_DMA_RX_IRQHandler DMA2_Stream2_IRQHandler #endif /* BSP_USING_SPI1 */
#define SPI1_DMA_TX_IRQHandler DMA2_Stream3_IRQHandler
#endif #ifdef BSP_SPI1_TX_USING_DMA
#ifndef SPI1_TX_DMA_CONFIG
#define SPI1_TX_DMA_CONFIG \
{ \
.dma_rcc = SPI1_TX_DMA_RCC, \
.Instance = SPI1_TX_DMA_INSTANCE, \
.channel = SPI1_TX_DMA_CHANNEL, \
.dma_irq = SPI1_TX_DMA_IRQ, \
}
#endif /* SPI1_TX_DMA_CONFIG */
#endif /* BSP_SPI1_TX_USING_DMA */
#ifdef BSP_SPI1_RX_USING_DMA
#ifndef SPI1_RX_DMA_CONFIG
#define SPI1_RX_DMA_CONFIG \
{ \
.dma_rcc = SPI1_RX_DMA_RCC, \
.Instance = SPI1_RX_DMA_INSTANCE, \
.channel = SPI1_RX_DMA_CHANNEL, \
.dma_irq = SPI1_RX_DMA_IRQ, \
}
#endif /* SPI1_RX_DMA_CONFIG */
#endif /* BSP_SPI1_RX_USING_DMA */
#ifdef BSP_USING_SPI2 #ifdef BSP_USING_SPI2
#define SPI2_BUS_CONFIG \ #ifndef SPI2_BUS_CONFIG
{ \ #define SPI2_BUS_CONFIG \
.Instance = SPI2, \ { \
.bus_name = "spi2", \ .Instance = SPI2, \
.dma_rx.dma_rcc = RCC_AHB1ENR_DMA1EN, \ .bus_name = "spi2", \
.dma_tx.dma_rcc = RCC_AHB1ENR_DMA1EN, \
.dma_rx.Instance = DMA1_Stream3, \
.dma_rx.channel = DMA_CHANNEL_0, \
.dma_rx.dma_irq = DMA1_Stream3_IRQn, \
.dma_tx.Instance = DMA1_Stream4, \
.dma_tx.channel = DMA_CHANNEL_0, \
.dma_tx.dma_irq = DMA1_Stream4_IRQn, \
} }
#endif /* SPI2_BUS_CONFIG */
#define SPI2_DMA_RX_IRQHandler DMA1_Stream3_IRQHandler #endif /* BSP_USING_SPI2 */
#define SPI2_DMA_TX_IRQHandler DMA1_Stream4_IRQHandler
#endif #ifdef BSP_SPI2_TX_USING_DMA
#ifndef SPI2_TX_DMA_CONFIG
#define SPI2_TX_DMA_CONFIG \
{ \
.dma_rcc = SPI2_TX_DMA_RCC, \
.Instance = SPI2_TX_DMA_INSTANCE, \
.channel = SPI2_TX_DMA_CHANNEL, \
.dma_irq = SPI2_TX_DMA_IRQ, \
}
#endif /* SPI2_TX_DMA_CONFIG */
#endif /* BSP_SPI2_TX_USING_DMA */
#ifdef BSP_SPI2_RX_USING_DMA
#ifndef SPI2_RX_DMA_CONFIG
#define SPI2_RX_DMA_CONFIG \
{ \
.dma_rcc = SPI2_RX_DMA_RCC, \
.Instance = SPI2_RX_DMA_INSTANCE, \
.channel = SPI2_RX_DMA_CHANNEL, \
.dma_irq = SPI2_RX_DMA_IRQ, \
}
#endif /* SPI2_RX_DMA_CONFIG */
#endif /* BSP_SPI2_RX_USING_DMA */
#ifdef BSP_USING_SPI3 #ifdef BSP_USING_SPI3
#define SPI3_BUS_CONFIG \ #ifndef SPI3_BUS_CONFIG
{ \ #define SPI3_BUS_CONFIG \
.Instance = SPI3, \ { \
.bus_name = "spi3", \ .Instance = SPI3, \
.dma_rx.dma_rcc = RCC_AHB1ENR_DMA1EN, \ .bus_name = "spi3", \
.dma_tx.dma_rcc = RCC_AHB1ENR_DMA1EN, \
.dma_rx.Instance = DMA1_Stream0, \
.dma_rx.channel = DMA_CHANNEL_0, \
.dma_rx.dma_irq = DMA1_Stream0_IRQn, \
.dma_tx.Instance = DMA1_Stream7, \
.dma_tx.channel = DMA_CHANNEL_0, \
.dma_tx.dma_irq = DMA1_Stream7_IRQn, \
} }
#endif /* SPI3_BUS_CONFIG */
#define SPI3_DMA_RX_IRQHandler DMA1_Stream0_IRQHandler #endif /* BSP_USING_SPI3 */
#define SPI3_DMA_TX_IRQHandler DMA1_Stream7_IRQHandler
#endif #ifdef BSP_SPI3_TX_USING_DMA
#ifndef SPI3_TX_DMA_CONFIG
#define SPI3_TX_DMA_CONFIG \
{ \
.dma_rcc = SPI3_TX_DMA_RCC, \
.Instance = SPI3_TX_DMA_INSTANCE, \
.channel = SPI3_TX_DMA_CHANNEL, \
.dma_irq = SPI3_TX_DMA_IRQ, \
}
#endif /* SPI3_TX_DMA_CONFIG */
#endif /* BSP_SPI3_TX_USING_DMA */
#ifdef BSP_SPI3_RX_USING_DMA
#ifndef SPI3_RX_DMA_CONFIG
#define SPI3_RX_DMA_CONFIG \
{ \
.dma_rcc = SPI3_RX_DMA_RCC, \
.Instance = SPI3_RX_DMA_INSTANCE, \
.channel = SPI3_RX_DMA_CHANNEL, \
.dma_irq = SPI3_RX_DMA_IRQ, \
}
#endif /* SPI3_RX_DMA_CONFIG */
#endif /* BSP_SPI3_RX_USING_DMA */
#ifdef BSP_USING_SPI4 #ifdef BSP_USING_SPI4
#define SPI4_BUS_CONFIG \ #ifndef SPI4_BUS_CONFIG
{ \ #define SPI4_BUS_CONFIG \
.Instance = SPI4, \ { \
.bus_name = "spi4", \ .Instance = SPI4, \
.dma_rx.dma_rcc = RCC_AHB1ENR_DMA2EN, \ .bus_name = "spi4", \
.dma_tx.dma_rcc = RCC_AHB1ENR_DMA2EN, \
.dma_rx.Instance = DMA2_Stream0, \
.dma_rx.channel = DMA_CHANNEL_4, \
.dma_rx.dma_irq = DMA2_Stream0_IRQn, \
.dma_tx.Instance = DMA2_Stream1, \
.dma_tx.channel = DMA_CHANNEL_4, \
.dma_tx.dma_irq = DMA2_Stream1_IRQn, \
} }
#endif /* SPI4_BUS_CONFIG */
#define SPI4_DMA_RX_IRQHandler DMA2_Stream0_IRQHandler #endif /* BSP_USING_SPI4 */
#define SPI4_DMA_TX_IRQHandler DMA2_Stream1_IRQHandler
#endif #ifdef BSP_SPI4_TX_USING_DMA
#ifndef SPI4_TX_DMA_CONFIG
#define SPI4_TX_DMA_CONFIG \
{ \
.dma_rcc = SPI4_TX_DMA_RCC, \
.Instance = SPI4_TX_DMA_INSTANCE, \
.channel = SPI4_TX_DMA_CHANNEL, \
.dma_irq = SPI4_TX_DMA_IRQ, \
}
#endif /* SPI4_TX_DMA_CONFIG */
#endif /* BSP_SPI4_TX_USING_DMA */
#ifdef BSP_SPI4_RX_USING_DMA
#ifndef SPI4_RX_DMA_CONFIG
#define SPI4_RX_DMA_CONFIG \
{ \
.dma_rcc = SPI4_RX_DMA_RCC, \
.Instance = SPI4_RX_DMA_INSTANCE, \
.channel = SPI4_RX_DMA_CHANNEL, \
.dma_irq = SPI4_RX_DMA_IRQ, \
}
#endif /* SPI4_RX_DMA_CONFIG */
#endif /* BSP_SPI4_RX_USING_DMA */
#ifdef BSP_USING_SPI5 #ifdef BSP_USING_SPI5
#define SPI5_BUS_CONFIG \ #ifndef SPI5_BUS_CONFIG
{ \ #define SPI5_BUS_CONFIG \
.Instance = SPI5, \ { \
.bus_name = "spi5", \ .Instance = SPI5, \
.dma_rx.dma_rcc = RCC_AHB1ENR_DMA2EN, \ .bus_name = "spi5", \
.dma_tx.dma_rcc = RCC_AHB1ENR_DMA2EN, \
.dma_rx.Instance = DMA2_Stream3, \
.dma_rx.channel = DMA_CHANNEL_2, \
.dma_rx.dma_irq = DMA2_Stream3_IRQn, \
.dma_tx.Instance = DMA2_Stream4, \
.dma_tx.channel = DMA_CHANNEL_2, \
.dma_tx.dma_irq = DMA2_Stream4_IRQn, \
} }
#endif /* SPI5_BUS_CONFIG */
#define SPI5_DMA_RX_IRQHandler DMA2_Stream3_IRQHandler #endif /* BSP_USING_SPI5 */
#define SPI5_DMA_TX_IRQHandler DMA2_Stream4_IRQHandler
#endif #ifdef BSP_SPI5_TX_USING_DMA
#ifndef SPI5_TX_DMA_CONFIG
#ifdef BSP_USING_SPI6 #define SPI5_TX_DMA_CONFIG \
#define SPI5_BUS_CONFIG \ { \
{ \ .dma_rcc = SPI5_TX_DMA_RCC, \
.Instance = SPI6, \ .Instance = SPI5_TX_DMA_INSTANCE, \
.bus_name = "spi6", \ .channel = SPI5_TX_DMA_CHANNEL, \
.dma_rx.dma_rcc = RCC_AHB1ENR_DMA2EN, \ .dma_irq = SPI5_TX_DMA_IRQ, \
.dma_tx.dma_rcc = RCC_AHB1ENR_DMA2EN, \
.dma_rx.Instance = DMA2_Stream6, \
.dma_rx.channel = DMA_CHANNEL_1, \
.dma_rx.dma_irq = DMA2_Stream6_IRQn, \
.dma_tx.Instance = DMA2_Stream5, \
.dma_tx.channel = DMA_CHANNEL_1, \
.dma_tx.dma_irq = DMA2_Stream5_IRQn, \
} }
#endif /* SPI5_TX_DMA_CONFIG */
#define SPI6_DMA_RX_IRQHandler DMA2_Stream6_IRQHandler #endif /* BSP_SPI5_TX_USING_DMA */
#define SPI6_DMA_TX_IRQHandler DMA2_Stream5_IRQHandler
#endif #ifdef BSP_SPI5_RX_USING_DMA
#ifndef SPI5_RX_DMA_CONFIG
#define SPI5_RX_DMA_CONFIG \
{ \
.dma_rcc = SPI5_RX_DMA_RCC, \
.Instance = SPI5_RX_DMA_INSTANCE, \
.channel = SPI5_RX_DMA_CHANNEL, \
.dma_irq = SPI5_RX_DMA_IRQ, \
}
#endif /* SPI5_RX_DMA_CONFIG */
#endif /* BSP_SPI5_RX_USING_DMA */
#endif /*__SPI_CONFIG_H__ */ #endif /*__SPI_CONFIG_H__ */
...@@ -5,7 +5,8 @@ ...@@ -5,7 +5,8 @@
* *
* Change Logs: * Change Logs:
* Date Author Notes * Date Author Notes
* 2018-10-30 SummerGift change to new framework * 2018-10-30 SummerGift first version
* 2019-01-05 zylx modify dma support
*/ */
#ifndef __UART_CONFIG_H__ #ifndef __UART_CONFIG_H__
...@@ -14,78 +15,118 @@ ...@@ -14,78 +15,118 @@
#include <rtthread.h> #include <rtthread.h>
#if defined(BSP_USING_UART1) #if defined(BSP_USING_UART1)
#define UART1_CONFIG \ #ifndef UART1_CONFIG
{ \ #define UART1_CONFIG \
.name = "uart1", \ { \
.Instance = USART1, \ .name = "uart1", \
.irq_type = USART1_IRQn, \ .Instance = USART1, \
.dma.stream_channel.Instance = DMA2_Stream5, \ .irq_type = USART1_IRQn, \
.dma.stream_channel.channel = DMA_CHANNEL_4, \
.dma_rcc = RCC_AHB1ENR_DMA2EN, \
.dma_irq = DMA2_Stream5_IRQn, \
} }
#endif /* UART1_CONFIG */
#endif /* BSP_USING_UART1 */
#define USART1_RX_DMA_ISR DMA2_Stream5_IRQHandler #if defined(BSP_UART1_RX_USING_DMA)
#endif #ifndef UART1_DMA_CONFIG
#define UART1_DMA_CONFIG \
{ \
.Instance = USART1_RX_DMA_INSTANCE, \
.channel = USART1_RX_DMA_CHANNEL, \
.dma_rcc = USART1_RX_DMA_RCC, \
.dma_irq = USART1_RX_DMA_IRQ, \
}
#endif /* UART1_DMA_CONFIG */
#endif /* BSP_UART1_RX_USING_DMA */
#if defined(BSP_USING_UART2) #if defined(BSP_USING_UART2)
#define UART2_CONFIG \ #ifndef UART2_CONFIG
{ \ #define UART2_CONFIG \
.name = "uart2", \ { \
.Instance = USART2, \ .name = "uart2", \
.irq_type = USART2_IRQn, \ .Instance = USART2, \
.dma.stream_channel.Instance = DMA1_Stream5, \ .irq_type = USART2_IRQn, \
.dma.stream_channel.channel = DMA_CHANNEL_4, \
.dma_rcc = RCC_AHB1ENR_DMA1EN, \
.dma_irq = DMA1_Stream5_IRQn, \
} }
#endif /* UART2_CONFIG */
#endif /* BSP_USING_UART2 */
#define USART2_RX_DMA_ISR DMA1_Stream5_IRQHandler #if defined(BSP_UART2_RX_USING_DMA)
#endif #ifndef UART2_DMA_CONFIG
#define UART2_DMA_CONFIG \
{ \
.Instance = USART2_RX_DMA_INSTANCE, \
.channel = USART2_RX_DMA_CHANNEL, \
.dma_rcc = USART2_RX_DMA_RCC, \
.dma_irq = USART2_RX_DMA_IRQ, \
}
#endif /* UART2_DMA_CONFIG */
#endif /* BSP_UART2_RX_USING_DMA */
#if defined(BSP_USING_UART3) #if defined(BSP_USING_UART3)
#define UART3_CONFIG \ #ifndef UART3_CONFIG
{ \ #define UART3_CONFIG \
.name = "uart3", \ { \
.Instance = USART3, \ .name = "uart3", \
.irq_type = USART3_IRQn, \ .Instance = USART3, \
.dma.stream_channel.Instance = DMA1_Stream1, \ .irq_type = USART3_IRQn, \
.dma.stream_channel.channel = DMA_CHANNEL_4, \
.dma_rcc = RCC_AHB1ENR_DMA1EN, \
.dma_irq = DMA1_Stream1_IRQn, \
} }
#endif /* UART3_CONFIG */
#endif /* BSP_USING_UART3 */
#define USART3_RX_DMA_ISR DMA1_Stream1_IRQHandler #if defined(BSP_UART3_RX_USING_DMA)
#endif #ifndef UART3_DMA_CONFIG
#define UART3_DMA_CONFIG \
{ \
.Instance = USART3_RX_DMA_INSTANCE, \
.channel = USART3_RX_DMA_CHANNEL, \
.dma_rcc = USART3_RX_DMA_RCC, \
.dma_irq = USART3_RX_DMA_IRQ, \
}
#endif /* UART3_DMA_CONFIG */
#endif /* BSP_UART3_RX_USING_DMA */
#if defined(BSP_USING_UART4) #if defined(BSP_USING_UART4)
#define UART4_CONFIG \ #ifndef UART4_CONFIG
{ \ #define UART4_CONFIG \
.name = "uart4", \ { \
.Instance = UART4, \ .name = "uart4", \
.irq_type = UART4_IRQn, \ .Instance = UART4, \
.dma.stream_channel.Instance = DMA1_Stream2, \ .irq_type = UART4_IRQn, \
.dma.stream_channel.channel = DMA_CHANNEL_4, \
.dma_rcc = RCC_AHB1ENR_DMA1EN, \
.dma_irq = DMA1_Stream2_IRQn, \
} }
#endif /* UART4_CONFIG */
#endif /* BSP_USING_UART4 */
#define USART4_RX_DMA_ISR DMA1_Stream2_IRQHandler #if defined(BSP_UART4_RX_USING_DMA)
#endif #ifndef UART4_DMA_CONFIG
#define UART4_DMA_CONFIG \
{ \
.Instance = USART4_RX_DMA_INSTANCE, \
.channel = USART4_RX_DMA_CHANNEL, \
.dma_rcc = USART4_RX_DMA_RCC, \
.dma_irq = USART4_RX_DMA_IRQ, \
}
#endif /* UART4_DMA_CONFIG */
#endif /* BSP_UART4_RX_USING_DMA */
#if defined(BSP_USING_UART5) #if defined(BSP_USING_UART5)
#define UART5_CONFIG \ #ifndef UART5_CONFIG
{ \ #define UART5_CONFIG \
.name = "uart5", \ { \
.Instance = UART5, \ .name = "uart5", \
.irq_type = UART5_IRQn, \ .Instance = UART5, \
.dma.stream_channel.Instance = DMA1_Stream0, \ .irq_type = UART5_IRQn, \
.dma.stream_channel.channel = DMA_CHANNEL_4, \
.dma_rcc = RCC_AHB1ENR_DMA1EN, \
.dma_irq = DMA1_Stream0_IRQn, \
} }
#endif /* UART5_CONFIG */
#endif /* BSP_USING_UART5 */
#define USART5_RX_DMA_ISR DMA1_Stream0_IRQHandler #if defined(BSP_UART5_RX_USING_DMA)
#endif #ifndef UART5_DMA_CONFIG
#define UART5_DMA_CONFIG \
{ \
.Instance = USART5_RX_DMA_INSTANCE, \
.channel = USART5_RX_DMA_CHANNEL, \
.dma_rcc = USART5_RX_DMA_RCC, \
.dma_irq = USART5_RX_DMA_IRQ, \
}
#endif /* UART5_DMA_CONFIG */
#endif /* BSP_UART5_RX_USING_DMA */
#endif #endif
...@@ -29,8 +29,8 @@ ...@@ -29,8 +29,8 @@
#ifndef QSPI_DMA_CONFIG #ifndef QSPI_DMA_CONFIG
#define QSPI_DMA_CONFIG \ #define QSPI_DMA_CONFIG \
{ \ { \
.Instance = DMA1_Channel5, \ .Instance = QSPI_DMA_INSTANCE, \
.Init.Request = DMA_REQUEST_5, \ .Init.Request = QSPI_DMA_CHANNEL, \
.Init.Direction = DMA_PERIPH_TO_MEMORY, \ .Init.Direction = DMA_PERIPH_TO_MEMORY, \
.Init.PeriphInc = DMA_PINC_DISABLE, \ .Init.PeriphInc = DMA_PINC_DISABLE, \
.Init.MemInc = DMA_MINC_ENABLE, \ .Init.MemInc = DMA_MINC_ENABLE, \
...@@ -42,10 +42,7 @@ ...@@ -42,10 +42,7 @@
#endif /* QSPI_DMA_CONFIG */ #endif /* QSPI_DMA_CONFIG */
#endif /* BSP_QSPI_USING_DMA */ #endif /* BSP_QSPI_USING_DMA */
#define QSPI_DMA_CLK_ENABLE __HAL_RCC_DMA1_CLK_ENABLE()
#define QSPI_IRQn QUADSPI_IRQn #define QSPI_IRQn QUADSPI_IRQn
#define QSPI_DMA_IRQn DMA1_Channel5_IRQn
#define QSPI_IRQHandler QUADSPI_IRQHandler #define QSPI_IRQHandler QUADSPI_IRQHandler
#define QSPI_DMA_IRQHandler DMA1_Channel5_IRQHandler
#endif /* __QSPI_CONFIG_H__ */ #endif /* __QSPI_CONFIG_H__ */
...@@ -14,22 +14,38 @@ ...@@ -14,22 +14,38 @@
#include <rtthread.h> #include <rtthread.h>
#ifdef BSP_USING_SPI1 #ifdef BSP_USING_SPI1
#define SPI1_BUS_CONFIG \ #ifndef SPI1_BUS_CONFIG
{ \ #define SPI1_BUS_CONFIG \
.Instance = SPI1, \ { \
.bus_name = "spi1", \ .Instance = SPI1, \
.dma_rx.dma_rcc = RCC_AHB1ENR_DMA1EN, \ .bus_name = "spi1", \
.dma_tx.dma_rcc = RCC_AHB1ENR_DMA1EN, \
.dma_rx.Instance = DMA1_Channel2, \
.dma_rx.request = DMA_REQUEST_1, \
.dma_rx.dma_irq = DMA1_Channel2_IRQn, \
.dma_tx.Instance = DMA1_Channel3, \
.dma_tx.request = DMA_REQUEST_1, \
.dma_tx.dma_irq = DMA1_Channel3_IRQn, \
} }
#define SPI1_DMA_RX_IRQHandler DMA1_Channel2_IRQHandler #endif /* SPI1_BUS_CONFIG */
#define SPI1_DMA_TX_IRQHandler DMA1_Channel3_IRQHandler #endif /* BSP_USING_SPI1 */
#endif
#ifdef BSP_SPI1_TX_USING_DMA
#ifndef SPI1_TX_DMA_CONFIG
#define SPI1_TX_DMA_CONFIG \
{ \
.dma_rcc = SPI1_TX_DMA_RCC, \
.Instance = SPI1_TX_DMA_INSTANCE, \
.request = SPI1_TX_DMA_REQUEST, \
.dma_irq = SPI1_TX_DMA_IRQ, \
}
#endif /* SPI1_TX_DMA_CONFIG */
#endif /* BSP_SPI1_TX_USING_DMA */
#ifdef BSP_SPI1_RX_USING_DMA
#ifndef SPI1_RX_DMA_CONFIG
#define SPI1_RX_DMA_CONFIG \
{ \
.dma_rcc = SPI1_RX_DMA_RCC, \
.Instance = SPI1_RX_DMA_INSTANCE, \
.request = SPI1_RX_DMA_REQUEST, \
.dma_irq = SPI1_RX_DMA_IRQ, \
}
#endif /* SPI1_RX_DMA_CONFIG */
#endif /* BSP_SPI1_RX_USING_DMA */
#ifdef BSP_USING_SPI2 #ifdef BSP_USING_SPI2
#define SPI2_BUS_CONFIG \ #define SPI2_BUS_CONFIG \
...@@ -45,8 +61,7 @@ ...@@ -45,8 +61,7 @@
.dma_tx.request = DMA_REQUEST_1, \ .dma_tx.request = DMA_REQUEST_1, \
.dma_tx.dma_irq = DMA1_Channel5_IRQn, \ .dma_tx.dma_irq = DMA1_Channel5_IRQn, \
} }
#define SPI2_DMA_RX_IRQHandler DMA1_Channel4_IRQHandler
#define SPI2_DMA_TX_IRQHandler DMA1_Channel5_IRQHandler
#endif #endif
#ifdef BSP_USING_SPI3 #ifdef BSP_USING_SPI3
...@@ -63,8 +78,7 @@ ...@@ -63,8 +78,7 @@
.dma_tx.request = DMA_REQUEST_3, \ .dma_tx.request = DMA_REQUEST_3, \
.dma_tx.dma_irq = DMA2_Channel2_IRQn, \ .dma_tx.dma_irq = DMA2_Channel2_IRQn, \
} }
#define SPI3_DMA_RX_IRQHandler DMA2_Channel1_IRQHandler
#define SPI3_DMA_TX_IRQHandler DMA2_Channel2_IRQHandler
#endif #endif
#endif /*__SPI_CONFIG_H__ */ #endif /*__SPI_CONFIG_H__ */
...@@ -14,35 +14,49 @@ ...@@ -14,35 +14,49 @@
#include <rtthread.h> #include <rtthread.h>
#if defined(BSP_USING_UART1) #if defined(BSP_USING_UART1)
#ifndef UART1_CONFIG
#define UART1_CONFIG \ #define UART1_CONFIG \
{ \ { \
.name = "uart1", \ .name = "uart1", \
.Instance = USART1, \ .Instance = USART1, \
.irq_type = USART1_IRQn, \ .irq_type = USART1_IRQn, \
.dma.channel_request.Instance = DMA2_Channel7, \
.dma.channel_request.request = DMA_REQUEST_2, \
.dma_rcc = RCC_AHB1ENR_DMA2EN, \
.dma_irq = DMA2_Channel7_IRQn, \
} }
#endif /* UART1_CONFIG */
#define USART1_RX_DMA_ISR DMA2_Channel7_IRQHandler #endif /* BSP_USING_UART1 */
#endif
#if defined(BSP_UART1_RX_USING_DMA)
#ifndef UART1_DMA_CONFIG
#define UART1_DMA_CONFIG \
{ \
.Instance = USART1_RX_DMA_INSTANCE, \
.request = USART1_RX_DMA_REQUEST, \
.dma_rcc = USART1_RX_DMA_RCC, \
.dma_irq = USART1_RX_DMA_IRQ, \
}
#endif /* UART1_DMA_CONFIG */
#endif /* BSP_UART1_RX_USING_DMA */
#if defined(BSP_USING_UART2) #if defined(BSP_USING_UART2)
#ifndef UART2_CONFIG
#define UART2_CONFIG \ #define UART2_CONFIG \
{ \ { \
.name = "uart2", \ .name = "uart2", \
.Instance = USART2, \ .Instance = USART2, \
.irq_type = USART2_IRQn, \ .irq_type = USART2_IRQn, \
.dma.channel_request.Instance = DMA1_Channel6, \
.dma.channel_request.request = DMA_REQUEST_2, \
.dma_rcc = RCC_AHB1SMENR_DMA1SMEN, \
.dma_irq = DMA1_Channel6_IRQn, \
} }
#endif /* UART2_CONFIG */
#define USART2_RX_DMA_ISR DMA1_Channel6_IRQHandler #endif /* BSP_USING_UART2 */
#endif
#if defined(BSP_UART2_RX_USING_DMA)
#ifndef UART2_DMA_CONFIG
#define UART2_DMA_CONFIG \
{ \
.Instance = USART2_RX_DMA_INSTANCE, \
.request = USART2_RX_DMA_REQUEST, \
.dma_rcc = USART2_RX_DMA_RCC, \
.dma_irq = USART2_RX_DMA_IRQ, \
}
#endif /* UART2_DMA_CONFIG */
#endif /* BSP_UART2_RX_USING_DMA */
#endif #endif
...@@ -15,12 +15,14 @@ ...@@ -15,12 +15,14 @@
#include <rtthread.h> #include <rtthread.h>
#if defined(SOC_SERIES_STM32F0) #if defined(SOC_SERIES_STM32F0)
#include "f0/dma_config.h"
#include "f0/uart_config.h" #include "f0/uart_config.h"
#include "f0/spi_config.h" #include "f0/spi_config.h"
#include "f0/tim_config.h" #include "f0/tim_config.h"
#include "f0/pwm_config.h" #include "f0/pwm_config.h"
#include "f0/adc_config.h" #include "f0/adc_config.h"
#elif defined(SOC_SERIES_STM32F1) #elif defined(SOC_SERIES_STM32F1)
#include "f1/dma_config.h"
#include "f1/uart_config.h" #include "f1/uart_config.h"
#include "f1/spi_config.h" #include "f1/spi_config.h"
#include "f1/adc_config.h" #include "f1/adc_config.h"
...@@ -28,6 +30,7 @@ ...@@ -28,6 +30,7 @@
#include "f1/sdio_config.h" #include "f1/sdio_config.h"
#include "f1/pwm_config.h" #include "f1/pwm_config.h"
#elif defined(SOC_SERIES_STM32F4) #elif defined(SOC_SERIES_STM32F4)
#include "f4/dma_config.h"
#include "f4/uart_config.h" #include "f4/uart_config.h"
#include "f4/spi_config.h" #include "f4/spi_config.h"
#include "f4/adc_config.h" #include "f4/adc_config.h"
...@@ -35,6 +38,7 @@ ...@@ -35,6 +38,7 @@
#include "f4/sdio_config.h" #include "f4/sdio_config.h"
#include "f4/pwm_config.h" #include "f4/pwm_config.h"
#elif defined(SOC_SERIES_STM32F7) #elif defined(SOC_SERIES_STM32F7)
#include "f7/dma_config.h"
#include "f7/uart_config.h" #include "f7/uart_config.h"
#include "f7/spi_config.h" #include "f7/spi_config.h"
#include "f7/qspi_config.h" #include "f7/qspi_config.h"
...@@ -43,6 +47,7 @@ ...@@ -43,6 +47,7 @@
#include "f7/sdio_config.h" #include "f7/sdio_config.h"
#include "f7/pwm_config.h" #include "f7/pwm_config.h"
#elif defined(SOC_SERIES_STM32L4) #elif defined(SOC_SERIES_STM32L4)
#include "l4/dma_config.h"
#include "l4/uart_config.h" #include "l4/uart_config.h"
#include "l4/spi_config.h" #include "l4/spi_config.h"
#include "l4/qspi_config.h" #include "l4/qspi_config.h"
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
* *
* Change Logs: * Change Logs:
* Date Author Notes * Date Author Notes
* 2018-11-10 SummerGift change to new framework * 2018-11-10 SummerGift first version
*/ */
#ifndef __DRV_DMA_H_ #ifndef __DRV_DMA_H_
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
#include <rthw.h> #include <rthw.h>
#include <drv_common.h> #include <drv_common.h>
#if defined(SOC_SERIES_STM32F0) || (SOC_SERIES_STM32F1) || defined(SOC_SERIES_STM32L4) #if defined(SOC_SERIES_STM32F0) || defined(SOC_SERIES_STM32F1) || defined(SOC_SERIES_STM32L4)
#define DMA_INSTANCE_TYPE DMA_Channel_TypeDef #define DMA_INSTANCE_TYPE DMA_Channel_TypeDef
#elif defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) #elif defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7)
#define DMA_INSTANCE_TYPE DMA_Stream_TypeDef #define DMA_INSTANCE_TYPE DMA_Stream_TypeDef
...@@ -36,5 +36,4 @@ struct dma_config { ...@@ -36,5 +36,4 @@ struct dma_config {
#endif #endif
}; };
#endif /*__DRV_DMA_H_ */ #endif /*__DRV_DMA_H_ */
...@@ -92,11 +92,19 @@ static int stm32_qspi_init(struct rt_qspi_device *device, struct rt_qspi_configu ...@@ -92,11 +92,19 @@ static int stm32_qspi_init(struct rt_qspi_device *device, struct rt_qspi_configu
/* QSPI interrupts must be enabled when using the HAL_QSPI_Receive_DMA */ /* QSPI interrupts must be enabled when using the HAL_QSPI_Receive_DMA */
HAL_NVIC_SetPriority(QSPI_IRQn, 0, 0); HAL_NVIC_SetPriority(QSPI_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(QSPI_IRQn); HAL_NVIC_EnableIRQ(QSPI_IRQn);
HAL_NVIC_SetPriority(QSPI_DMA_IRQn, 0, 0); HAL_NVIC_SetPriority(QSPI_DMA_IRQ, 0, 0);
HAL_NVIC_EnableIRQ(QSPI_DMA_IRQn); HAL_NVIC_EnableIRQ(QSPI_DMA_IRQ);
/* init QSPI DMA */ /* init QSPI DMA */
QSPI_DMA_CLK_ENABLE; if(QSPI_DMA_RCC == RCC_AHB1ENR_DMA1EN)
{
__HAL_RCC_DMA1_CLK_ENABLE();
}
else
{
__HAL_RCC_DMA2_CLK_ENABLE();
}
HAL_DMA_DeInit(qspi_bus->QSPI_Handler.hdma); HAL_DMA_DeInit(qspi_bus->QSPI_Handler.hdma);
DMA_HandleTypeDef hdma_quadspi_config = QSPI_DMA_CONFIG; DMA_HandleTypeDef hdma_quadspi_config = QSPI_DMA_CONFIG;
qspi_bus->hdma_quadspi = hdma_quadspi_config; qspi_bus->hdma_quadspi = hdma_quadspi_config;
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
* *
* Change Logs: * Change Logs:
* Date Author Notes * Date Author Notes
* 2018-11-5 SummerGift change to new framework * 2018-11-5 SummerGift first version
*/ */
#ifndef __DRV_SPI_H_ #ifndef __DRV_SPI_H_
...@@ -29,7 +29,7 @@ struct stm32_spi_config ...@@ -29,7 +29,7 @@ struct stm32_spi_config
{ {
SPI_TypeDef *Instance; SPI_TypeDef *Instance;
char *bus_name; char *bus_name;
struct dma_config dma_rx, dma_tx; struct dma_config *dma_rx, *dma_tx;
}; };
struct stm32_spi_device struct stm32_spi_device
...@@ -39,21 +39,23 @@ struct stm32_spi_device ...@@ -39,21 +39,23 @@ struct stm32_spi_device
char *device_name; char *device_name;
}; };
#define SPI_USING_RX_DMA_FLAG (1<<0)
#define SPI_USING_TX_DMA_FLAG (1<<1)
/* stm32 spi dirver class */ /* stm32 spi dirver class */
struct stm32_spi struct stm32_spi
{ {
SPI_HandleTypeDef handle; SPI_HandleTypeDef handle;
const struct stm32_spi_config *config; struct stm32_spi_config *config;
struct rt_spi_configuration *cfg; struct rt_spi_configuration *cfg;
#ifdef BSP_SPI_USING_DMA
struct struct
{ {
DMA_HandleTypeDef handle_rx; DMA_HandleTypeDef handle_rx;
DMA_HandleTypeDef handle_tx; DMA_HandleTypeDef handle_tx;
} dma; } dma;
#endif
rt_uint8_t spi_dma_flag;
struct rt_spi_bus spi_bus; struct rt_spi_bus spi_bus;
}; };
......
...@@ -46,7 +46,7 @@ enum ...@@ -46,7 +46,7 @@ enum
#endif #endif
}; };
static const struct stm32_uart_config uart_config[] = static struct stm32_uart_config uart_config[] =
{ {
#ifdef BSP_USING_UART1 #ifdef BSP_USING_UART1
UART1_CONFIG, UART1_CONFIG,
...@@ -65,7 +65,7 @@ static const struct stm32_uart_config uart_config[] = ...@@ -65,7 +65,7 @@ static const struct stm32_uart_config uart_config[] =
#endif #endif
}; };
static struct stm32_uart uart_obj[sizeof(uart_config) / sizeof(uart_config[0])]; static struct stm32_uart uart_obj[sizeof(uart_config) / sizeof(uart_config[0])] = {0};
static rt_err_t stm32_configure(struct rt_serial_device *serial, struct serial_configure *cfg) static rt_err_t stm32_configure(struct rt_serial_device *serial, struct serial_configure *cfg)
{ {
...@@ -239,7 +239,7 @@ static void uart_isr(struct rt_serial_device *serial) ...@@ -239,7 +239,7 @@ static void uart_isr(struct rt_serial_device *serial)
UART_INSTANCE_CLEAR_FUNCTION(&(uart->handle), UART_FLAG_RXNE); UART_INSTANCE_CLEAR_FUNCTION(&(uart->handle), UART_FLAG_RXNE);
} }
#ifdef RT_SERIAL_USING_DMA #ifdef RT_SERIAL_USING_DMA
else if ((__HAL_UART_GET_FLAG(&(uart->handle), UART_FLAG_IDLE) != RESET) && else if ((uart->uart_dma_flag) && (__HAL_UART_GET_FLAG(&(uart->handle), UART_FLAG_IDLE) != RESET) &&
(__HAL_UART_GET_IT_SOURCE(&(uart->handle), UART_IT_IDLE) != RESET)) (__HAL_UART_GET_IT_SOURCE(&(uart->handle), UART_IT_IDLE) != RESET))
{ {
level = rt_hw_interrupt_disable(); level = rt_hw_interrupt_disable();
...@@ -309,8 +309,8 @@ void USART1_IRQHandler(void) ...@@ -309,8 +309,8 @@ void USART1_IRQHandler(void)
/* leave interrupt */ /* leave interrupt */
rt_interrupt_leave(); rt_interrupt_leave();
} }
#if defined(RT_SERIAL_USING_DMA) && defined(USART1_RX_DMA_ISR) #if defined(RT_SERIAL_USING_DMA) && defined(BSP_UART1_RX_USING_DMA)
void USART1_RX_DMA_ISR(void) void USART1_DMA_RX_IRQHandler(void)
{ {
/* enter interrupt */ /* enter interrupt */
rt_interrupt_enter(); rt_interrupt_enter();
...@@ -320,7 +320,7 @@ void USART1_RX_DMA_ISR(void) ...@@ -320,7 +320,7 @@ void USART1_RX_DMA_ISR(void)
/* leave interrupt */ /* leave interrupt */
rt_interrupt_leave(); rt_interrupt_leave();
} }
#endif /* defined(RT_SERIAL_USING_DMA) && defined(USART1_RX_DMA_ISR) */ #endif /* defined(RT_SERIAL_USING_DMA) && defined(BSP_UART1_RX_USING_DMA) */
#endif /* BSP_USING_UART1 */ #endif /* BSP_USING_UART1 */
#if defined(BSP_USING_UART2) #if defined(BSP_USING_UART2)
...@@ -334,8 +334,8 @@ void USART2_IRQHandler(void) ...@@ -334,8 +334,8 @@ void USART2_IRQHandler(void)
/* leave interrupt */ /* leave interrupt */
rt_interrupt_leave(); rt_interrupt_leave();
} }
#if defined(RT_SERIAL_USING_DMA) && defined(USART2_RX_DMA_ISR) #if defined(RT_SERIAL_USING_DMA) && defined(BSP_UART2_RX_USING_DMA)
void USART2_RX_DMA_ISR(void) void USART2_DMA_RX_IRQHandler(void)
{ {
/* enter interrupt */ /* enter interrupt */
rt_interrupt_enter(); rt_interrupt_enter();
...@@ -345,7 +345,7 @@ void USART2_RX_DMA_ISR(void) ...@@ -345,7 +345,7 @@ void USART2_RX_DMA_ISR(void)
/* leave interrupt */ /* leave interrupt */
rt_interrupt_leave(); rt_interrupt_leave();
} }
#endif /* defined(RT_SERIAL_USING_DMA) && defined(USART2_RX_DMA_ISR) */ #endif /* defined(RT_SERIAL_USING_DMA) && defined(BSP_UART2_RX_USING_DMA) */
#endif /* BSP_USING_UART2 */ #endif /* BSP_USING_UART2 */
#if defined(BSP_USING_UART3) #if defined(BSP_USING_UART3)
...@@ -359,8 +359,8 @@ void USART3_IRQHandler(void) ...@@ -359,8 +359,8 @@ void USART3_IRQHandler(void)
/* leave interrupt */ /* leave interrupt */
rt_interrupt_leave(); rt_interrupt_leave();
} }
#if defined(RT_SERIAL_USING_DMA) && defined(USART3_RX_DMA_ISR) #if defined(RT_SERIAL_USING_DMA) && defined(BSP_UART3_RX_USING_DMA)
void USART3_RX_DMA_ISR(void) void USART3_DMA_RX_IRQHandler(void)
{ {
/* enter interrupt */ /* enter interrupt */
rt_interrupt_enter(); rt_interrupt_enter();
...@@ -370,7 +370,7 @@ void USART3_RX_DMA_ISR(void) ...@@ -370,7 +370,7 @@ void USART3_RX_DMA_ISR(void)
/* leave interrupt */ /* leave interrupt */
rt_interrupt_leave(); rt_interrupt_leave();
} }
#endif /* defined(BSP_UART_USING_DMA_RX) && defined(USART3_RX_DMA_ISR) */ #endif /* defined(BSP_UART_USING_DMA_RX) && defined(BSP_UART3_RX_USING_DMA) */
#endif /* BSP_USING_UART3*/ #endif /* BSP_USING_UART3*/
#if defined(BSP_USING_UART4) #if defined(BSP_USING_UART4)
...@@ -384,8 +384,8 @@ void UART4_IRQHandler(void) ...@@ -384,8 +384,8 @@ void UART4_IRQHandler(void)
/* leave interrupt */ /* leave interrupt */
rt_interrupt_leave(); rt_interrupt_leave();
} }
#if defined(RT_SERIAL_USING_DMA) && defined(USART1_RX_DMA_ISR) #if defined(RT_SERIAL_USING_DMA) && defined(BSP_UART4_RX_USING_DMA)
void USART4_RX_DMA_ISR(void) void USART4_DMA_RX_IRQHandler(void)
{ {
/* enter interrupt */ /* enter interrupt */
rt_interrupt_enter(); rt_interrupt_enter();
...@@ -395,7 +395,7 @@ void USART4_RX_DMA_ISR(void) ...@@ -395,7 +395,7 @@ void USART4_RX_DMA_ISR(void)
/* leave interrupt */ /* leave interrupt */
rt_interrupt_leave(); rt_interrupt_leave();
} }
#endif /* defined(BSP_UART_USING_DMA_RX) && defined(USART4_RX_DMA_ISR) */ #endif /* defined(BSP_UART_USING_DMA_RX) && defined(BSP_UART4_RX_USING_DMA) */
#endif /* BSP_USING_UART4*/ #endif /* BSP_USING_UART4*/
#if defined(BSP_USING_UART5) #if defined(BSP_USING_UART5)
...@@ -409,8 +409,8 @@ void UART5_IRQHandler(void) ...@@ -409,8 +409,8 @@ void UART5_IRQHandler(void)
/* leave interrupt */ /* leave interrupt */
rt_interrupt_leave(); rt_interrupt_leave();
} }
#if defined(RT_SERIAL_USING_DMA) && defined(USART5_RX_DMA_ISR) #if defined(RT_SERIAL_USING_DMA) && defined(BSP_UART5_RX_USING_DMA)
void USART5_RX_DMA_ISR(void) void USART5_DMA_RX_IRQHandler(void)
{ {
/* enter interrupt */ /* enter interrupt */
rt_interrupt_enter(); rt_interrupt_enter();
...@@ -420,7 +420,7 @@ void USART5_RX_DMA_ISR(void) ...@@ -420,7 +420,7 @@ void USART5_RX_DMA_ISR(void)
/* leave interrupt */ /* leave interrupt */
rt_interrupt_leave(); rt_interrupt_leave();
} }
#endif /* defined(RT_SERIAL_USING_DMA) && defined(USART5_RX_DMA_ISR) */ #endif /* defined(RT_SERIAL_USING_DMA) && defined(BSP_UART5_RX_USING_DMA) */
#endif /* BSP_USING_UART5*/ #endif /* BSP_USING_UART5*/
#ifdef RT_SERIAL_USING_DMA #ifdef RT_SERIAL_USING_DMA
...@@ -437,12 +437,12 @@ static void stm32_dma_config(struct rt_serial_device *serial) ...@@ -437,12 +437,12 @@ static void stm32_dma_config(struct rt_serial_device *serial)
rt_uint32_t tmpreg= 0x00U; rt_uint32_t tmpreg= 0x00U;
#if defined(SOC_SERIES_STM32F1) || defined(SOC_SERIES_STM32F0) #if defined(SOC_SERIES_STM32F1) || defined(SOC_SERIES_STM32F0)
/* enable DMA clock && Delay after an RCC peripheral clock enabling*/ /* enable DMA clock && Delay after an RCC peripheral clock enabling*/
SET_BIT(RCC->AHBENR, uart->config->dma_rcc); SET_BIT(RCC->AHBENR, uart->config->dma_rx->dma_rcc);
tmpreg = READ_BIT(RCC->AHBENR, uart->config->dma_rcc); tmpreg = READ_BIT(RCC->AHBENR, uart->config->dma_rx->dma_rcc);
#elif defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) || defined(SOC_SERIES_STM32L4) #elif defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) || defined(SOC_SERIES_STM32L4)
/* enable DMA clock && Delay after an RCC peripheral clock enabling*/ /* enable DMA clock && Delay after an RCC peripheral clock enabling*/
SET_BIT(RCC->AHB1ENR, uart->config->dma_rcc); SET_BIT(RCC->AHB1ENR, uart->config->dma_rx->dma_rcc);
tmpreg = READ_BIT(RCC->AHB1ENR, uart->config->dma_rcc); tmpreg = READ_BIT(RCC->AHB1ENR, uart->config->dma_rx->dma_rcc);
#endif #endif
UNUSED(tmpreg); /* To avoid compiler warnings */ UNUSED(tmpreg); /* To avoid compiler warnings */
} }
...@@ -450,13 +450,13 @@ static void stm32_dma_config(struct rt_serial_device *serial) ...@@ -450,13 +450,13 @@ static void stm32_dma_config(struct rt_serial_device *serial)
__HAL_LINKDMA(&(uart->handle), hdmarx, uart->dma.handle); __HAL_LINKDMA(&(uart->handle), hdmarx, uart->dma.handle);
#if defined(SOC_SERIES_STM32F1) || defined(SOC_SERIES_STM32F0) #if defined(SOC_SERIES_STM32F1) || defined(SOC_SERIES_STM32F0)
uart->dma.handle.Instance = uart->config->dma.Instance; uart->dma.handle.Instance = uart->config->dma_rx->Instance;
#elif defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) #elif defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7)
uart->dma.handle.Instance = uart->config->dma.Instance; uart->dma.handle.Instance = uart->config->dma_rx->Instance;
uart->dma.handle.Init.Channel = uart->config->dma.stream_channel.channel; uart->dma.handle.Init.Channel = uart->config->dma_rx->channel;
#elif defined(SOC_SERIES_STM32L4) #elif defined(SOC_SERIES_STM32L4)
uart->dma.handle.Instance = uart->config->dma.Instance; uart->dma.handle.Instance = uart->config->dma_rx->Instance;
uart->dma.handle.Init.Request = uart->config->dma.channel_request.request; uart->dma.handle.Init.Request = uart->config->dma_rx->request;
#endif #endif
uart->dma.handle.Init.Direction = DMA_PERIPH_TO_MEMORY; uart->dma.handle.Init.Direction = DMA_PERIPH_TO_MEMORY;
uart->dma.handle.Init.PeriphInc = DMA_PINC_DISABLE; uart->dma.handle.Init.PeriphInc = DMA_PINC_DISABLE;
...@@ -491,8 +491,8 @@ static void stm32_dma_config(struct rt_serial_device *serial) ...@@ -491,8 +491,8 @@ static void stm32_dma_config(struct rt_serial_device *serial)
__HAL_UART_ENABLE_IT(&(uart->handle), UART_IT_IDLE); __HAL_UART_ENABLE_IT(&(uart->handle), UART_IT_IDLE);
/* enable rx irq */ /* enable rx irq */
HAL_NVIC_SetPriority(uart->config->dma_irq, 0, 0); HAL_NVIC_SetPriority(uart->config->dma_rx->dma_irq, 0, 0);
HAL_NVIC_EnableIRQ(uart->config->dma_irq); HAL_NVIC_EnableIRQ(uart->config->dma_rx->dma_irq);
HAL_NVIC_SetPriority(uart->config->irq_type, 1, 0); HAL_NVIC_SetPriority(uart->config->irq_type, 1, 0);
HAL_NVIC_EnableIRQ(uart->config->irq_type); HAL_NVIC_EnableIRQ(uart->config->irq_type);
...@@ -547,31 +547,59 @@ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) ...@@ -547,31 +547,59 @@ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
} }
#endif /* RT_SERIAL_USING_DMA */ #endif /* RT_SERIAL_USING_DMA */
static void stm32_uart_get_dma_config(void)
{
#ifdef BSP_UART1_RX_USING_DMA
uart_obj[UART1_INDEX].uart_dma_flag = 1;
static struct dma_config uart1_dma_rx = UART1_DMA_CONFIG;
uart_config[UART1_INDEX].dma_rx = &uart1_dma_rx;
#endif
#ifdef BSP_UART2_RX_USING_DMA
uart_obj[UART2_INDEX].uart_dma_flag = 1;
static struct dma_config uart2_dma_rx = UART2_DMA_CONFIG;
uart_config[UART2_INDEX].dma_rx = &uart2_dma_rx;
#endif
#ifdef BSP_UART3_RX_USING_DMA
uart_obj[UART3_INDEX].uart_dma_flag = 1;
static struct dma_config uart3_dma_rx = UART3_DMA_CONFIG;
uart_config[UART3_INDEX].dma_rx = &uart3_dma_rx;
#endif
#ifdef BSP_UART4_RX_USING_DMA
uart_obj[UART4_INDEX].uart_dma_flag = 1;
static struct dma_config uart4_dma_rx = UART4_DMA_CONFIG;
uart_config[UART4_INDEX].dma_rx = &uart4_dma_rx;
#endif
#ifdef BSP_UART5_RX_USING_DMA
uart_obj[UART5_INDEX].uart_dma_flag = 1;
static struct dma_config uart5_dma_rx = UART5_DMA_CONFIG;
uart_config[UART5_INDEX].dma_rx = &uart5_dma_rx;
#endif
}
int rt_hw_usart_init(void) int rt_hw_usart_init(void)
{ {
rt_size_t obj_num = sizeof(uart_obj) / sizeof(struct stm32_uart); rt_size_t obj_num = sizeof(uart_obj) / sizeof(struct stm32_uart);
struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT; struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT;
rt_err_t result = 0; rt_err_t result = 0;
stm32_uart_get_dma_config();
for (int i = 0; i < obj_num; i++) for (int i = 0; i < obj_num; i++)
{ {
uart_obj[i].config = &uart_config[i]; uart_obj[i].config = &uart_config[i];
uart_obj[i].serial.ops = &stm32_uart_ops; uart_obj[i].serial.ops = &stm32_uart_ops;
uart_obj[i].serial.config = config; uart_obj[i].serial.config = config;
/* Determines whether a serial instance supports DMA */ #if defined(RT_SERIAL_USING_DMA)
if(uart_obj[i].config->dma.Instance != DMA_NOT_AVAILABLE) if(uart_obj[i].uart_dma_flag)
{ {
/* register UART device */ /* register UART device */
result = rt_hw_serial_register(&uart_obj[i].serial,uart_obj[i].config->name, result = rt_hw_serial_register(&uart_obj[i].serial,uart_obj[i].config->name,
RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX| RT_DEVICE_FLAG_DMA_RX
#if defined(RT_SERIAL_USING_DMA)
| RT_DEVICE_FLAG_DMA_RX
#endif
,&uart_obj[i]); ,&uart_obj[i]);
} }
else else
#endif
{ {
/* register UART device */ /* register UART device */
result = rt_hw_serial_register(&uart_obj[i].serial,uart_obj[i].config->name, result = rt_hw_serial_register(&uart_obj[i].serial,uart_obj[i].config->name,
......
...@@ -15,10 +15,10 @@ ...@@ -15,10 +15,10 @@
#include "rtdevice.h" #include "rtdevice.h"
#include <rthw.h> #include <rthw.h>
#include <drv_common.h> #include <drv_common.h>
#include "drv_dma.h"
int rt_hw_usart_init(void); int rt_hw_usart_init(void);
#if defined(SOC_SERIES_STM32F0) || defined(SOC_SERIES_STM32F1) || defined(SOC_SERIES_STM32L4) #if defined(SOC_SERIES_STM32F0) || defined(SOC_SERIES_STM32F1) || defined(SOC_SERIES_STM32L4)
#define DMA_INSTANCE_TYPE DMA_Channel_TypeDef #define DMA_INSTANCE_TYPE DMA_Channel_TypeDef
#elif defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) #elif defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7)
...@@ -37,45 +37,15 @@ struct stm32_uart_config ...@@ -37,45 +37,15 @@ struct stm32_uart_config
const char *name; const char *name;
USART_TypeDef *Instance; USART_TypeDef *Instance;
IRQn_Type irq_type; IRQn_Type irq_type;
struct dma_config *dma_rx;
union {
DMA_INSTANCE_TYPE *Instance;
#if defined(SOC_SERIES_STM32F1)
/* the DMA config has channel only, such as on STM32F1xx */
struct {
DMA_INSTANCE_TYPE *Instance;
} channel;
#endif
#if defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7)
/* the DMA config has stream and channel, such as on STM32F4xx */
struct {
DMA_INSTANCE_TYPE *Instance;
rt_uint32_t channel;
} stream_channel;
#endif
#if defined(SOC_SERIES_STM32L4)
/* the DMA config has channel and request, such as on STM32L4xx */
struct {
DMA_INSTANCE_TYPE *Instance;
rt_uint32_t request;
} channel_request;
#endif
} dma;
rt_uint32_t dma_rcc;
IRQn_Type dma_irq;
}; };
/* stm32 uart dirver class */ /* stm32 uart dirver class */
struct stm32_uart struct stm32_uart
{ {
UART_HandleTypeDef handle; UART_HandleTypeDef handle;
const struct stm32_uart_config *config; struct stm32_uart_config *config;
#ifdef RT_SERIAL_USING_DMA #ifdef RT_SERIAL_USING_DMA
struct struct
{ {
...@@ -83,7 +53,7 @@ struct stm32_uart ...@@ -83,7 +53,7 @@ struct stm32_uart
rt_size_t last_index; rt_size_t last_index;
} dma; } dma;
#endif #endif
rt_uint8_t uart_dma_flag;
struct rt_serial_device serial; struct rt_serial_device serial;
}; };
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册