summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ports/rp2/rp2_dma.c46
1 files changed, 28 insertions, 18 deletions
diff --git a/ports/rp2/rp2_dma.c b/ports/rp2/rp2_dma.c
index 3afcf8b5d..78f69e645 100644
--- a/ports/rp2/rp2_dma.c
+++ b/ports/rp2/rp2_dma.c
@@ -57,23 +57,28 @@ typedef struct _rp2_dma_ctrl_field_t {
} rp2_dma_ctrl_field_t;
static rp2_dma_ctrl_field_t rp2_dma_ctrl_fields_table[] = {
- { MP_QSTR_enable, 0, 1, 0 },
- { MP_QSTR_high_pri, 1, 1, 0 },
- { MP_QSTR_size, 2, 2, 0 },
- { MP_QSTR_inc_read, 4, 1, 0 },
- { MP_QSTR_inc_write, 5, 1, 0 },
- { MP_QSTR_ring_size, 6, 4, 0 },
- { MP_QSTR_ring_sel, 10, 1, 0 },
- { MP_QSTR_chain_to, 11, 4, 0 },
- { MP_QSTR_treq_sel, 15, 6, 0 },
- { MP_QSTR_irq_quiet, 21, 1, 0 },
- { MP_QSTR_bswap, 22, 1, 0 },
- { MP_QSTR_sniff_en, 23, 1, 0 },
- { MP_QSTR_busy, 24, 1, 1 },
- // bits 25 through 28 are reserved
- { MP_QSTR_write_err, 29, 1, 0 },
- { MP_QSTR_read_err, 30, 1, 0 },
- { MP_QSTR_ahb_err, 31, 1, 1 },
+ { MP_QSTR_enable, DMA_CH0_CTRL_TRIG_EN_LSB, 1, 0 },
+ { MP_QSTR_high_pri, DMA_CH0_CTRL_TRIG_HIGH_PRIORITY_LSB, 1, 0 },
+ { MP_QSTR_size, DMA_CH0_CTRL_TRIG_DATA_SIZE_LSB, 2, 0 },
+ { MP_QSTR_inc_read, DMA_CH0_CTRL_TRIG_INCR_READ_LSB, 1, 0 },
+ #if PICO_RP2350
+ { MP_QSTR_inc_read_rev, DMA_CH0_CTRL_TRIG_INCR_READ_REV_LSB, 1, 0 },
+ #endif
+ { MP_QSTR_inc_write, DMA_CH0_CTRL_TRIG_INCR_WRITE_LSB, 1, 0 },
+ #if PICO_RP2350
+ { MP_QSTR_inc_write_rev, DMA_CH0_CTRL_TRIG_INCR_WRITE_REV_LSB, 1, 0 },
+ #endif
+ { MP_QSTR_ring_size, DMA_CH0_CTRL_TRIG_RING_SIZE_LSB, 4, 0 },
+ { MP_QSTR_ring_sel, DMA_CH0_CTRL_TRIG_RING_SEL_LSB, 1, 0 },
+ { MP_QSTR_chain_to, DMA_CH0_CTRL_TRIG_CHAIN_TO_LSB, 4, 0 },
+ { MP_QSTR_treq_sel, DMA_CH0_CTRL_TRIG_TREQ_SEL_LSB, 6, 0 },
+ { MP_QSTR_irq_quiet, DMA_CH0_CTRL_TRIG_IRQ_QUIET_LSB, 1, 0 },
+ { MP_QSTR_bswap, DMA_CH0_CTRL_TRIG_BSWAP_LSB, 1, 0 },
+ { MP_QSTR_sniff_en, DMA_CH0_CTRL_TRIG_SNIFF_EN_LSB, 1, 0 },
+ { MP_QSTR_busy, DMA_CH0_CTRL_TRIG_BUSY_LSB, 1, 1 },
+ { MP_QSTR_write_err, DMA_CH0_CTRL_TRIG_WRITE_ERROR_LSB, 1, 0 },
+ { MP_QSTR_read_err, DMA_CH0_CTRL_TRIG_READ_ERROR_LSB, 1, 0 },
+ { MP_QSTR_ahb_err, DMA_CH0_CTRL_TRIG_AHB_ERROR_LSB, 1, 1 },
};
static const uint32_t rp2_dma_ctrl_field_count = MP_ARRAY_SIZE(rp2_dma_ctrl_fields_table);
@@ -298,7 +303,12 @@ static mp_obj_t rp2_dma_active(size_t n_args, const mp_obj_t *args) {
static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(rp2_dma_active_obj, 1, 2, rp2_dma_active);
// Default is quiet, unpaced, read and write incrementing, word transfers, enabled
-#define DEFAULT_DMA_CONFIG (1 << 21) | (0x3f << 15) | (1 << 5) | (1 << 4) | (2 << 2) | (1 << 0)
+#define DEFAULT_DMA_CONFIG (1 << DMA_CH0_CTRL_TRIG_IRQ_QUIET_LSB) | \
+ (DMA_CH0_CTRL_TRIG_TREQ_SEL_VALUE_PERMANENT << DMA_CH0_CTRL_TRIG_TREQ_SEL_LSB) | \
+ (1 << DMA_CH0_CTRL_TRIG_INCR_WRITE_LSB) | \
+ (1 << DMA_CH0_CTRL_TRIG_INCR_READ_LSB) | \
+ (2 << DMA_CH0_CTRL_TRIG_DATA_SIZE_LSB) | \
+ (1 << DMA_CH0_CTRL_TRIG_EN_LSB)
// DMA.pack_ctrl(...)
static mp_obj_t rp2_dma_pack_ctrl(size_t n_pos_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {