Skip to content

Commit e9b5601

Browse files
authored
Merge pull request #1848 from TomoYamanaka/master
Implement SystemcoreClock
2 parents ab5bd79 + 8f3e72f commit e9b5601

File tree

4 files changed

+76
-0
lines changed

4 files changed

+76
-0
lines changed

hal/targets/cmsis/TARGET_RENESAS/TARGET_RZ_A1H/system_MBRZA1H.c

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,15 @@ void FPUEnable(void);
4949

5050
#endif
5151

52+
#define FRQCR_IFC_MSK (0x0030)
53+
#define FRQCR_IFC_SHFT (8)
54+
#define FRQCR_IFC_1P1 (0) /* x1/1 */
55+
#define FRQCR_IFC_2P3 (1) /* x2/3 */
56+
#define FRQCR_IFC_1P3 (3) /* x1/3 */
57+
5258
uint32_t IRQNestLevel;
5359
unsigned char seen_id0_active = 0; // single byte to hold a flag used in the workaround for GIC errata 733075
60+
uint32_t SystemCoreClock = CM0_RENESAS_RZ_A1_I_CLK; /*!< System Clock Frequency (Core Clock) */
5461

5562

5663
/**
@@ -198,6 +205,35 @@ uint32_t InterruptHandlerUnregister (IRQn_Type irq)
198205
}
199206
}
200207

208+
/**
209+
* Update SystemCoreClock variable
210+
*
211+
* @param none
212+
* @return none
213+
*
214+
* @brief Updates the SystemCoreClock with current core Clock.
215+
*/
216+
void SystemCoreClockUpdate (void)
217+
{
218+
uint32_t frqcr_ifc = ((uint32_t)CPG.FRQCR & (uint32_t)FRQCR_IFC_MSK) >> FRQCR_IFC_SHFT;
219+
220+
switch (frqcr_ifc) {
221+
case FRQCR_IFC_1P1:
222+
SystemCoreClock = CM0_RENESAS_RZ_A1_I_CLK;
223+
break;
224+
case FRQCR_IFC_2P3:
225+
SystemCoreClock = CM0_RENESAS_RZ_A1_I_CLK * 2 / 3;
226+
break;
227+
case FRQCR_IFC_1P3:
228+
SystemCoreClock = CM0_RENESAS_RZ_A1_I_CLK / 3;
229+
break;
230+
default:
231+
/* do nothing */
232+
break;
233+
}
234+
}
235+
236+
201237
/**
202238
* Initialize the system
203239
*

hal/targets/cmsis/TARGET_RENESAS/TARGET_RZ_A1H/system_MBRZA1H.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@
4343
extern "C" {
4444
#endif
4545

46+
extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */
47+
4648
typedef void(*IRQHandler)();
4749
uint32_t InterruptHandlerRegister(IRQn_Type, IRQHandler);
4850
uint32_t InterruptHandlerUnregister(IRQn_Type);

hal/targets/cmsis/TARGET_RENESAS/TARGET_VK_RZ_A1H/system_VKRZA1H.c

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,15 @@ void FPUEnable(void);
4949

5050
#endif
5151

52+
#define FRQCR_IFC_MSK (0x0030)
53+
#define FRQCR_IFC_SHFT (8)
54+
#define FRQCR_IFC_1P1 (0) /* x1/1 */
55+
#define FRQCR_IFC_2P3 (1) /* x2/3 */
56+
#define FRQCR_IFC_1P3 (3) /* x1/3 */
57+
5258
uint32_t IRQNestLevel;
5359
unsigned char seen_id0_active = 0; // single byte to hold a flag used in the workaround for GIC errata 733075
60+
uint32_t SystemCoreClock = CM0_RENESAS_RZ_A1_I_CLK; /*!< System Clock Frequency (Core Clock) */
5461

5562

5663
/**
@@ -198,6 +205,35 @@ uint32_t InterruptHandlerUnregister (IRQn_Type irq)
198205
}
199206
}
200207

208+
/**
209+
* Update SystemCoreClock variable
210+
*
211+
* @param none
212+
* @return none
213+
*
214+
* @brief Updates the SystemCoreClock with current core Clock.
215+
*/
216+
void SystemCoreClockUpdate (void)
217+
{
218+
uint32_t frqcr_ifc = ((uint32_t)CPG.FRQCR & (uint32_t)FRQCR_IFC_MSK) >> FRQCR_IFC_SHFT;
219+
220+
switch (frqcr_ifc) {
221+
case FRQCR_IFC_1P1:
222+
SystemCoreClock = CM0_RENESAS_RZ_A1_I_CLK;
223+
break;
224+
case FRQCR_IFC_2P3:
225+
SystemCoreClock = CM0_RENESAS_RZ_A1_I_CLK * 2 / 3;
226+
break;
227+
case FRQCR_IFC_1P3:
228+
SystemCoreClock = CM0_RENESAS_RZ_A1_I_CLK / 3;
229+
break;
230+
default:
231+
/* do nothing */
232+
break;
233+
}
234+
}
235+
236+
201237
/**
202238
* Initialize the system
203239
*

hal/targets/cmsis/TARGET_RENESAS/TARGET_VK_RZ_A1H/system_VKRZA1H.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@
4343
extern "C" {
4444
#endif
4545

46+
extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */
47+
4648
typedef void(*IRQHandler)();
4749
uint32_t InterruptHandlerRegister(IRQn_Type, IRQHandler);
4850
uint32_t InterruptHandlerUnregister(IRQn_Type);

0 commit comments

Comments
 (0)