diff --git a/os/hal/ports/STM32/LLD/DMAv1/stm32_dma.h b/os/hal/ports/STM32/LLD/DMAv1/stm32_dma.h index 54b6bde84..1a6c98691 100644 --- a/os/hal/ports/STM32/LLD/DMAv1/stm32_dma.h +++ b/os/hal/ports/STM32/LLD/DMAv1/stm32_dma.h @@ -38,6 +38,11 @@ */ #define STM32_DMA_ADVANCED FALSE +/** + * @brief Maximum number of transfers in a single operation. + */ +#define STM32_DMA_MAX_TRANSFER 65535 + /** * @brief Total number of DMA streams. * @details This is the total number of streams among all the DMA units. diff --git a/os/hal/ports/STM32/LLD/DMAv2/stm32_dma.h b/os/hal/ports/STM32/LLD/DMAv2/stm32_dma.h index 256203932..9a6584541 100644 --- a/os/hal/ports/STM32/LLD/DMAv2/stm32_dma.h +++ b/os/hal/ports/STM32/LLD/DMAv2/stm32_dma.h @@ -36,6 +36,11 @@ */ #define STM32_DMA_ADVANCED TRUE +/** + * @brief Maximum number of transfers in a single operation. + */ +#define STM32_DMA_MAX_TRANSFER 65535 + /** * @brief Total number of DMA streams. * @details This is the total number of streams among all the DMA units. diff --git a/os/hal/ports/STM32/LLD/SPIv1/hal_spi_lld.c b/os/hal/ports/STM32/LLD/SPIv1/hal_spi_lld.c index 0f5d6904e..9470e4c24 100644 --- a/os/hal/ports/STM32/LLD/SPIv1/hal_spi_lld.c +++ b/os/hal/ports/STM32/LLD/SPIv1/hal_spi_lld.c @@ -534,7 +534,7 @@ void spi_lld_unselect(SPIDriver *spip) { */ void spi_lld_ignore(SPIDriver *spip, size_t n) { - osalDbgAssert(n < 65536, "unsupported DMA transfer size"); + osalDbgAssert(n <= STM32_DMA_MAX_TRANSFER, "unsupported DMA transfer size"); dmaStreamSetMemory0(spip->dmarx, &dummyrx); dmaStreamSetTransactionSize(spip->dmarx, n); @@ -566,7 +566,7 @@ void spi_lld_ignore(SPIDriver *spip, size_t n) { void spi_lld_exchange(SPIDriver *spip, size_t n, const void *txbuf, void *rxbuf) { - osalDbgAssert(n < 65536, "unsupported DMA transfer size"); + osalDbgAssert(n <= STM32_DMA_MAX_TRANSFER, "unsupported DMA transfer size"); dmaStreamSetMemory0(spip->dmarx, rxbuf); dmaStreamSetTransactionSize(spip->dmarx, n); @@ -595,7 +595,7 @@ void spi_lld_exchange(SPIDriver *spip, size_t n, */ void spi_lld_send(SPIDriver *spip, size_t n, const void *txbuf) { - osalDbgAssert(n < 65536, "unsupported DMA transfer size"); + osalDbgAssert(n <= STM32_DMA_MAX_TRANSFER, "unsupported DMA transfer size"); dmaStreamSetMemory0(spip->dmarx, &dummyrx); dmaStreamSetTransactionSize(spip->dmarx, n); @@ -624,7 +624,7 @@ void spi_lld_send(SPIDriver *spip, size_t n, const void *txbuf) { */ void spi_lld_receive(SPIDriver *spip, size_t n, void *rxbuf) { - osalDbgAssert(n < 65536, "unsupported DMA transfer size"); + osalDbgAssert(n <= STM32_DMA_MAX_TRANSFER, "unsupported DMA transfer size"); dmaStreamSetMemory0(spip->dmarx, rxbuf); dmaStreamSetTransactionSize(spip->dmarx, n); diff --git a/os/hal/ports/STM32/LLD/SPIv1/hal_spi_v2_lld.c b/os/hal/ports/STM32/LLD/SPIv1/hal_spi_v2_lld.c index 544850fa0..20f6e28bb 100644 --- a/os/hal/ports/STM32/LLD/SPIv1/hal_spi_v2_lld.c +++ b/os/hal/ports/STM32/LLD/SPIv1/hal_spi_v2_lld.c @@ -720,7 +720,7 @@ void spi_lld_unselect(SPIDriver *spip) { */ msg_t spi_lld_ignore(SPIDriver *spip, size_t n) { - osalDbgAssert(n < 65536, "unsupported DMA transfer size"); + osalDbgAssert(n <= STM32_DMA_MAX_TRANSFER, "unsupported DMA transfer size"); dmaStreamSetMemory0(spip->dmarx, &spip->rxsink); dmaStreamSetTransactionSize(spip->dmarx, n); @@ -755,7 +755,7 @@ msg_t spi_lld_ignore(SPIDriver *spip, size_t n) { msg_t spi_lld_exchange(SPIDriver *spip, size_t n, const void *txbuf, void *rxbuf) { - osalDbgAssert(n < 65536, "unsupported DMA transfer size"); + osalDbgAssert(n <= STM32_DMA_MAX_TRANSFER, "unsupported DMA transfer size"); dmaStreamSetMemory0(spip->dmarx, rxbuf); dmaStreamSetTransactionSize(spip->dmarx, n); @@ -787,7 +787,7 @@ msg_t spi_lld_exchange(SPIDriver *spip, size_t n, */ msg_t spi_lld_send(SPIDriver *spip, size_t n, const void *txbuf) { - osalDbgAssert(n < 65536, "unsupported DMA transfer size"); + osalDbgAssert(n <= STM32_DMA_MAX_TRANSFER, "unsupported DMA transfer size"); dmaStreamSetMemory0(spip->dmarx, &spip->rxsink); dmaStreamSetTransactionSize(spip->dmarx, n); @@ -819,7 +819,7 @@ msg_t spi_lld_send(SPIDriver *spip, size_t n, const void *txbuf) { */ msg_t spi_lld_receive(SPIDriver *spip, size_t n, void *rxbuf) { - osalDbgAssert(n < 65536, "unsupported DMA transfer size"); + osalDbgAssert(n <= STM32_DMA_MAX_TRANSFER, "unsupported DMA transfer size"); dmaStreamSetMemory0(spip->dmarx, rxbuf); dmaStreamSetTransactionSize(spip->dmarx, n); diff --git a/os/hal/ports/STM32/LLD/SPIv2/hal_spi_lld.c b/os/hal/ports/STM32/LLD/SPIv2/hal_spi_lld.c index 69d54d99e..f20e24352 100644 --- a/os/hal/ports/STM32/LLD/SPIv2/hal_spi_lld.c +++ b/os/hal/ports/STM32/LLD/SPIv2/hal_spi_lld.c @@ -559,7 +559,7 @@ void spi_lld_unselect(SPIDriver *spip) { */ void spi_lld_ignore(SPIDriver *spip, size_t n) { - osalDbgAssert(n < 65536, "unsupported DMA transfer size"); + osalDbgAssert(n <= STM32_DMA_MAX_TRANSFER, "unsupported DMA transfer size"); dmaStreamSetMemory0(spip->dmarx, &dummyrx); dmaStreamSetTransactionSize(spip->dmarx, n); @@ -591,7 +591,7 @@ void spi_lld_ignore(SPIDriver *spip, size_t n) { void spi_lld_exchange(SPIDriver *spip, size_t n, const void *txbuf, void *rxbuf) { - osalDbgAssert(n < 65536, "unsupported DMA transfer size"); + osalDbgAssert(n <= STM32_DMA_MAX_TRANSFER, "unsupported DMA transfer size"); dmaStreamSetMemory0(spip->dmarx, rxbuf); dmaStreamSetTransactionSize(spip->dmarx, n); @@ -620,7 +620,7 @@ void spi_lld_exchange(SPIDriver *spip, size_t n, */ void spi_lld_send(SPIDriver *spip, size_t n, const void *txbuf) { - osalDbgAssert(n < 65536, "unsupported DMA transfer size"); + osalDbgAssert(n <= STM32_DMA_MAX_TRANSFER, "unsupported DMA transfer size"); dmaStreamSetMemory0(spip->dmarx, &dummyrx); dmaStreamSetTransactionSize(spip->dmarx, n); @@ -649,7 +649,7 @@ void spi_lld_send(SPIDriver *spip, size_t n, const void *txbuf) { */ void spi_lld_receive(SPIDriver *spip, size_t n, void *rxbuf) { - osalDbgAssert(n < 65536, "unsupported DMA transfer size"); + osalDbgAssert(n <= STM32_DMA_MAX_TRANSFER, "unsupported DMA transfer size"); dmaStreamSetMemory0(spip->dmarx, rxbuf); dmaStreamSetTransactionSize(spip->dmarx, n); diff --git a/os/hal/ports/STM32/LLD/SPIv2/hal_spi_v2_lld.c b/os/hal/ports/STM32/LLD/SPIv2/hal_spi_v2_lld.c index 1ecfe2fc0..ef6787c99 100644 --- a/os/hal/ports/STM32/LLD/SPIv2/hal_spi_v2_lld.c +++ b/os/hal/ports/STM32/LLD/SPIv2/hal_spi_v2_lld.c @@ -730,7 +730,7 @@ void spi_lld_unselect(SPIDriver *spip) { */ msg_t spi_lld_ignore(SPIDriver *spip, size_t n) { - osalDbgAssert(n < 65536, "unsupported DMA transfer size"); + osalDbgAssert(n <= STM32_DMA_MAX_TRANSFER, "unsupported DMA transfer size"); dmaStreamSetMemory0(spip->dmarx, &spip->rxsink); dmaStreamSetTransactionSize(spip->dmarx, n); @@ -765,7 +765,7 @@ msg_t spi_lld_ignore(SPIDriver *spip, size_t n) { msg_t spi_lld_exchange(SPIDriver *spip, size_t n, const void *txbuf, void *rxbuf) { - osalDbgAssert(n < 65536, "unsupported DMA transfer size"); + osalDbgAssert(n <= STM32_DMA_MAX_TRANSFER, "unsupported DMA transfer size"); dmaStreamSetMemory0(spip->dmarx, rxbuf); dmaStreamSetTransactionSize(spip->dmarx, n); @@ -797,7 +797,7 @@ msg_t spi_lld_exchange(SPIDriver *spip, size_t n, */ msg_t spi_lld_send(SPIDriver *spip, size_t n, const void *txbuf) { - osalDbgAssert(n < 65536, "unsupported DMA transfer size"); + osalDbgAssert(n <= STM32_DMA_MAX_TRANSFER, "unsupported DMA transfer size"); dmaStreamSetMemory0(spip->dmarx, &spip->rxsink); dmaStreamSetTransactionSize(spip->dmarx, n); @@ -829,7 +829,7 @@ msg_t spi_lld_send(SPIDriver *spip, size_t n, const void *txbuf) { */ msg_t spi_lld_receive(SPIDriver *spip, size_t n, void *rxbuf) { - osalDbgAssert(n < 65536, "unsupported DMA transfer size"); + osalDbgAssert(n <= STM32_DMA_MAX_TRANSFER, "unsupported DMA transfer size"); dmaStreamSetMemory0(spip->dmarx, rxbuf); dmaStreamSetTransactionSize(spip->dmarx, n); diff --git a/os/hal/ports/STM32/LLD/SPIv3/hal_spi_lld.c b/os/hal/ports/STM32/LLD/SPIv3/hal_spi_lld.c index cf1995cf8..96b84ac05 100644 --- a/os/hal/ports/STM32/LLD/SPIv3/hal_spi_lld.c +++ b/os/hal/ports/STM32/LLD/SPIv3/hal_spi_lld.c @@ -825,7 +825,7 @@ void spi_lld_unselect(SPIDriver *spip) { */ void spi_lld_ignore(SPIDriver *spip, size_t n) { - osalDbgAssert(n < 65536, "unsupported DMA transfer size"); + osalDbgAssert(n <= STM32_DMA_MAX_TRANSFER, "unsupported DMA transfer size"); spi_lld_wait_complete(spip); @@ -885,7 +885,7 @@ void spi_lld_ignore(SPIDriver *spip, size_t n) { void spi_lld_exchange(SPIDriver *spip, size_t n, const void *txbuf, void *rxbuf) { - osalDbgAssert(n < 65536, "unsupported DMA transfer size"); + osalDbgAssert(n <= STM32_DMA_MAX_TRANSFER, "unsupported DMA transfer size"); spi_lld_wait_complete(spip); @@ -942,7 +942,7 @@ void spi_lld_exchange(SPIDriver *spip, size_t n, */ void spi_lld_send(SPIDriver *spip, size_t n, const void *txbuf) { - osalDbgAssert(n < 65536, "unsupported DMA transfer size"); + osalDbgAssert(n <= STM32_DMA_MAX_TRANSFER, "unsupported DMA transfer size"); spi_lld_wait_complete(spip); @@ -999,7 +999,7 @@ void spi_lld_send(SPIDriver *spip, size_t n, const void *txbuf) { */ void spi_lld_receive(SPIDriver *spip, size_t n, void *rxbuf) { - osalDbgAssert(n < 65536, "unsupported DMA transfer size"); + osalDbgAssert(n <= STM32_DMA_MAX_TRANSFER, "unsupported DMA transfer size"); spi_lld_wait_complete(spip); diff --git a/os/hal/ports/STM32/LLD/SPIv3/hal_spi_v2_lld.c b/os/hal/ports/STM32/LLD/SPIv3/hal_spi_v2_lld.c index 8ffb15040..2ec431edd 100644 --- a/os/hal/ports/STM32/LLD/SPIv3/hal_spi_v2_lld.c +++ b/os/hal/ports/STM32/LLD/SPIv3/hal_spi_v2_lld.c @@ -1069,7 +1069,7 @@ void spi_lld_unselect(SPIDriver *spip) { */ msg_t spi_lld_ignore(SPIDriver *spip, size_t n) { - osalDbgAssert(n < 65536, "unsupported DMA transfer size"); + osalDbgAssert(n <= STM32_DMA_MAX_TRANSFER, "unsupported DMA transfer size"); #if defined(STM32_SPI_DMA_REQUIRED) && defined(STM32_SPI_BDMA_REQUIRED) if (spip->is_bdma) @@ -1130,7 +1130,7 @@ msg_t spi_lld_ignore(SPIDriver *spip, size_t n) { msg_t spi_lld_exchange(SPIDriver *spip, size_t n, const void *txbuf, void *rxbuf) { - osalDbgAssert(n < 65536, "unsupported DMA transfer size"); + osalDbgAssert(n <= STM32_DMA_MAX_TRANSFER, "unsupported DMA transfer size"); #if defined(STM32_SPI_DMA_REQUIRED) && defined(STM32_SPI_BDMA_REQUIRED) if (spip->is_bdma) @@ -1188,7 +1188,7 @@ msg_t spi_lld_exchange(SPIDriver *spip, size_t n, */ msg_t spi_lld_send(SPIDriver *spip, size_t n, const void *txbuf) { - osalDbgAssert(n < 65536, "unsupported DMA transfer size"); + osalDbgAssert(n <= STM32_DMA_MAX_TRANSFER, "unsupported DMA transfer size"); #if defined(STM32_SPI_DMA_REQUIRED) && defined(STM32_SPI_BDMA_REQUIRED) if (spip->is_bdma) @@ -1246,7 +1246,7 @@ msg_t spi_lld_send(SPIDriver *spip, size_t n, const void *txbuf) { */ msg_t spi_lld_receive(SPIDriver *spip, size_t n, void *rxbuf) { - osalDbgAssert(n < 65536, "unsupported DMA transfer size"); + osalDbgAssert(n <= STM32_DMA_MAX_TRANSFER, "unsupported DMA transfer size"); #if defined(STM32_SPI_DMA_REQUIRED) && defined(STM32_SPI_BDMA_REQUIRED) if (spip->is_bdma) diff --git a/readme.txt b/readme.txt index c755f58d9..7806c8a50 100644 --- a/readme.txt +++ b/readme.txt @@ -74,6 +74,7 @@ ***************************************************************************** *** Next *** +- NEW: STM32 DMA drivers now export an STM32_DMA_MAX_TRANSFER definition. - NEW: PAL events for RP2040 added. - NEW: Added a "waend" field to the thread structure in RT for debug convenience.