diff --git a/cores/arduino/Uart.cpp b/cores/arduino/Uart.cpp index 0d3abb98e887940efb5b79d21ac1d6cb2e8b6a31..0fc77541dd54197c89b786135e1e029e811ab13b 100644 --- a/cores/arduino/Uart.cpp +++ b/cores/arduino/Uart.cpp @@ -2,11 +2,11 @@ #include "WVariant.h" #include "wiring_digital.h" -Uart::Uart(SERCOM *s, uint8_t pinRX, uint8_t pinTX) +Uart::Uart(SERCOM *_s, uint8_t _pinRX, uint8_t _pinTX) { - sercom = s; - pinPeripheral(pinRX, g_APinDescription[pinRX].ulPinType); - pinPeripheral(pinTX, g_APinDescription[pinTX].ulPinType); + sercom = _s; + uc_pinRX = _pinRX; + uc_pinTX = _pinTX; } void Uart::begin(unsigned long baudrate) @@ -16,6 +16,9 @@ void Uart::begin(unsigned long baudrate) void Uart::begin(unsigned long baudrate, uint8_t config) { + pinPeripheral(uc_pinRX, g_APinDescription[uc_pinRX].ulPinType); + pinPeripheral(uc_pinTX, g_APinDescription[uc_pinTX].ulPinType); + sercom->initUART(UART_INT_CLOCK, SAMPLE_RATE_x16, baudrate); sercom->initFrame(extractCharSize(config), LSB_FIRST, extractParity(config), extractNbStopBit(config)); sercom->initPads(UART_TX_PAD_2, SERCOM_RX_PAD_3); diff --git a/cores/arduino/Uart.h b/cores/arduino/Uart.h index b8c64880880782d9fdb93184fa9d43797e34c4c1..a018b884cb1021f0130897b51ed194d4d01a520d 100644 --- a/cores/arduino/Uart.h +++ b/cores/arduino/Uart.h @@ -11,7 +11,7 @@ class Uart : public HardwareSerial { public: - Uart(SERCOM *s, uint8_t pinRX, uint8_t pinTX); + Uart(SERCOM *_s, uint8_t _pinRX, uint8_t _pinTX); void begin(unsigned long baudRate); void begin(unsigned long baudrate, uint8_t config); void end(); @@ -29,6 +29,9 @@ class Uart : public HardwareSerial private: SERCOM *sercom; RingBuffer rxBuffer; + + uint8_t uc_pinRX; + uint8_t uc_pinTX; SercomNumberStopBit extractNbStopBit(uint8_t config); SercomUartCharSize extractCharSize(uint8_t config);