git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@16414 27425a3e-05d8-49a3-a47f-9c15f0e5edd8

This commit is contained in:
Giovanni Di Sirio 2023-11-18 10:05:00 +00:00
parent b6455931cb
commit 5e357462f9
3 changed files with 23 additions and 20 deletions

View File

@ -70,7 +70,11 @@
#define STM32_GPDMA_CCR_PRIO_POS DMA_CCR_PRIO_Pos #define STM32_GPDMA_CCR_PRIO_POS DMA_CCR_PRIO_Pos
#define STM32_GPDMA_CCR_PRIO_MASK (3U << STM32_GPDMA_CCR_PRIO_POS) #define STM32_GPDMA_CCR_PRIO_MASK (3U << STM32_GPDMA_CCR_PRIO_POS)
#define STM32_GPDMA_CCR_PRIO(n) ((n) << STM32_GPDMA_CCR_PRIO_POS) #define STM32_GPDMA_CCR_PRIO(n) ((n) << STM32_GPDMA_CCR_PRIO_POS)
#define STM32_GPDMA_CCR_LAP DMA_CCR_LAP #define STM32_GPDMA_CCR_LAP_POS DMA_CCR_LAP_Pos
#define STM32_GPDMA_CCR_LAP_MASK (1U << STM32_GPDMA_CCR_LAP_POS)
#define STM32_GPDMA_CCR_LAP(n) ((n) << STM32_GPDMA_CCR_LAP_POS)
#define STM32_GPDMA_CCR_LAP_MEM STM32_GPDMA_CCR_LAP(STM32_GPDMA_MEMORY_PORT)
#define STM32_GPDMA_CCR_LAP_PER STM32_GPDMA_CCR_LAP(STM32_GPDMA_PERIPHERAL_PORT)
#define STM32_GPDMA_CCR_LSM DMA_CCR_LSM #define STM32_GPDMA_CCR_LSM DMA_CCR_LSM
#define STM32_GPDMA_CCR_TOIE DMA_CCR_TOIE #define STM32_GPDMA_CCR_TOIE DMA_CCR_TOIE
#define STM32_GPDMA_CCR_SUSPIE DMA_CCR_SUSPIE #define STM32_GPDMA_CCR_SUSPIE DMA_CCR_SUSPIE

View File

