@@ -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