48
48
*/
49
49
50
50
#include "stm32h7xx.h"
51
+ #include <math.h>
51
52
52
53
#if !defined (HSE_VALUE )
53
54
#define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
79
80
*/
80
81
81
82
/************************* Miscellaneous Configuration ************************/
83
+ /*!< Uncomment the following line if you need to use initialized data in D2 domain SRAM */
84
+ /* #define DATA_IN_D2_SRAM */
85
+
82
86
/*!< Uncomment the following line if you need to relocate your vector Table in
83
87
Internal SRAM. */
84
88
/* #define VECT_TAB_SRAM */
85
89
#ifndef VECT_TAB_OFFSET
86
- #define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field.
90
+ #define VECT_TAB_OFFSET 0x00000000UL /*!< Vector Table base offset field.
87
91
This value must be a multiple of 0x200. */
88
92
#endif
89
93
/******************************************************************************/
140
144
*/
141
145
void SystemInit (void )
142
146
{
147
+ #if defined (DATA_IN_D2_SRAM )
148
+ __IO uint32_t tmpreg ;
149
+ #endif /* DATA_IN_D2_SRAM */
150
+
143
151
/* FPU settings ------------------------------------------------------------*/
144
152
#if (__FPU_PRESENT == 1 ) && (__FPU_USED == 1 )
145
- SCB -> CPACR |= ((3UL << 10 * 2 )|(3UL << 11 * 2 )); /* set CP10 and CP11 Full Access */
153
+ SCB -> CPACR |= ((3UL << ( 10 * 2 )) |(3UL << ( 11 * 2 ) )); /* set CP10 and CP11 Full Access */
146
154
#endif
147
155
/* Reset the RCC clock configuration to the default reset state ------------*/
148
156
/* Set HSION bit */
@@ -152,7 +160,7 @@ void SystemInit (void)
152
160
RCC -> CFGR = 0x00000000 ;
153
161
154
162
/* Reset HSEON, CSSON , CSION,RC48ON, CSIKERON PLL1ON, PLL2ON and PLL3ON bits */
155
- RCC -> CR &= ( uint32_t ) 0xEAF6ED7F ;
163
+ RCC -> CR &= 0xEAF6ED7FU ;
156
164
157
165
/* Reset D1CFGR register */
158
166
RCC -> D1CFGR = 0x00000000 ;
@@ -186,15 +194,24 @@ void SystemInit (void)
186
194
RCC -> PLL3FRACR = 0x00000000 ;
187
195
188
196
/* Reset HSEBYP bit */
189
- RCC -> CR &= ( uint32_t ) 0xFFFBFFFF ;
197
+ RCC -> CR &= 0xFFFBFFFFU ;
190
198
191
199
/* Disable all interrupts */
192
200
RCC -> CIER = 0x00000000 ;
193
201
202
+ if ((DBGMCU -> IDCODE & 0xFFFF0000U ) < 0x20000000U )
203
+ {
204
+ /* if stm32h7 revY*/
205
+ /* Change the switch matrix read issuing capability to 1 for the AXI SRAM target (Target 7) */
206
+ * ((__IO uint32_t * )0x51008108 ) = 0x000000001U ;
207
+ }
194
208
195
- /* Change the switch matrix read issuing capability to 1 for the AXI SRAM target (Target 7) */
196
- * ((__IO uint32_t * )0x51008108 ) = 0x000000001 ;
197
-
209
+ #if defined (DATA_IN_D2_SRAM )
210
+ /* in case of initialized data in D2 SRAM , enable the D2 SRAM clock */
211
+ RCC -> AHB2ENR |= (RCC_AHB2ENR_D2SRAM1EN | RCC_AHB2ENR_D2SRAM2EN | RCC_AHB2ENR_D2SRAM3EN );
212
+ tmpreg = RCC -> AHB2ENR ;
213
+ (void ) tmpreg ;
214
+ #endif /* DATA_IN_D2_SRAM */
198
215
199
216
/* Configure the Vector Table location add offset address ------------------*/
200
217
#ifdef VECT_TAB_SRAM
@@ -245,70 +262,80 @@ void SystemInit (void)
245
262
*/
246
263
void SystemCoreClockUpdate (void )
247
264
{
248
- uint32_t pllp = 2 , pllsource = 0 , pllm = 2 , tmp , pllfracen = 0 , hsivalue = 0 ;
249
- float fracn1 , pllvco = 0 ;
265
+ uint32_t pllp , pllsource , pllm , pllfracen , hsivalue , tmp ;
266
+ float_t fracn1 , pllvco ;
250
267
251
268
/* Get SYSCLK source -------------------------------------------------------*/
252
269
253
270
switch (RCC -> CFGR & RCC_CFGR_SWS )
254
271
{
255
- case 0x00 : /* HSI used as system clock source */
256
-
272
+ case RCC_CFGR_SWS_HSI : /* HSI used as system clock source */
257
273
SystemCoreClock = (uint32_t ) (HSI_VALUE >> ((RCC -> CR & RCC_CR_HSIDIV )>> 3 ));
258
-
259
274
break ;
260
275
261
- case 0x08 : /* CSI used as system clock source */
276
+ case RCC_CFGR_SWS_CSI : /* CSI used as system clock source */
262
277
SystemCoreClock = CSI_VALUE ;
263
278
break ;
264
279
265
- case 0x10 : /* HSE used as system clock source */
280
+ case RCC_CFGR_SWS_HSE : /* HSE used as system clock source */
266
281
SystemCoreClock = HSE_VALUE ;
267
282
break ;
268
283
269
- case 0x18 : /* PLL1 used as system clock source */
284
+ case RCC_CFGR_SWS_PLL1 : /* PLL1 used as system clock source */
270
285
271
286
/* PLL_VCO = (HSE_VALUE or HSI_VALUE or CSI_VALUE/ PLLM) * PLLN
272
287
SYSCLK = PLL_VCO / PLLR
273
288
*/
274
289
pllsource = (RCC -> PLLCKSELR & RCC_PLLCKSELR_PLLSRC );
275
290
pllm = ((RCC -> PLLCKSELR & RCC_PLLCKSELR_DIVM1 )>> 4 ) ;
276
- pllfracen = RCC -> PLLCFGR & RCC_PLLCFGR_PLL1FRACEN ;
277
- fracn1 = (pllfracen * ((RCC -> PLL1FRACR & RCC_PLL1FRACR_FRACN1 )>> 3 ));
291
+ pllfracen = ((RCC -> PLLCFGR & RCC_PLLCFGR_PLL1FRACEN )>>RCC_PLLCFGR_PLL1FRACEN_Pos );
292
+ fracn1 = (float_t )(uint32_t )(pllfracen * ((RCC -> PLL1FRACR & RCC_PLL1FRACR_FRACN1 )>> 3 ));
293
+
294
+ if (pllm != 0U )
295
+ {
278
296
switch (pllsource )
279
297
{
298
+ case RCC_PLLCKSELR_PLLSRC_HSI : /* HSI used as PLL clock source */
280
299
281
- case 0x00 : /* HSI used as PLL clock source */
282
300
hsivalue = (HSI_VALUE >> ((RCC -> CR & RCC_CR_HSIDIV )>> 3 )) ;
283
- pllvco = (hsivalue / pllm ) * ((RCC -> PLL1DIVR & RCC_PLL1DIVR_N1 ) + (fracn1 /0x2000 ) + 1 );
301
+ pllvco = ( (float_t )hsivalue / (float_t )pllm ) * ((float_t )(uint32_t )(RCC -> PLL1DIVR & RCC_PLL1DIVR_N1 ) + (fracn1 /(float_t )0x2000 ) + (float_t )1 );
302
+
284
303
break ;
285
304
286
- case 0x01 : /* CSI used as PLL clock source */
287
- pllvco = (CSI_VALUE / pllm ) * ((RCC -> PLL1DIVR & RCC_PLL1DIVR_N1 ) + (fracn1 /0x2000 ) + 1 );
305
+ case RCC_PLLCKSELR_PLLSRC_CSI : /* CSI used as PLL clock source */
306
+ pllvco = (( float_t ) CSI_VALUE / ( float_t ) pllm ) * ((float_t )( uint32_t )( RCC -> PLL1DIVR & RCC_PLL1DIVR_N1 ) + (fracn1 /( float_t ) 0x2000 ) + ( float_t ) 1 );
288
307
break ;
289
308
290
- case 0x02 : /* HSE used as PLL clock source */
291
- pllvco = (HSE_VALUE / pllm ) * ((RCC -> PLL1DIVR & RCC_PLL1DIVR_N1 ) + (fracn1 /0x2000 ) + 1 );
309
+ case RCC_PLLCKSELR_PLLSRC_HSE : /* HSE used as PLL clock source */
310
+ pllvco = (( float_t ) HSE_VALUE / ( float_t ) pllm ) * ((float_t )( uint32_t )( RCC -> PLL1DIVR & RCC_PLL1DIVR_N1 ) + (fracn1 /( float_t ) 0x2000 ) + ( float_t ) 1 );
292
311
break ;
293
312
294
313
default :
295
- pllvco = (CSI_VALUE / pllm ) * ((RCC -> PLL1DIVR & RCC_PLL1DIVR_N1 ) + (fracn1 /0x2000 ) + 1 );
314
+ pllvco = (( float_t ) CSI_VALUE / ( float_t ) pllm ) * ((float_t )( uint32_t )( RCC -> PLL1DIVR & RCC_PLL1DIVR_N1 ) + (fracn1 /( float_t ) 0x2000 ) + ( float_t ) 1 );
296
315
break ;
297
316
}
298
- pllp = (((RCC -> PLL1DIVR & RCC_PLL1DIVR_P1 ) >>9 ) + 1 ) ;
299
- SystemCoreClock = (uint32_t ) (pllvco /pllp );
317
+ pllp = (((RCC -> PLL1DIVR & RCC_PLL1DIVR_P1 ) >>9 ) + 1U ) ;
318
+ SystemCoreClock = (uint32_t )(float_t )(pllvco /(float_t )pllp );
319
+ }
320
+ else
321
+ {
322
+ SystemCoreClock = 0U ;
323
+ }
300
324
break ;
301
325
302
326
default :
303
327
SystemCoreClock = CSI_VALUE ;
304
328
break ;
305
329
}
306
330
307
- /* Compute HCLK frequency --------------------------------------------------*/
308
- /* Get HCLK prescaler */
309
- tmp = D1CorePrescTable [( RCC -> D1CFGR & RCC_D1CFGR_D1CPRE )>> POSITION_VAL ( RCC_D1CFGR_D1CPRE_0 )];
310
- /* HCLK frequency */
331
+ /* Compute SystemClock frequency --------------------------------------------------*/
332
+ tmp = D1CorePrescTable [( RCC -> D1CFGR & RCC_D1CFGR_D1CPRE )>> RCC_D1CFGR_D1CPRE_Pos ];
333
+
334
+ /* SystemCoreClock frequency : CM7 CPU frequency */
311
335
SystemCoreClock >>= tmp ;
336
+
337
+ /* SystemD2Clock frequency : AXI and AHBs Clock frequency */
338
+ SystemD2Clock = (SystemCoreClock >> ((D1CorePrescTable [(RCC -> D1CFGR & RCC_D1CFGR_HPRE )>> RCC_D1CFGR_HPRE_Pos ]) & 0x1FU ));
312
339
}
313
340
314
341
/**
0 commit comments