Skip to content

Commit 98e2a3e

Browse files
aryelevinladyada
authored andcommitted
Some fixes to the startup code - clocks configs (arduino#89)
* Reverted 1MHz clock generator to GCLK5 instead GCLK7 Fixed the clock divider of 1MHz clock generator to be 48 (its source is DFLL which clocking at 48MHz, so 48 / 48 = 1, it was 48 / 24 = 2). Updated the PLLs to the proper Ratio afetr the change of the 1MHz clock source. Disabled GCLK_GENCTRL_DIVSEL reg on the 12MHz clock generator, since this caused the clock to be 1.5MHz. * Fixed a description comment.
1 parent 3f7a027 commit 98e2a3e

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

cores/arduino/startup.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
//USE DPLL0 for 120MHZ
3838
#define MAIN_CLOCK_SOURCE GCLK_GENCTRL_SRC_DPLL0
3939

40-
#define GENERIC_CLOCK_GENERATOR_1M (7u)
40+
#define GENERIC_CLOCK_GENERATOR_1M (5u)
4141
//#define CRYSTALLESS
4242

4343
#else
@@ -97,7 +97,7 @@ void SystemInit( void )
9797
}
9898

9999
/* ----------------------------------------------------------------------------------------------
100-
* 3) Put Generic Clock Generator 3 as source for Generic Clock Gen 0 (DFLL48M reference)
100+
* 3) Put OSCULP32K as source for Generic Clock Generator 0
101101
*/
102102
GCLK->GENCTRL[0].reg = GCLK_GENCTRL_SRC(GCLK_GENCTRL_SRC_OSCULP32K) | GCLK_GENCTRL_GENEN;
103103

@@ -146,7 +146,7 @@ void SystemInit( void )
146146
/* Wait for synchronization */
147147
}
148148

149-
GCLK->GENCTRL[GENERIC_CLOCK_GENERATOR_1M].reg = GCLK_GENCTRL_SRC(GCLK_GENCTRL_SRC_DFLL_Val) | GCLK_GENCTRL_GENEN | GCLK_GENCTRL_DIV(24u);
149+
GCLK->GENCTRL[GENERIC_CLOCK_GENERATOR_1M].reg = GCLK_GENCTRL_SRC(GCLK_GENCTRL_SRC_DFLL_Val) | GCLK_GENCTRL_GENEN | GCLK_GENCTRL_DIV(48u);
150150

151151
while ( GCLK->SYNCBUSY.bit.GENCTRL5 ){
152152
/* Wait for synchronization */
@@ -158,9 +158,9 @@ void SystemInit( void )
158158
*/
159159

160160
//PLL0 is 120MHz
161-
GCLK->PCHCTRL[OSCCTRL_GCLK_ID_FDPLL0].reg = (1 << GCLK_PCHCTRL_CHEN_Pos) | GCLK_PCHCTRL_GEN(GCLK_PCHCTRL_GEN_GCLK7_Val);
161+
GCLK->PCHCTRL[OSCCTRL_GCLK_ID_FDPLL0].reg = (1 << GCLK_PCHCTRL_CHEN_Pos) | GCLK_PCHCTRL_GEN(GCLK_PCHCTRL_GEN_GCLK5_Val);
162162

163-
OSCCTRL->Dpll[0].DPLLRATIO.reg = OSCCTRL_DPLLRATIO_LDRFRAC(0x00) | OSCCTRL_DPLLRATIO_LDR(59); //120 Mhz
163+
OSCCTRL->Dpll[0].DPLLRATIO.reg = OSCCTRL_DPLLRATIO_LDRFRAC(0x00) | OSCCTRL_DPLLRATIO_LDR(119); //120 Mhz
164164

165165
while(OSCCTRL->Dpll[0].DPLLSYNCBUSY.bit.DPLLRATIO);
166166

@@ -172,9 +172,9 @@ void SystemInit( void )
172172
while( OSCCTRL->Dpll[0].DPLLSTATUS.bit.CLKRDY == 0 || OSCCTRL->Dpll[0].DPLLSTATUS.bit.LOCK == 0 );
173173

174174
//PLL1 is 100MHz
175-
GCLK->PCHCTRL[OSCCTRL_GCLK_ID_FDPLL1].reg = (1 << GCLK_PCHCTRL_CHEN_Pos) | GCLK_PCHCTRL_GEN(GCLK_PCHCTRL_GEN_GCLK7_Val);
175+
GCLK->PCHCTRL[OSCCTRL_GCLK_ID_FDPLL1].reg = (1 << GCLK_PCHCTRL_CHEN_Pos) | GCLK_PCHCTRL_GEN(GCLK_PCHCTRL_GEN_GCLK5_Val);
176176

177-
OSCCTRL->Dpll[1].DPLLRATIO.reg = OSCCTRL_DPLLRATIO_LDRFRAC(0x00) | OSCCTRL_DPLLRATIO_LDR(49); //100 Mhz
177+
OSCCTRL->Dpll[1].DPLLRATIO.reg = OSCCTRL_DPLLRATIO_LDRFRAC(0x00) | OSCCTRL_DPLLRATIO_LDR(99); //100 Mhz
178178

179179
while(OSCCTRL->Dpll[1].DPLLSYNCBUSY.bit.DPLLRATIO);
180180

@@ -216,7 +216,7 @@ void SystemInit( void )
216216
GCLK->GENCTRL[GENERIC_CLOCK_GENERATOR_12M].reg = GCLK_GENCTRL_SRC(GCLK_GENCTRL_SRC_DFLL_Val) |
217217
GCLK_GENCTRL_IDC |
218218
GCLK_GENCTRL_DIV(4) |
219-
GCLK_GENCTRL_DIVSEL |
219+
//GCLK_GENCTRL_DIVSEL |
220220
//GCLK_GENCTRL_OE |
221221
GCLK_GENCTRL_GENEN;
222222

0 commit comments

Comments
 (0)