/** Initializes the software UART, ready for data transmission and reception into the global ring buffers. */
void SoftUART_Init(void)
{
- /* Set TX pin to output high, enable RX pullup */
+ /* Set TX pin to output high, enable RX pull-up */
STXPORT |= (1 << STX);
STXDDR |= (1 << STX);
SRXPORT |= (1 << SRX);
- /* Enable INT0 for the detection of incomming start bits that signal the start of a byte */
+ /* Enable INT0 for the detection of incoming start bits that signal the start of a byte */
EICRA = (1 << ISC01);
EIMSK = (1 << INT0);
RX_Data = 0;
RX_BitMask = (1 << 0);
- /* Check that the start bit is still low to prevent noise from triggering a reception */
- if (!(SRXPIN & (1 << SRX)))
- {
- /* Clear reception channel ISR flag in case it is pending */
- TIFR1 = (1 << OCF1A);
-
- /* Still low, enable bit receive ISR */
- TIMSK1 = (1 << OCIE1A);
+ /* Clear reception channel ISR flag and enable the bit reception ISR */
+ TIFR1 = (1 << OCF1A);
+ TIMSK1 = (1 << OCIE1A);
- /* Clear the start bit detection ISR flag */
- EIMSK &= ~(1 << INT0);
- }
+ /* Disable start bit detection ISR while the next byte is received */
+ EIMSK &= ~(1 << INT0);
}
/** ISR to manage the reception of bits to the software UART. */