Skip to content

Commit 7a60392

Browse files
committed
add clearFrameError UART
from arduino#349
1 parent 92a5a95 commit 7a60392

File tree

3 files changed

+14
-1
lines changed

3 files changed

+14
-1
lines changed

cores/arduino/SERCOM.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,12 @@ bool SERCOM::isFrameErrorUART()
200200
return sercom->USART.STATUS.bit.FERR;
201201
}
202202

203+
void SERCOM::clearFrameErrorUART()
204+
{
205+
// clear FERR bit writing 1 status bit
206+
sercom->USART.STATUS.bit.FERR = 1;
207+
}
208+
203209
bool SERCOM::isParityErrorUART()
204210
{
205211
//PERR : Parity Error

cores/arduino/SERCOM.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ class SERCOM
163163
bool availableDataUART( void ) ;
164164
bool isBufferOverflowErrorUART( void ) ;
165165
bool isFrameErrorUART( void ) ;
166+
void clearFrameErrorUART( void ) ;
166167
bool isParityErrorUART( void ) ;
167168
bool isDataRegisterEmptyUART( void ) ;
168169
uint8_t readDataUART( void ) ;

cores/arduino/Uart.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,13 @@ void Uart::errorHandler()
122122
#else
123123
void Uart::IrqHandler()
124124
{
125+
if (sercom->isFrameErrorUART()) {
126+
// frame error, next byte is invalid so read and discard it
127+
sercom->readDataUART();
128+
129+
sercom->clearFrameErrorUART();
130+
}
131+
125132
if (sercom->availableDataUART()) {
126133
rxBuffer.store_char(sercom->readDataUART());
127134

@@ -146,7 +153,6 @@ void Uart::IrqHandler()
146153
if (sercom->isUARTError()) {
147154
sercom->acknowledgeUARTError();
148155
// TODO: if (sercom->isBufferOverflowErrorUART()) ....
149-
// TODO: if (sercom->isFrameErrorUART()) ....
150156
// TODO: if (sercom->isParityErrorUART()) ....
151157
sercom->clearStatusUART();
152158
}

0 commit comments

Comments
 (0)