github.com/tinygo-org/tinygo@v0.31.3-0.20240404173401-90b0bf646c27/src/runtime/runtime_atsamd51j20.go (about) 1 //go:build sam && atsamd51 && atsamd51j20 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.MCLK.APBAMASK.SetBits(sam.MCLK_APBAMASK_SERCOM0_) 12 sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOM0_CORE].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | 13 sam.GCLK_PCHCTRL_CHEN) 14 15 // sets the "slow" clock shared by all SERCOM 16 sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOMX_SLOW].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | 17 sam.GCLK_PCHCTRL_CHEN) 18 19 // Turn on clock to SERCOM1 20 sam.MCLK.APBAMASK.SetBits(sam.MCLK_APBAMASK_SERCOM1_) 21 sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOM1_CORE].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | 22 sam.GCLK_PCHCTRL_CHEN) 23 24 // Turn on clock to SERCOM2 25 sam.MCLK.APBBMASK.SetBits(sam.MCLK_APBBMASK_SERCOM2_) 26 sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOM2_CORE].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | 27 sam.GCLK_PCHCTRL_CHEN) 28 29 // Turn on clock to SERCOM3 30 sam.MCLK.APBBMASK.SetBits(sam.MCLK_APBBMASK_SERCOM3_) 31 sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOM3_CORE].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | 32 sam.GCLK_PCHCTRL_CHEN) 33 34 // Turn on clock to SERCOM4 35 sam.MCLK.APBDMASK.SetBits(sam.MCLK_APBDMASK_SERCOM4_) 36 sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOM4_CORE].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | 37 sam.GCLK_PCHCTRL_CHEN) 38 39 // Turn on clock to SERCOM5 40 sam.MCLK.APBDMASK.SetBits(sam.MCLK_APBDMASK_SERCOM5_) 41 sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOM5_CORE].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | 42 sam.GCLK_PCHCTRL_CHEN) 43 }