@@ -189,192 +189,243 @@ static I2C_HandleTypeDef *i2c_handles[I2C_NUM];
189189static uint32_t i2c_getClkFreq (I2C_TypeDef * i2c )
190190{
191191 uint32_t clkSrcFreq = 0 ;
192- #if !defined(STM32MP1xx )
193192#ifdef STM32H7xx
194193 PLL3_ClocksTypeDef PLL3_Clocks ;
195194#endif
196- #if defined I2C1_BASE
195+ #if defined( I2C1_BASE )
197196 if (i2c == I2C1 ) {
198- switch (__HAL_RCC_GET_I2C1_SOURCE ()) {
199- case RCC_I2C1CLKSOURCE_HSI :
200- clkSrcFreq = HSI_VALUE ;
201- break ;
197+ #if defined(RCC_PERIPHCLK_I2C1 ) || defined(RCC_PERIPHCLK_I2C12 )
198+ #ifdef RCC_PERIPHCLK_I2C1
199+ clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C1 );
200+ #else
201+ clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C12 );
202+ #endif
203+ if (clkSrcFreq == 0 )
204+ #endif
205+ {
206+ #ifdef __HAL_RCC_GET_I2C1_SOURCE
207+ switch (__HAL_RCC_GET_I2C1_SOURCE ()) {
208+ #ifdef RCC_I2C1CLKSOURCE_HSI
209+ case RCC_I2C1CLKSOURCE_HSI :
210+ clkSrcFreq = HSI_VALUE ;
211+ break ;
212+ #endif
202213#ifdef RCC_I2C1CLKSOURCE_SYSCLK
203- case RCC_I2C1CLKSOURCE_SYSCLK :
204- clkSrcFreq = SystemCoreClock ;
205- break ;
214+ case RCC_I2C1CLKSOURCE_SYSCLK :
215+ clkSrcFreq = SystemCoreClock ;
216+ break ;
206217#endif
207218#if defined(RCC_I2C1CLKSOURCE_PCLK1 ) || defined(RCC_I2C1CLKSOURCE_D2PCLK1 )
208219#ifdef RCC_I2C1CLKSOURCE_PCLK1
209- case RCC_I2C1CLKSOURCE_PCLK1 :
220+ case RCC_I2C1CLKSOURCE_PCLK1 :
210221#endif
211222#ifdef RCC_I2C1CLKSOURCE_D2PCLK1
212- case RCC_I2C1CLKSOURCE_D2PCLK1 :
223+ case RCC_I2C1CLKSOURCE_D2PCLK1 :
213224#endif
214- clkSrcFreq = HAL_RCC_GetPCLK1Freq ();
215- break ;
225+ clkSrcFreq = HAL_RCC_GetPCLK1Freq ();
226+ break ;
216227#endif
217228#ifdef RCC_I2C1CLKSOURCE_CSI
218- case RCC_I2C1CLKSOURCE_CSI :
219- clkSrcFreq = CSI_VALUE ;
220- break ;
229+ case RCC_I2C1CLKSOURCE_CSI :
230+ clkSrcFreq = CSI_VALUE ;
231+ break ;
221232#endif
222233#ifdef RCC_I2C1CLKSOURCE_PLL3
223- case RCC_I2C1CLKSOURCE_PLL3 :
224- HAL_RCCEx_GetPLL3ClockFreq (& PLL3_Clocks );
225- clkSrcFreq = PLL3_Clocks .PLL3_R_Frequency ;
226- break ;
234+ case RCC_I2C1CLKSOURCE_PLL3 :
235+ HAL_RCCEx_GetPLL3ClockFreq (& PLL3_Clocks );
236+ clkSrcFreq = PLL3_Clocks .PLL3_R_Frequency ;
237+ break ;
238+ #endif
239+ default :
240+ Error_Handler ();
241+ }
242+ #else
243+ Error_Handler ();
227244#endif
228- default :
229- Error_Handler ();
230245 }
231246 }
232247#endif // I2C1_BASE
233- #if defined I2C2_BASE
248+ #if defined( I2C2_BASE )
234249 if (i2c == I2C2 ) {
250+ #if defined(RCC_PERIPHCLK_I2C2 ) || defined(RCC_PERIPHCLK_I2C12 )
251+ #ifdef RCC_PERIPHCLK_I2C2
252+ clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C2 );
253+ #else
254+ clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C12 );
255+ #endif
256+ if (clkSrcFreq == 0 )
257+ #endif
258+ {
235259#ifdef __HAL_RCC_GET_I2C2_SOURCE
236- switch (__HAL_RCC_GET_I2C2_SOURCE ()) {
237- case RCC_I2C2CLKSOURCE_HSI :
238- clkSrcFreq = HSI_VALUE ;
239- break ;
260+ switch (__HAL_RCC_GET_I2C2_SOURCE ()) {
261+ case RCC_I2C2CLKSOURCE_HSI :
262+ clkSrcFreq = HSI_VALUE ;
263+ break ;
240264#ifdef RCC_I2C2CLKSOURCE_SYSCLK
241- case RCC_I2C2CLKSOURCE_SYSCLK :
242- clkSrcFreq = SystemCoreClock ;
243- break ;
265+ case RCC_I2C2CLKSOURCE_SYSCLK :
266+ clkSrcFreq = SystemCoreClock ;
267+ break ;
244268#endif
245269#if defined(RCC_I2C2CLKSOURCE_PCLK1 ) || defined(RCC_I2C2CLKSOURCE_D2PCLK1 )
246270#ifdef RCC_I2C2CLKSOURCE_PCLK1
247- case RCC_I2C2CLKSOURCE_PCLK1 :
271+ case RCC_I2C2CLKSOURCE_PCLK1 :
248272#endif
249273#ifdef RCC_I2C2CLKSOURCE_D2PCLK1
250- case RCC_I2C2CLKSOURCE_D2PCLK1 :
274+ case RCC_I2C2CLKSOURCE_D2PCLK1 :
251275#endif
252- clkSrcFreq = HAL_RCC_GetPCLK1Freq ();
253- break ;
276+ clkSrcFreq = HAL_RCC_GetPCLK1Freq ();
277+ break ;
254278#endif
255279#ifdef RCC_I2C2CLKSOURCE_CSI
256- case RCC_I2C2CLKSOURCE_CSI :
257- clkSrcFreq = CSI_VALUE ;
258- break ;
280+ case RCC_I2C2CLKSOURCE_CSI :
281+ clkSrcFreq = CSI_VALUE ;
282+ break ;
259283#endif
260284#ifdef RCC_I2C2CLKSOURCE_PLL3
261- case RCC_I2C2CLKSOURCE_PLL3 :
262- HAL_RCCEx_GetPLL3ClockFreq (& PLL3_Clocks );
263- clkSrcFreq = PLL3_Clocks .PLL3_R_Frequency ;
264- break ;
285+ case RCC_I2C2CLKSOURCE_PLL3 :
286+ HAL_RCCEx_GetPLL3ClockFreq (& PLL3_Clocks );
287+ clkSrcFreq = PLL3_Clocks .PLL3_R_Frequency ;
288+ break ;
265289#endif
266- default :
267- Error_Handler ();
268- }
290+ default :
291+ Error_Handler ();
292+ }
269293#else
270- /* STM32 L0/G0 I2C2 has no independent clock */
271- clkSrcFreq = HAL_RCC_GetPCLK1Freq ();
294+ /* STM32 L0/G0 I2C2 has no independent clock */
295+ clkSrcFreq = HAL_RCC_GetPCLK1Freq ();
272296#endif
297+ }
273298 }
274299#endif // I2C2_BASE
275- #if defined I2C3_BASE
300+ #if defined( I2C3_BASE )
276301 if (i2c == I2C3 ) {
302+ #if defined(RCC_PERIPHCLK_I2C3 ) || defined(RCC_PERIPHCLK_I2C35 )
303+ #ifdef RCC_PERIPHCLK_I2C3
304+ clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C3 );
305+ #else
306+ clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C35 );
307+ #endif
308+ if (clkSrcFreq == 0 )
309+ #endif
310+ {
277311#if defined(__HAL_RCC_GET_I2C3_SOURCE )
278- switch (__HAL_RCC_GET_I2C3_SOURCE ()) {
279- case RCC_I2C3CLKSOURCE_HSI :
280- clkSrcFreq = HSI_VALUE ;
281- break ;
312+ switch (__HAL_RCC_GET_I2C3_SOURCE ()) {
313+ case RCC_I2C3CLKSOURCE_HSI :
314+ clkSrcFreq = HSI_VALUE ;
315+ break ;
282316#ifdef RCC_I2C3CLKSOURCE_SYSCLK
283- case RCC_I2C3CLKSOURCE_SYSCLK :
284- clkSrcFreq = SystemCoreClock ;
285- break ;
317+ case RCC_I2C3CLKSOURCE_SYSCLK :
318+ clkSrcFreq = SystemCoreClock ;
319+ break ;
286320#endif
287321#if defined(RCC_I2C3CLKSOURCE_PCLK1 ) || defined(RCC_I2C3CLKSOURCE_D2PCLK1 )
288322#ifdef RCC_I2C3CLKSOURCE_PCLK1
289- case RCC_I2C3CLKSOURCE_PCLK1 :
323+ case RCC_I2C3CLKSOURCE_PCLK1 :
290324#endif
291325#ifdef RCC_I2C3CLKSOURCE_D2PCLK1
292- case RCC_I2C3CLKSOURCE_D2PCLK1 :
326+ case RCC_I2C3CLKSOURCE_D2PCLK1 :
293327#endif
294- clkSrcFreq = HAL_RCC_GetPCLK1Freq ();
295- break ;
328+ clkSrcFreq = HAL_RCC_GetPCLK1Freq ();
329+ break ;
296330#endif
297331#ifdef RCC_I2C3CLKSOURCE_CSI
298- case RCC_I2C3CLKSOURCE_CSI :
299- clkSrcFreq = CSI_VALUE ;
300- break ;
332+ case RCC_I2C3CLKSOURCE_CSI :
333+ clkSrcFreq = CSI_VALUE ;
334+ break ;
301335#endif
302336#ifdef RCC_I2C3CLKSOURCE_PLL3
303- case RCC_I2C3CLKSOURCE_PLL3 :
304- HAL_RCCEx_GetPLL3ClockFreq (& PLL3_Clocks );
305- clkSrcFreq = PLL3_Clocks .PLL3_R_Frequency ;
306- break ;
337+ case RCC_I2C3CLKSOURCE_PLL3 :
338+ HAL_RCCEx_GetPLL3ClockFreq (& PLL3_Clocks );
339+ clkSrcFreq = PLL3_Clocks .PLL3_R_Frequency ;
340+ break ;
307341#endif
308- default :
309- Error_Handler ();
310- }
342+ default :
343+ Error_Handler ();
344+ }
311345#else
312- /* STM32 G0 I2C3 has no independent clock */
313- clkSrcFreq = HAL_RCC_GetPCLK1Freq ();
346+ /* STM32 G0 I2C3 has no independent clock */
347+ clkSrcFreq = HAL_RCC_GetPCLK1Freq ();
314348#endif
349+ }
315350 }
316351#endif // I2C3_BASE
317- #if defined I2C4_BASE
352+ #if defined( I2C4_BASE )
318353 if (i2c == I2C4 ) {
319- switch (__HAL_RCC_GET_I2C4_SOURCE ()) {
320- case RCC_I2C4CLKSOURCE_HSI :
321- clkSrcFreq = HSI_VALUE ;
322- break ;
354+ #if defined(RCC_PERIPHCLK_I2C4 ) || defined(RCC_PERIPHCLK_I2C46 )
355+ #ifdef RCC_PERIPHCLK_I2C4
356+ clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C4 );
357+ #else
358+ clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C46 );
359+ #endif
360+ if (clkSrcFreq == 0 )
361+ #endif
362+ {
363+ #if defined(__HAL_RCC_GET_I2C4_SOURCE )
364+ switch (__HAL_RCC_GET_I2C4_SOURCE ()) {
365+ #ifdef RCC_I2C4CLKSOURCE_HSI
366+ case RCC_I2C4CLKSOURCE_HSI :
367+ clkSrcFreq = HSI_VALUE ;
368+ break ;
369+ #endif
323370#ifdef RCC_I2C4CLKSOURCE_SYSCLK
324- case RCC_I2C4CLKSOURCE_SYSCLK :
325- clkSrcFreq = SystemCoreClock ;
326- break ;
371+ case RCC_I2C4CLKSOURCE_SYSCLK :
372+ clkSrcFreq = SystemCoreClock ;
373+ break ;
327374#endif
328375#ifdef RCC_I2C4CLKSOURCE_PCLK1
329- case RCC_I2C4CLKSOURCE_PCLK1 :
330- clkSrcFreq = HAL_RCC_GetPCLK1Freq ();
331- break ;
376+ case RCC_I2C4CLKSOURCE_PCLK1 :
377+ clkSrcFreq = HAL_RCC_GetPCLK1Freq ();
378+ break ;
332379#endif
333380#ifdef RCC_I2C4CLKSOURCE_D3PCLK1
334- case RCC_I2C4CLKSOURCE_D3PCLK1 :
335- clkSrcFreq = HAL_RCCEx_GetD3PCLK1Freq ();
336- break ;
381+ case RCC_I2C4CLKSOURCE_D3PCLK1 :
382+ clkSrcFreq = HAL_RCCEx_GetD3PCLK1Freq ();
383+ break ;
337384#endif
338385#ifdef RCC_I2C4CLKSOURCE_CSI
339- case RCC_I2C4CLKSOURCE_CSI :
340- clkSrcFreq = CSI_VALUE ;
341- break ;
386+ case RCC_I2C4CLKSOURCE_CSI :
387+ clkSrcFreq = CSI_VALUE ;
388+ break ;
342389#endif
343390#ifdef RCC_I2C4CLKSOURCE_PLL3
344- case RCC_I2C4CLKSOURCE_PLL3 :
345- HAL_RCCEx_GetPLL3ClockFreq (& PLL3_Clocks );
346- clkSrcFreq = PLL3_Clocks .PLL3_R_Frequency ;
347- break ;
391+ case RCC_I2C4CLKSOURCE_PLL3 :
392+ HAL_RCCEx_GetPLL3ClockFreq (& PLL3_Clocks );
393+ clkSrcFreq = PLL3_Clocks .PLL3_R_Frequency ;
394+ break ;
395+ #endif
396+ default :
397+ Error_Handler ();
398+ }
399+ #else
400+ Error_Handler ();
348401#endif
349- default :
350- Error_Handler ();
351402 }
352403 }
353404#endif // I2C4_BASE
354-
355- #elif defined(STM32MP1xx )
356- if (i2c == I2C1 ) {
357- clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C12 );
358- }
359- if (i2c == I2C2 ) {
360- clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C12 );
361- }
362- if (i2c == I2C3 ) {
363- clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C35 );
364- }
365- if (i2c == I2C4 ) {
366- clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C46 );
367- }
368- #endif // STM32MP1xx
369-
370- #if defined I2C5_BASE
405+ #if defined(I2C5_BASE )
371406 if (i2c == I2C5 ) {
407+ #if defined(RCC_PERIPHCLK_I2C5 ) || defined(RCC_PERIPHCLK_I2C35 )
408+ #ifdef RCC_PERIPHCLK_I2C5
409+ clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C5 );
410+ #else
372411 clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C35 );
412+ #endif
413+ if (clkSrcFreq == 0 )
414+ #endif
415+ {
416+ clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C35 );
417+ }
373418 }
374419#endif // I2C5_BASE
375- #if defined I2C6_BASE
420+ #if defined( I2C6_BASE )
376421 if (i2c == I2C6 ) {
422+ #if defined(RCC_PERIPHCLK_I2C6 ) || defined(RCC_PERIPHCLK_I2C46 )
423+ #ifdef RCC_PERIPHCLK_I2C6
424+ clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C6 );
425+ #else
377426 clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C46 );
427+ #endif
428+ #endif
378429 }
379430#endif // I2C6_BASE
380431 return clkSrcFreq ;
0 commit comments