code8825 / arduino

Automatically exported from code.google.com/p/arduino
Other
0 stars 0 forks source link

Serial.flush() returns before last character is transmitted (Still not working) #1152

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
Hello,

After reading Issue:
https://code.google.com/p/arduino/issues/detail?id=871&can=1&q=Serial.flush
I still don't get it working. (I'm back to the beginning code for 
HardwareSerial::flush.)

Now working with
- Arduino 1.6.4.
- Arduino Due + RS-485 module for Arduino (MAX485 )
- Arduino Uno + RS485 Shield V2
-  With HardwareSerial::flush(code) ->
      void HardwareSerial::flush()
      {
        // If we have never written a byte, no need to flush. This special
        // case is needed since there is no way to force the TXC (transmit
        // complete) bit to 1 during initialization
        if (!_written)
          return;

        while (bit_is_set(*_ucsrb, UDRIE0) || bit_is_clear(*_ucsra, TXC0)) {
          if (bit_is_clear(SREG, SREG_I) && bit_is_set(*_ucsrb, UDRIE0))
                // Interrupts are globally disabled, but the DR empty
          // interrupt should be enabled, so poll the DR empty flag to
          // prevent deadlock
          if (bit_is_set(*_ucsra, UDRE0))
            _tx_udr_empty_irq();
        }
        // If we get here, nothing is queued anymore (DRIE is disabled) and
        // the hardware finished tranmission (TXC is set).
      }

The configuration is working, but the last character is wrongly received.
From Due -> Uno:
helloUno -> helloUnÿ (See last character )

Can anybody give me a hint/tip?

Tnx!

Original issue reported on code.google.com by hacou...@gmail.com on 18 Jun 2015 at 7:08

Attachments: