From 676f9bb78c6682b113f31b4c055a7029cf3942be Mon Sep 17 00:00:00 2001 From: Damien George Date: Tue, 10 Oct 2023 12:31:04 +1100 Subject: [PATCH] extmod/machine_i2s: Factor print function. Signed-off-by: Damien George --- extmod/machine_i2s.c | 25 +++++++++++++++++++ ports/esp32/machine_i2s.c | 50 +++++++++++-------------------------- ports/mimxrt/machine_i2s.c | 21 ---------------- ports/mimxrt/mpconfigport.h | 1 + ports/rp2/machine_i2s.c | 19 -------------- ports/stm32/machine_i2s.c | 19 -------------- 6 files changed, 41 insertions(+), 94 deletions(-) diff --git a/extmod/machine_i2s.c b/extmod/machine_i2s.c index ea2a0e370a..3e232d7a30 100644 --- a/extmod/machine_i2s.c +++ b/extmod/machine_i2s.c @@ -280,6 +280,31 @@ STATIC void copy_appbuf_to_ringbuf_non_blocking(machine_i2s_obj_t *self) { #endif // MICROPY_PY_MACHINE_I2S_RING_BUF +STATIC void machine_i2s_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) { + machine_i2s_obj_t *self = MP_OBJ_TO_PTR(self_in); + mp_printf(print, "I2S(id=%u,\n" + "sck="MP_HAL_PIN_FMT ",\n" + "ws="MP_HAL_PIN_FMT ",\n" + "sd="MP_HAL_PIN_FMT ",\n" + #if MICROPY_PY_MACHINE_I2S_MCK + "mck="MP_HAL_PIN_FMT ",\n" + #endif + "mode=%u,\n" + "bits=%u, format=%u,\n" + "rate=%d, ibuf=%d)", + self->i2s_id, + mp_hal_pin_name(self->sck), + mp_hal_pin_name(self->ws), + mp_hal_pin_name(self->sd), + #if MICROPY_PY_MACHINE_I2S_MCK + mp_hal_pin_name(self->mck), + #endif + self->mode, + self->bits, self->format, + self->rate, self->ibuf + ); +} + STATIC mp_obj_t machine_i2s_make_new(const mp_obj_type_t *type, size_t n_pos_args, size_t n_kw_args, const mp_obj_t *args) { mp_arg_check_num(n_pos_args, n_kw_args, 1, MP_OBJ_FUN_ARGS_MAX, true); mp_int_t i2s_id = mp_obj_get_int(args[0]); diff --git a/ports/esp32/machine_i2s.c b/ports/esp32/machine_i2s.c index c7a53461c6..6cc13b402e 100644 --- a/ports/esp32/machine_i2s.c +++ b/ports/esp32/machine_i2s.c @@ -109,7 +109,7 @@ typedef struct _non_blocking_descriptor_t { typedef struct _machine_i2s_obj_t { mp_obj_base_t base; - i2s_port_t port; + i2s_port_t i2s_id; mp_hal_pin_obj_t sck; mp_hal_pin_obj_t ws; mp_hal_pin_obj_t sd; @@ -255,7 +255,7 @@ STATIC uint32_t fill_appbuf_from_dma(machine_i2s_obj_t *self, mp_buffer_info_t * } esp_err_t ret = i2s_read( - self->port, + self->i2s_id, self->transform_buffer, num_bytes_requested_from_dma, &num_bytes_received_from_dma, @@ -315,7 +315,7 @@ STATIC size_t copy_appbuf_to_dma(machine_i2s_obj_t *self, mp_buffer_info_t *appb delay = portMAX_DELAY; // block until supplied buffer is emptied } - esp_err_t ret = i2s_write(self->port, appbuf->buf, appbuf->len, &num_bytes_written, delay); + esp_err_t ret = i2s_write(self->i2s_id, appbuf->buf, appbuf->len, &num_bytes_written, delay); check_esp_err(ret); if ((self->io_mode == ASYNCIO) && (num_bytes_written < appbuf->len)) { @@ -444,17 +444,17 @@ STATIC void mp_machine_i2s_init_helper(machine_i2s_obj_t *self, size_t n_pos_arg i2s_config.bits_per_chan = 0; // I2S queue size equals the number of DMA buffers - check_esp_err(i2s_driver_install(self->port, &i2s_config, i2s_config.dma_buf_count, &self->i2s_event_queue)); + check_esp_err(i2s_driver_install(self->i2s_id, &i2s_config, i2s_config.dma_buf_count, &self->i2s_event_queue)); // apply low-level workaround for bug in some ESP-IDF versions that swap // the left and right channels // https://github.com/espressif/esp-idf/issues/6625 #if CONFIG_IDF_TARGET_ESP32S3 - REG_SET_BIT(I2S_TX_CONF_REG(self->port), I2S_TX_MSB_SHIFT); - REG_SET_BIT(I2S_TX_CONF_REG(self->port), I2S_RX_MSB_SHIFT); + REG_SET_BIT(I2S_TX_CONF_REG(self->i2s_id), I2S_TX_MSB_SHIFT); + REG_SET_BIT(I2S_TX_CONF_REG(self->i2s_id), I2S_RX_MSB_SHIFT); #else - REG_SET_BIT(I2S_CONF_REG(self->port), I2S_TX_MSB_RIGHT); - REG_SET_BIT(I2S_CONF_REG(self->port), I2S_RX_MSB_RIGHT); + REG_SET_BIT(I2S_CONF_REG(self->i2s_id), I2S_TX_MSB_RIGHT); + REG_SET_BIT(I2S_CONF_REG(self->i2s_id), I2S_RX_MSB_RIGHT); #endif i2s_pin_config_t pin_config; @@ -470,42 +470,22 @@ STATIC void mp_machine_i2s_init_helper(machine_i2s_obj_t *self, size_t n_pos_arg pin_config.data_out_num = self->sd; } - check_esp_err(i2s_set_pin(self->port, &pin_config)); -} - -STATIC void machine_i2s_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) { - machine_i2s_obj_t *self = MP_OBJ_TO_PTR(self_in); - mp_printf(print, "I2S(id=%u,\n" - "sck="MP_HAL_PIN_FMT ",\n" - "ws="MP_HAL_PIN_FMT ",\n" - "sd="MP_HAL_PIN_FMT ",\n" - "mode=%u,\n" - "bits=%u, format=%u,\n" - "rate=%d, ibuf=%d)", - self->port, - mp_hal_pin_name(self->sck), - mp_hal_pin_name(self->ws), - mp_hal_pin_name(self->sd), - self->mode, - self->bits, self->format, - self->rate, self->ibuf - ); + check_esp_err(i2s_set_pin(self->i2s_id, &pin_config)); } STATIC machine_i2s_obj_t *mp_machine_i2s_make_new_instance(mp_int_t i2s_id) { - i2s_port_t port = i2s_id; - if (port < 0 || port >= I2S_NUM_AUTO) { + if (i2s_id < 0 || i2s_id >= I2S_NUM_AUTO) { mp_raise_ValueError(MP_ERROR_TEXT("invalid id")); } machine_i2s_obj_t *self; - if (MP_STATE_PORT(machine_i2s_obj)[port] == NULL) { + if (MP_STATE_PORT(machine_i2s_obj)[i2s_id] == NULL) { self = m_new_obj_with_finaliser(machine_i2s_obj_t); self->base.type = &machine_i2s_type; - MP_STATE_PORT(machine_i2s_obj)[port] = self; - self->port = port; + MP_STATE_PORT(machine_i2s_obj)[i2s_id] = self; + self->i2s_id = i2s_id; } else { - self = MP_STATE_PORT(machine_i2s_obj)[port]; + self = MP_STATE_PORT(machine_i2s_obj)[i2s_id]; machine_i2s_deinit(self); } @@ -513,7 +493,7 @@ STATIC machine_i2s_obj_t *mp_machine_i2s_make_new_instance(mp_int_t i2s_id) { } STATIC void mp_machine_i2s_deinit(machine_i2s_obj_t *self) { - i2s_driver_uninstall(self->port); + i2s_driver_uninstall(self->i2s_id); if (self->non_blocking_mode_task != NULL) { vTaskDelete(self->non_blocking_mode_task); diff --git a/ports/mimxrt/machine_i2s.c b/ports/mimxrt/machine_i2s.c index 5556404f25..dc1955e306 100644 --- a/ports/mimxrt/machine_i2s.c +++ b/ports/mimxrt/machine_i2s.c @@ -741,27 +741,6 @@ STATIC void mp_machine_i2s_init_helper(machine_i2s_obj_t *self, size_t n_pos_arg } } -STATIC void machine_i2s_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) { - machine_i2s_obj_t *self = MP_OBJ_TO_PTR(self_in); - mp_printf(print, "I2S(id=%u,\n" - "sck="MP_HAL_PIN_FMT ",\n" - "ws="MP_HAL_PIN_FMT ",\n" - "sd="MP_HAL_PIN_FMT ",\n" - "mck="MP_HAL_PIN_FMT ",\n" - "mode=%u,\n" - "bits=%u, format=%u,\n" - "rate=%d, ibuf=%d)", - self->i2s_id, - mp_hal_pin_name(self->sck), - mp_hal_pin_name(self->ws), - mp_hal_pin_name(self->sd), - mp_hal_pin_name(self->mck), - self->mode, - self->bits, self->format, - self->rate, self->ibuf - ); -} - STATIC machine_i2s_obj_t *mp_machine_i2s_make_new_instance(mp_int_t i2s_id) { if (i2s_id < 1 || i2s_id > MICROPY_HW_I2S_NUM) { mp_raise_msg_varg(&mp_type_ValueError, MP_ERROR_TEXT("I2S(%d) does not exist"), i2s_id); diff --git a/ports/mimxrt/mpconfigport.h b/ports/mimxrt/mpconfigport.h index d610e368b0..492686843a 100644 --- a/ports/mimxrt/mpconfigport.h +++ b/ports/mimxrt/mpconfigport.h @@ -90,6 +90,7 @@ uint32_t trng_random_u32(void); #define MICROPY_PY_MACHINE_I2S_INCLUDEFILE "ports/mimxrt/machine_i2s.c" #define MICROPY_PY_MACHINE_I2S_CONSTANT_RX (RX) #define MICROPY_PY_MACHINE_I2S_CONSTANT_TX (TX) +#define MICROPY_PY_MACHINE_I2S_MCK (1) #define MICROPY_PY_MACHINE_I2S_RING_BUF (1) #ifndef MICROPY_PY_MACHINE_SDCARD #define MICROPY_PY_MACHINE_SDCARD (1) diff --git a/ports/rp2/machine_i2s.c b/ports/rp2/machine_i2s.c index 4e49ad3590..c1caac5dab 100644 --- a/ports/rp2/machine_i2s.c +++ b/ports/rp2/machine_i2s.c @@ -638,25 +638,6 @@ STATIC void mp_machine_i2s_init_helper(machine_i2s_obj_t *self, size_t n_pos_arg dma_channel_start(self->dma_channel[0]); } -STATIC void machine_i2s_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) { - machine_i2s_obj_t *self = MP_OBJ_TO_PTR(self_in); - mp_printf(print, "I2S(id=%u,\n" - "sck="MP_HAL_PIN_FMT ",\n" - "ws="MP_HAL_PIN_FMT ",\n" - "sd="MP_HAL_PIN_FMT ",\n" - "mode=%u,\n" - "bits=%u, format=%u,\n" - "rate=%d, ibuf=%d)", - self->i2s_id, - mp_hal_pin_name(self->sck), - mp_hal_pin_name(self->ws), - mp_hal_pin_name(self->sd), - self->mode, - self->bits, self->format, - self->rate, self->ibuf - ); -} - STATIC machine_i2s_obj_t *mp_machine_i2s_make_new_instance(mp_int_t i2s_id) { if (i2s_id >= MAX_I2S_RP2) { mp_raise_ValueError(MP_ERROR_TEXT("invalid id")); diff --git a/ports/stm32/machine_i2s.c b/ports/stm32/machine_i2s.c index f83ab4ea1a..1ab80fb97b 100644 --- a/ports/stm32/machine_i2s.c +++ b/ports/stm32/machine_i2s.c @@ -590,25 +590,6 @@ STATIC void mp_machine_i2s_init_helper(machine_i2s_obj_t *self, size_t n_pos_arg } } -STATIC void machine_i2s_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) { - machine_i2s_obj_t *self = MP_OBJ_TO_PTR(self_in); - mp_printf(print, "I2S(id=%u,\n" - "sck="MP_HAL_PIN_FMT ",\n" - "ws="MP_HAL_PIN_FMT ",\n" - "sd="MP_HAL_PIN_FMT ",\n" - "mode=%u,\n" - "bits=%u, format=%u,\n" - "rate=%d, ibuf=%d)", - self->i2s_id, - mp_hal_pin_name(self->sck), - mp_hal_pin_name(self->ws), - mp_hal_pin_name(self->sd), - self->mode, - self->bits, self->format, - self->rate, self->ibuf - ); -} - STATIC machine_i2s_obj_t *mp_machine_i2s_make_new_instance(mp_int_t i2s_id) { uint8_t i2s_id_zero_base = 0;