Skip to content

Commit 60ab556

Browse files
robert-hhdpgeorge
authored andcommitted
samd/mcu: Rework the comments in clock_config.c.
For more clarity. clock_config.c is not overly readable, so comments are important.
1 parent c3afafd commit 60ab556

File tree

2 files changed

+25
-16
lines changed

2 files changed

+25
-16
lines changed

Diff for: ports/samd/mcu/samd21/clock_config.c

+15-10
Original file line numberDiff line numberDiff line change
@@ -135,13 +135,18 @@ void init_clocks(uint32_t cpu_freq) {
135135
dfll48m_calibration = 0; // please the compiler
136136

137137
// 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.
145150

146151
NVMCTRL->CTRLB.bit.MANW = 1; // errata "Spurious Writes"
147152
NVMCTRL->CTRLB.bit.RWS = 1; // 1 read wait state for 48MHz
@@ -169,14 +174,14 @@ void init_clocks(uint32_t cpu_freq) {
169174
while (GCLK->STATUS.bit.SYNCBUSY) {
170175
}
171176

172-
// Connect the GCLK4 to OSC32K via GCLK1 to the DFLL input and for further use.
177+
// Connect the GCLK4 to OSC32K
173178
GCLK->GENDIV.reg = GCLK_GENDIV_ID(4) | GCLK_GENDIV_DIV(1);
174179
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;
175182
while (GCLK->STATUS.bit.SYNCBUSY) {
176183
}
177184

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;
180185
// Enable access to the DFLLCTRL reg acc. to Errata 1.2.1
181186
SYSCTRL->DFLLCTRL.reg = SYSCTRL_DFLLCTRL_ENABLE;
182187
while (SYSCTRL->PCLKSR.bit.DFLLRDY == 0) {

Diff for: ports/samd/mcu/samd51/clock_config.c

+10-6
Original file line numberDiff line numberDiff line change
@@ -187,12 +187,16 @@ void init_clocks(uint32_t cpu_freq) {
187187
dfll48m_calibration = 0; // please the compiler
188188

189189
// SAMD51 clock settings
190-
// GCLK0: 48MHz from DFLL48M or 48 - 200 MHz from DPLL0 (SAMD51)
191-
// GCLK1: 32768 Hz from 32KULP or DFLL48M
192-
// GCLK2: 8-48MHz from DFLL48M for Peripheral devices
193-
// GCLK3: 16Mhz for the us-counter (TC0/TC1)
194-
// GCLK4: 32kHz from crystal, if present
195-
// GCLK5: 48MHz from DFLL48M for USB
190+
//
191+
// GCLK0: 48MHz, source: 48 - 200 MHz from DPLL0, usage: CPU
192+
// GCLK1: 32kHz, source: OSCULP32K or DFLL48M, usage: ref_clk DPLL0
193+
// GCLK2: 1-48MHz, source:DFLL48M, usage: Peripheral devices
194+
// GCLK3: 16Mhz, source: DLLL48M, usage: us-counter (TC0/TC1)
195+
// GCLK4: 32kHz, source: XOSC32K, if crystal present, usage: DFLL48M reference
196+
// GCLK5: 48MHz, source: DFLL48M, usage: USB
197+
// DFLL48M: Reference sources:
198+
// - in closed loop mode: eiter XOSC32K or OSCULP32K or USB clock
199+
// - in open loop mode: None
196200
// DPLL0: 48 - 200 MHz
197201

198202
// Steps to set up clocks:

0 commit comments

Comments
 (0)