mirror of
https://github.com/micropython/micropython.git
synced 2026-01-04 19:20:22 +01:00
samd/clock_config: Extend the SAMD51 us-counter to 60 bit.
This removes the difference in the time.ticks_us() range between SAMD21 and SAMD51. The function mp_hal_ticks_us_64() is added and used for: - SAMD51's mp_hal_ticks_us and mp_hal_delay_us(). For SAMD21, keep the previous methods, which are faster. - mp_hal_ticks_ms() and mp_hal_tick_ms_64(), which saves some bytes and removes a potential race condition every 50 days. Also set the us-counter for SAMD51 to 16 MHz for a faster reading of the microsecond value. Note: With SAMD51, mp_hal_ticks_us_64() has a 60 bit range only, which is still a long time (~36000 years).
This commit is contained in:
@@ -190,7 +190,7 @@ void init_clocks(uint32_t cpu_freq) {
|
||||
// GCLK0: 48MHz from DFLL48M or 48 - 200 MHz from DPLL0 (SAMD51)
|
||||
// GCLK1: 32768 Hz from 32KULP or DFLL48M
|
||||
// GCLK2: 8-48MHz from DFLL48M for Peripheral devices
|
||||
// GCLK3: 8Mhz for the us-counter (TC0/TC1)
|
||||
// GCLK3: 16Mhz for the us-counter (TC0/TC1)
|
||||
// GCLK4: 32kHz from crystal, if present
|
||||
// GCLK5: 48MHz from DFLL48M for USB
|
||||
// DPLL0: 48 - 200 MHz
|
||||
@@ -204,7 +204,7 @@ void init_clocks(uint32_t cpu_freq) {
|
||||
// Setup DPLL0 to 120MHz
|
||||
// Setup GCLK0 to 120MHz
|
||||
// Setup GCLK2 to 48MHz for Peripherals
|
||||
// Setup GCLK3 to 8MHz for TC0/TC1
|
||||
// Setup GCLK3 to 16MHz for TC0/TC1
|
||||
// Setup GCLK4 to 32kHz crystal, if present
|
||||
// Setup GCLK5 to 48 MHz
|
||||
|
||||
@@ -320,8 +320,8 @@ void init_clocks(uint32_t cpu_freq) {
|
||||
while (GCLK->SYNCBUSY.bit.GENCTRL2) {
|
||||
}
|
||||
|
||||
// Setup GCLK3 for 8MHz, Used for TC0/1 counter
|
||||
GCLK->GENCTRL[3].reg = GCLK_GENCTRL_DIV(6) | GCLK_GENCTRL_RUNSTDBY | GCLK_GENCTRL_GENEN | GCLK_GENCTRL_SRC_DFLL;
|
||||
// Setup GCLK3 for 16MHz, Used for TC0/1 counter
|
||||
GCLK->GENCTRL[3].reg = GCLK_GENCTRL_DIV(3) | GCLK_GENCTRL_RUNSTDBY | GCLK_GENCTRL_GENEN | GCLK_GENCTRL_SRC_DFLL;
|
||||
while (GCLK->SYNCBUSY.bit.GENCTRL3) {
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user