Added flushing of transmit buffer
This commit is contained in:
parent
b6c1c3b51b
commit
9f9f7a8de5
@ -64,9 +64,14 @@ class Hardware {
|
||||
return *Registers::IO_REG;
|
||||
}
|
||||
|
||||
static bool txActive() FORCE_INLINE
|
||||
{
|
||||
return !(*Registers::CTRL_STAT_REG_A & (1 << CtrlFlagsA::DATA_REG_EMPTY));
|
||||
}
|
||||
|
||||
static void txByteBlocking(const typename cfg::data_t &byte) FORCE_INLINE
|
||||
{
|
||||
while (!(*Registers::CTRL_STAT_REG_A & (1 << CtrlFlagsA::DATA_REG_EMPTY)))
|
||||
while (txActive())
|
||||
;
|
||||
|
||||
*Registers::IO_REG = byte;
|
||||
|
@ -105,6 +105,12 @@ class Hardware0 {
|
||||
return HardwareImpl::peekBlocking();
|
||||
}
|
||||
|
||||
static void flushTx() FORCE_INLINE
|
||||
{
|
||||
while (HardwareImpl::txActive())
|
||||
;
|
||||
}
|
||||
|
||||
private:
|
||||
using HardwareImpl = detail::Hardware<detail::Registers0, detail::ControlFlagsA0, detail::ControlFlagsB0,
|
||||
detail::ControlFlagsC0, cfg, mode, driven>;
|
||||
@ -164,6 +170,14 @@ class Hardware0<mode, cfg, Driven::INTERRUPT> {
|
||||
return (sm_rxBuf.head != sm_rxBuf.tail);
|
||||
}
|
||||
|
||||
static void flushTx() FORCE_INLINE
|
||||
{
|
||||
while (sm_txBuf.head != sm_txBuf.tail)
|
||||
;
|
||||
while (HardwareImpl::txActive())
|
||||
;
|
||||
}
|
||||
|
||||
private:
|
||||
using HardwareImpl = detail::Hardware<detail::Registers0, detail::ControlFlagsA0, detail::ControlFlagsB0,
|
||||
detail::ControlFlagsC0, cfg, mode, Driven::INTERRUPT>;
|
||||
|
@ -109,6 +109,12 @@ class Hardware1 {
|
||||
return HardwareImpl::peekBlocking();
|
||||
}
|
||||
|
||||
static void flushTx() FORCE_INLINE
|
||||
{
|
||||
while (HardwareImpl::txActive())
|
||||
;
|
||||
}
|
||||
|
||||
private:
|
||||
using HardwareImpl = detail::Hardware<detail::Registers1, detail::ControlFlagsA1, detail::ControlFlagsB1,
|
||||
detail::ControlFlagsC1, cfg, mode, driven>;
|
||||
@ -168,6 +174,14 @@ class Hardware1<mode, cfg, Driven::INTERRUPT> {
|
||||
return (sm_rxBuf.head != sm_rxBuf.tail);
|
||||
}
|
||||
|
||||
static void flushTx() FORCE_INLINE
|
||||
{
|
||||
while (sm_txBuf.head != sm_txBuf.tail)
|
||||
;
|
||||
while (HardwareImpl::txActive())
|
||||
;
|
||||
}
|
||||
|
||||
private:
|
||||
using HardwareImpl = detail::Hardware<detail::Registers1, detail::ControlFlagsA1, detail::ControlFlagsB1,
|
||||
detail::ControlFlagsC1, cfg, mode, Driven::INTERRUPT>;
|
||||
|
Loading…
Reference in New Issue
Block a user