From 58565fa46d7e0fa875ce381e7099b1c607693a40 Mon Sep 17 00:00:00 2001 From: deadprogram Date: Wed, 26 Aug 2020 14:04:35 +0200 Subject: [PATCH] machine/atsamd51x,runtime/atsamd51x: fixes needed for full support for all PWM pins. Also adds some useful constants to clarify peripheral clock usage Signed-off-by: deadprogram --- Makefile | 9 ++++ src/device/sam/atsamd51x-bitfields.go | 63 ++++++++++++++++++++++++ src/examples/pwm/pwm.go | 2 +- src/machine/machine_atsamd51.go | 70 ++++++++++++++++++++------- src/machine/machine_atsamd51g19.go | 16 +++--- src/machine/machine_atsamd51j19.go | 32 ++++++++---- src/machine/machine_atsamd51j20.go | 30 ++++++++---- src/machine/machine_atsamd51p19.go | 30 ++++++++---- src/runtime/runtime_atsamd51.go | 6 +-- src/runtime/runtime_atsamd51g19.go | 14 +++--- src/runtime/runtime_atsamd51j19.go | 14 +++--- src/runtime/runtime_atsamd51j20.go | 14 +++--- src/runtime/runtime_atsamd51p19.go | 18 +++---- 13 files changed, 231 insertions(+), 87 deletions(-) create mode 100644 src/device/sam/atsamd51x-bitfields.go diff --git a/Makefile b/Makefile index a4828431..a13a5914 100644 --- a/Makefile +++ b/Makefile @@ -317,6 +317,15 @@ smoketest: @$(MD5SUM) test.hex $(TINYGO) build -size short -o test.hex -target=itsybitsy-nrf52840 examples/blinky1 @$(MD5SUM) test.hex + # test pwm + $(TINYGO) build -size short -o test.hex -target=itsybitsy-m0 examples/pwm + @$(MD5SUM) test.hex + $(TINYGO) build -size short -o test.hex -target=itsybitsy-m4 examples/pwm + @$(MD5SUM) test.hex + $(TINYGO) build -size short -o test.hex -target=feather-m4 examples/pwm + @$(MD5SUM) test.hex + $(TINYGO) build -size short -o test.hex -target=pyportal examples/pwm + @$(MD5SUM) test.hex ifneq ($(AVR), 0) $(TINYGO) build -size short -o test.hex -target=atmega1284p examples/serial @$(MD5SUM) test.hex diff --git a/src/device/sam/atsamd51x-bitfields.go b/src/device/sam/atsamd51x-bitfields.go new file mode 100644 index 00000000..adb75ae6 --- /dev/null +++ b/src/device/sam/atsamd51x-bitfields.go @@ -0,0 +1,63 @@ +// Hand created file. DO NOT DELETE. +// atsamd51x bitfield definitions that are not auto-generated by gen-device-svd.go + +// +build sam,atsamd51 + +// These are the supported pchctrl function numberings on the atsamd51x +// See http://ww1.microchip.com/downloads/en/DeviceDoc/SAM_D5xE5x_Family_Data_Sheet_DS60001507F.pdf +// table 14-9 + +package sam + +const ( + PCHCTRL_GCLK_OSCCTRL_DFLL48 = 0 // DFLL48 input clock source + PCHCTRL_GCLK_OSCCTRL_FDPLL0 = 1 // Reference clock for FDPLL0 + PCHCTRL_GCLK_OSCCTRL_FDPLL1 = 2 // Reference clock for FDPLL1 + PCHCTRL_GCLK_OSCCTRL_FDPLL0_32K = 3 + PCHCTRL_GCLK_OSCCTRL_FDPLL1_32K = 3 + PCHCTRL_GCLK_SDHC0_SLOW = 3 + PCHCTRL_GCLK_SDHC1_SLOW = 3 + // GCLK_SERCOM[0..7]_SLOW = 3 + // FDPLL0 = 3 // 32KHz clock for internal lock timer + // FDPLL1 = 3 //32KHz clock for internal lock timer + // SDHC0 = 3 // Slow + // SDHC1 = 3 // Slow + PCHCTRL_GCLK_EIC = 4 + PCHCTRL_GCLK_FREQM_MSR = 5 // FREQM Measure + PCHCTRL_GCLK_FREQM_REF = 6 // FREQM Reference + PCHCTRL_GCLK_SERCOM0_CORE = 7 // SERCOM0 Core + PCHCTRL_GCLK_SERCOM1_CORE = 8 // SERCOM1 Core + PCHCTRL_GCLK_TC0 = 9 + PCHCTRL_GCLK_TC1 = 9 // TC0, TC1 + PCHCTRL_GCLK_USB = 10 // USB + //22:11 GCLK_EVSYS[0..11] EVSYS[0..11] + PCHCTRL_GCLK_SERCOM2_CORE = 23 // SERCOM2 Core + PCHCTRL_GCLK_SERCOM3_CORE = 24 //SERCOM3 Core + PCHCTRL_GCLK_TCC0 = 25 + PCHCTRL_GCLK_TCC1 = 25 // TCC0, TCC1 + PCHCTRL_GCLK_TC2 = 26 + PCHCTRL_GCLK_TC3 = 26 // TC2, TC3 + PCHCTRL_GCLK_CAN0 = 27 // CAN0 + PCHCTRL_GCLK_CAN1 = 28 // CAN1 + PCHCTRL_GCLK_TCC2 = 29 + PCHCTRL_GCLK_TCC3 = 29 // TCC2, TCC3 + PCHCTRL_GCLK_TC4 = 30 + PCHCTRL_GCLK_TC5 = 30 // TC4, TC5 + PCHCTRL_GCLK_PDEC = 31 // PDEC + PCHCTRL_GCLK_AC = 32 // AC + PCHCTRL_GCLK_CCL = 33 // CCL + PCHCTRL_GCLK_SERCOM4_CORE = 34 // SERCOM4 Core + PCHCTRL_GCLK_SERCOM5_CORE = 35 // SERCOM5 Core + PCHCTRL_GCLK_SERCOM6_CORE = 36 // SERCOM6 Core + PCHCTRL_GCLK_SERCOM7_CORE = 37 // SERCOM7 Core + PCHCTRL_GCLK_TCC4 = 38 // TCC4 + PCHCTRL_GCLK_TC6 = 39 + PCHCTRL_GCLK_TC7 = 39 // TC6, TC7 + PCHCTRL_GCLK_ADC0 = 40 // ADC0 + PCHCTRL_GCLK_ADC1 = 41 // ADC1 + PCHCTRL_GCLK_DAC = 42 // DAC + //44:43 GCLK_I2S I2S + PCHCTRL_GCLK_SDHC0 = 45 // SDHC0 + PCHCTRL_GCLK_SDHC1 = 46 // SDHC1 + PCHCTRL_GCLK_CM4_TRACE = 47 // CM4 Trace +) diff --git a/src/examples/pwm/pwm.go b/src/examples/pwm/pwm.go index 380fbaa2..6bcc46fc 100644 --- a/src/examples/pwm/pwm.go +++ b/src/examples/pwm/pwm.go @@ -8,7 +8,7 @@ import ( // This example assumes that an RGB LED is connected to pins 3, 5 and 6 on an Arduino. // Change the values below to use different pins. const ( - redPin = machine.D3 + redPin = machine.D4 greenPin = machine.D5 bluePin = machine.D6 ) diff --git a/src/machine/machine_atsamd51.go b/src/machine/machine_atsamd51.go index 90064776..049ec61e 100644 --- a/src/machine/machine_atsamd51.go +++ b/src/machine/machine_atsamd51.go @@ -1580,14 +1580,14 @@ func (pwm PWM) setPinCfg(val uint8) { // setChannel sets the value for the correct channel for PWM on this pin. func (pwm PWM) setChannel(timer *sam.TCC_Type, val uint32) { switch pwm.Pin { - case PA16: - timer.CC[0].Set(val) - case PA17: - timer.CC[1].Set(val) case PA14: timer.CC[0].Set(val) case PA15: timer.CC[1].Set(val) + case PA16: + timer.CC[0].Set(val) + case PA17: + timer.CC[1].Set(val) case PA18: timer.CC[2].Set(val) case PA19: @@ -1596,10 +1596,22 @@ func (pwm PWM) setChannel(timer *sam.TCC_Type, val uint32) { timer.CC[0].Set(val) case PA21: timer.CC[1].Set(val) - case PA23: - timer.CC[3].Set(val) case PA22: timer.CC[2].Set(val) + case PA23: + timer.CC[3].Set(val) + case PB12: + timer.CC[0].Set(val) + case PB13: + timer.CC[1].Set(val) + case PB14: + timer.CC[0].Set(val) + case PB15: + timer.CC[1].Set(val) + case PB16: + timer.CC[4].Set(val) + case PB17: + timer.CC[5].Set(val) case PB31: timer.CC[1].Set(val) default: @@ -1610,14 +1622,14 @@ func (pwm PWM) setChannel(timer *sam.TCC_Type, val uint32) { // setChannelBuffer sets the value for the correct channel buffer for PWM on this pin func (pwm PWM) setChannelBuffer(timer *sam.TCC_Type, val uint32) { switch pwm.Pin { - case PA16: - timer.CCBUF[0].Set(val) - case PA17: - timer.CCBUF[1].Set(val) case PA14: timer.CCBUF[0].Set(val) case PA15: timer.CCBUF[1].Set(val) + case PA16: + timer.CCBUF[0].Set(val) + case PA17: + timer.CCBUF[1].Set(val) case PA18: timer.CCBUF[2].Set(val) case PA19: @@ -1626,10 +1638,22 @@ func (pwm PWM) setChannelBuffer(timer *sam.TCC_Type, val uint32) { timer.CCBUF[0].Set(val) case PA21: timer.CCBUF[1].Set(val) - case PA23: - timer.CCBUF[3].Set(val) case PA22: timer.CCBUF[2].Set(val) + case PA23: + timer.CCBUF[3].Set(val) + case PB12: + timer.CCBUF[0].Set(val) + case PB13: + timer.CCBUF[1].Set(val) + case PB14: + timer.CCBUF[0].Set(val) + case PB15: + timer.CCBUF[1].Set(val) + case PB16: + timer.CCBUF[4].Set(val) + case PB17: + timer.CCBUF[5].Set(val) case PB31: timer.CCBUF[1].Set(val) default: @@ -1640,14 +1664,14 @@ func (pwm PWM) setChannelBuffer(timer *sam.TCC_Type, val uint32) { // getMux returns the pin mode mux to be used for PWM on this pin. func (pwm PWM) getMux() PinMode { switch pwm.Pin { - case PA16: - return PinPWMF - case PA17: - return PinPWMF case PA14: return PinPWMF case PA15: return PinPWMF + case PA16: + return PinPWMF + case PA17: + return PinPWMF case PA18: return PinPWMF case PA19: @@ -1656,9 +1680,21 @@ func (pwm PWM) getMux() PinMode { return PinPWMG case PA21: return PinPWMG + case PA22: + return PinPWMG case PA23: return PinPWMG - case PA22: + case PB12: + return PinPWMF + case PB13: + return PinPWMF + case PB14: + return PinPWMF + case PB15: + return PinPWMF + case PB16: + return PinPWMG + case PB17: return PinPWMG case PB31: return PinPWMF diff --git a/src/machine/machine_atsamd51g19.go b/src/machine/machine_atsamd51g19.go index ced9fd1c..584c9335 100644 --- a/src/machine/machine_atsamd51g19.go +++ b/src/machine/machine_atsamd51g19.go @@ -18,23 +18,23 @@ func InitPWM() { sam.MCLK.APBCMASK.SetBits(sam.MCLK_APBCMASK_TCC2_) //use clock generator 0 - sam.GCLK.PCHCTRL[25].Set((sam.GCLK_PCHCTRL_GEN_GCLK0 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_TCC0].Set((sam.GCLK_PCHCTRL_GEN_GCLK0 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) - sam.GCLK.PCHCTRL[29].Set((sam.GCLK_PCHCTRL_GEN_GCLK0 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_TCC2].Set((sam.GCLK_PCHCTRL_GEN_GCLK0 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) } // getTimer returns the timer to be used for PWM on this pin func (pwm PWM) getTimer() *sam.TCC_Type { switch pwm.Pin { - case PA16: - return sam.TCC1 - case PA17: - return sam.TCC1 case PA14: return sam.TCC2 case PA15: return sam.TCC2 + case PA16: + return sam.TCC1 + case PA17: + return sam.TCC1 case PA18: return sam.TCC1 case PA19: @@ -43,10 +43,10 @@ func (pwm PWM) getTimer() *sam.TCC_Type { return sam.TCC0 case PA21: return sam.TCC0 - case PA23: - return sam.TCC0 case PA22: return sam.TCC0 + case PA23: + return sam.TCC0 default: return nil // not supported on this pin } diff --git a/src/machine/machine_atsamd51j19.go b/src/machine/machine_atsamd51j19.go index 4ee92940..dd572612 100644 --- a/src/machine/machine_atsamd51j19.go +++ b/src/machine/machine_atsamd51j19.go @@ -3,7 +3,7 @@ // Peripheral abstraction layer for the atsamd51. // // Datasheet: -// http://ww1.microchip.com/downloads/en/DeviceDoc/60001507C.pdf +// http://ww1.microchip.com/downloads/en/DeviceDoc/SAM_D5xE5x_Family_Data_Sheet_DS60001507F.pdf // package machine @@ -15,29 +15,29 @@ const HSRAM_SIZE = 0x00030000 func InitPWM() { // turn on timer clocks used for PWM sam.MCLK.APBBMASK.SetBits(sam.MCLK_APBBMASK_TCC0_ | sam.MCLK_APBBMASK_TCC1_) - sam.MCLK.APBCMASK.SetBits(sam.MCLK_APBCMASK_TCC2_) + sam.MCLK.APBCMASK.SetBits(sam.MCLK_APBCMASK_TCC2_ | sam.MCLK_APBCMASK_TCC3_) sam.MCLK.APBDMASK.SetBits(sam.MCLK_APBDMASK_TCC4_) //use clock generator 0 - sam.GCLK.PCHCTRL[25].Set((sam.GCLK_PCHCTRL_GEN_GCLK0 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_TCC0].Set((sam.GCLK_PCHCTRL_GEN_GCLK0 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) - sam.GCLK.PCHCTRL[29].Set((sam.GCLK_PCHCTRL_GEN_GCLK0 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_TCC2].Set((sam.GCLK_PCHCTRL_GEN_GCLK0 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) - sam.GCLK.PCHCTRL[38].Set((sam.GCLK_PCHCTRL_GEN_GCLK0 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_TCC4].Set((sam.GCLK_PCHCTRL_GEN_GCLK0 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) } // getTimer returns the timer to be used for PWM on this pin func (pwm PWM) getTimer() *sam.TCC_Type { switch pwm.Pin { - case PA16: - return sam.TCC1 - case PA17: - return sam.TCC1 case PA14: return sam.TCC2 case PA15: return sam.TCC2 + case PA16: + return sam.TCC1 + case PA17: + return sam.TCC1 case PA18: return sam.TCC1 case PA19: @@ -46,9 +46,21 @@ func (pwm PWM) getTimer() *sam.TCC_Type { return sam.TCC0 case PA21: return sam.TCC0 + case PA22: + return sam.TCC0 case PA23: return sam.TCC0 - case PA22: + case PB12: + return sam.TCC3 + case PB13: + return sam.TCC3 + case PB14: + return sam.TCC4 + case PB15: + return sam.TCC4 + case PB16: + return sam.TCC0 + case PB17: return sam.TCC0 case PB31: return sam.TCC4 diff --git a/src/machine/machine_atsamd51j20.go b/src/machine/machine_atsamd51j20.go index 484db6d5..6038ed71 100644 --- a/src/machine/machine_atsamd51j20.go +++ b/src/machine/machine_atsamd51j20.go @@ -15,29 +15,29 @@ const HSRAM_SIZE = 0x00040000 func InitPWM() { // turn on timer clocks used for PWM sam.MCLK.APBBMASK.SetBits(sam.MCLK_APBBMASK_TCC0_ | sam.MCLK_APBBMASK_TCC1_) - sam.MCLK.APBCMASK.SetBits(sam.MCLK_APBCMASK_TCC2_) + sam.MCLK.APBCMASK.SetBits(sam.MCLK_APBCMASK_TCC2_ | sam.MCLK_APBCMASK_TCC3_) sam.MCLK.APBDMASK.SetBits(sam.MCLK_APBDMASK_TCC4_) //use clock generator 0 - sam.GCLK.PCHCTRL[25].Set((sam.GCLK_PCHCTRL_GEN_GCLK0 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_TCC0].Set((sam.GCLK_PCHCTRL_GEN_GCLK0 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) - sam.GCLK.PCHCTRL[29].Set((sam.GCLK_PCHCTRL_GEN_GCLK0 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_TCC2].Set((sam.GCLK_PCHCTRL_GEN_GCLK0 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) - sam.GCLK.PCHCTRL[38].Set((sam.GCLK_PCHCTRL_GEN_GCLK0 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_TCC4].Set((sam.GCLK_PCHCTRL_GEN_GCLK0 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) } // getTimer returns the timer to be used for PWM on this pin func (pwm PWM) getTimer() *sam.TCC_Type { switch pwm.Pin { - case PA16: - return sam.TCC1 - case PA17: - return sam.TCC1 case PA14: return sam.TCC2 case PA15: return sam.TCC2 + case PA16: + return sam.TCC1 + case PA17: + return sam.TCC1 case PA18: return sam.TCC1 case PA19: @@ -46,9 +46,21 @@ func (pwm PWM) getTimer() *sam.TCC_Type { return sam.TCC0 case PA21: return sam.TCC0 + case PA22: + return sam.TCC0 case PA23: return sam.TCC0 - case PA22: + case PB12: + return sam.TCC3 + case PB13: + return sam.TCC3 + case PB14: + return sam.TCC4 + case PB15: + return sam.TCC4 + case PB16: + return sam.TCC0 + case PB17: return sam.TCC0 case PB31: return sam.TCC4 diff --git a/src/machine/machine_atsamd51p19.go b/src/machine/machine_atsamd51p19.go index 2bb59408..9fadf2bf 100644 --- a/src/machine/machine_atsamd51p19.go +++ b/src/machine/machine_atsamd51p19.go @@ -15,29 +15,29 @@ const HSRAM_SIZE = 0x00030000 func InitPWM() { // turn on timer clocks used for PWM sam.MCLK.APBBMASK.SetBits(sam.MCLK_APBBMASK_TCC0_ | sam.MCLK_APBBMASK_TCC1_) - sam.MCLK.APBCMASK.SetBits(sam.MCLK_APBCMASK_TCC2_) + sam.MCLK.APBCMASK.SetBits(sam.MCLK_APBCMASK_TCC2_ | sam.MCLK_APBCMASK_TCC3_) sam.MCLK.APBDMASK.SetBits(sam.MCLK_APBDMASK_TCC4_) //use clock generator 0 - sam.GCLK.PCHCTRL[25].Set((sam.GCLK_PCHCTRL_GEN_GCLK0 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_TCC0].Set((sam.GCLK_PCHCTRL_GEN_GCLK0 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) - sam.GCLK.PCHCTRL[29].Set((sam.GCLK_PCHCTRL_GEN_GCLK0 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_TCC2].Set((sam.GCLK_PCHCTRL_GEN_GCLK0 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) - sam.GCLK.PCHCTRL[38].Set((sam.GCLK_PCHCTRL_GEN_GCLK0 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_TCC4].Set((sam.GCLK_PCHCTRL_GEN_GCLK0 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) } // getTimer returns the timer to be used for PWM on this pin func (pwm PWM) getTimer() *sam.TCC_Type { switch pwm.Pin { - case PA16: - return sam.TCC1 - case PA17: - return sam.TCC1 case PA14: return sam.TCC2 case PA15: return sam.TCC2 + case PA16: + return sam.TCC1 + case PA17: + return sam.TCC1 case PA18: return sam.TCC1 case PA19: @@ -46,9 +46,21 @@ func (pwm PWM) getTimer() *sam.TCC_Type { return sam.TCC0 case PA21: return sam.TCC0 + case PA22: + return sam.TCC0 case PA23: return sam.TCC0 - case PA22: + case PB12: + return sam.TCC3 + case PB13: + return sam.TCC3 + case PB14: + return sam.TCC4 + case PB15: + return sam.TCC4 + case PB16: + return sam.TCC0 + case PB17: return sam.TCC0 case PB31: return sam.TCC4 diff --git a/src/runtime/runtime_atsamd51.go b/src/runtime/runtime_atsamd51.go index 2b8fe565..c21324ea 100644 --- a/src/runtime/runtime_atsamd51.go +++ b/src/runtime/runtime_atsamd51.go @@ -317,7 +317,7 @@ func initUSBClock() { // Put Generic Clock Generator 1 as source for USB //GCLK->PCHCTRL[USB_GCLK_ID].reg = GCLK_PCHCTRL_GEN_GCLK1_Val | (1 << GCLK_PCHCTRL_CHEN_Pos); - sam.GCLK.PCHCTRL[10].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_USB].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) } @@ -327,9 +327,9 @@ func initADCClock() { sam.MCLK.APBDMASK.SetBits(sam.MCLK_APBDMASK_ADC1_) // Put Generic Clock Generator 1 as source for ADC0 and ADC1. - sam.GCLK.PCHCTRL[40].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_ADC0].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) - sam.GCLK.PCHCTRL[41].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_ADC1].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) } diff --git a/src/runtime/runtime_atsamd51g19.go b/src/runtime/runtime_atsamd51g19.go index c70e79be..f422043a 100644 --- a/src/runtime/runtime_atsamd51g19.go +++ b/src/runtime/runtime_atsamd51g19.go @@ -9,35 +9,35 @@ import ( func initSERCOMClocks() { // Turn on clock to SERCOM0 for UART0 sam.MCLK.APBAMASK.SetBits(sam.MCLK_APBAMASK_SERCOM0_) - sam.GCLK.PCHCTRL[7].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOM0_CORE].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) // sets the "slow" clock shared by all SERCOM - sam.GCLK.PCHCTRL[3].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SDHC1_SLOW].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) // Turn on clock to SERCOM1 sam.MCLK.APBAMASK.SetBits(sam.MCLK_APBAMASK_SERCOM1_) - sam.GCLK.PCHCTRL[8].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOM1_CORE].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) // Turn on clock to SERCOM2 sam.MCLK.APBBMASK.SetBits(sam.MCLK_APBBMASK_SERCOM2_) - sam.GCLK.PCHCTRL[23].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOM2_CORE].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) // Turn on clock to SERCOM3 sam.MCLK.APBBMASK.SetBits(sam.MCLK_APBBMASK_SERCOM3_) - sam.GCLK.PCHCTRL[24].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOM3_CORE].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) // Turn on clock to SERCOM4 sam.MCLK.APBDMASK.SetBits(sam.MCLK_APBDMASK_SERCOM4_) - sam.GCLK.PCHCTRL[34].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOM4_CORE].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) // Turn on clock to SERCOM5 sam.MCLK.APBDMASK.SetBits(sam.MCLK_APBDMASK_SERCOM5_) - sam.GCLK.PCHCTRL[35].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOM5_CORE].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) } diff --git a/src/runtime/runtime_atsamd51j19.go b/src/runtime/runtime_atsamd51j19.go index 2f3f7f60..b3a53236 100644 --- a/src/runtime/runtime_atsamd51j19.go +++ b/src/runtime/runtime_atsamd51j19.go @@ -9,35 +9,35 @@ import ( func initSERCOMClocks() { // Turn on clock to SERCOM0 for UART0 sam.MCLK.APBAMASK.SetBits(sam.MCLK_APBAMASK_SERCOM0_) - sam.GCLK.PCHCTRL[7].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOM0_CORE].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) // sets the "slow" clock shared by all SERCOM - sam.GCLK.PCHCTRL[3].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SDHC1_SLOW].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) // Turn on clock to SERCOM1 sam.MCLK.APBAMASK.SetBits(sam.MCLK_APBAMASK_SERCOM1_) - sam.GCLK.PCHCTRL[8].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOM1_CORE].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) // Turn on clock to SERCOM2 sam.MCLK.APBBMASK.SetBits(sam.MCLK_APBBMASK_SERCOM2_) - sam.GCLK.PCHCTRL[23].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOM2_CORE].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) // Turn on clock to SERCOM3 sam.MCLK.APBBMASK.SetBits(sam.MCLK_APBBMASK_SERCOM3_) - sam.GCLK.PCHCTRL[24].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOM3_CORE].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) // Turn on clock to SERCOM4 sam.MCLK.APBDMASK.SetBits(sam.MCLK_APBDMASK_SERCOM4_) - sam.GCLK.PCHCTRL[34].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOM4_CORE].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) // Turn on clock to SERCOM5 sam.MCLK.APBDMASK.SetBits(sam.MCLK_APBDMASK_SERCOM5_) - sam.GCLK.PCHCTRL[35].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOM5_CORE].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) } diff --git a/src/runtime/runtime_atsamd51j20.go b/src/runtime/runtime_atsamd51j20.go index 84655ef5..dd031fa1 100644 --- a/src/runtime/runtime_atsamd51j20.go +++ b/src/runtime/runtime_atsamd51j20.go @@ -9,35 +9,35 @@ import ( func initSERCOMClocks() { // Turn on clock to SERCOM0 for UART0 sam.MCLK.APBAMASK.SetBits(sam.MCLK_APBAMASK_SERCOM0_) - sam.GCLK.PCHCTRL[7].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOM0_CORE].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) // sets the "slow" clock shared by all SERCOM - sam.GCLK.PCHCTRL[3].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SDHC1_SLOW].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) // Turn on clock to SERCOM1 sam.MCLK.APBAMASK.SetBits(sam.MCLK_APBAMASK_SERCOM1_) - sam.GCLK.PCHCTRL[8].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOM1_CORE].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) // Turn on clock to SERCOM2 sam.MCLK.APBBMASK.SetBits(sam.MCLK_APBBMASK_SERCOM2_) - sam.GCLK.PCHCTRL[23].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOM2_CORE].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) // Turn on clock to SERCOM3 sam.MCLK.APBBMASK.SetBits(sam.MCLK_APBBMASK_SERCOM3_) - sam.GCLK.PCHCTRL[24].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOM3_CORE].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) // Turn on clock to SERCOM4 sam.MCLK.APBDMASK.SetBits(sam.MCLK_APBDMASK_SERCOM4_) - sam.GCLK.PCHCTRL[34].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOM4_CORE].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) // Turn on clock to SERCOM5 sam.MCLK.APBDMASK.SetBits(sam.MCLK_APBDMASK_SERCOM5_) - sam.GCLK.PCHCTRL[35].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOM5_CORE].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) } diff --git a/src/runtime/runtime_atsamd51p19.go b/src/runtime/runtime_atsamd51p19.go index 88211472..880d0290 100644 --- a/src/runtime/runtime_atsamd51p19.go +++ b/src/runtime/runtime_atsamd51p19.go @@ -9,45 +9,45 @@ import ( func initSERCOMClocks() { // Turn on clock to SERCOM0 for UART0 sam.MCLK.APBAMASK.SetBits(sam.MCLK_APBAMASK_SERCOM0_) - sam.GCLK.PCHCTRL[7].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOM0_CORE].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) // sets the "slow" clock shared by all SERCOM - sam.GCLK.PCHCTRL[3].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SDHC1_SLOW].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) // Turn on clock to SERCOM1 sam.MCLK.APBAMASK.SetBits(sam.MCLK_APBAMASK_SERCOM1_) - sam.GCLK.PCHCTRL[8].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOM1_CORE].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) // Turn on clock to SERCOM2 sam.MCLK.APBBMASK.SetBits(sam.MCLK_APBBMASK_SERCOM2_) - sam.GCLK.PCHCTRL[23].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOM2_CORE].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) // Turn on clock to SERCOM3 sam.MCLK.APBBMASK.SetBits(sam.MCLK_APBBMASK_SERCOM3_) - sam.GCLK.PCHCTRL[24].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOM3_CORE].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) // Turn on clock to SERCOM4 sam.MCLK.APBDMASK.SetBits(sam.MCLK_APBDMASK_SERCOM4_) - sam.GCLK.PCHCTRL[34].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOM4_CORE].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) // Turn on clock to SERCOM5 sam.MCLK.APBDMASK.SetBits(sam.MCLK_APBDMASK_SERCOM5_) - sam.GCLK.PCHCTRL[35].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOM5_CORE].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) // Turn on clock to SERCOM6 sam.MCLK.APBDMASK.SetBits(sam.MCLK_APBDMASK_SERCOM6_) - sam.GCLK.PCHCTRL[36].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOM6_CORE].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) // Turn on clock to SERCOM7 sam.MCLK.APBDMASK.SetBits(sam.MCLK_APBDMASK_SERCOM7_) - sam.GCLK.PCHCTRL[37].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_SERCOM7_CORE].Set((sam.GCLK_PCHCTRL_GEN_GCLK1 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) }