@ -674,6 +674,7 @@ msg_t spi_lld_start(SPIDriver *spip) {
/* Configuration-specific GPDMA setup.*/ /* Configuration-specific GPDMA setup.*/
dmaccr = STM32_GPDMA_CCR_PRIO((uint32_t)spip->dprio) | dmaccr = STM32_GPDMA_CCR_PRIO((uint32_t)spip->dprio) |
STM32_GPDMA_CCR_LAP_MEM |
STM32_GPDMA_CCR_TOIE | STM32_GPDMA_CCR_TOIE |
STM32_GPDMA_CCR_USEIE | STM32_GPDMA_CCR_USEIE |
STM32_GPDMA_CCR_ULEIE | STM32_GPDMA_CCR_ULEIE |
@ -894,7 +895,7 @@ msg_t spi_lld_exchange(SPIDriver *spip, size_t n,
const void *txbuf, void *rxbuf) { const void *txbuf, void *rxbuf) {
uint32_t llrrx, llrtx; uint32_t llrrx, llrtx;
osalDbgAssert(n <= STM32_GPDMA_CCR_PRIO_POS, "unsupported GPDMA transfer size"); osalDbgAssert(n <= STM32_GPDMA_MAX_TRANSFER, "unsupported GPDMA transfer size");
#if SPI_SUPPORTS_CIRCULAR #if SPI_SUPPORTS_CIRCULAR
if (spip->config->circular) { if (spip->config->circular) {
@ -962,15 +963,14 @@ msg_t spi_lld_exchange(SPIDriver *spip, size_t n,
*/ */
msg_t spi_lld_send(SPIDriver *spip, size_t n, const void *txbuf) { msg_t spi_lld_send(SPIDriver *spip, size_t n, const void *txbuf) {
osalDbgAssert(n <= STM32_GPDMA_CCR_PRIO_POS, "unsupported GPDMA transfer size"); osalDbgAssert(n <= STM32_GPDMA_MAX_TRANSFER, "unsupported GPDMA transfer size");
/* Setting up RX DMA channel.*/ /* Setting up RX DMA channel.*/
gpdmaChannelSetDestination(spip->dmarx, &spip->dbuf->rxsink); gpdmaChannelSetDestination(spip->dmarx, &spip->dbuf->rxsink);
gpdmaChannelTransactionSize(spip->dmarx, n); gpdmaChannelTransactionSize(spip->dmarx, n);
gpdmaChannelSetMode(spip->dmarx, gpdmaChannelSetMode(spip->dmarx,
(spip->config->dtr1rx | (spip->config->dtr1rx |
spip->dtr1rx | spip->dtr1rx),
STM32_GPDMA_CTR1_DINC),
(spip->config->dtr2rx | (spip->config->dtr2rx |
STM32_GPDMA_CTR2_REQSEL(spip->dreqrx)), STM32_GPDMA_CTR2_REQSEL(spip->dreqrx)),
0U); 0U);
@ -1010,7 +1010,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) { msg_t spi_lld_receive(SPIDriver *spip, size_t n, void *rxbuf) {
osalDbgAssert(n <= STM32_GPDMA_CCR_PRIO_POS, "unsupported GPDMA transfer size"); osalDbgAssert(n <= STM32_GPDMA_MAX_TRANSFER, "unsupported GPDMA transfer size");
/* Setting up RX DMA channel.*/ /* Setting up RX DMA channel.*/
gpdmaChannelSetDestination(spip->dmarx, rxbuf); gpdmaChannelSetDestination(spip->dmarx, rxbuf);
@ -1029,8 +1029,7 @@ msg_t spi_lld_receive(SPIDriver *spip, size_t n, void *rxbuf) {
gpdmaChannelTransactionSize(spip->dmatx, n); gpdmaChannelTransactionSize(spip->dmatx, n);
gpdmaChannelSetMode(spip->dmatx, gpdmaChannelSetMode(spip->dmatx,
(spip->config->dtr1tx | (spip->config->dtr1tx |
spip->dtr1tx | spip->dtr1tx),
STM32_GPDMA_CTR1_SINC),
(spip->config->dtr2tx | (spip->config->dtr2tx |
STM32_GPDMA_CTR2_REQSEL(spip->dreqtx) | STM32_GPDMA_CTR2_REQSEL(spip->dreqtx) |
STM32_GPDMA_CTR2_DREQ), STM32_GPDMA_CTR2_DREQ),

View File

@ -77,14 +77,14 @@
/* /*
* DMA unit. * DMA unit.
*/ */
#define STM32_GPDMA1_CH0_HANDLER VectorAC #define STM32_GPDMA1_CH0_HANDLER VectorA8
#define STM32_GPDMA1_CH1_HANDLER VectorB0 #define STM32_GPDMA1_CH1_HANDLER VectorAC
#define STM32_GPDMA1_CH2_HANDLER VectorB4 #define STM32_GPDMA1_CH2_HANDLER VectorB0
#define STM32_GPDMA1_CH3_HANDLER VectorB8 #define STM32_GPDMA1_CH3_HANDLER VectorB4
#define STM32_GPDMA1_CH4_HANDLER VectorBC #define STM32_GPDMA1_CH4_HANDLER VectorB8
#define STM32_GPDMA1_CH5_HANDLER VectorC0 #define STM32_GPDMA1_CH5_HANDLER VectorBC
#define STM32_GPDMA1_CH6_HANDLER VectorC4 #define STM32_GPDMA1_CH6_HANDLER VectorC0
#define STM32_GPDMA1_CH7_HANDLER VectorC8 #define STM32_GPDMA1_CH7_HANDLER VectorC4
#define STM32_GPDMA2_CH0_HANDLER Vector1A8 #define STM32_GPDMA2_CH0_HANDLER Vector1A8
#define STM32_GPDMA2_CH1_HANDLER Vector1AC #define STM32_GPDMA2_CH1_HANDLER Vector1AC
#define STM32_GPDMA2_CH2_HANDLER Vector1B0 #define STM32_GPDMA2_CH2_HANDLER Vector1B0