kopia lustrzana https://github.com/espressif/esp-idf
Merge branch 'bugfix/fix_uart_timeout_bug_when_enable_reftick_v3.1' into 'release/v3.1'
driver(uart): Fix uart time_out bug when using ref_tick for releasev3.1 See merge request idf/esp-idf!2810pull/2666/head
commit
c892c96f9a
|
@ -44,6 +44,8 @@ static const char* UART_TAG = "uart";
|
||||||
#define UART_EMPTY_THRESH_DEFAULT (10)
|
#define UART_EMPTY_THRESH_DEFAULT (10)
|
||||||
#define UART_FULL_THRESH_DEFAULT (120)
|
#define UART_FULL_THRESH_DEFAULT (120)
|
||||||
#define UART_TOUT_THRESH_DEFAULT (10)
|
#define UART_TOUT_THRESH_DEFAULT (10)
|
||||||
|
#define UART_CLKDIV_FRAG_BIT_WIDTH (3)
|
||||||
|
#define UART_TOUT_REF_FACTOR_DEFAULT (UART_CLK_FREQ/(REF_CLK_FREQ<<UART_CLKDIV_FRAG_BIT_WIDTH))
|
||||||
#define UART_TX_IDLE_NUM_DEFAULT (0)
|
#define UART_TX_IDLE_NUM_DEFAULT (0)
|
||||||
#define UART_PATTERN_DET_QLEN_DEFAULT (10)
|
#define UART_PATTERN_DET_QLEN_DEFAULT (10)
|
||||||
|
|
||||||
|
@ -664,7 +666,13 @@ esp_err_t uart_intr_config(uart_port_t uart_num, const uart_intr_config_t *intr_
|
||||||
UART_ENTER_CRITICAL(&uart_spinlock[uart_num]);
|
UART_ENTER_CRITICAL(&uart_spinlock[uart_num]);
|
||||||
UART[uart_num]->int_clr.val = UART_INTR_MASK;
|
UART[uart_num]->int_clr.val = UART_INTR_MASK;
|
||||||
if(intr_conf->intr_enable_mask & UART_RXFIFO_TOUT_INT_ENA_M) {
|
if(intr_conf->intr_enable_mask & UART_RXFIFO_TOUT_INT_ENA_M) {
|
||||||
UART[uart_num]->conf1.rx_tout_thrhd = ((intr_conf->rx_timeout_thresh) & UART_RX_TOUT_THRHD_V);
|
//Hardware issue workaround: when using ref_tick, the rx timeout threshold needs increase to 10 times.
|
||||||
|
//T_ref = T_apb * APB_CLK/(REF_TICK << CLKDIV_FRAG_BIT_WIDTH)
|
||||||
|
if(UART[uart_num]->conf0.tick_ref_always_on == 0) {
|
||||||
|
UART[uart_num]->conf1.rx_tout_thrhd = ((intr_conf->rx_timeout_thresh * UART_TOUT_REF_FACTOR_DEFAULT) & UART_RX_TOUT_THRHD_V);
|
||||||
|
} else {
|
||||||
|
UART[uart_num]->conf1.rx_tout_thrhd = ((intr_conf->rx_timeout_thresh) & UART_RX_TOUT_THRHD_V);
|
||||||
|
}
|
||||||
UART[uart_num]->conf1.rx_tout_en = 1;
|
UART[uart_num]->conf1.rx_tout_en = 1;
|
||||||
} else {
|
} else {
|
||||||
UART[uart_num]->conf1.rx_tout_en = 0;
|
UART[uart_num]->conf1.rx_tout_en = 0;
|
||||||
|
|
Ładowanie…
Reference in New Issue