@@ -189,192 +189,243 @@ static I2C_HandleTypeDef *i2c_handles[I2C_NUM];
189
189
static uint32_t i2c_getClkFreq (I2C_TypeDef * i2c )
190
190
{
191
191
uint32_t clkSrcFreq = 0 ;
192
- #if !defined(STM32MP1xx )
193
192
#ifdef STM32H7xx
194
193
PLL3_ClocksTypeDef PLL3_Clocks ;
195
194
#endif
196
- #if defined I2C1_BASE
195
+ #if defined( I2C1_BASE )
197
196
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
202
213
#ifdef RCC_I2C1CLKSOURCE_SYSCLK
203
- case RCC_I2C1CLKSOURCE_SYSCLK :
204
- clkSrcFreq = SystemCoreClock ;
205
- break ;
214
+ case RCC_I2C1CLKSOURCE_SYSCLK :
215
+ clkSrcFreq = SystemCoreClock ;
216
+ break ;
206
217
#endif
207
218
#if defined(RCC_I2C1CLKSOURCE_PCLK1 ) || defined(RCC_I2C1CLKSOURCE_D2PCLK1 )
208
219
#ifdef RCC_I2C1CLKSOURCE_PCLK1
209
- case RCC_I2C1CLKSOURCE_PCLK1 :
220
+ case RCC_I2C1CLKSOURCE_PCLK1 :
210
221
#endif
211
222
#ifdef RCC_I2C1CLKSOURCE_D2PCLK1
212
- case RCC_I2C1CLKSOURCE_D2PCLK1 :
223
+ case RCC_I2C1CLKSOURCE_D2PCLK1 :
213
224
#endif
214
- clkSrcFreq = HAL_RCC_GetPCLK1Freq ();
215
- break ;
225
+ clkSrcFreq = HAL_RCC_GetPCLK1Freq ();
226
+ break ;
216
227
#endif
217
228
#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 ;
221
232
#endif
222
233
#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 ();
227
244
#endif
228
- default :
229
- Error_Handler ();
230
245
}
231
246
}
232
247
#endif // I2C1_BASE
233
- #if defined I2C2_BASE
248
+ #if defined( I2C2_BASE )
234
249
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
+ {
235
259
#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 ;
240
264
#ifdef RCC_I2C2CLKSOURCE_SYSCLK
241
- case RCC_I2C2CLKSOURCE_SYSCLK :
242
- clkSrcFreq = SystemCoreClock ;
243
- break ;
265
+ case RCC_I2C2CLKSOURCE_SYSCLK :
266
+ clkSrcFreq = SystemCoreClock ;
267
+ break ;
244
268
#endif
245
269
#if defined(RCC_I2C2CLKSOURCE_PCLK1 ) || defined(RCC_I2C2CLKSOURCE_D2PCLK1 )
246
270
#ifdef RCC_I2C2CLKSOURCE_PCLK1
247
- case RCC_I2C2CLKSOURCE_PCLK1 :
271
+ case RCC_I2C2CLKSOURCE_PCLK1 :
248
272
#endif
249
273
#ifdef RCC_I2C2CLKSOURCE_D2PCLK1
250
- case RCC_I2C2CLKSOURCE_D2PCLK1 :
274
+ case RCC_I2C2CLKSOURCE_D2PCLK1 :
251
275
#endif
252
- clkSrcFreq = HAL_RCC_GetPCLK1Freq ();
253
- break ;
276
+ clkSrcFreq = HAL_RCC_GetPCLK1Freq ();
277
+ break ;
254
278
#endif
255
279
#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 ;
259
283
#endif
260
284
#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 ;
265
289
#endif
266
- default :
267
- Error_Handler ();
268
- }
290
+ default :
291
+ Error_Handler ();
292
+ }
269
293
#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 ();
272
296
#endif
297
+ }
273
298
}
274
299
#endif // I2C2_BASE
275
- #if defined I2C3_BASE
300
+ #if defined( I2C3_BASE )
276
301
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
+ {
277
311
#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 ;
282
316
#ifdef RCC_I2C3CLKSOURCE_SYSCLK
283
- case RCC_I2C3CLKSOURCE_SYSCLK :
284
- clkSrcFreq = SystemCoreClock ;
285
- break ;
317
+ case RCC_I2C3CLKSOURCE_SYSCLK :
318
+ clkSrcFreq = SystemCoreClock ;
319
+ break ;
286
320
#endif
287
321
#if defined(RCC_I2C3CLKSOURCE_PCLK1 ) || defined(RCC_I2C3CLKSOURCE_D2PCLK1 )
288
322
#ifdef RCC_I2C3CLKSOURCE_PCLK1
289
- case RCC_I2C3CLKSOURCE_PCLK1 :
323
+ case RCC_I2C3CLKSOURCE_PCLK1 :
290
324
#endif
291
325
#ifdef RCC_I2C3CLKSOURCE_D2PCLK1
292
- case RCC_I2C3CLKSOURCE_D2PCLK1 :
326
+ case RCC_I2C3CLKSOURCE_D2PCLK1 :
293
327
#endif
294
- clkSrcFreq = HAL_RCC_GetPCLK1Freq ();
295
- break ;
328
+ clkSrcFreq = HAL_RCC_GetPCLK1Freq ();
329
+ break ;
296
330
#endif
297
331
#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 ;
301
335
#endif
302
336
#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 ;
307
341
#endif
308
- default :
309
- Error_Handler ();
310
- }
342
+ default :
343
+ Error_Handler ();
344
+ }
311
345
#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 ();
314
348
#endif
349
+ }
315
350
}
316
351
#endif // I2C3_BASE
317
- #if defined I2C4_BASE
352
+ #if defined( I2C4_BASE )
318
353
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
323
370
#ifdef RCC_I2C4CLKSOURCE_SYSCLK
324
- case RCC_I2C4CLKSOURCE_SYSCLK :
325
- clkSrcFreq = SystemCoreClock ;
326
- break ;
371
+ case RCC_I2C4CLKSOURCE_SYSCLK :
372
+ clkSrcFreq = SystemCoreClock ;
373
+ break ;
327
374
#endif
328
375
#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 ;
332
379
#endif
333
380
#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 ;
337
384
#endif
338
385
#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 ;
342
389
#endif
343
390
#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 ();
348
401
#endif
349
- default :
350
- Error_Handler ();
351
402
}
352
403
}
353
404
#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 )
371
406
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
372
411
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
+ }
373
418
}
374
419
#endif // I2C5_BASE
375
- #if defined I2C6_BASE
420
+ #if defined( I2C6_BASE )
376
421
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
377
426
clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C46 );
427
+ #endif
428
+ #endif
378
429
}
379
430
#endif // I2C6_BASE
380
431
return clkSrcFreq ;
0 commit comments