@@ -55,95 +55,111 @@ extern "C" {
55
55
uint32_t spi_getClkFreqInst (SPI_TypeDef * spi_inst )
56
56
{
57
57
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 */
65
58
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 */
74
75
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
+ }
82
77
}
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
+ }
105
96
}
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 );
107
106
#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 );
115
108
#endif
116
- #if defined SPI4_BASE
117
- case (uint32_t )SPI4 :
109
+ if (spi_freq == 0 )
118
110
#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 );
121
124
#endif
122
- #if defined SPI6_BASE
123
- case (uint32_t )SPI6 :
125
+ if (spi_freq == 0 )
124
126
#endif
127
+ {
125
128
/* SPI1, SPI4, SPI5 and SPI6. Source CLK is PCKL2 */
126
129
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 );
133
140
#endif
134
- #if defined SPI3_BASE
135
- case (uint32_t )SPI3 :
141
+ if (spi_freq == 0 )
136
142
#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 )
140
154
#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
+ }
144
159
}
145
- }
160
+ #endif // SPI6_BASE
146
161
#endif
162
+ }
147
163
return spi_freq ;
148
164
}
149
165
0 commit comments