uart: add more channel_sts flags, wait for tx_fifo_empty() before sending
This commit is contained in:
parent
673d585d2f
commit
7428fec200
|
@ -146,10 +146,16 @@ impl Uart {
|
||||||
pub fn tx_fifo_full(&self) -> bool {
|
pub fn tx_fifo_full(&self) -> bool {
|
||||||
self.regs.channel_sts.read().txfull()
|
self.regs.channel_sts.read().txfull()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn tx_fifo_empty(&self) -> bool {
|
||||||
|
self.regs.channel_sts.read().txempty()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl fmt::Write for Uart {
|
impl fmt::Write for Uart {
|
||||||
fn write_str(&mut self, s: &str) -> Result<(), fmt::Error> {
|
fn write_str(&mut self, s: &str) -> Result<(), fmt::Error> {
|
||||||
|
while !self.tx_fifo_empty() {}
|
||||||
|
|
||||||
for b in s.bytes() {
|
for b in s.bytes() {
|
||||||
self.write_byte(b);
|
self.write_byte(b);
|
||||||
}
|
}
|
||||||
|
|
|
@ -74,7 +74,26 @@ register!(baud_rate_gen, BaudRateGen, RW, u32);
|
||||||
register_bits!(baud_rate_gen, cd, u16, 0, 15);
|
register_bits!(baud_rate_gen, cd, u16, 0, 15);
|
||||||
|
|
||||||
register!(channel_sts, ChannelSts, RO, u32);
|
register!(channel_sts, ChannelSts, RO, u32);
|
||||||
|
/// Transmitter FIFO Nearly Full
|
||||||
|
register_bit!(channel_sts, tnful, 14);
|
||||||
|
/// Tx FIFO fill level is greater than or equal to TTRIG?
|
||||||
|
register_bit!(channel_sts, ttrig, 13);
|
||||||
|
/// Rx FIFO fill level is greater than or equal to FDEL?
|
||||||
|
register_bit!(channel_sts, flowdel, 12);
|
||||||
|
/// Transmitter state machine active?
|
||||||
|
register_bit!(channel_sts, tactive, 11);
|
||||||
|
/// Receiver state machine active?
|
||||||
|
register_bit!(channel_sts, ractive, 10);
|
||||||
|
/// Tx FIFO is full?
|
||||||
register_bit!(channel_sts, txfull, 4);
|
register_bit!(channel_sts, txfull, 4);
|
||||||
|
/// Tx FIFO is empty?
|
||||||
|
register_bit!(channel_sts, txempty, 3);
|
||||||
|
/// Rx FIFO is full?
|
||||||
|
register_bit!(channel_sts, rxfull, 2);
|
||||||
|
/// Rx FIFO is empty?
|
||||||
|
register_bit!(channel_sts, rxempty, 1);
|
||||||
|
/// Rx FIFO fill level is greater than or equal to RTRIG?
|
||||||
|
register_bit!(channel_sts, rxovr, 0);
|
||||||
|
|
||||||
register!(tx_rx_fifo, TxRxFifo, RW, u32);
|
register!(tx_rx_fifo, TxRxFifo, RW, u32);
|
||||||
register_bits!(tx_rx_fifo, data, u32, 0, 31);
|
register_bits!(tx_rx_fifo, data, u32, 0, 31);
|
||||||
|
|
Loading…
Reference in New Issue