//=============================================================================== // Timer: UART->TCP (UART->bufo->TCP) // loading_rx_buf() чтение fifo UART rx в буфер передачи TCP // Сигнал CTS/RTS пока не огранизован в связи с неясностью, // на какую ногу модуля его делать //------------------------------------------------------------------------------- void ICACHE_FLASH_ATTR loading_rx_buf(void) { TCP_SERV_CONN *conn = tcp2uart_conn; if(conn == NULL || conn->pbufo == NULL || conn->flag.user_flg1) return; // нет буфера + тест на повторное вхождение conn->flag.user_flg1 = 1; ets_intr_lock(); // ETS_UART_INTR_DISABLE(); MEMW(); UART0_INT_ENA &= ~ UART_RXFIFO_FULL_INT_ENA; // запретить прерывание по приему символа ets_intr_unlock(); // ETS_UART_INTR_ENABLE(); os_timer_disarm(&uart0_rx_buf_timer); if(conn->flag.busy_bufo) { // в данный момент bufo обрабатывается (передается LwIP-у)? // попробовать повторить через время ets_timer_arm_new(&uart0_rx_buf_timer, 10, 0, 0); // 10us conn->flag.user_flg1 = 0; return; } uint8 *pend = conn->pbufo + conn->sizeo; // дополнить буфер передачи символами из rx fifo while((conn->ptrtx + conn->cntro) < pend) { MEMW(); if((UART0_STATUS >> UART_RXFIFO_CNT_S) & UART_RXFIFO_CNT) conn->ptrtx[conn->cntro++] = UART0_FIFO; else break; }
//------------------------------------------------------------------------------- // tcp2uart_int_rxtx_disable //------------------------------------------------------------------------------- void ICACHE_FLASH_ATTR tcp2uart_int_rxtx_disable(void) { tcp2uart_conn = NULL; ets_intr_lock(); // ETS_UART_INTR_DISABLE(); MEMW(); UART0_CONF1 &= ~UART_RX_FLOW_EN; // update RST UART0_INT_ENA &= ~(UART_RXFIFO_FULL_INT_ENA | UART_TXFIFO_EMPTY_INT_ENA); //clear rx and tx fifo, not ready uint32 conf0 = UART0_CONF0; UART0_CONF0 = conf0 | UART_RXFIFO_RST | UART_TXFIFO_RST; UART0_CONF0 = conf0 & (~ (UART_RXFIFO_RST | UART_TXFIFO_RST)); // update_rts0(); ets_intr_unlock(); // ETS_UART_INTR_ENABLE(); //? WRITE_PERI_REG(UART_INT_CLR(UART0), UART_RXFIFO_FULL_INT_CLR | UART_TXFIFO_EMPTY_INT_CLR); os_timer_disarm(&uart0_tx_buf_timer); os_timer_setfn(&uart0_tx_buf_timer, (os_timer_func_t *)send_tx_buf, NULL); os_timer_disarm(&uart0_rx_buf_timer); os_timer_setfn(&uart0_rx_buf_timer, (os_timer_func_t *)loading_rx_buf, NULL); }
// not used uint32 phy_get_mactime(void) { MEMW(); return IOREG(0x3FF20C00); // phy_mactime }