github.com/tinygo-org/tinygo@v0.31.3-0.20240404173401-90b0bf646c27/src/runtime/runtime_atsamd21g18.go (about) 1 //go:build sam && atsamd21 && atsamd21g18 2 3 package runtime 4 5 import ( 6 "device/sam" 7 ) 8 9 func initSERCOMClocks() { 10 // Turn on clock to SERCOM0 for UART0 11 sam.PM.APBCMASK.SetBits(sam.PM_APBCMASK_SERCOM0_) 12 13 // Use GCLK0 for SERCOM0 aka UART0 14 // GCLK_CLKCTRL_ID( clockId ) | // Generic Clock 0 (SERCOMx) 15 // GCLK_CLKCTRL_GEN_GCLK0 | // Generic Clock Generator 0 is source 16 // GCLK_CLKCTRL_CLKEN ; 17 sam.GCLK.CLKCTRL.Set((sam.GCLK_CLKCTRL_ID_SERCOM0_CORE << sam.GCLK_CLKCTRL_ID_Pos) | 18 (sam.GCLK_CLKCTRL_GEN_GCLK0 << sam.GCLK_CLKCTRL_GEN_Pos) | 19 sam.GCLK_CLKCTRL_CLKEN) 20 waitForSync() 21 22 // Turn on clock to SERCOM1 23 sam.PM.APBCMASK.SetBits(sam.PM_APBCMASK_SERCOM1_) 24 sam.GCLK.CLKCTRL.Set((sam.GCLK_CLKCTRL_ID_SERCOM1_CORE << sam.GCLK_CLKCTRL_ID_Pos) | 25 (sam.GCLK_CLKCTRL_GEN_GCLK0 << sam.GCLK_CLKCTRL_GEN_Pos) | 26 sam.GCLK_CLKCTRL_CLKEN) 27 waitForSync() 28 29 // Turn on clock to SERCOM2 30 sam.PM.APBCMASK.SetBits(sam.PM_APBCMASK_SERCOM2_) 31 sam.GCLK.CLKCTRL.Set((sam.GCLK_CLKCTRL_ID_SERCOM2_CORE << sam.GCLK_CLKCTRL_ID_Pos) | 32 (sam.GCLK_CLKCTRL_GEN_GCLK0 << sam.GCLK_CLKCTRL_GEN_Pos) | 33 sam.GCLK_CLKCTRL_CLKEN) 34 waitForSync() 35 36 // Turn on clock to SERCOM3 37 sam.PM.APBCMASK.SetBits(sam.PM_APBCMASK_SERCOM3_) 38 sam.GCLK.CLKCTRL.Set((sam.GCLK_CLKCTRL_ID_SERCOM3_CORE << sam.GCLK_CLKCTRL_ID_Pos) | 39 (sam.GCLK_CLKCTRL_GEN_GCLK0 << sam.GCLK_CLKCTRL_GEN_Pos) | 40 sam.GCLK_CLKCTRL_CLKEN) 41 waitForSync() 42 43 // Turn on clock to SERCOM4 44 sam.PM.APBCMASK.SetBits(sam.PM_APBCMASK_SERCOM4_) 45 46 // Use GCLK0 for SERCOM4 47 sam.GCLK.CLKCTRL.Set((sam.GCLK_CLKCTRL_ID_SERCOM4_CORE << sam.GCLK_CLKCTRL_ID_Pos) | 48 (sam.GCLK_CLKCTRL_GEN_GCLK0 << sam.GCLK_CLKCTRL_GEN_Pos) | 49 sam.GCLK_CLKCTRL_CLKEN) 50 waitForSync() 51 52 // Turn on clock to SERCOM5 53 sam.PM.APBCMASK.SetBits(sam.PM_APBCMASK_SERCOM5_) 54 55 // Use GCLK0 for SERCOM5 56 sam.GCLK.CLKCTRL.Set((sam.GCLK_CLKCTRL_ID_SERCOM5_CORE << sam.GCLK_CLKCTRL_ID_Pos) | 57 (sam.GCLK_CLKCTRL_GEN_GCLK0 << sam.GCLK_CLKCTRL_GEN_Pos) | 58 sam.GCLK_CLKCTRL_CLKEN) 59 waitForSync() 60 }