diff --git a/cores/arduino/SERCOM.h b/cores/arduino/SERCOM.h index fb378d7d84d92898c69810bd87b8fbbf40e6900c..d64214522cea8814659dc951aaab9f9d8d68abd6 100644 --- a/cores/arduino/SERCOM.h +++ b/cores/arduino/SERCOM.h @@ -79,10 +79,9 @@ typedef enum typedef enum { - UART_TX_PAD_0 = 0x0ul, //Only for UART - UART_TX_PAD_2 = 0x1ul, //Only for UART - //UART_TX_PAD_1 = 0x0ul, //DON'T USE - //UART_TX_PAD_3 = 0x1ul //DON'T USE + UART_TX_PAD_0 = 0x0ul, // Only for UART + UART_TX_PAD_2 = 0x1ul, // Only for UART + UART_TX_RTS_CTS_PAD_0_2_3 = 0x2ul, // Only for UART with TX on PAD0, RTS on PAD2 and CTS on PAD3 } SercomUartTXPad; typedef enum diff --git a/cores/arduino/Uart.cpp b/cores/arduino/Uart.cpp index 9e8a66d03bf559a98d40704074a3430f5ec3decf..2172ff5c794c08be675571ded11652314c03a18a 100644 --- a/cores/arduino/Uart.cpp +++ b/cores/arduino/Uart.cpp @@ -20,11 +20,13 @@ #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, SercomRXPad _padRX, SercomUartTXPad _padTX) { sercom = _s; uc_pinRX = _pinRX; uc_pinTX = _pinTX; + uc_padRX=_padRX ; + uc_padTX=_padTX; } void Uart::begin(unsigned long baudrate) @@ -39,8 +41,7 @@ void Uart::begin(unsigned long baudrate, uint8_t config) 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); - + sercom->initPads(uc_padTX, uc_padRX); sercom->enableUART(); } @@ -140,13 +141,3 @@ SercomParityMode Uart::extractParity(uint8_t config) return SERCOM_ODD_PARITY; } } - -void SERCOM0_Handler() -{ - Serial1.IrqHandler(); -} - -void SERCOM5_Handler() -{ - Serial.IrqHandler(); -} diff --git a/cores/arduino/Uart.h b/cores/arduino/Uart.h index f2c439123543dcc178d820d0d17c361f6b8c5590..5245b6550378d579d262b387ca3bf070aef67e89 100644 --- a/cores/arduino/Uart.h +++ b/cores/arduino/Uart.h @@ -25,11 +25,10 @@ #include <cstddef> - class Uart : public HardwareSerial { public: - Uart(SERCOM *_s, uint8_t _pinRX, uint8_t _pinTX); + Uart(SERCOM *_s, uint8_t _pinRX, uint8_t _pinTX, SercomRXPad _padRX, SercomUartTXPad _padTX); void begin(unsigned long baudRate); void begin(unsigned long baudrate, uint8_t config); void end(); @@ -50,14 +49,12 @@ class Uart : public HardwareSerial uint8_t uc_pinRX; uint8_t uc_pinTX; + SercomRXPad uc_padRX; + SercomUartTXPad uc_padTX; SercomNumberStopBit extractNbStopBit(uint8_t config); SercomUartCharSize extractCharSize(uint8_t config); SercomParityMode extractParity(uint8_t config); }; -extern Uart Serial; -extern Uart Serial1; - - #endif diff --git a/variants/arduino_zero/variant.cpp b/variants/arduino_zero/variant.cpp index b8f26722a02f6b011e9d8d9c6201df7359782769..84df4033e690fa6a313c1c6a2d9a3e8f14070ca6 100644 --- a/variants/arduino_zero/variant.cpp +++ b/variants/arduino_zero/variant.cpp @@ -207,5 +207,15 @@ SERCOM sercom3( SERCOM3 ) ; SERCOM sercom4( SERCOM4 ) ; SERCOM sercom5( SERCOM5 ) ; -Uart Serial1( &sercom0, PIN_SERIAL1_RX, PIN_SERIAL1_TX ) ; -Uart Serial( &sercom5, PIN_SERIAL_RX, PIN_SERIAL_TX ) ; +Uart Serial1( &sercom0, PIN_SERIAL1_RX, PIN_SERIAL1_TX, PAD_SERIAL1_RX, PAD_SERIAL1_TX ) ; +Uart Serial( &sercom5, PIN_SERIAL_RX, PIN_SERIAL_TX, PAD_SERIAL_RX, PAD_SERIAL_TX ) ; +void SERCOM0_Handler() +{ + Serial1.IrqHandler(); +} + +void SERCOM5_Handler() +{ + Serial.IrqHandler(); +} + diff --git a/variants/arduino_zero/variant.h b/variants/arduino_zero/variant.h index 00dec561e8b03103052189554d3298b8c5882a59..fe09b8995b43c7f98b9a134ebee9d0d7d48645ca 100644 --- a/variants/arduino_zero/variant.h +++ b/variants/arduino_zero/variant.h @@ -106,12 +106,16 @@ static const uint8_t A5 = PIN_A5 ; * Serial interfaces */ // Serial (EDBG) -#define PIN_SERIAL_RX (31ul) -#define PIN_SERIAL_TX (30ul) +#define PIN_SERIAL_RX (31ul) +#define PIN_SERIAL_TX (30ul) +#define PAD_SERIAL_TX (UART_TX_PAD_2) +#define PAD_SERIAL_RX (SERCOM_RX_PAD_3) // Serial1 -#define PIN_SERIAL1_RX (0ul) -#define PIN_SERIAL1_TX (1ul) +#define PIN_SERIAL1_RX (0ul) +#define PIN_SERIAL1_TX (1ul) +#define PAD_SERIAL1_TX (UART_TX_PAD_2) +#define PAD_SERIAL1_RX (SERCOM_RX_PAD_3) /* * SPI Interfaces