@@ -135,13 +135,18 @@ void init_clocks(uint32_t cpu_freq) {
135
135
dfll48m_calibration = 0 ; // please the compiler
136
136
137
137
// SAMD21 Clock settings
138
- // GCLK0: 48MHz from DFLL open loop mode or closed loop mode from 32k Crystal
139
- // GCLK1: 32768 Hz from 32K ULP or DFLL48M
140
- // GCLK2: 48MHz from DFLL for Peripherals
141
- // GCLK3: 1Mhz for the us-counter (TC4/TC5)
142
- // GCLK4: 32kHz from crystal, if present
143
- // GCLK5: 48MHz from DFLL for USB
144
- // GCLK8: 1kHz clock for WDT and RTC
138
+ //
139
+ // GCLK0: 48MHz, source: DFLL48M, usage: CPU
140
+ // GCLK1: 32kHz, source: XOSC32K or OSCULP32K or DFLL48M, usage: FDPLL96M reference
141
+ // GCLK2: 1-48MHz, source: DFLL48M, usage: Peripherals
142
+ // GCLK3: 1Mhz, source: DFLL48M, usage: us-counter (TC4/TC5)
143
+ // GCLK4: 32kHz, source: XOSC32K, if crystal present, usage: DFLL48M reference
144
+ // GCLK5: 48MHz, source: DFLL48M, usage: USB
145
+ // GCLK8: 1kHz, source: XOSC32K or OSCULP32K, usage: WDT and RTC
146
+ // DFLL48M: Reference sources:
147
+ // - in closed loop mode: eiter XOSC32K or OSCULP32K or USB clock
148
+ // - in open loop mode: None
149
+ // FDPLL96M: Not used (yet). Option to use it for the CPU clock.
145
150
146
151
NVMCTRL -> CTRLB .bit .MANW = 1 ; // errata "Spurious Writes"
147
152
NVMCTRL -> CTRLB .bit .RWS = 1 ; // 1 read wait state for 48MHz
@@ -169,14 +174,14 @@ void init_clocks(uint32_t cpu_freq) {
169
174
while (GCLK -> STATUS .bit .SYNCBUSY ) {
170
175
}
171
176
172
- // Connect the GCLK4 to OSC32K via GCLK1 to the DFLL input and for further use.
177
+ // Connect the GCLK4 to OSC32K
173
178
GCLK -> GENDIV .reg = GCLK_GENDIV_ID (4 ) | GCLK_GENDIV_DIV (1 );
174
179
GCLK -> GENCTRL .reg = GCLK_GENCTRL_GENEN | GCLK_GENCTRL_SRC_XOSC32K | GCLK_GENCTRL_ID (4 );
180
+ // Connect GCLK4 to the DFLL input.
181
+ GCLK -> CLKCTRL .reg = GCLK_CLKCTRL_GEN_GCLK4 | GCLK_CLKCTRL_ID_DFLL48 | GCLK_CLKCTRL_CLKEN ;
175
182
while (GCLK -> STATUS .bit .SYNCBUSY ) {
176
183
}
177
184
178
- // Connect GCLK4 to the DFLL input and for further use.
179
- GCLK -> CLKCTRL .reg = GCLK_CLKCTRL_ID_DFLL48 | GCLK_CLKCTRL_GEN_GCLK4 | GCLK_CLKCTRL_CLKEN ;
180
185
// Enable access to the DFLLCTRL reg acc. to Errata 1.2.1
181
186
SYSCTRL -> DFLLCTRL .reg = SYSCTRL_DFLLCTRL_ENABLE ;
182
187
while (SYSCTRL -> PCLKSR .bit .DFLLRDY == 0 ) {
0 commit comments