samd21: Move DMA channel defs to ao_dma_samd21.h
authorKeith Packard <keithp@keithp.com>
Wed, 9 Nov 2022 00:17:14 +0000 (16:17 -0800)
committerKeith Packard <keithp@keithp.com>
Wed, 9 Nov 2022 00:17:14 +0000 (16:17 -0800)
This way if we need to use DMA for something else, we've got
a central place to set things up.

Signed-off-by: Keith Packard <keithp@keithp.com>
src/samd21/ao_dma_samd21.h
src/samd21/ao_spi_samd21.c

index 624e7a921e600baf228db97586edb72bf2b601f5..f28810bb8b272be7c190de57c98dc6a674c4eebe 100644 (file)
@@ -38,4 +38,14 @@ _ao_dma_done_transfer(uint8_t id);
 void
 ao_dma_dump(char *where);
 
+/*
+ * DMA is used for ADC and SERCOM
+ */
+
+#define AO_SERCOM_DMA_BASE                     2U
+#define AO_SERCOM_INPUT_DMA_ID(id)             ((uint8_t) ((id) * 2U + 0U + AO_SERCOM_DMA_BASE))
+#define AO_SERCOM_OUTPUT_DMA_ID(id)            ((uint8_t) ((id) * 2U + 1U + AO_SERCOM_DMA_BASE))
+
+#define AO_ADC_DMA_ID                          0
+
 #endif /* _AO_DMA_SAM21_H_ */
index 639ba97fc7fb3416c99a6671a27800ce47e05cfa..b5ba65487d32ccdb64e67bd1bc13bea2c34306b7 100644 (file)
@@ -21,14 +21,6 @@ static uint16_t              ao_spi_pin_config[SAMD21_NUM_SERCOM];
 #define SPI_DEBUG      0
 #define SPI_USE_DMA    1
 
-/*
- * DMA is only used for USARTs in altos, which makes assigning DMA IDs
- * pretty easy
- */
-
-#define MISO_DMA_ID(id)                ((uint8_t) ((id) * 2U + 0U))
-#define MOSI_DMA_ID(id)                ((uint8_t) ((id) * 2U + 1U))
-
 struct ao_spi_samd21_info {
        struct samd21_sercom    *sercom;
 };
@@ -176,7 +168,7 @@ spi_run(const void *out, void *in, uint16_t len, uint16_t spi_index, bool step_o
        /* read any stuck data */
        (void) sercom->data;
 
-       _ao_dma_start_transfer(MISO_DMA_ID(id),
+       _ao_dma_start_transfer(AO_SERCOM_INPUT_DMA_ID(id),
                               (void *) &sercom->data,
                               i,
                               len,
@@ -187,7 +179,7 @@ spi_run(const void *out, void *in, uint16_t len, uint16_t spi_index, bool step_o
                               (void *) (uintptr_t) id
                );
 
-       _ao_dma_start_transfer(MOSI_DMA_ID(id),
+       _ao_dma_start_transfer(AO_SERCOM_OUTPUT_DMA_ID(id),
                               o,
                               (void *) &sercom->data,
                               len,
@@ -200,8 +192,8 @@ spi_run(const void *out, void *in, uint16_t len, uint16_t spi_index, bool step_o
        while (ao_spi_done[id] == 0)
                ao_sleep(&ao_spi_done[id]);
 
-       _ao_dma_done_transfer(MOSI_DMA_ID(id));
-       _ao_dma_done_transfer(MISO_DMA_ID(id));
+       _ao_dma_done_transfer(AO_SERCOM_OUTPUT_DMA_ID(id));
+       _ao_dma_done_transfer(AO_SERCOM_INPUT_DMA_ID(id));
        ao_arch_release_interrupts();
 }