diff --git a/serial/uart.c b/serial/uart.c index 3141ce6..d5160f9 100644 --- a/serial/uart.c +++ b/serial/uart.c @@ -69,6 +69,9 @@ tx_enable(bool state) #endif } +os_timer_t uart_tx_enable_timer; +bool uart_tx_enable_timer_inited = false; + /****************************************************************************** * FunctionName : tx_completed_interrupt * Description : Internal used function @@ -77,8 +80,9 @@ tx_enable(bool state) * Returns : NONE *******************************************************************************/ static void ICACHE_FLASH_ATTR -tx_completed_interrupt(void *arg) +tx_completed_interrupt(void *unused) { + os_timer_disarm(&uart_tx_enable_timer); tx_enable(false); } @@ -152,8 +156,6 @@ uart_config(uint8 uart_no) WRITE_PERI_REG(UART_INT_CLR(uart_no), 0xffff); } -os_timer_t uart_tx_enable_timer; -bool uart_tx_enable_timer_inited = false; /****************************************************************************** * FunctionName : uart1_tx_one_char @@ -168,12 +170,13 @@ uart_tx_one_char(uint8 uart, uint8 c) //Wait until there is room in the FIFO while (((READ_PERI_REG(UART_STATUS(uart))>>UART_TXFIFO_CNT_S)&UART_TXFIFO_CNT)>=100) ; //Send the character - if (UART0 == uart) { + if (UART0 == uart && uart0_tx_enable_pin >= 0) { if (uart_tx_enable_timer_inited) { - // If a tx_completed_interrupt has already been scheduled, cancel it before it fires during our transmission + // A tx_completed_interrupt may have already been scheduled, cancel it before it fires during our transmission os_timer_disarm(&uart_tx_enable_timer); } else { os_timer_setfn(&uart_tx_enable_timer, tx_completed_interrupt, NULL); + uart_tx_enable_timer_inited = true; } tx_enable(true);