This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

zephyr uart_rx_enable() timeout problem

Sorry, my English is very bad.

I think I can only express my problem in Chinese.

在使用异步串口时,使用uart_rx_enable()设置的超时时间和真实发生UART_RX_RDY事件的时间相差巨大

using async serial port.

The timeout set with uart_rx_enable() is not equal to the time when UART_RX_RDY event occur because of the timeout.

Part of the code:

void start(u8_t *buf, size_t len)
{
    int ret;
    LOG_WRN("uart_rx_enable(uart_dev, buf, len, 500)");
    uart_rx_enable(uart_dev, buf, len, 500);
    ret = k_sem_take(&uart_rx_rdy, K_MSEC(10000));
}

static void uart_callback(struct uart_event *evt, void *user_data)
{
	switch (evt->type) {
	case UART_TX_DONE:
		LOG_INF("UART_TX_DONE");
		k_sem_give(&uart_tx_done);
		break;
	case UART_TX_ABORTED:
		LOG_INF("UART_TX_ABORTED");
		uart_sent_cnt = evt->data.tx.len;
		k_sem_give(&uart_tx_aborted);
		break;
	case UART_RX_RDY:
		LOG_INF("UART_RX_RDY: %d", evt->data.rx.len);
		uart_received_cnt = evt->data.rx.len;
		k_sem_give(&uart_rx_rdy);
		break;
	case UART_RX_BUF_RELEASED:
		k_sem_give(&uart_rx_buf_released);
		break;
	case UART_RX_DISABLED:
		k_sem_give(&uart_rx_disabled);
		break;
	case UART_RX_BUF_REQUEST:
		LOG_INF("UART_RX_BUF_REQUEST");
		break;
	default:
		break;
	}
}

Parents Reply Children
No Data
Related