28#define DCO_RSEL DCO_3MHz
39#define MCLK_SELECT HFXT
50#define SMCLK_SELECT HFXT
64#define HFXT_HZ 48000000
98#define __MODCLK 25000000
99#define __REFOCLK_L 32768
100#define __REFOCLK_H 128000
101#define __SYSCLK 5000000
104#if ((MCLK_SELECT == HFXT) || (SMCLK_SELECT == HFXT))
106#error No HFXT frequency specified (HFXT_HZ)
110#if ((MCLK_SELECT == LFXT) || (SMCLK_SELECT == LFXT))
112#error No LFXT frequency specified (LFXT_HZ)
117#if (HFXT_HZ > 40000000)
118#define HFXT_FREQ CS_CTL2_HFXTFREQ_6 | CS_CTL2_HFXTDRIVE
119#elif (HFXT_HZ > 32000000)
120#define HFXT_FREQ CS_CTL2_HFXTFREQ_5 | CS_CTL2_HFXTDRIVE
121#elif (HFXT_HZ > 2400000)
122#define HFXT_FREQ CS_CTL2_HFXTFREQ_4 | CS_CTL2_HFXTDRIVE
123#elif (HFXT_HZ > 16000000)
124#define HFXT_FREQ CS_CTL2_HFXTFREQ_3 | CS_CTL2_HFXTDRIVE
125#elif (HFXT_HZ > 8000000)
126#define HFXT_FREQ CS_CTL2_HFXTFREQ_2 | CS_CTL2_HFXTDRIVE
127#elif (HFXT_HZ > 4000000)
128#define HFXT_FREQ CS_CTL2_HFXTFREQ_1 | CS_CTL2_HFXTDRIVE
130#define HFXT_FREQ CS_CTL2_HFXTFREQ_0
133#define MCLK_DIVIDER (1 << MCLK_DIV)
134#define SMCLK_DIVIDER (1 << SMCLK_DIV)
137#if (MCLK_SELECT == LFXT)
138#define __MASTER_CLOCK (LFXT_HZ / MCLK_DIVIDER)
139#elif (MCLK_SELECT == VLO)
140#define __MASTER_CLOCK (__VLOCLK / MCLK_DIVIDER)
141#elif (MCLK_SELECT == REFO)
142#define __MASTER_CLOCK (__REFOCLK_L / MCLK_DIVIDER)
143#elif (MCLK_SELECT == DCO)
144#define __MASTER_CLOCK ( (1500000 << DCO_RSEL) / MCLK_DIVIDER)
145#elif (MCLK_SELECT == MOD)
146#define __MASTER_CLOCK (__MODCLK / MCLK_DIVIDER)
147#elif (MCLK_SELECT == HFXT)
148#define __MASTER_CLOCK (HFXT_HZ / MCLK_DIVIDER)
150#error No MCLK source defined (MCLK_SELECT)
154#if (MCLK_SELECT == LFXT)
155#define __SUBSYS_CLOCK (LFXT_HZ / SMCLK_DIVIDER)
156#elif (MCLK_SELECT == VLO)
157#define __SUBSYS_CLOCK (__VLOCLK / SMCLK_DIVIDER)
158#elif (MCLK_SELECT == REFO)
159#define __SUBSYS_CLOCK (__REFOCLK_L / SMCLK_DIVIDER)
160#elif (MCLK_SELECT == DCO)
161#define __SUBSYS_CLOCK ((1500000 << DCO_RSEL) / SMCLK_DIVIDER)
162#elif (MCLK_SELECT == MOD)
163#define __SUBSYS_CLOCK (__MODCLK / SMCLK_DIVIDER)
164#elif (MCLK_SELECT == HFXT)
165#define __SUBSYS_CLOCK (HFXT_HZ / SMCLK_DIVIDER)
167#error No SMCLK source defined (SMCLK_SELECT)
171uint32_t SystemCoreClock = __MASTER_CLOCK;
172uint32_t SubsystemMasterClock = __SUBSYS_CLOCK;
177uint32_t HfxtFrequency = 0;
178uint32_t LfxtFrequency = 0;
200#if (WDT_DISABLE == 1)
209#if (__MASTER_CLOCK >= 48000000)
220#elif (__MASTER_CLOCK >= 24000000)
233 HfxtFrequency = HFXT_HZ;
242 for (
int count=0; count < 200; ++count) {
250 LfxtFrequency = LFXT_HZ;
262 for (
int count=0; count < 200; ++count) {
281 SystemCoreClockUpdate();
286 SysTick_Config(SystemCoreClock / 1000);
298uint32_t calculate_DCO_clock(uint32_t dco_base_clock)
305 return dco_base_clock;
308 if (__DCOTUNE & 0x0200) {
318 __DCO_CONSTK = TLV->DCOER_CONSTK_RSEL5;
319 __DCO_FCAL = TLV->DCOER_FCAL_RSEL5;
322 __DCO_CONSTK = TLV->DCOER_CONSTK_RSEL04;
323 __DCO_FCAL = TLV->DCOER_FCAL_RSEL04;
329 __DCO_CONSTK = TLV->DCOIR_CONSTK_RSEL5;
330 __DCO_FCAL = TLV->DCOIR_FCAL_RSEL5;
333 __DCO_CONSTK = TLV->DCOIR_CONSTK_RSEL04;
334 __DCO_FCAL = TLV->DCOIR_FCAL_RSEL04;
338 float denom = 1.0f / __DCO_CONSTK + 768 - (float)__DCO_FCAL;
339 return (
float)dco_base_clock / (1.0f - (float)__DCOTUNE / denom);
352void SystemCoreClockUpdate(
void)
363 SystemCoreClock = __REFOCLK_L;
365 SystemCoreClock = LfxtFrequency;
370 case CS_CTL1_SELM__VLOCLK: {
372 SystemCoreClock = __VLOCLK;
376 case CS_CTL1_SELM__REFOCLK: {
379 SystemCoreClock = __REFOCLK_H;
381 SystemCoreClock = __REFOCLK_L;
386 case CS_CTL1_SELM__DCOCLK: {
391 SystemCoreClock = calculate_DCO_clock(SystemCoreClock);
395 case CS_CTL1_SELM__MODOSC: {
397 SystemCoreClock = __MODCLK;
407 SystemCoreClock = __SYSCLK;
409 SystemCoreClock = HfxtFrequency;
423 SubsystemMasterClock = __REFOCLK_L;
425 SubsystemMasterClock = LfxtFrequency;
430 case CS_CTL1_SELS__VLOCLK: {
432 SubsystemMasterClock = __VLOCLK;
436 case CS_CTL1_SELS__REFOCLK: {
439 SubsystemMasterClock = __REFOCLK_H;
441 SubsystemMasterClock = __REFOCLK_L;
446 case CS_CTL1_SELS__DCOCLK: {
451 SubsystemMasterClock = calculate_DCO_clock(SubsystemMasterClock);
455 case CS_CTL1_SELS__MODOSC: {
457 SubsystemMasterClock = __MODCLK;
467 SubsystemMasterClock = __SYSCLK;
469 SubsystemMasterClock = HfxtFrequency;
478 SystemCoreClock /= __DIVM;
480 SubsystemMasterClock /= __DIVS;
#define CS_CTL1_DIVS_MASK
#define CS_CTL0_DCORSEL_5
#define CS_CTL1_SELS_MASK
#define CS_CTL0_DCORSEL_MASK
#define CS_CTL0_DCORSEL_OFS
#define CS_CLRIFG_CLR_LFXTIFG
#define CS_CTL0_DCOTUNE_MASK
#define CS_CTL1_SELS__HFXTCLK
#define FLCTL_BANK0_RDCTL_BUFD
#define FLCTL_BANK1_RDCTL_BUFD
#define CS_IFG_LFXTIFG_OFS
#define CS_CLRIFG_CLR_HFXTIFG
#define PCM_CTL0_AMR__AM_DCDC_VCORE0
#define FLCTL_BANK0_RDCTL_BUFI
#define FLCTL_BANK0_RDCTL_WAIT_1
#define CS_CTL0_DCOTUNE_OFS
#define CS_CTL1_SELM_MASK
#define CS_CTL1_SELM__LFXTCLK
#define PCM_CTL0_AMR__AM_DCDC_VCORE1
#define SCB_CPACR_CP11_MASK
#define FLCTL_BANK1_RDCTL_WAIT_1
#define CS_CLKEN_REFOFSEL
#define CS_CTL1_SELS__LFXTCLK
#define PCM_CTL1_PMR_BUSY
#define SYSCTL_SRAM_BANKEN_BNK7_EN
#define FLCTL_BANK1_RDCTL_BUFI
#define CS_CTL1_SELM__HFXTCLK
#define CS_CTL1_DIVM_MASK
#define SCB_CPACR_CP10_MASK
void __attribute__((noreturn))(*rom_reset_usb_boot_fn)(uint32_t
Reboot the device into BOOTSEL mode.