Skip to content

Commit 3d82a64

Browse files
committed
WIP, need cleaning
1 parent 0f17f7d commit 3d82a64

File tree

1 file changed

+44
-27
lines changed

1 file changed

+44
-27
lines changed

cores/esp32/esp32-hal-uart.c

+44-27
Original file line numberDiff line numberDiff line change
@@ -647,12 +647,13 @@ unsigned long uartBaudrateDetect(uart_t *uart, bool flg)
647647

648648
while(hw->rxd_cnt.rxd_edge_cnt < 30) { // UART_PULSE_NUM(uart_num)
649649
if(flg) return 0;
650-
ets_delay_us(1000);
650+
// ets_delay_us(1000);
651+
delay(1);
651652
}
652653

653654
UART_MUTEX_LOCK();
654-
//log_i("lowpulse_min_cnt = %d hightpulse_min_cnt = %d", hw->lowpulse.min_cnt, hw->highpulse.min_cnt);
655-
unsigned long ret = (hw->lowpulse.lowpulse_min_cnt + hw->highpulse.highpulse_min_cnt + 2) / 2;
655+
log_i("rxd_edge_cnt = %d lowpulse_min_cnt = %d hightpulse_min_cnt = %d", hw->rxd_cnt.rxd_edge_cnt, hw->lowpulse.lowpulse_min_cnt, hw->highpulse.highpulse_min_cnt);
656+
unsigned long ret = (hw->lowpulse.lowpulse_min_cnt + hw->highpulse.highpulse_min_cnt) >> 1;
656657
UART_MUTEX_UNLOCK();
657658

658659
return ret;
@@ -669,6 +670,7 @@ unsigned long uartBaudrateDetect(uart_t *uart, bool flg)
669670
UART_MUTEX_UNLOCK();
670671

671672
return ret;
673+
#endif
672674
#endif
673675
return 0;
674676
}
@@ -714,11 +716,14 @@ void uartStartDetectBaudrate(uart_t *uart) {
714716
//hw->conf0.autobaud_en = 0;
715717
//hw->conf0.autobaud_en = 1;
716718
#elif CONFIG_IDF_TARGET_ESP32S3
719+
// log_v("Start Init HW for baud detection");
717720
uart_dev_t *hw = UART_LL_GET_HW(uart->num);
718-
hw->rx_filt.glitch_filt = 0x08;
721+
hw->rx_filt.glitch_filt = 1;
719722
hw->rx_filt.glitch_filt_en = 1;
720723
hw->conf0.autobaud_en = 0;
721724
hw->conf0.autobaud_en = 1;
725+
// log_v("End Init HW for baud detection");
726+
722727
#else
723728
uart_dev_t *hw = UART_LL_GET_HW(uart->num);
724729
hw->auto_baud.glitch_filt = 0x08;
@@ -763,32 +768,44 @@ uartDetectBaudrate(uart_t *uart)
763768
#ifdef CONFIG_IDF_TARGET_ESP32S3
764769
hw->conf0.autobaud_en = 0;
765770

766-
uart_sclk_t clk_src;
767-
uart_ll_get_sclk(hw, &clk_src);
771+
// uart_sclk_t clk_src;
772+
// uart_ll_get_sclk(hw, &clk_src);
768773

769-
switch(clk_src)
770-
{
771-
case UART_SCLK_APB:
772-
baudrate = getApbFrequency() / divisor;
773-
break;
774+
const uint32_t sclk_freq = uart_ll_get_sclk_freq(hw);
775+
// const uart_clkdiv_reg_t div_reg = {.val = hw->clkdiv.val};
776+
// const uint32_t div16 = ( (div_reg.clkdiv * 16) + div_reg.clkdiv_frag );
774777

775-
#if SOC_UART_SUPPORT_RTC_CLK
776-
case UART_SCLK_RTC:
777-
// baudrate = rtc_clk_slow_freq_get_hz() / divisor;
778-
log_e("Currently unsupported clock source: UART_SCLK_RTC");
779-
return 0;
780-
#endif
778+
// log_v("Divisor: %d", divisor);
779+
// log_v("Divider: %d", div16);
781780

782-
#if SOC_UART_SUPPORT_XTAL_CLK
783-
case UART_SCLK_XTAL:
784-
baudrate = (getXtalFrequencyMhz() * 1000000) / divisor;
785-
break;
786-
#endif
787-
788-
default:
789-
log_e("You should not ended up here! Unsupported clock source: %d", clk_src);
790-
return 0;
791-
}
781+
782+
baudrate = sclk_freq / (divisor * 2);
783+
784+
// switch(clk_src)
785+
// {
786+
// case UART_SCLK_APB:
787+
// log_v("Clock is APB");
788+
// baudrate = getApbFrequency() / divisor;
789+
// break;
790+
791+
// #if SOC_UART_SUPPORT_RTC_CLK
792+
// case UART_SCLK_RTC:
793+
// // baudrate = rtc_clk_slow_freq_get_hz() / divisor;
794+
// log_e("Currently unsupported clock source: UART_SCLK_RTC");
795+
// return 0;
796+
// #endif
797+
798+
// #if SOC_UART_SUPPORT_XTAL_CLK
799+
// case UART_SCLK_XTAL:
800+
// log_v("Clock is XTAL");
801+
// baudrate = (getXtalFrequencyMhz() * 1000000) / divisor;
802+
// break;
803+
// #endif
804+
805+
// default:
806+
// log_e("You should not ended up here! Unsupported clock source: %d", clk_src);
807+
// return 0;
808+
// }
792809

793810
#else
794811
hw->auto_baud.en = 0;

0 commit comments

Comments
 (0)