Skip to content

Commit dcdd82c

Browse files
authored
Merge pull request adafruit#1428 from hathach/nrf52_esp83266_uart_bug
Nrf52 esp83266 uart bug
2 parents ddf0d3f + 3ee766b commit dcdd82c

1 file changed

Lines changed: 21 additions & 9 deletions

File tree

  • ports/nrf/common-hal/busio

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

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -67,29 +67,41 @@ static void ringbuf_clear(ringbuf_t *r)
6767
r->iput = r->iget = 0;
6868
}
6969

70+
// will overwrite old data
71+
static void ringbuf_put_n(ringbuf_t* r, uint8_t* buf, uint8_t bufsize)
72+
{
73+
for(uint8_t i=0; i < bufsize; i++) {
74+
if ( ringbuf_put(r, buf[i]) < 0 ) {
75+
// if full overwrite old data
76+
(void) ringbuf_get(r);
77+
ringbuf_put(r, buf[i]);
78+
}
79+
}
80+
}
81+
7082
static void uart_callback_irq (const nrfx_uarte_event_t * event, void * context) {
7183
busio_uart_obj_t* self = (busio_uart_obj_t*) context;
7284

7385
switch ( event->type ) {
7486
case NRFX_UARTE_EVT_RX_DONE:
75-
for(uint8_t i=0; i < event->data.rxtx.bytes; i++) {
76-
if ( ringbuf_put(&self->rbuf, event->data.rxtx.p_data[i]) < 0 ) {
77-
// if full overwrite old data
78-
(void) ringbuf_get(&self->rbuf);
79-
ringbuf_put(&self->rbuf, event->data.rxtx.p_data[i]);
80-
}
81-
}
87+
ringbuf_put_n(&self->rbuf, event->data.rxtx.p_data, event->data.rxtx.bytes);
8288

8389
// keep receiving
84-
_VERIFY_ERR(nrfx_uarte_rx(&self->uarte, &self->rx_char, 1));
90+
(void) nrfx_uarte_rx(&self->uarte, &self->rx_char, 1);
8591
break;
8692

8793
case NRFX_UARTE_EVT_TX_DONE:
8894
// nothing to do
8995
break;
9096

9197
case NRFX_UARTE_EVT_ERROR:
92-
// Handle error
98+
// Possible Error source is Overrun, Parity, Framing, Break
99+
// uint32_t errsrc = event->data.error.error_mask;
100+
101+
ringbuf_put_n(&self->rbuf, event->data.error.rxtx.p_data, event->data.error.rxtx.bytes);
102+
103+
// Keep receiving
104+
(void) nrfx_uarte_rx(&self->uarte, &self->rx_char, 1);
93105
break;
94106

95107
default:

0 commit comments

Comments
 (0)