diff options
Diffstat (limited to 'src/machine/machine_atsame51j19.go')
-rw-r--r-- | src/machine/machine_atsame51j19.go | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/machine/machine_atsame51j19.go b/src/machine/machine_atsame51j19.go new file mode 100644 index 000000000..4a2021bd1 --- /dev/null +++ b/src/machine/machine_atsame51j19.go @@ -0,0 +1,59 @@ +// +build sam,atsame51,atsame51j19 + +// Peripheral abstraction layer for the atsame51. +// +// Datasheet: +// http://ww1.microchip.com/downloads/en/DeviceDoc/SAM_D5xE5x_Family_Data_Sheet_DS60001507F.pdf +// +package machine + +import "device/sam" + +const HSRAM_SIZE = 0x00030000 + +// This chip has five TCC peripherals, which have PWM as one feature. +var ( + TCC0 = (*TCC)(sam.TCC0) + TCC1 = (*TCC)(sam.TCC1) + TCC2 = (*TCC)(sam.TCC2) + TCC3 = (*TCC)(sam.TCC3) + TCC4 = (*TCC)(sam.TCC4) +) + +func (tcc *TCC) configureClock() { + // Turn on timer clocks used for the TCC and use generic clock generator 0. + switch tcc.timer() { + case sam.TCC0: + sam.MCLK.APBBMASK.SetBits(sam.MCLK_APBBMASK_TCC0_) + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_TCC0].Set((sam.GCLK_PCHCTRL_GEN_GCLK0 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) + case sam.TCC1: + sam.MCLK.APBBMASK.SetBits(sam.MCLK_APBBMASK_TCC1_) + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_TCC1].Set((sam.GCLK_PCHCTRL_GEN_GCLK0 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) + case sam.TCC2: + sam.MCLK.APBCMASK.SetBits(sam.MCLK_APBCMASK_TCC2_) + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_TCC2].Set((sam.GCLK_PCHCTRL_GEN_GCLK0 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) + case sam.TCC3: + sam.MCLK.APBCMASK.SetBits(sam.MCLK_APBCMASK_TCC3_) + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_TCC3].Set((sam.GCLK_PCHCTRL_GEN_GCLK0 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) + case sam.TCC4: + sam.MCLK.APBDMASK.SetBits(sam.MCLK_APBDMASK_TCC4_) + sam.GCLK.PCHCTRL[sam.PCHCTRL_GCLK_TCC4].Set((sam.GCLK_PCHCTRL_GEN_GCLK0 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) + } +} + +func (tcc *TCC) timerNum() uint8 { + switch tcc.timer() { + case sam.TCC0: + return 0 + case sam.TCC1: + return 1 + case sam.TCC2: + return 2 + case sam.TCC3: + return 3 + case sam.TCC4: + return 4 + default: + return 0x0f // should not happen + } +} |