mirror of
https://github.com/esp8266/Arduino.git
synced 2025-04-21 10:26:06 +03:00
Merge pull request #1166 from alltheblinkythings/SerialStuff
Always arm the "TX FIFO Empty" interrupt after we write into _tx_buffer.
This commit is contained in:
commit
93aaa8667d
@ -617,18 +617,15 @@ size_t HardwareSerial::write(uint8_t c) {
|
|||||||
size_t room = uart_get_tx_fifo_room(_uart);
|
size_t room = uart_get_tx_fifo_room(_uart);
|
||||||
if(room > 0 && _tx_buffer->empty()) {
|
if(room > 0 && _tx_buffer->empty()) {
|
||||||
uart_transmit_char(_uart, c);
|
uart_transmit_char(_uart, c);
|
||||||
if(room < 10) {
|
|
||||||
uart_arm_tx_interrupt(_uart);
|
|
||||||
}
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
while(_tx_buffer->room() == 0) {
|
while(_tx_buffer->room() == 0) {
|
||||||
yield();
|
yield();
|
||||||
uart_arm_tx_interrupt(_uart);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_tx_buffer->write(c);
|
_tx_buffer->write(c);
|
||||||
|
uart_arm_tx_interrupt(_uart);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,9 +42,6 @@ class cbuf {
|
|||||||
if(_end >= _begin) {
|
if(_end >= _begin) {
|
||||||
return _size - (_end - _begin) - 1;
|
return _size - (_end - _begin) - 1;
|
||||||
}
|
}
|
||||||
if(_begin == _end) {
|
|
||||||
return _size;
|
|
||||||
}
|
|
||||||
return _begin - _end - 1;
|
return _begin - _end - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,7 +59,7 @@ class cbuf {
|
|||||||
if(getSize() == 0) return -1;
|
if(getSize() == 0) return -1;
|
||||||
|
|
||||||
char result = *_begin;
|
char result = *_begin;
|
||||||
if(++_begin == _bufend) _begin = _buf;
|
_begin = wrap_if_bufend(_begin + 1);
|
||||||
return static_cast<int>(result);
|
return static_cast<int>(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,8 +75,7 @@ class cbuf {
|
|||||||
dst += top_size;
|
dst += top_size;
|
||||||
}
|
}
|
||||||
memcpy(dst, _begin, size_to_read);
|
memcpy(dst, _begin, size_to_read);
|
||||||
_begin += size_to_read;
|
_begin = wrap_if_bufend(_begin + size_to_read);
|
||||||
if(_begin == _bufend) _begin = _buf;
|
|
||||||
return size_read;
|
return size_read;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,7 +83,7 @@ class cbuf {
|
|||||||
if(room() == 0) return 0;
|
if(room() == 0) return 0;
|
||||||
|
|
||||||
*_end = c;
|
*_end = c;
|
||||||
if(++_end == _bufend) _end = _buf;
|
_end = wrap_if_bufend(_end + 1);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -103,8 +99,7 @@ class cbuf {
|
|||||||
src += top_size;
|
src += top_size;
|
||||||
}
|
}
|
||||||
memcpy(_end, src, size_to_write);
|
memcpy(_end, src, size_to_write);
|
||||||
_end += size_to_write;
|
_end = wrap_if_bufend(_end + size_to_write);
|
||||||
if(_end == _bufend) _end = _buf;
|
|
||||||
return size_written;
|
return size_written;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -114,6 +109,10 @@ class cbuf {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
inline char* wrap_if_bufend(char* ptr) {
|
||||||
|
return (ptr == _bufend) ? _buf : ptr;
|
||||||
|
}
|
||||||
|
|
||||||
size_t _size;
|
size_t _size;
|
||||||
char* _buf;
|
char* _buf;
|
||||||
char* _bufend;
|
char* _bufend;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user