diff --git a/cores/esp8266/HardwareSerial.cpp b/cores/esp8266/HardwareSerial.cpp index 3a29c6701..1e638b0a7 100644 --- a/cores/esp8266/HardwareSerial.cpp +++ b/cores/esp8266/HardwareSerial.cpp @@ -193,6 +193,18 @@ void ICACHE_FLASH_ATTR uart0_uninit(uart_t* uart) os_free(uart); } +#define FUNC_U0CTS 4 +#define FUNC_U0RTS 4 + +void ICACHE_FLASH_ATTR uart0_swap(uart_t* uart) +{ + PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTCK_U, FUNC_U0CTS); + PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U, FUNC_U0RTS); + //SWAP PIN : U0TXD<==>U0RTS(MTDO, GPIO15) , U0RXD<==>U0CTS(MTCK, GPIO13) + SET_PERI_REG_MASK(0x3ff00028 , BIT2); + PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0TXD_U, FUNC_GPIO1); + PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0RXD_U, FUNC_GPIO3); +} void ICACHE_FLASH_ATTR uart_ignore_char(char c) @@ -251,6 +263,13 @@ void ICACHE_FLASH_ATTR HardwareSerial::end() _tx_buffer = 0; } +void ICACHE_FLASH_ATTR HardwareSerial::swap() +{ + uart0_swap(_uart); + pinMode(1, INPUT); + pinMode(3, INPUT); +} + void ICACHE_FLASH_ATTR HardwareSerial::setDebugOutput(bool en) { uart_set_debug(en); diff --git a/cores/esp8266/HardwareSerial.h b/cores/esp8266/HardwareSerial.h index c934d9c58..143dd3061 100644 --- a/cores/esp8266/HardwareSerial.h +++ b/cores/esp8266/HardwareSerial.h @@ -69,6 +69,7 @@ public: void begin(unsigned long baud) { begin(baud, 0); } void begin(unsigned long, uint8_t); void end(); + void swap(); //use GPIO13 and GPIO15 as RX and TX int available(void) override; int peek(void) override; int read(void) override;