@@ -55,95 +55,111 @@ extern "C" {
5555uint32_t spi_getClkFreqInst (SPI_TypeDef * spi_inst )
5656{
5757 uint32_t spi_freq = SystemCoreClock ;
58-
59- #if defined(STM32F0xx ) || defined(STM32G0xx )
60- UNUSED (spi_inst );
61- /* SPIx source CLK is PCKL1 */
62- spi_freq = HAL_RCC_GetPCLK1Freq ();
63- #elif defined(STM32H7xx )
64- /* Get source clock depending on SPI instance */
6558 if (spi_inst != NP ) {
66- switch ((uint32_t )spi_inst ) {
67- case (uint32_t )SPI1 :
68- case (uint32_t )SPI2 :
69- case (uint32_t )SPI3 :
70- spi_freq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_SPI123 );
71- break ;
72- case (uint32_t )SPI4 :
73- case (uint32_t )SPI5 :
59+ #if defined(STM32F0xx ) || defined(STM32G0xx )
60+ /* SPIx source CLK is PCKL1 */
61+ spi_freq = HAL_RCC_GetPCLK1Freq ();
62+ #else
63+ #if defined(SPI1_BASE )
64+ if (spi_inst == SPI1 ) {
65+ #if defined(RCC_PERIPHCLK_SPI1 ) || defined(RCC_PERIPHCLK_SPI123 )
66+ #ifdef RCC_PERIPHCLK_SPI1
67+ spi_freq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_SPI1 );
68+ #else
69+ spi_freq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_SPI123 );
70+ #endif
71+ if (spi_freq == 0 )
72+ #endif
73+ {
74+ /* SPI1, SPI4, SPI5 and SPI6. Source CLK is PCKL2 */
7475 spi_freq = HAL_RCC_GetPCLK2Freq ();
75- break ;
76- case (uint32_t )SPI6 :
77- spi_freq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_SPI6 );
78- break ;
79- default :
80- core_debug ("CLK: SPI instance not set" );
81- break ;
76+ }
8277 }
83- }
84- #elif defined(STM32MP1xx )
85- /* Get source clock depending on SPI instance */
86- if (spi_inst != NP ) {
87- switch ((uint32_t )spi_inst ) {
88- case (uint32_t )SPI1 :
89- spi_freq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_SPI1 );
90- break ;
91- case (uint32_t )SPI2 :
92- case (uint32_t )SPI3 :
93- spi_freq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_SPI23 );
94- break ;
95- case (uint32_t )SPI4 :
96- case (uint32_t )SPI5 :
97- spi_freq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_SPI45 );
98- break ;
99- case (uint32_t )SPI6 :
100- spi_freq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_SPI6 );
101- break ;
102- default :
103- core_debug ("CLK: SPI instance not set" );
104- break ;
78+ #endif // SPI1_BASE
79+ #if defined(SPI2_BASE )
80+ if (spi_inst == SPI2 ) {
81+ #if defined(RCC_PERIPHCLK_SPI2 ) || defined(RCC_PERIPHCLK_SPI123 ) || \
82+ defined(RCC_PERIPHCLK_SPI23 )
83+ #ifdef RCC_PERIPHCLK_SPI2
84+ spi_freq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_SPI2 );
85+ #elif defined(RCC_PERIPHCLK_SPI123 )
86+ spi_freq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_SPI123 );
87+ #else
88+ spi_freq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_SPI23 );
89+ #endif
90+ if (spi_freq == 0 )
91+ #endif
92+ {
93+ /* SPI_2 and SPI_3. Source CLK is PCKL1 */
94+ spi_freq = HAL_RCC_GetPCLK1Freq ();
95+ }
10596 }
106- }
97+ #endif // SPI2_BASE
98+ #if defined(SPI3_BASE )
99+ if (spi_inst == SPI3 ) {
100+ #if defined(RCC_PERIPHCLK_SPI3 ) || defined(RCC_PERIPHCLK_SPI123 ) || \
101+ defined(RCC_PERIPHCLK_SPI23 )
102+ #ifdef RCC_PERIPHCLK_SPI3
103+ spi_freq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_SPI3 );
104+ #elif defined(RCC_PERIPHCLK_SPI123 )
105+ spi_freq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_SPI123 );
107106#else
108- if (spi_inst != NP ) {
109- /* Get source clock depending on SPI instance */
110- switch ((uint32_t )spi_inst ) {
111- #if defined(SPI1_BASE ) || defined(SPI4_BASE ) || defined(SPI5_BASE ) || defined(SPI6_BASE )
112- /* Some STM32's (eg. STM32F302x8) have no SPI1, but do have SPI2/3. */
113- #if defined SPI1_BASE
114- case (uint32_t )SPI1 :
107+ spi_freq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_SPI23 );
115108#endif
116- #if defined SPI4_BASE
117- case (uint32_t )SPI4 :
109+ if (spi_freq == 0 )
118110#endif
119- #if defined SPI5_BASE
120- case (uint32_t )SPI5 :
111+ {
112+ /* SPI_2 and SPI_3. Source CLK is PCKL1 */
113+ spi_freq = HAL_RCC_GetPCLK1Freq ();
114+ }
115+ }
116+ #endif // SPI3_BASE
117+ #if defined(SPI4_BASE )
118+ if (spi_inst == SPI4 ) {
119+ #if defined(RCC_PERIPHCLK_SPI4 ) || defined(RCC_PERIPHCLK_SPI45 )
120+ #ifdef RCC_PERIPHCLK_SPI4
121+ spi_freq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_SPI4 );
122+ #else
123+ spi_freq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_SPI45 );
121124#endif
122- #if defined SPI6_BASE
123- case (uint32_t )SPI6 :
125+ if (spi_freq == 0 )
124126#endif
127+ {
125128 /* SPI1, SPI4, SPI5 and SPI6. Source CLK is PCKL2 */
126129 spi_freq = HAL_RCC_GetPCLK2Freq ();
127- break ;
128- #endif /* SPI[1456]_BASE */
129-
130- #if defined(SPI2_BASE ) || defined (SPI3_BASE )
131- #if defined SPI2_BASE
132- case (uint32_t )SPI2 :
130+ }
131+ }
132+ #endif // SPI4_BASE
133+ #if defined(SPI5_BASE )
134+ if (spi_inst == SPI5 ) {
135+ #if defined(RCC_PERIPHCLK_SPI5 ) || defined(RCC_PERIPHCLK_SPI45 )
136+ #ifdef RCC_PERIPHCLK_SPI5
137+ spi_freq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_SPI5 );
138+ #else
139+ spi_freq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_SPI45 );
133140#endif
134- #if defined SPI3_BASE
135- case (uint32_t )SPI3 :
141+ if (spi_freq == 0 )
136142#endif
137- /* SPI_2 and SPI_3. Source CLK is PCKL1 */
138- spi_freq = HAL_RCC_GetPCLK1Freq ();
139- break ;
143+ {
144+ /* SPI1, SPI4, SPI5 and SPI6. Source CLK is PCKL2 */
145+ spi_freq = HAL_RCC_GetPCLK2Freq ();
146+ }
147+ }
148+ #endif // SPI5_BASE
149+ #if defined(SPI6_BASE )
150+ if (spi_inst == SPI6 ) {
151+ #if defined(RCC_PERIPHCLK_SPI6 )
152+ spi_freq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_SPI6 );
153+ if (spi_freq == 0 )
140154#endif
141- default :
142- core_debug ("CLK: SPI instance not set" );
143- break ;
155+ {
156+ /* SPI1, SPI4, SPI5 and SPI6. Source CLK is PCKL2 */
157+ spi_freq = HAL_RCC_GetPCLK2Freq ();
158+ }
144159 }
145- }
160+ #endif // SPI6_BASE
146161#endif
162+ }
147163 return spi_freq ;
148164}
149165
0 commit comments