Skip to content

Commit 3c6c874

Browse files
committed
implement board_uart_read()/write() as non-blocking for all families
1 parent e01f153 commit 3c6c874

File tree

39 files changed

+397
-242
lines changed

39 files changed

+397
-242
lines changed

hw/bsp/at32f402_405/family.c

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -205,22 +205,18 @@ int board_uart_read(uint8_t *buf, int len) {
205205
int board_uart_write(void const *buf, int len)
206206
{
207207
#if CFG_TUSB_OS == OPT_OS_NONE
208-
int txsize = len;
209-
u16 timeout = 0xffff;
210-
while (txsize--)
211-
{
212-
while(usart_flag_get(PRINT_UART, USART_TDBE_FLAG) == RESET)
213-
{
214-
timeout--;
215-
if(timeout == 0)
216-
{
217-
return 0;
218-
}
208+
uint8_t const *p = (uint8_t const *) buf;
209+
int count = 0;
210+
while (count < len) {
211+
if (usart_flag_get(PRINT_UART, USART_TDBE_FLAG) != RESET) {
212+
PRINT_UART->dt = (*p & 0x01FF);
213+
p++;
214+
count++;
215+
} else {
216+
break;
219217
}
220-
PRINT_UART->dt = (*((uint8_t const *)buf) & 0x01FF);
221-
buf++;
222218
}
223-
return len;
219+
return count;
224220
#else
225221
(void) buf;
226222
(void) len;

hw/bsp/at32f403a_407/family.c

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -223,19 +223,18 @@ int board_uart_read(uint8_t *buf, int len) {
223223

224224
int board_uart_write(void const *buf, int len) {
225225
#if CFG_TUSB_OS == OPT_OS_NONE
226-
int txsize = len;
227-
u16 timeout = 0xffff;
228-
while (txsize--) {
229-
while (usart_flag_get(PRINT_UART, USART_TDBE_FLAG) == RESET) {
230-
timeout--;
231-
if (timeout == 0) {
232-
return 0;
233-
}
226+
uint8_t const *p = (uint8_t const *) buf;
227+
int count = 0;
228+
while (count < len) {
229+
if (usart_flag_get(PRINT_UART, USART_TDBE_FLAG) != RESET) {
230+
PRINT_UART->dt = (*p & 0x01FF);
231+
p++;
232+
count++;
233+
} else {
234+
break;
234235
}
235-
PRINT_UART->dt = (*((uint8_t const *) buf) & 0x01FF);
236-
buf++;
237236
}
238-
return len;
237+
return count;
239238
#else
240239
(void) buf;
241240
(void) len;

hw/bsp/at32f413/family.c

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -223,19 +223,18 @@ int board_uart_read(uint8_t *buf, int len) {
223223

224224
int board_uart_write(void const *buf, int len) {
225225
#if CFG_TUSB_OS == OPT_OS_NONE
226-
int txsize = len;
227-
u16 timeout = 0xffff;
228-
while (txsize--) {
229-
while (usart_flag_get(PRINT_UART, USART_TDBE_FLAG) == RESET) {
230-
timeout--;
231-
if (timeout == 0) {
232-
return 0;
233-
}
226+
uint8_t const *p = (uint8_t const *) buf;
227+
int count = 0;
228+
while (count < len) {
229+
if (usart_flag_get(PRINT_UART, USART_TDBE_FLAG) != RESET) {
230+
PRINT_UART->dt = (*p & 0x01FF);
231+
p++;
232+
count++;
233+
} else {
234+
break;
234235
}
235-
PRINT_UART->dt = (*((uint8_t const *) buf) & 0x01FF);
236-
buf++;
237236
}
238-
return len;
237+
return count;
239238
#else
240239
(void) buf;
241240
(void) len;

hw/bsp/at32f415/family.c

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -197,19 +197,18 @@ int board_uart_read(uint8_t *buf, int len) {
197197
// Send characters to UART. Return number of sent bytes
198198
int board_uart_write(void const *buf, int len) {
199199
#if CFG_TUSB_OS == OPT_OS_NONE
200-
int txsize = len;
201-
u16 timeout = 0xffff;
202-
while (txsize--) {
203-
while (usart_flag_get(PRINT_UART, USART_TDBE_FLAG) == RESET) {
204-
timeout--;
205-
if (timeout == 0) {
206-
return 0;
207-
}
200+
uint8_t const *p = (uint8_t const *) buf;
201+
int count = 0;
202+
while (count < len) {
203+
if (usart_flag_get(PRINT_UART, USART_TDBE_FLAG) != RESET) {
204+
PRINT_UART->dt = (*p & 0x01FF);
205+
p++;
206+
count++;
207+
} else {
208+
break;
208209
}
209-
PRINT_UART->dt = (*((uint8_t const *) buf) & 0x01FF);
210-
buf++;
211210
}
212-
return len;
211+
return count;
213212
#else
214213
(void) buf;
215214
(void) len;

hw/bsp/at32f423/family.c

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -224,19 +224,18 @@ int board_uart_read(uint8_t *buf, int len) {
224224

225225
int board_uart_write(void const *buf, int len) {
226226
#if CFG_TUSB_OS == OPT_OS_NONE
227-
int txsize = len;
228-
u16 timeout = 0xffff;
229-
while (txsize--) {
230-
while (usart_flag_get(PRINT_UART, USART_TDBE_FLAG) == RESET) {
231-
timeout--;
232-
if (timeout == 0) {
233-
return 0;
234-
}
227+
uint8_t const *p = (uint8_t const *) buf;
228+
int count = 0;
229+
while (count < len) {
230+
if (usart_flag_get(PRINT_UART, USART_TDBE_FLAG) != RESET) {
231+
PRINT_UART->dt = (*p & 0x01FF);
232+
p++;
233+
count++;
234+
} else {
235+
break;
235236
}
236-
PRINT_UART->dt = (*((uint8_t const *) buf) & 0x01FF);
237-
buf++;
238237
}
239-
return len;
238+
return count;
240239
#else
241240
(void) buf;
242241
(void) len;

hw/bsp/at32f425/family.c

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -205,19 +205,18 @@ int board_uart_read(uint8_t *buf, int len) {
205205
// Send characters to UART. Return number of sent bytes
206206
int board_uart_write(void const *buf, int len) {
207207
#if CFG_TUSB_OS == OPT_OS_NONE
208-
int txsize = len;
209-
u16 timeout = 0xffff;
210-
while (txsize--) {
211-
while (usart_flag_get(PRINT_UART, USART_TDBE_FLAG) == RESET) {
212-
timeout--;
213-
if (timeout == 0) {
214-
return 0;
215-
}
208+
uint8_t const *p = (uint8_t const *) buf;
209+
int count = 0;
210+
while (count < len) {
211+
if (usart_flag_get(PRINT_UART, USART_TDBE_FLAG) != RESET) {
212+
PRINT_UART->dt = (*p & 0x01FF);
213+
p++;
214+
count++;
215+
} else {
216+
break;
216217
}
217-
PRINT_UART->dt = (*((uint8_t const *) buf) & 0x01FF);
218-
buf++;
219218
}
220-
return len;
219+
return count;
221220
#else
222221
(void) buf;
223222
(void) len;

hw/bsp/at32f435_437/family.c

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -250,19 +250,18 @@ int board_uart_read(uint8_t *buf, int len) {
250250
// Send characters to UART. Return number of sent bytes
251251
int board_uart_write(void const *buf, int len) {
252252
#if CFG_TUSB_OS == OPT_OS_NONE
253-
int txsize = len;
254-
u16 timeout = 0xffff;
255-
while (txsize--) {
256-
while (usart_flag_get(PRINT_UART, USART_TDBE_FLAG) == RESET) {
257-
timeout--;
258-
if (timeout == 0) {
259-
return 0;
260-
}
253+
uint8_t const *p = (uint8_t const *) buf;
254+
int count = 0;
255+
while (count < len) {
256+
if (usart_flag_get(PRINT_UART, USART_TDBE_FLAG) != RESET) {
257+
PRINT_UART->dt = (*p & 0x01FF);
258+
p++;
259+
count++;
260+
} else {
261+
break;
261262
}
262-
PRINT_UART->dt = (*((uint8_t const *) buf) & 0x01FF);
263-
buf++;
264263
}
265-
return len;
264+
return count;
266265
#else
267266
(void) buf;
268267
(void) len;

hw/bsp/at32f45x/family.c

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -201,19 +201,18 @@ int board_uart_read(uint8_t *buf, int len) {
201201

202202
int board_uart_write(void const *buf, int len) {
203203
#if CFG_TUSB_OS == OPT_OS_NONE
204-
int txsize = len;
205-
uint16_t timeout = 0xffff;
206-
while (txsize--) {
207-
while (usart_flag_get(PRINT_UART, USART_TDBE_FLAG) == RESET) {
208-
timeout--;
209-
if (timeout == 0) {
210-
return 0;
211-
}
204+
uint8_t const *p = (uint8_t const *) buf;
205+
int count = 0;
206+
while (count < len) {
207+
if (usart_flag_get(PRINT_UART, USART_TDBE_FLAG) != RESET) {
208+
PRINT_UART->dt = (*p & 0x01FF);
209+
p++;
210+
count++;
211+
} else {
212+
break;
212213
}
213-
PRINT_UART->dt = (*((uint8_t const *) buf) & 0x01FF);
214-
buf++;
215214
}
216-
return len;
215+
return count;
217216
#else
218217
(void) buf;
219218
(void) len;

hw/bsp/broadcom_32bit/family.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -125,16 +125,16 @@ int board_uart_read(uint8_t* buf, int len) {
125125
}
126126

127127
int board_uart_write(void const* buf, int len) {
128-
for (int i = 0; i < len; i++) {
129-
const char* cbuf = buf;
130-
while (!UART1->STAT_b.TX_READY) {}
131-
if (cbuf[i] == '\n') {
132-
UART1->IO = '\r';
133-
while (!UART1->STAT_b.TX_READY) {}
128+
const uint8_t* p = (const uint8_t*) buf;
129+
int count = 0;
130+
while (count < len) {
131+
if (!UART1->STAT_b.TX_READY) {
132+
break;
134133
}
135-
UART1->IO = cbuf[i];
134+
UART1->IO = p[count];
135+
count++;
136136
}
137-
return len;
137+
return count;
138138
}
139139

140140
#if CFG_TUSB_OS == OPT_OS_NONE

hw/bsp/broadcom_64bit/family.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -125,16 +125,16 @@ int board_uart_read(uint8_t* buf, int len) {
125125
}
126126

127127
int board_uart_write(void const* buf, int len) {
128-
for (int i = 0; i < len; i++) {
129-
const char* cbuf = buf;
130-
while (!UART1->STAT_b.TX_READY) {}
131-
if (cbuf[i] == '\n') {
132-
UART1->IO = '\r';
133-
while (!UART1->STAT_b.TX_READY) {}
128+
const uint8_t* p = (const uint8_t*) buf;
129+
int count = 0;
130+
while (count < len) {
131+
if (!UART1->STAT_b.TX_READY) {
132+
break;
134133
}
135-
UART1->IO = cbuf[i];
134+
UART1->IO = p[count];
135+
count++;
136136
}
137-
return len;
137+
return count;
138138
}
139139

140140
#if CFG_TUSB_OS == OPT_OS_NONE

0 commit comments

Comments
 (0)