Fixed DMA check macros, added DMAMUX support.

git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@14572 27425a3e-05d8-49a3-a47f-9c15f0e5edd8
This commit is contained in:
vrepetenko 2021-06-22 09:58:45 +00:00
parent 0edc45411f
commit efb940b99f
2 changed files with 49 additions and 4 deletions

View File

@ -366,6 +366,9 @@ void i2s_lld_start(I2SDriver *i2sp) {
the driver is stopped.*/
i2sp->spi->CR1 = 0;
i2sp->spi->CR2 = SPI_CR2_RXDMAEN;
#if STM32_DMA_SUPPORTS_DMAMUX
dmaSetRequestSource(i2sp->dmarx, STM32_DMAMUX1_SPI1_RX);
#endif
#endif
#if STM32_I2S_TX_ENABLED(STM32_I2S_SPI1_MODE)
i2sp->dmatx = dmaStreamAllocI(STM32_I2S_SPI1_TX_DMA_STREAM,
@ -378,6 +381,9 @@ void i2s_lld_start(I2SDriver *i2sp) {
the driver is stopped.*/
i2sp->spi->CR1 = 0;
i2sp->spi->CR2 = SPI_CR2_TXDMAEN;
#if STM32_DMA_SUPPORTS_DMAMUX
dmaSetRequestSource(i2sp->dmatx, STM32_DMAMUX1_SPI1_TX);
#endif
#endif
}
#endif
@ -399,6 +405,9 @@ void i2s_lld_start(I2SDriver *i2sp) {
the driver is stopped.*/
i2sp->spi->CR1 = 0;
i2sp->spi->CR2 = SPI_CR2_RXDMAEN;
#if STM32_DMA_SUPPORTS_DMAMUX
dmaSetRequestSource(i2sp->dmarx, STM32_DMAMUX1_SPI2_RX);
#endif
#endif
#if STM32_I2S_TX_ENABLED(STM32_I2S_SPI2_MODE)
i2sp->dmatx = dmaStreamAllocI(STM32_I2S_SPI2_TX_DMA_STREAM,
@ -411,6 +420,9 @@ void i2s_lld_start(I2SDriver *i2sp) {
the driver is stopped.*/
i2sp->spi->CR1 = 0;
i2sp->spi->CR2 = SPI_CR2_TXDMAEN;
#if STM32_DMA_SUPPORTS_DMAMUX
dmaSetRequestSource(i2sp->dmatx, STM32_DMAMUX1_SPI2_TX);
#endif
#endif
}
#endif

View File

@ -238,9 +238,6 @@
#error "Invalid DMA priority assigned to SPI3"
#endif
/* The following checks are only required when there is a DMA able to
reassign streams to different channels.*/
#if STM32_ADVANCED_DMA
/* Check on the presence of the DMA streams settings in mcuconf.h.*/
#if STM32_I2S_USE_SPI1 && (!defined(STM32_I2S_SPI1_RX_DMA_STREAM) || \
!defined(STM32_I2S_SPI1_TX_DMA_STREAM))
@ -287,7 +284,43 @@
!STM32_DMA_IS_VALID_STREAM(STM32_I2S_SPI3_TX_DMA_STREAM)
#error "invalid DMA stream associated to SPI3 TX"
#endif
#endif /* STM32_ADVANCED_DMA */
/* Devices without DMAMUX require an additional check.*/
#if STM32_ADVANCED_DMA && !STM32_DMA_SUPPORTS_DMAMUX
/* Check on the validity of the assigned DMA channels.*/
#if STM32_I2S_USE_SPI1 && \
!STM32_DMA_IS_VALID_ID(STM32_I2S_SPI1_RX_DMA_STREAM, STM32_I2S1_RX_DMA_MSK)
#error "invalid DMA stream associated to SPI1 RX"
#endif
#if STM32_I2S_USE_SPI1 && \
!STM32_DMA_IS_VALID_ID(STM32_I2S_SPI1_TX_DMA_STREAM, STM32_I2S1_TX_DMA_MSK)
#error "invalid DMA stream associated to SPI1 TX"
#endif
#if STM32_I2S_USE_SPI2 && \
!STM32_DMA_IS_VALID_ID(STM32_I2S_SPI2_RX_DMA_STREAM, STM32_I2S2_RX_DMA_MSK)
#error "invalid DMA stream associated to SPI2 RX"
#endif
#if STM32_I2S_USE_SPI2 && \
!STM32_DMA_IS_VALID_ID(STM32_I2S_SPI2_TX_DMA_STREAM, STM32_I2S2_TX_DMA_MSK)
#error "invalid DMA stream associated to SPI2 TX"
#endif
#if STM32_I2S_USE_SPI3 && \
!STM32_DMA_IS_VALID_ID(STM32_I2S_SPI3_RX_DMA_STREAM, STM32_I2S3_RX_DMA_MSK)
#error "invalid DMA stream associated to SPI3 RX"
#endif
#if STM32_I2S_USE_SPI3 && \
!STM32_DMA_IS_VALID_ID(STM32_I2S_SPI3_TX_DMA_STREAM, STM32_I2S3_TX_DMA_MSK)
#error "invalid DMA stream associated to SPI3 TX"
#endif
#endif /* STM32_ADVANCED_DMA && !STM32_DMA_SUPPORTS_DMAMUX */
#if !defined(STM32_DMA_REQUIRED)
#define STM32_DMA_REQUIRED