optimize uart output

This commit is contained in:
2026-07-05 17:59:31 +08:00
parent 7281df356f
commit 264e65f8d9

View File

@@ -43,16 +43,62 @@ static void uart_put_matmul_start_fifo(void)
UART_THR = '\n'; UART_THR = '\n';
} }
static void uart_puthex(unsigned int val) static inline void uart_wait_tx_empty(void)
{ {
int i; while ((UART_LSR & LSR_THRE) == 0) {
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)));
} }
} }
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 #ifndef MATMUL_GROUP_NUM
#define MATMUL_GROUP_NUM 5000 #define MATMUL_GROUP_NUM 5000
#endif #endif
@@ -105,9 +151,7 @@ int main(void)
crc = MATMUL_CRC; crc = MATMUL_CRC;
uart_puts("MATMUL_CRC32="); uart_put_result_fifo(crc);
uart_puthex(crc);
uart_puts("\nMATMUL_DONE\n");
return 0; return 0;
} }