@@ -15,15 +15,27 @@ void uart_init() {
1515 const uint16_t divisor = UART_DIVISOR (UART_FREQ , UART_BAUD ); // Calculate from provided config
1616 uint8_t dlo = (uint8_t )(divisor );
1717 uint8_t dhi = (uint8_t )(divisor >> 8 );
18- * reg8 (UART_BASE_ADDR , UART_INTR_ENABLE_REG_OFFSET ) = 0x00 ; // Disable all interrupts
19- * reg8 (UART_BASE_ADDR , UART_LINE_CONTROL_REG_OFFSET ) = 0x80 ; // Enable DLAB (set baud rate divisor)
20- * reg8 (UART_BASE_ADDR , UART_DLAB_LSB_REG_OFFSET ) = dlo ; // divisor (lo byte)
21- * reg8 (UART_BASE_ADDR , UART_DLAB_MSB_REG_OFFSET ) = dhi ; // divisor (hi byte)
22- * reg8 (UART_BASE_ADDR , UART_LINE_CONTROL_REG_OFFSET ) = 0x03 ; // 8 bits, no parity, one stop bit
23- * reg8 (UART_BASE_ADDR , UART_FIFO_CONTROL_REG_OFFSET ) = 0xC7 ; // Enable & clear FIFO, 14B threshold
18+ * reg8 (UART_BASE_ADDR , UART_INTR_ENABLE_REG_OFFSET ) = 0x00 ; // Disable all interrupts
19+ * reg8 (UART_BASE_ADDR , UART_LINE_CONTROL_REG_OFFSET ) = 0x80 ; // Enable DLAB (set baud rate divisor)
20+ * reg8 (UART_BASE_ADDR , UART_DLAB_LSB_REG_OFFSET ) = dlo ; // divisor (lo byte)
21+ * reg8 (UART_BASE_ADDR , UART_DLAB_MSB_REG_OFFSET ) = dhi ; // divisor (hi byte)
22+ * reg8 (UART_BASE_ADDR , UART_LINE_CONTROL_REG_OFFSET ) = 0x03 ; // 8 bits, no parity, one stop bit
23+ * reg8 (UART_BASE_ADDR , UART_FIFO_CONTROL_REG_OFFSET ) = 0xC7 ; // Enable & clear FIFO, 14B threshold
2424 * reg8 (UART_BASE_ADDR , UART_MODEM_CONTROL_REG_OFFSET ) = 0x20 ; // Autoflow mode
2525}
2626
27+ void uart_loopback_enable () {
28+ uart_write_flush ();
29+ uint8_t mcr = * reg8 (UART_BASE_ADDR , UART_MODEM_CONTROL_REG_OFFSET );
30+ * reg8 (UART_BASE_ADDR , UART_MODEM_CONTROL_REG_OFFSET ) = mcr | (1 << 4 );
31+ }
32+
33+ void uart_loopback_disable () {
34+ uart_write_flush ();
35+ uint8_t mcr = * reg8 (UART_BASE_ADDR , UART_MODEM_CONTROL_REG_OFFSET );
36+ * reg8 (UART_BASE_ADDR , UART_MODEM_CONTROL_REG_OFFSET ) = mcr & ~(1 << 4 );
37+ }
38+
2739int uart_read_ready () {
2840 return * reg8 (UART_BASE_ADDR , UART_LINE_STATUS_REG_OFFSET ) & (1 << UART_LINE_STATUS_DATA_READY_BIT );
2941}
0 commit comments