File tree 3 files changed +14
-1
lines changed
3 files changed +14
-1
lines changed Original file line number Diff line number Diff line change @@ -152,6 +152,12 @@ bool SERCOM::isFrameErrorUART()
152
152
return sercom->USART .STATUS .bit .FERR ;
153
153
}
154
154
155
+ void SERCOM::clearFrameErrorUART ()
156
+ {
157
+ // clear FERR bit writing 1 status bit
158
+ sercom->USART .STATUS .bit .FERR = 1 ;
159
+ }
160
+
155
161
bool SERCOM::isParityErrorUART ()
156
162
{
157
163
// PERR : Parity Error
Original file line number Diff line number Diff line change @@ -158,6 +158,7 @@ class SERCOM
158
158
bool availableDataUART ( void ) ;
159
159
bool isBufferOverflowErrorUART ( void ) ;
160
160
bool isFrameErrorUART ( void ) ;
161
+ void clearFrameErrorUART ( void ) ;
161
162
bool isParityErrorUART ( void ) ;
162
163
bool isDataRegisterEmptyUART ( void ) ;
163
164
uint8_t readDataUART ( void ) ;
Original file line number Diff line number Diff line change @@ -90,6 +90,13 @@ void Uart::flush()
90
90
91
91
void Uart::IrqHandler ()
92
92
{
93
+ if (sercom->isFrameErrorUART ()) {
94
+ // frame error, next byte is invalid so read and discard it
95
+ sercom->readDataUART ();
96
+
97
+ sercom->clearFrameErrorUART ();
98
+ }
99
+
93
100
if (sercom->availableDataUART ()) {
94
101
rxBuffer.store_char (sercom->readDataUART ());
95
102
@@ -114,7 +121,6 @@ void Uart::IrqHandler()
114
121
if (sercom->isUARTError ()) {
115
122
sercom->acknowledgeUARTError ();
116
123
// TODO: if (sercom->isBufferOverflowErrorUART()) ....
117
- // TODO: if (sercom->isFrameErrorUART()) ....
118
124
// TODO: if (sercom->isParityErrorUART()) ....
119
125
sercom->clearStatusUART ();
120
126
}
You can’t perform that action at this time.
0 commit comments