diff --git a/cores/arduino/SERCOM.cpp b/cores/arduino/SERCOM.cpp index d54c755a0..7d7e7f9db 100644 --- a/cores/arduino/SERCOM.cpp +++ b/cores/arduino/SERCOM.cpp @@ -30,8 +30,8 @@ SERCOM::SERCOM(Sercom* s) */ void SERCOM::initUART(SercomUartMode mode, SercomUartSampleRate sampleRate, uint32_t baudrate) { - resetUART(); initClockNVIC(); + resetUART(); //Setting the CTRLA register sercom->USART.CTRLA.reg = SERCOM_USART_CTRLA_MODE(mode) | @@ -127,6 +127,16 @@ bool SERCOM::availableDataUART() return sercom->USART.INTFLAG.bit.RXC; } +bool SERCOM::isUARTError() +{ + return sercom->USART.INTFLAG.bit.ERROR; +} + +void SERCOM::acknowledgeUARTError() +{ + sercom->USART.INTFLAG.bit.ERROR = 1; +} + bool SERCOM::isBufferOverflowErrorUART() { //BUFOVF : Buffer Overflow diff --git a/cores/arduino/SERCOM.h b/cores/arduino/SERCOM.h index d64214522..fbd27e624 100644 --- a/cores/arduino/SERCOM.h +++ b/cores/arduino/SERCOM.h @@ -162,6 +162,8 @@ class SERCOM bool isDataRegisterEmptyUART( void ) ; uint8_t readDataUART( void ) ; int writeDataUART(uint8_t data) ; + bool isUARTError() ; + void acknowledgeUARTError() ; /* ========== SPI ========== */ void initSPI(SercomSpiTXPad mosi, SercomRXPad miso, SercomSpiCharSize charSize, SercomDataOrder dataOrder) ; diff --git a/cores/arduino/Uart.cpp b/cores/arduino/Uart.cpp index 094fb71ba..6f24bed9e 100644 --- a/cores/arduino/Uart.cpp +++ b/cores/arduino/Uart.cpp @@ -59,15 +59,15 @@ void Uart::flush() void Uart::IrqHandler() { - if(sercom->availableDataUART()) - { + if (sercom->availableDataUART()) { rxBuffer.store_char(sercom->readDataUART()); } - if( sercom->isBufferOverflowErrorUART() || - sercom->isFrameErrorUART() || - sercom->isParityErrorUART()) - { + if (sercom->isUARTError()) { + sercom->acknowledgeUARTError(); + // TODO: if (sercom->isBufferOverflowErrorUART()) .... + // TODO: if (sercom->isFrameErrorUART()) .... + // TODO: if (sercom->isParityErrorUART()) .... sercom->clearStatusUART(); } }