From ec1e7a03b38c625664a4615e60d26956205d7a67 Mon Sep 17 00:00:00 2001 From: Phil Underwood Date: Sat, 17 Jun 2023 22:42:12 +0100 Subject: [PATCH] Reset UART on deinit, reduces power consumption --- ports/nrf/common-hal/busio/UART.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ports/nrf/common-hal/busio/UART.c b/ports/nrf/common-hal/busio/UART.c index 10a34e09df..94201774de 100644 --- a/ports/nrf/common-hal/busio/UART.c +++ b/ports/nrf/common-hal/busio/UART.c @@ -266,8 +266,15 @@ bool common_hal_busio_uart_deinited(busio_uart_obj_t *self) { } void common_hal_busio_uart_deinit(busio_uart_obj_t *self) { + volatile uint32_t *power_cycle = (void*)(self->uarte->p_reg) + 0xFFC; if (!common_hal_busio_uart_deinited(self)) { + nrfx_uarte_rx_abort(self->uarte); + nrfx_uarte_tx_abort(self->uarte); nrfx_uarte_uninit(self->uarte); + // power cycle the peripheral as per https://devzone.nordicsemi.com/f/nordic-q-a/26030/how-to-reach-nrf52840-uarte-current-supply-specification/102605#102605 + *power_cycle = 0; + *power_cycle; + *power_cycle = 1; reset_pin_number(self->tx_pin_number); reset_pin_number(self->rx_pin_number); reset_pin_number(self->rts_pin_number);