Example #1
0
//===============================================================================
// 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;
    }
Example #2
0
//-------------------------------------------------------------------------------
// 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);
}
Example #3
0
// not used
uint32 phy_get_mactime(void)
{
	MEMW();
	return IOREG(0x3FF20C00); // phy_mactime
}