github.com/tinygo-org/tinygo@v0.31.3-0.20240404173401-90b0bf646c27/src/runtime/runtime_atsame54p20.go (about)

     1  //go:build sam && atsame5x && atsame54p20
     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  
    44  	// Turn on clock to SERCOM6
    45  	sam.MCLK.APBDMASK.SetBits(sam.MCLK_APBDMASK_SERCOM6_)
    46  	sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOM6_CORE].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) |
    47  		sam.GCLK_PCHCTRL_CHEN)
    48  
    49  	// Turn on clock to SERCOM7
    50  	sam.MCLK.APBDMASK.SetBits(sam.MCLK_APBDMASK_SERCOM7_)
    51  	sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOM7_CORE].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) |
    52  		sam.GCLK_PCHCTRL_CHEN)
    53  }