From 264e65f8d99c194b779523cc075b1d8411eafe39 Mon Sep 17 00:00:00 2001 From: FallenSigh Date: Sun, 5 Jul 2026 17:59:31 +0800 Subject: [PATCH] optimize uart output --- sdk/software/examples/asm/user-sample.c | 62 +++++++++++++++++++++---- 1 file changed, 53 insertions(+), 9 deletions(-) diff --git a/sdk/software/examples/asm/user-sample.c b/sdk/software/examples/asm/user-sample.c index 1505ab6..e0bb2e9 100644 --- a/sdk/software/examples/asm/user-sample.c +++ b/sdk/software/examples/asm/user-sample.c @@ -43,16 +43,62 @@ static void uart_put_matmul_start_fifo(void) UART_THR = '\n'; } -static void uart_puthex(unsigned int val) +static inline void uart_wait_tx_empty(void) { - int i; - - for (i = 28; i >= 0; i -= 4) { - unsigned char nibble = (unsigned char)((val >> i) & 0xf); - uart_tx((unsigned char)(nibble < 10 ? ('0' + nibble) : ('a' + nibble - 10))); + while ((UART_LSR & LSR_THRE) == 0) { } } +static inline unsigned char hex_digit(unsigned int val, int shift) +{ + unsigned char nibble = (unsigned char)((val >> shift) & 0xf); + + return (unsigned char)(nibble < 10 ? ('0' + nibble) : ('a' + nibble - 10)); +} + +static void uart_put_result_fifo(unsigned int crc) +{ + uart_wait_tx_empty(); + UART_THR = 'M'; + UART_THR = 'A'; + UART_THR = 'T'; + UART_THR = 'M'; + UART_THR = 'U'; + UART_THR = 'L'; + UART_THR = '_'; + UART_THR = 'C'; + UART_THR = 'R'; + UART_THR = 'C'; + UART_THR = '3'; + UART_THR = '2'; + UART_THR = '='; + UART_THR = hex_digit(crc, 28); + UART_THR = hex_digit(crc, 24); + UART_THR = hex_digit(crc, 20); + + uart_wait_tx_empty(); + UART_THR = hex_digit(crc, 16); + UART_THR = hex_digit(crc, 12); + UART_THR = hex_digit(crc, 8); + UART_THR = hex_digit(crc, 4); + UART_THR = hex_digit(crc, 0); + UART_THR = '\n'; + UART_THR = 'M'; + UART_THR = 'A'; + UART_THR = 'T'; + UART_THR = 'M'; + UART_THR = 'U'; + UART_THR = 'L'; + UART_THR = '_'; + UART_THR = 'D'; + UART_THR = 'O'; + UART_THR = 'N'; + + uart_wait_tx_empty(); + UART_THR = 'E'; + UART_THR = '\n'; +} + #ifndef MATMUL_GROUP_NUM #define MATMUL_GROUP_NUM 5000 #endif @@ -105,9 +151,7 @@ int main(void) crc = MATMUL_CRC; - uart_puts("MATMUL_CRC32="); - uart_puthex(crc); - uart_puts("\nMATMUL_DONE\n"); + uart_put_result_fifo(crc); return 0; }