Skip to content

Commit 0077958

Browse files
dhylandsdpgeorge
authored andcommitted
stmhal: Put all DMA channel & stream definitions in dma.h
1 parent d735278 commit 0077958

4 files changed

Lines changed: 65 additions & 12 deletions

File tree

stmhal/dac.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
#include "py/runtime.h"
3535
#include "timer.h"
3636
#include "dac.h"
37+
#include "dma.h"
3738
#include "pin.h"
3839
#include "genhdr/pins.h"
3940

@@ -216,11 +217,11 @@ STATIC mp_obj_t pyb_dac_make_new(mp_obj_t type_in, mp_uint_t n_args, mp_uint_t n
216217
if (dac_id == 1) {
217218
dac->pin = GPIO_PIN_4;
218219
dac->dac_channel = DAC_CHANNEL_1;
219-
dac->dma_stream = DMA1_Stream5;
220+
dac->dma_stream = DMA_STREAM_DAC1;
220221
} else if (dac_id == 2) {
221222
dac->pin = GPIO_PIN_5;
222223
dac->dac_channel = DAC_CHANNEL_2;
223-
dac->dma_stream = DMA1_Stream6;
224+
dac->dma_stream = DMA_STREAM_DAC2;
224225
} else {
225226
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "DAC %d does not exist", dac_id));
226227
}
@@ -396,7 +397,7 @@ mp_obj_t pyb_dac_write_timed(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_
396397
DMA_Handle.State = HAL_DMA_STATE_READY;
397398
HAL_DMA_DeInit(&DMA_Handle);
398399

399-
DMA_Handle.Init.Channel = DMA_CHANNEL_7;
400+
DMA_Handle.Init.Channel = DMA_CHANNEL_DAC1; // DAC1 & DAC2 both use the same channel
400401
DMA_Handle.Init.Direction = DMA_MEMORY_TO_PERIPH;
401402
DMA_Handle.Init.PeriphInc = DMA_PINC_DISABLE;
402403
DMA_Handle.Init.MemInc = DMA_MINC_ENABLE;

stmhal/dma.h

Lines changed: 55 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,64 @@
2424
* THE SOFTWARE.
2525
*/
2626

27-
//TODO: Put stream/channel defs for i2c/spi/can, etc here
27+
// These are ordered by DMAx_Stream number, and within a stream by channel
28+
// number. The duplicate streams are ok as long as they aren't used at the
29+
// same time.
30+
//
31+
// Currently I2C and SPI are synchronous and they call dma_init/dma_deinit
32+
// around each transfer.
33+
34+
// DMA1 streams
35+
36+
#define DMA_STREAM_I2C1_RX DMA1_Stream0
37+
#define DMA_CHANNEL_I2C1_RX DMA_CHANNEL_1
38+
39+
#define DMA_STREAM_SPI3_RX DMA1_Stream2
40+
#define DMA_CHANNEL_SPI3_RX DMA_CHANNEL_0
41+
42+
#define DMA_STREAM_I2C3_RX DMA1_Stream2
43+
#define DMA_CHANNEL_I2C3_RX DMA_CHANNEL_3
44+
45+
#define DMA_STREAM_I2C2_RX DMA1_Stream2
46+
#define DMA_CHANNEL_I2C2_RX DMA_CHANNEL_7
47+
48+
#define DMA_STREAM_SPI2_RX DMA1_Stream3
49+
#define DMA_CHANNEL_SPI2_RX DMA_CHANNEL_0
50+
51+
#define DMA_STREAM_SPI2_TX DMA1_Stream4
52+
#define DMA_CHANNEL_SPI2_TX DMA_CHANNEL_0
53+
54+
#define DMA_STREAM_I2C3_TX DMA1_Stream4
55+
#define DMA_CHANNEL_I2C3_TX DMA_CHANNEL_3
56+
57+
#define DMA_STREAM_DAC1 DMA1_Stream5
58+
#define DMA_CHANNEL_DAC1 DMA_CHANNEL_7
59+
60+
#define DMA_STREAM_DAC2 DMA1_Stream6
61+
#define DMA_CHANNEL_DAC2 DMA_CHANNEL_7
62+
63+
#define DMA_STREAM_SPI3_TX DMA1_Stream7
64+
#define DMA_CHANNEL_SPI3_TX DMA_CHANNEL_0
65+
66+
#define DMA_STREAM_I2C1_TX DMA1_Stream7
67+
#define DMA_CHANNEL_I2C1_TX DMA_CHANNEL_1
68+
69+
#define DMA_STREAM_I2C2_TX DMA1_Stream7
70+
#define DMA_CHANNEL_I2C2_TX DMA_CHANNEL_7
71+
72+
// DMA2 streams
73+
74+
#define DMA_STREAM_SPI1_RX DMA2_Stream2
75+
#define DMA_CHANNEL_SPI1_RX DMA_CHANNEL_3
76+
2877
#define DMA_STREAM_SDIO_RX DMA2_Stream3
29-
#define DMA_CHANNEL_SDIO_RX DMA_CHANNEL_4
78+
#define DMA_CHANNEL_SDIO_RX DMA_CHANNEL_4
79+
80+
#define DMA_STREAM_SPI1_TX DMA2_Stream5
81+
#define DMA_CHANNEL_SPI1_TX DMA_CHANNEL_3
3082

3183
#define DMA_STREAM_SDIO_TX DMA2_Stream6
32-
#define DMA_CHANNEL_SDIO_TX DMA_CHANNEL_4
84+
#define DMA_CHANNEL_SDIO_TX DMA_CHANNEL_4
3385

3486
typedef union {
3587
uint16_t enabled; // Used to test if both counters are == 0

stmhal/i2c.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,17 +134,17 @@ I2C_HandleTypeDef I2CHandle3 = {.Instance = NULL};
134134

135135
STATIC const pyb_i2c_obj_t pyb_i2c_obj[] = {
136136
#if defined(MICROPY_HW_I2C1_SCL)
137-
{{&pyb_i2c_type}, &I2CHandle1, DMA1_Stream7, DMA_CHANNEL_1, DMA1_Stream0, DMA_CHANNEL_1},
137+
{{&pyb_i2c_type}, &I2CHandle1, DMA_STREAM_I2C1_TX, DMA_CHANNEL_I2C1_TX, DMA_STREAM_I2C1_RX, DMA_CHANNEL_I2C1_RX},
138138
#else
139139
{{&pyb_i2c_type}, NULL, NULL, 0, NULL, 0},
140140
#endif
141141
#if defined(MICROPY_HW_I2C2_SCL)
142-
{{&pyb_i2c_type}, &I2CHandle2, DMA1_Stream7, DMA_CHANNEL_7, DMA1_Stream2, DMA_CHANNEL_7},
142+
{{&pyb_i2c_type}, &I2CHandle2, DMA_STREAM_I2C2_TX, DMA_CHANNEL_I2C2_TX, DMA_STREAM_I2C2_RX, DMA_CHANNEL_I2C2_RX},
143143
#else
144144
{{&pyb_i2c_type}, NULL, NULL, 0, NULL, 0},
145145
#endif
146146
#if defined(MICROPY_HW_I2C3_SCL)
147-
{{&pyb_i2c_type}, &I2CHandle3, DMA1_Stream4, DMA_CHANNEL_3, DMA1_Stream2, DMA_CHANNEL_3},
147+
{{&pyb_i2c_type}, &I2CHandle3, DMA_STREAM_I2C3_TX, DMA_CHANNEL_I2C3_TX, DMA_STREAM_I2C3_RX, DMA_CHANNEL_I2C3_RX},
148148
#else
149149
{{&pyb_i2c_type}, NULL, NULL, 0, NULL, 0},
150150
#endif

stmhal/spi.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -114,17 +114,17 @@ SPI_HandleTypeDef SPIHandle3 = {.Instance = NULL};
114114

115115
STATIC const pyb_spi_obj_t pyb_spi_obj[] = {
116116
#if MICROPY_HW_ENABLE_SPI1
117-
{{&pyb_spi_type}, &SPIHandle1, DMA2_Stream5, DMA_CHANNEL_3, DMA2_Stream2, DMA_CHANNEL_3},
117+
{{&pyb_spi_type}, &SPIHandle1, DMA_STREAM_SPI1_TX, DMA_CHANNEL_SPI1_TX, DMA_STREAM_SPI1_RX, DMA_CHANNEL_SPI1_RX},
118118
#else
119119
{{&pyb_spi_type}, NULL, NULL, 0, NULL, 0},
120120
#endif
121121
#if MICROPY_HW_ENABLE_SPI2
122-
{{&pyb_spi_type}, &SPIHandle2, DMA1_Stream4, DMA_CHANNEL_0, DMA1_Stream3, DMA_CHANNEL_0},
122+
{{&pyb_spi_type}, &SPIHandle2, DMA_STREAM_SPI2_TX, DMA_CHANNEL_SPI2_TX, DMA_STREAM_SPI2_RX, DMA_CHANNEL_SPI2_RX},
123123
#else
124124
{{&pyb_spi_type}, NULL, NULL, 0, NULL, 0},
125125
#endif
126126
#if MICROPY_HW_ENABLE_SPI3
127-
{{&pyb_spi_type}, &SPIHandle3, DMA1_Stream7, DMA_CHANNEL_0, DMA1_Stream2, DMA_CHANNEL_0},
127+
{{&pyb_spi_type}, &SPIHandle3, DMA_STREAM_SPI3_TX, DMA_CHANNEL_SPI3_TX, DMA_STREAM_SPI3_RX, DMA_CHANNEL_SPI3_RX},
128128
#else
129129
{{&pyb_spi_type}, NULL, NULL, 0, NULL, 0},
130130
#endif

0 commit comments

Comments
 (0)