@@ -59,7 +59,7 @@ struct uart_struct_t {
5959 uint16_t _rx_buffer_size , _tx_buffer_size ; // UART RX and TX buffer sizes
6060 bool _inverted ; // UART inverted signal
6161 uint8_t _rxfifo_full_thrhd ; // UART RX FIFO full threshold
62- int8_t _uart_clock_source ; // UART Clock Source used when it is started using uartBegin ()
62+ int8_t _uart_clock_source ; // UART Clock Source that should be used if user defines an specific one with setClockSource ()
6363};
6464
6565#if CONFIG_DISABLE_HAL_LOCKS
@@ -820,7 +820,7 @@ uart_t *uartBegin(
820820 uart_config .baud_rate = baudrate ;
821821#if SOC_UART_LP_NUM >= 1
822822 if (uart_nr >= SOC_UART_HP_NUM ) { // it is a LP UART NUM
823- if (uart -> _uart_clock_source > 0 ) {
823+ if (uart -> _uart_clock_source >= 0 ) {
824824 uart_config .lp_source_clk = (soc_periph_lp_uart_clk_src_t )uart -> _uart_clock_source ; // use user defined LP UART clock
825825 log_v ("Setting UART%d to user defined LP clock source (%d) " , uart_nr , uart -> _uart_clock_source );
826826 } else {
@@ -881,14 +881,7 @@ uart_t *uartBegin(
881881 uart -> _tx_buffer_size = tx_buffer_size ;
882882 uart -> has_peek = false;
883883 uart -> peek_byte = 0 ;
884- #if SOC_UART_LP_NUM >= 1
885- if (uart_nr >= SOC_UART_HP_NUM ) {
886- uart -> _uart_clock_source = uart_config .lp_source_clk ;
887- } else
888- #endif
889- {
890- uart -> _uart_clock_source = uart_config .source_clk ;
891- }
884+ // uart->_uart_clock_source can only change by explicit user API request/call
892885 }
893886 UART_MUTEX_UNLOCK ();
894887
@@ -1149,10 +1142,9 @@ bool uartSetBaudRate(uart_t *uart, uint32_t baud_rate) {
11491142 }
11501143 bool retCode = true;
11511144 soc_module_clk_t newClkSrc = UART_SCLK_DEFAULT ;
1152- int8_t previousClkSrc = uart -> _uart_clock_source ;
11531145#if SOC_UART_LP_NUM >= 1
11541146 if (uart -> num >= SOC_UART_HP_NUM ) { // it is a LP UART NUM
1155- if (uart -> _uart_clock_source > 0 ) {
1147+ if (uart -> _uart_clock_source >= 0 ) {
11561148 newClkSrc = (soc_periph_lp_uart_clk_src_t )uart -> _uart_clock_source ; // use user defined LP UART clock
11571149 log_v ("Setting UART%d to user defined LP clock source (%d) " , uart -> num , newClkSrc );
11581150 } else {
@@ -1187,13 +1179,10 @@ bool uartSetBaudRate(uart_t *uart, uint32_t baud_rate) {
11871179 }
11881180 }
11891181 UART_MUTEX_LOCK ();
1190- // if necessary, set the correct UART Clock Source before changing the baudrate
1191- if (previousClkSrc < 0 || previousClkSrc != newClkSrc ) {
1192- HP_UART_SRC_CLK_ATOMIC () {
1193- uart_ll_set_sclk (UART_LL_GET_HW (uart -> num ), newClkSrc );
1194- }
1195- uart -> _uart_clock_source = newClkSrc ;
1182+ HP_UART_SRC_CLK_ATOMIC () {
1183+ uart_ll_set_sclk (UART_LL_GET_HW (uart -> num ), newClkSrc );
11961184 }
1185+ // uart->_uart_clock_source can only change by explicit user API request/call
11971186 if (uart_set_baudrate (uart -> num , baud_rate ) == ESP_OK ) {
11981187 log_v ("Setting UART%d baud rate to %ld." , uart -> num , baud_rate );
11991188 uart -> _baudrate = baud_rate ;
@@ -1312,7 +1301,7 @@ bool uartSetClockSource(uint8_t uartNum, uart_sclk_t clkSrc) {
13121301 {
13131302 uart -> _uart_clock_source = clkSrc ;
13141303 }
1315- //log_i ("UART%d set clock source to %d", uart->num, uart->_uart_clock_source);
1304+ log_v ("UART%d set clock source to %d" , uart -> num , uart -> _uart_clock_source );
13161305 return true;
13171306}
13181307
0 commit comments