Skip to content

Commit 4e227b7

Browse files
authored
Support dynamic selection of DMA channels on STM32 (#500)
* The basic functions have been completed. Tested on STM32L475-IOT01A, STM32H563VI(custom), STM32H750VB(custom) boards. * minor doc update * Do not use dynamic allocation on dmaMutex's control block
1 parent 811291c commit 4e227b7

File tree

25 files changed

+339
-206
lines changed

25 files changed

+339
-206
lines changed

targets/TARGET_STM/TARGET_STM32F4/objects.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ struct qspi_s {
156156
PinName io3;
157157
PinName sclk;
158158
PinName ssel;
159-
bool dmaInitialized;
159+
DMAHandlePointer dmaHandle;
160160
#if MBED_CONF_RTOS_PRESENT
161161
osSemaphoreId_t semaphoreId;
162162
osRtxSemaphore_t semaphoreMem;

targets/TARGET_STM/TARGET_STM32F7/objects.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ struct qspi_s {
130130
PinName io3;
131131
PinName sclk;
132132
PinName ssel;
133-
bool dmaInitialized;
133+
DMAHandlePointer dmaHandle;
134134
#if MBED_CONF_RTOS_PRESENT
135135
osSemaphoreId_t semaphoreId;
136136
osRtxSemaphore_t semaphoreMem;

targets/TARGET_STM/TARGET_STM32G0/stm_dma_info.h

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -26,26 +26,16 @@
2626

2727
/// Mapping from SPI index to DMA link info for Tx
2828
static const DMALinkInfo SPITxDMALinks[] = {
29-
{1, 1, DMA_REQUEST_SPI1_TX},
30-
{1, 3, DMA_REQUEST_SPI2_TX},
31-
#ifdef DMA2
32-
// For better performance, on devices with DMA2 (STM32G0Bxx/Cxx), put SPI3 on DMA2
33-
{2, 1, DMA_REQUEST_SPI3_TX}
34-
#else
35-
{1, 5, DMA_REQUEST_SPI3_TX}
36-
#endif
29+
{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, DMA_REQUEST_SPI1_TX},
30+
{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, DMA_REQUEST_SPI2_TX},
31+
{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, DMA_REQUEST_SPI3_TX}
3732
};
3833

3934
/// Mapping from SPI index to DMA link info for Rx
4035
static const DMALinkInfo SPIRxDMALinks[] = {
41-
{1, 2, DMA_REQUEST_SPI1_RX},
42-
{1, 4, DMA_REQUEST_SPI2_RX},
43-
#ifdef DMA2
44-
// For better performance, on devices with DMA2 (STM32G0Bxx/Cxx), put SPI3 on DMA2
45-
{2, 2, DMA_REQUEST_SPI3_RX}
46-
#else
47-
{1, 6, DMA_REQUEST_SPI3_RX}
48-
#endif
36+
{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, DMA_REQUEST_SPI1_RX},
37+
{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, DMA_REQUEST_SPI2_RX},
38+
{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, DMA_REQUEST_SPI3_RX}
4939
};
5040

5141

targets/TARGET_STM/TARGET_STM32G4/objects.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ struct qspi_s {
113113
PinName io3;
114114
PinName sclk;
115115
PinName ssel;
116-
bool dmaInitialized;
116+
DMAHandlePointer dmaHandle;
117117
#if MBED_CONF_RTOS_PRESENT
118118
osSemaphoreId_t semaphoreId;
119119
osRtxSemaphore_t semaphoreMem;

targets/TARGET_STM/TARGET_STM32G4/stm_dma_info.h

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,28 +26,28 @@
2626

2727
/// Mapping from SPI index to DMA link info for Tx
2828
static const DMALinkInfo SPITxDMALinks[] = {
29-
{1, 1, DMA_REQUEST_SPI1_TX},
30-
{1, 3, DMA_REQUEST_SPI2_TX},
31-
{1, 5, DMA_REQUEST_SPI3_TX},
29+
{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, DMA_REQUEST_SPI1_TX},
30+
{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, DMA_REQUEST_SPI2_TX},
31+
{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, DMA_REQUEST_SPI3_TX},
3232
#ifdef SPI4
33-
{2, 1, DMA_REQUEST_SPI4_TX}
33+
{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, DMA_REQUEST_SPI4_TX}
3434
#endif
3535
};
3636

3737
/// Mapping from SPI index to DMA link info for Rx
3838
static const DMALinkInfo SPIRxDMALinks[] = {
39-
{1, 2, DMA_REQUEST_SPI1_RX},
40-
{1, 4, DMA_REQUEST_SPI2_RX},
41-
{1, 6, DMA_REQUEST_SPI3_RX},
39+
{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, DMA_REQUEST_SPI1_RX},
40+
{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, DMA_REQUEST_SPI2_RX},
41+
{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, DMA_REQUEST_SPI3_RX},
4242
#ifdef SPI4
43-
{2, 2, DMA_REQUEST_SPI4_RX}
43+
{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, DMA_REQUEST_SPI4_RX}
4444
#endif
4545
};
4646

4747
/// Mapping from QSPI index to DMA link info
4848
static const DMALinkInfo QSPIDMALinks[] = {
4949
#if defined(QUADSPI)
50-
{1, 7, DMA_REQUEST_QUADSPI },
50+
{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, DMA_REQUEST_QUADSPI },
5151
#endif
5252
};
5353

targets/TARGET_STM/TARGET_STM32H5/objects.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,8 @@ struct qspi_s {
9494
PinName io3;
9595
PinName sclk;
9696
PinName ssel;
97-
bool dmaInitialized;
97+
DMAHandlePointer dmaHandle;
98+
DMAHandlePointer dmaHandleTX;
9899
#if MBED_CONF_RTOS_PRESENT
99100
osSemaphoreId_t semaphoreId;
100101
osRtxSemaphore_t semaphoreMem;
@@ -118,7 +119,8 @@ struct ospi_s {
118119
PinName sclk;
119120
PinName ssel;
120121
PinName dqs;
121-
bool dmaInitialized;
122+
DMAHandlePointer dmaHandle;
123+
DMAHandlePointer dmaHandleTX;
122124
#if MBED_CONF_RTOS_PRESENT
123125
osSemaphoreId_t semaphoreId;
124126
osRtxSemaphore_t semaphoreMem;

targets/TARGET_STM/TARGET_STM32H5/stm_dma_info.h

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,41 +26,41 @@
2626

2727
/// Mapping from SPI index to DMA link info for Tx
2828
static const DMALinkInfo SPITxDMALinks[] = {
29-
{1, 0, GPDMA1_REQUEST_SPI1_TX},
30-
{1, 2, GPDMA1_REQUEST_SPI2_TX},
31-
{1, 4, GPDMA1_REQUEST_SPI3_TX}
29+
{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, GPDMA1_REQUEST_SPI1_TX},
30+
{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, GPDMA1_REQUEST_SPI2_TX},
31+
{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, GPDMA1_REQUEST_SPI3_TX}
3232
#if defined (SPI4)
33-
,{1, 6, GPDMA1_REQUEST_SPI4_TX}
33+
,{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, GPDMA1_REQUEST_SPI4_TX}
3434
#endif
3535
#if defined (SPI5)
36-
,{2, 0, GPDMA2_REQUEST_SPI5_TX}
36+
,{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, GPDMA2_REQUEST_SPI5_TX}
3737
#endif
3838
#if defined (SPI6)
39-
,{2, 2, GPDMA2_REQUEST_SPI6_TX}
39+
,{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, GPDMA2_REQUEST_SPI6_TX}
4040
#endif
4141
};
4242

4343
/// Mapping from SPI index to DMA link info for Rx
4444
static const DMALinkInfo SPIRxDMALinks[] = {
45-
{1, 1, GPDMA1_REQUEST_SPI1_RX},
46-
{1, 3, GPDMA1_REQUEST_SPI2_RX},
47-
{1, 5, GPDMA1_REQUEST_SPI3_TX}
45+
{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, GPDMA1_REQUEST_SPI1_RX},
46+
{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, GPDMA1_REQUEST_SPI2_RX},
47+
{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, GPDMA1_REQUEST_SPI3_TX}
4848
#if defined (SPI4)
49-
,{1, 7, GPDMA1_REQUEST_SPI4_RX}
49+
,{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, GPDMA1_REQUEST_SPI4_RX}
5050
#endif
5151
#if defined (SPI5)
52-
,{2, 1, GPDMA2_REQUEST_SPI5_RX}
52+
,{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, GPDMA2_REQUEST_SPI5_RX}
5353
#endif
5454
#if defined (SPI6)
55-
,{2, 3, GPDMA2_REQUEST_SPI6_RX}
55+
,{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, GPDMA2_REQUEST_SPI6_RX}
5656
#endif
5757
};
5858

5959
/// Mapping from OSPI index to DMA link info
6060
#ifdef OCTOSPI1
6161
static const DMALinkInfo OSPIDMALinks[] = {
62-
{2, 4, GPDMA2_REQUEST_OCTOSPI1},
63-
{2, 5, GPDMA2_REQUEST_OCTOSPI1},
62+
{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, GPDMA2_REQUEST_OCTOSPI1},
63+
{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, GPDMA2_REQUEST_OCTOSPI1},
6464
};
6565
#endif
6666

targets/TARGET_STM/TARGET_STM32H7/objects.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ struct qspi_s {
101101
PinName io3;
102102
PinName sclk;
103103
PinName ssel;
104-
bool dmaInitialized;
104+
DMAHandlePointer dmaHandle;
105105
#if MBED_CONF_RTOS_PRESENT
106106
osSemaphoreId_t semaphoreId;
107107
osRtxSemaphore_t semaphoreMem;
@@ -125,7 +125,7 @@ struct ospi_s {
125125
PinName sclk;
126126
PinName ssel;
127127
PinName dqs;
128-
bool dmaInitialized;
128+
DMAHandlePointer dmaHandle;
129129
#if MBED_CONF_RTOS_PRESENT
130130
osSemaphoreId_t semaphoreId;
131131
osRtxSemaphore_t semaphoreMem;

targets/TARGET_STM/TARGET_STM32H7/stm_dma_info.h

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,31 +26,31 @@
2626

2727
/// Mapping from SPI index to DMA link info for Tx
2828
static const DMALinkInfo SPITxDMALinks[] = {
29-
{1, 1, DMA_REQUEST_SPI1_TX},
30-
{1, 3, DMA_REQUEST_SPI2_TX},
31-
{1, 5, DMA_REQUEST_SPI3_TX},
32-
{1, 7, DMA_REQUEST_SPI4_TX},
33-
{2, 1, DMA_REQUEST_SPI5_TX},
29+
{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, DMA_REQUEST_SPI1_TX},
30+
{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, DMA_REQUEST_SPI2_TX},
31+
{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, DMA_REQUEST_SPI3_TX},
32+
{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, DMA_REQUEST_SPI4_TX},
33+
{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, DMA_REQUEST_SPI5_TX},
3434
};
3535

3636
/// Mapping from SPI index to DMA link info for Rx
3737
static const DMALinkInfo SPIRxDMALinks[] = {
38-
{1, 0, DMA_REQUEST_SPI1_RX},
39-
{1, 2, DMA_REQUEST_SPI2_RX},
40-
{1, 4, DMA_REQUEST_SPI3_RX},
41-
{1, 6, DMA_REQUEST_SPI4_RX},
42-
{2, 0, DMA_REQUEST_SPI5_RX},
38+
{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, DMA_REQUEST_SPI1_RX},
39+
{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, DMA_REQUEST_SPI2_RX},
40+
{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, DMA_REQUEST_SPI3_RX},
41+
{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, DMA_REQUEST_SPI4_RX},
42+
{MBED_ANY_GPDMA_MODULE, MBED_ANY_DMA_CHANNEL, DMA_REQUEST_SPI5_RX},
4343
};
4444

4545
/// Mapping from QSPI/OSPI index to DMA link info
4646
#if defined(OCTOSPI1)
4747
static const DMALinkInfo OSPIDMALinks[] = {
48-
{MDMA_IDX, 0, MDMA_REQUEST_OCTOSPI1_FIFO_TH},
49-
{MDMA_IDX, 1, MDMA_REQUEST_OCTOSPI2_FIFO_TH}
48+
{MDMA_IDX, MBED_ANY_DMA_CHANNEL, MDMA_REQUEST_OCTOSPI1_FIFO_TH},
49+
{MDMA_IDX, MBED_ANY_DMA_CHANNEL, MDMA_REQUEST_OCTOSPI2_FIFO_TH}
5050
};
5151
#else
5252
static const DMALinkInfo QSPIDMALinks[] = {
53-
{MDMA_IDX, 0, MDMA_REQUEST_QUADSPI_FIFO_TH},
53+
{MDMA_IDX, MBED_ANY_DMA_CHANNEL, MDMA_REQUEST_QUADSPI_FIFO_TH},
5454
};
5555
#endif
5656

targets/TARGET_STM/TARGET_STM32L4/objects.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ struct qspi_s {
123123
PinName io3;
124124
PinName sclk;
125125
PinName ssel;
126-
bool dmaInitialized;
126+
DMAHandlePointer dmaHandle;
127127
#if MBED_CONF_RTOS_PRESENT
128128
osSemaphoreId_t semaphoreId;
129129
osRtxSemaphore_t semaphoreMem;
@@ -147,7 +147,7 @@ struct ospi_s {
147147
PinName sclk;
148148
PinName ssel;
149149
PinName dqs;
150-
bool dmaInitialized;
150+
DMAHandlePointer dmaHandle;
151151
#if MBED_CONF_RTOS_PRESENT
152152
osSemaphoreId_t semaphoreId;
153153
osRtxSemaphore_t semaphoreMem;

0 commit comments

Comments
 (0)