1+ #include "tremo_delay.h"
12#include "tremo_rcc.h"
23
34/**
@@ -17,10 +18,7 @@ uint32_t rcc_get_clk_freq(rcc_clk_t clk)
1718 sysclk_freq = RCC_FREQ_48M ;
1819 break ;
1920 }
20- case RCC_CR0_SYSCLK_SEL_RCO32K : {
21- sysclk_freq = RCC_FREQ_32000 ;
22- break ;
23- }
21+ case RCC_CR0_SYSCLK_SEL_RCO32K :
2422 case RCC_CR0_SYSCLK_SEL_XO32K : {
2523 sysclk_freq = RCC_FREQ_32768 ;
2624 break ;
@@ -328,6 +326,7 @@ void rcc_set_lptimer0_clk_source(rcc_lptimer0_clk_source_t clk_source)
328326 if (clk_source == RCC_LPTIMER0_CLK_SOURCE_EXTCLK ) {
329327 TREMO_REG_EN (RCC -> CR1 , RCC_CR1_LPTIMER0_EXTCLK_SEL_MASK , true);
330328 } else {
329+ TREMO_REG_EN (RCC -> CR1 , RCC_CR1_LPTIMER0_EXTCLK_SEL_MASK , false);
331330 TREMO_REG_SET (RCC -> CR1 , RCC_CR1_LPTIMER0_CLK_SEL_MASK , clk_source );
332331 }
333332}
@@ -354,6 +353,7 @@ void rcc_set_lptimer1_clk_source(rcc_lptimer1_clk_source_t clk_source)
354353 if (clk_source == RCC_LPTIMER1_CLK_SOURCE_EXTCLK ) {
355354 TREMO_REG_EN (RCC -> CR1 , RCC_CR1_LPTIMER1_EXTCLK_SEL_MASK , true);
356355 } else {
356+ TREMO_REG_EN (RCC -> CR1 , RCC_CR1_LPTIMER1_EXTCLK_SEL_MASK , false);
357357 TREMO_REG_SET (RCC -> CR1 , RCC_CR1_LPTIMER1_CLK_SEL_MASK , clk_source );
358358 }
359359}
@@ -812,6 +812,8 @@ void rcc_enable_peripheral_clk(rcc_peripheral_t peripheral, bool new_state)
812812 while ((RCC -> SR & RCC_SR_ALL_DONE ) != RCC_SR_ALL_DONE )
813813 ;
814814 TREMO_REG_EN (RCC -> CGR2 , RCC_CGR2_LPUART_AON_CLK_EN_MASK , new_state );
815+ while ((RCC -> SR & RCC_SR_LPUART_AON_CLK_EN_DONE ) != RCC_SR_LPUART_AON_CLK_EN_DONE )
816+ ;
815817 break ;
816818 }
817819 case RCC_PERIPHERAL_SSP0 : {
@@ -860,6 +862,8 @@ void rcc_enable_peripheral_clk(rcc_peripheral_t peripheral, bool new_state)
860862 while ((RCC -> SR & RCC_SR_ALL_DONE ) != RCC_SR_ALL_DONE )
861863 ;
862864 TREMO_REG_EN (RCC -> CGR2 , RCC_CGR2_LCD_AON_CLK_EN_MASK , new_state );
865+ while ((RCC -> SR & RCC_SR_LCD_AON_CLK_EN_DONE ) != RCC_SR_LCD_AON_CLK_EN_DONE )
866+ ;
863867 break ;
864868 }
865869 case RCC_PERIPHERAL_LORA : {
@@ -913,6 +917,8 @@ void rcc_enable_peripheral_clk(rcc_peripheral_t peripheral, bool new_state)
913917 while ((RCC -> SR & RCC_SR_ALL_DONE ) != RCC_SR_ALL_DONE )
914918 ;
915919 TREMO_REG_EN (RCC -> CGR2 , RCC_CGR2_LPTIMER0_AON_CLK_EN_MASK , new_state );
920+ while ((RCC -> SR & RCC_SR_LPTIM_AON_CLK_EN_DONE ) != RCC_SR_LPTIM_AON_CLK_EN_DONE )
921+ ;
916922
917923 TREMO_REG_EN (RCC -> CGR1 , RCC_CGR1_LPTIMER0_CLK_EN_MASK , new_state );
918924 } else {
@@ -921,8 +927,10 @@ void rcc_enable_peripheral_clk(rcc_peripheral_t peripheral, bool new_state)
921927 while ((RCC -> SR & RCC_SR_ALL_DONE ) != RCC_SR_ALL_DONE )
922928 ;
923929 TREMO_REG_EN (RCC -> CGR2 , RCC_CGR2_LPTIMER0_AON_CLK_EN_MASK , new_state );
930+ while ((RCC -> SR & RCC_SR_LPTIM_AON_CLK_EN_DONE ) != RCC_SR_LPTIM_AON_CLK_EN_DONE )
931+ ;
924932
925- TREMO_REG_EN (RCC -> CGR1 , RCC_CGR1_LPTIMER0_PCLK_EN_MASK , new_state );
933+ // TREMO_REG_EN(RCC->CGR1, RCC_CGR1_LPTIMER0_PCLK_EN_MASK, new_state);
926934 }
927935
928936 break ;
@@ -935,6 +943,8 @@ void rcc_enable_peripheral_clk(rcc_peripheral_t peripheral, bool new_state)
935943 while ((RCC -> SR & RCC_SR_ALL_DONE ) != RCC_SR_ALL_DONE )
936944 ;
937945 TREMO_REG_EN (RCC -> CGR2 , RCC_CGR2_LPTIMER1_AON_CLK_EN_MASK , new_state );
946+ while ((RCC -> SR & RCC_SR_LPTIMER1_AON_CLK_EN_DONE ) != RCC_SR_LPTIMER1_AON_CLK_EN_DONE )
947+ ;
938948
939949 TREMO_REG_EN (RCC -> CGR1 , RCC_CGR1_LPTIMER1_CLK_EN_MASK , new_state );
940950 } else {
@@ -943,8 +953,10 @@ void rcc_enable_peripheral_clk(rcc_peripheral_t peripheral, bool new_state)
943953 while ((RCC -> SR & RCC_SR_ALL_DONE ) != RCC_SR_ALL_DONE )
944954 ;
945955 TREMO_REG_EN (RCC -> CGR2 , RCC_CGR2_LPTIMER1_AON_CLK_EN_MASK , new_state );
956+ while ((RCC -> SR & RCC_SR_LPTIMER1_AON_CLK_EN_DONE ) != RCC_SR_LPTIMER1_AON_CLK_EN_DONE )
957+ ;
946958
947- TREMO_REG_EN (RCC -> CGR1 , RCC_CGR1_LPTIMER1_PCLK_EN_MASK , new_state );
959+ // TREMO_REG_EN(RCC->CGR1, RCC_CGR1_LPTIMER1_PCLK_EN_MASK, new_state);
948960 }
949961
950962 break ;
@@ -955,6 +967,8 @@ void rcc_enable_peripheral_clk(rcc_peripheral_t peripheral, bool new_state)
955967 while ((RCC -> SR & RCC_SR_ALL_DONE ) != RCC_SR_ALL_DONE )
956968 ;
957969 TREMO_REG_EN (RCC -> CGR2 , RCC_CGR2_IWDG_CLK_EN_MASK , new_state );
970+ while ((RCC -> SR & RCC_SR_IWDG_AON_CLK_EN_DONE ) != RCC_SR_IWDG_AON_CLK_EN_DONE )
971+ ;
958972
959973 break ;
960974 }
@@ -969,6 +983,8 @@ void rcc_enable_peripheral_clk(rcc_peripheral_t peripheral, bool new_state)
969983 while ((RCC -> SR & RCC_SR_ALL_DONE ) != RCC_SR_ALL_DONE )
970984 ;
971985 TREMO_REG_EN (RCC -> CGR2 , RCC_CGR2_RTC_AON_CLK_EN_MASK , new_state );
986+ while ((RCC -> SR & RCC_SR_RTC_AON_CLK_EN_DONE ) != RCC_SR_RTC_AON_CLK_EN_DONE )
987+ ;
972988 break ;
973989 }
974990 case RCC_PERIPHERAL_CRC : {
@@ -1085,6 +1101,15 @@ void rcc_rst_peripheral(rcc_peripheral_t peripheral, bool new_state)
10851101
10861102 TREMO_REG_EN (RCC -> RST0 , 1 << pos , !new_state );
10871103 }
1104+
1105+ if ((!new_state ) && (peripheral == RCC_PERIPHERAL_LPTIMER1 ||
1106+ peripheral == RCC_PERIPHERAL_LPTIMER0 ||
1107+ peripheral == RCC_PERIPHERAL_LCD ||
1108+ peripheral == RCC_PERIPHERAL_RTC ||
1109+ peripheral == RCC_PERIPHERAL_IWDG ||
1110+ peripheral == RCC_PERIPHERAL_LPUART )) {
1111+ delay_us (92 );
1112+ }
10881113}
10891114
10901115/**
0 commit comments