Skip to content

Commit 1be6c41

Browse files
committed
fix espressif serial over uart
1 parent 10fdc80 commit 1be6c41

File tree

3 files changed

+15
-1
lines changed

3 files changed

+15
-1
lines changed

ports/espressif/common-hal/busio/UART.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@
3838
#include "supervisor/shared/translate.h"
3939
#include "supervisor/shared/tick.h"
4040

41+
uint8_t never_reset_uart_mask = 0;
42+
4143
void uart_reset(void) {
4244
for (uart_port_t num = 0; num < UART_NUM_MAX; num++) {
4345
// Ignore the UART used by the IDF.
@@ -46,12 +48,20 @@ void uart_reset(void) {
4648
continue;
4749
}
4850
#endif
49-
if (uart_is_driver_installed(num)) {
51+
if (uart_is_driver_installed(num) && !(never_reset_uart_mask & 1 << num)) {
5052
uart_driver_delete(num);
5153
}
5254
}
5355
}
5456

57+
void common_hal_busio_uart_never_reset(busio_uart_obj_t *self) {
58+
common_hal_never_reset_pin(self->rx_pin);
59+
common_hal_never_reset_pin(self->tx_pin);
60+
common_hal_never_reset_pin(self->rts_pin);
61+
common_hal_never_reset_pin(self->cts_pin);
62+
never_reset_uart_mask |= 1 << self->uart_num;
63+
}
64+
5565
void common_hal_busio_uart_construct(busio_uart_obj_t *self,
5666
const mcu_pin_obj_t *tx, const mcu_pin_obj_t *rx,
5767
const mcu_pin_obj_t *rts, const mcu_pin_obj_t *cts,

ports/espressif/common-hal/microcontroller/Pin.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ void never_reset_pin_number(gpio_num_t pin_number) {
5858
}
5959

6060
void common_hal_never_reset_pin(const mcu_pin_obj_t *pin) {
61+
if (pin == NULL) {
62+
return;
63+
}
6164
never_reset_pin_number(pin->number);
6265
}
6366

ports/espressif/common-hal/microcontroller/Pin.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ void reset_all_pins(void);
3636
// need to store a full pointer.
3737
void reset_pin_number(gpio_num_t pin_number);
3838
void common_hal_reset_pin(const mcu_pin_obj_t *pin);
39+
void common_hal_never_reset_pin(const mcu_pin_obj_t *pin);
3940
void claim_pin(const mcu_pin_obj_t *pin);
4041
void claim_pin_number(gpio_num_t pin_number);
4142
bool pin_number_is_free(gpio_num_t pin_number);

0 commit comments

Comments
 (0)