Added uart.alt(n) to swap to use alternate rx/tx lines.

if n = 0 -> std pinout.
if n != 0 -> alternate pinout (gpio13 and gpio15)
This commit is contained in:
btsimonh 2015-11-28 22:51:01 +00:00
parent 33e41a633e
commit b2345857e9
5 changed files with 72 additions and 0 deletions

37
app/driver/uart.c Normal file → Executable file
View File

@ -21,6 +21,10 @@
#ifndef FUNC_U0RXD
#define FUNC_U0RXD 0
#endif
#ifndef FUNC_U0CTS
#define FUNC_U0CTS 4
#endif
// For event signalling
static uint8 task = USER_TASK_PRIO_MAX;
@ -75,6 +79,39 @@ uart_config(uint8 uart_no)
SET_PERI_REG_MASK(UART_INT_ENA(uart_no), UART_RXFIFO_FULL_INT_ENA);
}
/******************************************************************************
* FunctionName : uart0_alt
* Description : Internal used function
* UART0 pins changed to 13,15 if 'on' is set, else set to normal pins
* Parameters : on - 1 = use alternate pins, 0 = use normal pins
* Returns : NONE
*******************************************************************************/
void ICACHE_FLASH_ATTR
uart0_alt(uint8 on)
{
if (on)
{
PIN_PULLUP_DIS(PERIPHS_IO_MUX_MTDO_U);
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U, FUNC_U0RTS);
PIN_PULLUP_EN(PERIPHS_IO_MUX_MTCK_U);
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTCK_U, FUNC_U0CTS);
// now make RTS/CTS behave as TX/RX
IOSWAP |= (1 << IOSWAPU0);
}
else
{
PIN_PULLUP_DIS(PERIPHS_IO_MUX_U0TXD_U);
PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0TXD_U, FUNC_U0TXD);
PIN_PULLUP_EN(PERIPHS_IO_MUX_U0RXD_U);
PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0RXD_U, FUNC_U0RXD);
// now make RX/TX behave as TX/RX
IOSWAP &= ~(1 << IOSWAPU0);
}
}
/******************************************************************************
* FunctionName : uart_tx_one_char
* Description : Internal used function

1
app/include/driver/uart.h Normal file → Executable file
View File

@ -102,6 +102,7 @@ typedef struct {
} UartDevice;
void uart_init(UartBautRate uart0_br, UartBautRate uart1_br, uint8 task_prio, os_signal_t sig_input);
void uart0_alt(uint8 on);
void uart0_sendStr(const char *str);
void uart0_putc(const char c);
void uart0_tx_buffer(uint8 *buf, uint16 len);

13
app/include/driver/uart_register.h Normal file → Executable file
View File

@ -125,4 +125,17 @@
#define UART_DATE( i ) (REG_UART_BASE( i ) + 0x78)
#define UART_ID( i ) (REG_UART_BASE( i ) + 0x7C)
#define ESP8266_DREG(addr) *((volatile uint32_t *)(0x3FF00000+(addr)))
//IO SWAP Register
#define IOSWAP ESP8266_DREG(0x28)
#define IOSWAPU 0 //Swaps UART
#define IOSWAPS 1 //Swaps SPI
#define IOSWAPU0 2 //Swaps UART 0 pins (u0rxd <-> u0cts), (u0txd <-> u0rts)
#define IOSWAPU1 3 //Swaps UART 1 pins (u1rxd <-> u1cts), (u1txd <-> u1rts)
#define IOSWAPHS 5 //Sets HSPI with higher prio
#define IOSWAP2HS 6 //Sets Two SPI Masters on HSPI
#define IOSWAP2CS 7 //Sets Two SPI Masters on CSPI
#endif // UART_REGISTER_H_INCLUDED

13
app/modules/uart.c Normal file → Executable file
View File

@ -116,6 +116,17 @@ static int uart_setup( lua_State* L )
return 1;
}
// Lua: alt( set )
static int uart_alt( lua_State* L )
{
unsigned set;
set = luaL_checkinteger( L, 1 );
platform_uart_alt( set );
return 0;
}
// Lua: write( id, string1, [string2], ..., [stringn] )
static int uart_write( lua_State* L )
{
@ -154,6 +165,8 @@ const LUA_REG_TYPE uart_map[] =
{ LSTRKEY( "setup" ), LFUNCVAL( uart_setup ) },
{ LSTRKEY( "write" ), LFUNCVAL( uart_write ) },
{ LSTRKEY( "on" ), LFUNCVAL( uart_on ) },
{ LSTRKEY( "alt" ), LFUNCVAL( uart_alt ) },
#if LUA_OPTIMIZE_MEMORY > 0
#endif

8
app/platform/platform.c Normal file → Executable file
View File

@ -251,6 +251,14 @@ uint32_t platform_uart_setup( unsigned id, uint32_t baud, int databits, int pari
return baud;
}
// if set=1, then alternate serial output pins are used. (15=rx, 13=tx)
void platform_uart_alt( int set )
{
uart0_alt( set );
return;
}
// Send: version with and without mux
void platform_uart_send( unsigned id, u8 data )
{