From 78a0b12ed932f0f2d6bb991d99a88c3e222e32f0 Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Fri, 9 Jan 2015 02:33:42 +0300 Subject: [PATCH] Add method to use GPIO13 and GPIO15 as UART RX and TX --- build/shared/lib/keywords.txt | 1 + .../esp8266/cores/esp8266/HardwareSerial.cpp | 19 +++++++++++++++++++ .../esp8266/cores/esp8266/HardwareSerial.h | 1 + 3 files changed, 21 insertions(+) diff --git a/build/shared/lib/keywords.txt b/build/shared/lib/keywords.txt index d77a4b10c..e5bc96533 100644 --- a/build/shared/lib/keywords.txt +++ b/build/shared/lib/keywords.txt @@ -179,6 +179,7 @@ println KEYWORD2 Serial_Println available KEYWORD2 Serial_Available availableForWrite KEYWORD2 flush KEYWORD2 Serial_Flush +swap KEYWORD2 setTimeout KEYWORD2 find KEYWORD2 findUntil KEYWORD2 diff --git a/hardware/arduino/esp8266/cores/esp8266/HardwareSerial.cpp b/hardware/arduino/esp8266/cores/esp8266/HardwareSerial.cpp index 3a29c6701..1e638b0a7 100644 --- a/hardware/arduino/esp8266/cores/esp8266/HardwareSerial.cpp +++ b/hardware/arduino/esp8266/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/hardware/arduino/esp8266/cores/esp8266/HardwareSerial.h b/hardware/arduino/esp8266/cores/esp8266/HardwareSerial.h index c934d9c58..143dd3061 100644 --- a/hardware/arduino/esp8266/cores/esp8266/HardwareSerial.h +++ b/hardware/arduino/esp8266/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;