Skip to content

Commit a758fc7

Browse files
committed
UART frame error handling
1 parent 9f9d2c7 commit a758fc7

File tree

3 files changed

+13
-1
lines changed

3 files changed

+13
-1
lines changed

cores/arduino/SERCOM.cpp

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

155+
void SERCOM::clearFrameErrorUART()
156+
{
157+
// clear FERR bit writing 1 status bit
158+
sercom->USART.STATUS.bit.FERR = 1;
159+
}
160+
155161
bool SERCOM::isParityErrorUART()
156162
{
157163
//PERR : Parity Error

cores/arduino/SERCOM.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ class SERCOM
158158
bool availableDataUART( void ) ;
159159
bool isBufferOverflowErrorUART( void ) ;
160160
bool isFrameErrorUART( void ) ;
161+
void clearFrameErrorUART() ;
161162
bool isParityErrorUART( void ) ;
162163
bool isDataRegisterEmptyUART( void ) ;
163164
uint8_t readDataUART( void ) ;

cores/arduino/Uart.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,12 @@ void Uart::flush()
9090

9191
void Uart::IrqHandler()
9292
{
93+
if (sercom->isFrameErrorUART()) {
94+
sercom->readDataUART();
95+
96+
sercom->clearFrameErrorUART();
97+
}
98+
9399
if (sercom->availableDataUART()) {
94100
rxBuffer.store_char(sercom->readDataUART());
95101

@@ -114,7 +120,6 @@ void Uart::IrqHandler()
114120
if (sercom->isUARTError()) {
115121
sercom->acknowledgeUARTError();
116122
// TODO: if (sercom->isBufferOverflowErrorUART()) ....
117-
// TODO: if (sercom->isFrameErrorUART()) ....
118123
// TODO: if (sercom->isParityErrorUART()) ....
119124
sercom->clearStatusUART();
120125
}

0 commit comments

Comments
 (0)