8000 stm32h7_m4: fix clock configuration for Giga · arduino/ArduinoCore-mbed@d6a2326 · GitHub
[go: up one dir, main page]

Skip to content

Commit d6a2326

Browse files
committed
stm32h7_m4: fix clock configuration for Giga
1 parent a9175cc commit d6a2326

File tree

2 files changed

+96
-0
lines changed

2 files changed

+96
-0
lines changed

mbed-os-to-arduino

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,9 @@ generate_flags () {
219219
sed -i 's/LENGTH = 0x200000/LENGTH = CM4_BINARY_END - CM4_BINARY_START/g' "$ARDUINOVARIANT"/linker_script.ld
220220
sed -i 's/LENGTH = 0x1c0000/LENGTH = CM4_BINARY_START - 0x8040000/g' "$ARDUINOVARIANT"/linker_script.ld
221221
fi
222+
if [[ $ARDUINOVARIANT == *PORTENTA_H7_M4* ]]; then
223+
arm-none-eabi-objcopy -W HAL_RCC_GetSysClockFreq "$ARDUINOVARIANT"/libs/libmbed.a "$ARDUINOVARIANT"/libs/libmbed.a
224+
fi
222225
if [[ $ARDUINOVARIANT == *NANO_RP2040* ]]; then
223226
set +e
224227
HAS_2NDSTAGE_SECTION=`grep second_stage_ota "$ARDUINOVARIANT"/linker_script.ld`
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
#include "Arduino.h"
2+
3+
#if defined(GIGA_PINS)
4+
#undef HSE_VALUE
5+
#define HSE_VALUE 16000000
6+
#endif
7+
8+
extern "C" uint32_t HAL_RCC_GetSysClockFreq(void)
9+
{
10+
uint32_t pllp, pllsource, pllm, pllfracen, hsivalue;
11+
float_t fracn1, pllvco;
12+
uint32_t sysclockfreq;
13+
14+
/* Get SYSCLK source -------------------------------------------------------*/
15+
16+
switch (RCC->CFGR & RCC_CFGR_SWS)
17+
{
18+
case RCC_CFGR_SWS_HSI: /* HSI used as system clock source */
19+
20+
if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
21+
{
22+
sysclockfreq = (uint32_t) (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER()>> 3));
23+
}
24+
else
25+
{
26+
sysclockfreq = (uint32_t) HSI_VALUE;
27+
}
28+
29+
break;
30+
31+
case RCC_CFGR_SWS_CSI: /* CSI used as system clock source */
32+
sysclockfreq = CSI_VALUE;
33+
break;
34+
35+
case RCC_CFGR_SWS_HSE: /* HSE used as system clock source */
36+
sysclockfreq = HSE_VALUE;
37+
break;
38+
39+
case RCC_CFGR_SWS_PLL1: /* PLL1 used as system clock source */
40+
41+
/* PLL_VCO = (HSE_VALUE or HSI_VALUE or CSI_VALUE/ PLLM) * PLLN
42+
SYSCLK = PLL_VCO / PLLR
43+
*/
44+
pllsource = (RCC->PLLCKSELR & RCC_PLLCKSELR_PLLSRC);
45+
pllm = ((RCC->PLLCKSELR & RCC_PLLCKSELR_DIVM1)>> 4) ;
46+
pllfracen = ((RCC-> PLLCFGR & RCC_PLLCFGR_PLL1FRACEN)>>RCC_PLLCFGR_PLL1FRACEN_Pos);
47+
fracn1 = (float_t)(uint32_t)(pllfracen* ((RCC->PLL1FRACR & RCC_PLL1FRACR_FRACN1)>> 3));
48+
49+
if (pllm != 0U)
50+
{
51+
switch (pllsource)
52+
{
53+
case RCC_PLLSOURCE_HSI: /* HSI used as PLL clock source */
54+
55+
if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
56+
{
57+
hsivalue= (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER()>> 3));
58+
pllvco = ( (float_t)hsivalue / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/(float_t)0x2000) +(float_t)1 );
59+
}
60+
else
61+
{
62+
pllvco = ((float_t)HSI_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/(float_t)0x2000) +(float_t)1 );
63+
}
64+
break;
65+
66+
case RCC_PLLSOURCE_CSI: /* CSI used as PLL clock source */
67+
pllvco = ((float_t)CSI_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/(float_t)0x2000) +(float_t)1 );
68+
break;
69+
70+
case RCC_PLLSOURCE_HSE: /* HSE used as PLL clock source */
71+
pllvco = ((float_t)HSE_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/(float_t)0x2000) +(float_t)1 );
72+
break;
73+
74+
default:
75+
pllvco = ((float_t)CSI_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/(float_t)0x2000) +(float_t)1 );
76+
break;
77+
}
78+
pllp = (((RCC->PLL1DIVR & RCC_PLL1DIVR_P1) >>9) + 1U ) ;
79+
sysclockfreq = (uint32_t)(float_t)(pllvco/(float_t)pllp);
80+
}
81+
else
82+
{
83+
sysclockfreq = 0U;
84+
}
85+
break;
86+
87+
default:
88+
sysclockfreq = CSI_VALUE;
89+
break;
90+
}
91+
92+
return sysclockfreq;
93+
}

0 commit comments

Comments
 (0)
0