diff --git a/Makefile b/Makefile index b0692ba7..03dd75cf 100644 --- a/Makefile +++ b/Makefile @@ -188,6 +188,8 @@ smoketest: @$(MD5SUM) test.wasm $(TINYGO) build -o test.wasm -tags=pca10056 examples/blinky2 @$(MD5SUM) test.wasm + $(TINYGO) build -o test.wasm -tags=circuitplay_express examples/blinky1 + @$(MD5SUM) test.wasm # test all targets/boards $(TINYGO) build -size short -o test.hex -target=pca10040-s132v6 examples/blinky1 @$(MD5SUM) test.hex diff --git a/src/machine/board_atsamd21.go b/src/machine/board_atsamd21.go new file mode 100644 index 00000000..8c3a44df --- /dev/null +++ b/src/machine/board_atsamd21.go @@ -0,0 +1,73 @@ +// +build sam,atsamd21 circuitplay_express + +package machine + +const CPU_FREQUENCY = 48000000 + +// Hardware pins +const ( + PA00 Pin = 0 + PA01 Pin = 1 + PA02 Pin = 2 + PA03 Pin = 3 + PA04 Pin = 4 + PA05 Pin = 5 + PA06 Pin = 6 + PA07 Pin = 7 + PA08 Pin = 8 + PA09 Pin = 9 + PA10 Pin = 10 + PA11 Pin = 11 + PA12 Pin = 12 + PA13 Pin = 13 + PA14 Pin = 14 + PA15 Pin = 15 + PA16 Pin = 16 + PA17 Pin = 17 + PA18 Pin = 18 + PA19 Pin = 19 + PA20 Pin = 20 + PA21 Pin = 21 + PA22 Pin = 22 + PA23 Pin = 23 + PA24 Pin = 24 + PA25 Pin = 25 + PA26 Pin = 26 + PA27 Pin = 27 + PA28 Pin = 28 + PA29 Pin = 29 + PA30 Pin = 30 + PA31 Pin = 31 + PB00 Pin = 32 + PB01 Pin = 33 + PB02 Pin = 34 + PB03 Pin = 35 + PB04 Pin = 36 + PB05 Pin = 37 + PB06 Pin = 38 + PB07 Pin = 39 + PB08 Pin = 40 + PB09 Pin = 41 + PB10 Pin = 42 + PB11 Pin = 43 + PB12 Pin = 44 + PB13 Pin = 45 + PB14 Pin = 46 + PB15 Pin = 47 + PB16 Pin = 48 + PB17 Pin = 49 + PB18 Pin = 50 + PB19 Pin = 51 + PB20 Pin = 52 + PB21 Pin = 53 + PB22 Pin = 54 + PB23 Pin = 55 + PB24 Pin = 56 + PB25 Pin = 57 + PB26 Pin = 58 + PB27 Pin = 59 + PB28 Pin = 60 + PB29 Pin = 61 + PB30 Pin = 62 + PB31 Pin = 63 +) diff --git a/src/machine/board_circuitplay_express.go b/src/machine/board_circuitplay_express.go index 9041ef88..0f0c0846 100644 --- a/src/machine/board_circuitplay_express.go +++ b/src/machine/board_circuitplay_express.go @@ -1,9 +1,7 @@ -// +build sam,atsamd21,circuitplay_express +// +build circuitplay_express package machine -import "device/sam" - // used to reset into bootloader const RESET_MAGIC_VALUE = 0xf01669ef @@ -68,20 +66,6 @@ const ( UART_RX_PIN = PB09 // PORTB ) -// UART1 on the Circuit Playground Express. -var ( - UART1 = UART{ - Buffer: NewRingBuffer(), - Bus: sam.SERCOM4_USART, - SERCOM: 4, - } -) - -//go:export SERCOM1_IRQHandler -func handleUART1() { - defaultUART1Handler() -} - // I2C pins const ( SDA_PIN = PB02 // I2C0 external @@ -91,20 +75,6 @@ const ( SCL1_PIN = PA01 // I2C1 internal ) -// I2C on the Circuit Playground Express. -var ( - // external device - I2C0 = I2C{ - Bus: sam.SERCOM5_I2CM, - SERCOM: 5, - } - // internal device - I2C1 = I2C{ - Bus: sam.SERCOM1_I2CM, - SERCOM: 1, - } -) - // SPI pins (internal flash) const ( SPI0_SCK_PIN = PA21 // SCK: SERCOM3/PAD[3] @@ -112,22 +82,9 @@ const ( SPI0_MISO_PIN = PA16 // MISO: SERCOM3/PAD[0] ) -// SPI on the Circuit Playground Express. -var ( - SPI0 = SPI{ - Bus: sam.SERCOM3_SPI, - SERCOM: 3, - } -) - // I2S pins const ( I2S_SCK_PIN = PA10 I2S_SD_PIN = PA08 I2S_WS_PIN = NoPin // no WS, instead uses SCK to sync ) - -// I2S on the Circuit Playground Express. -var ( - I2S0 = I2S{Bus: sam.I2S} -) diff --git a/src/machine/board_circuitplay_express_baremetal.go b/src/machine/board_circuitplay_express_baremetal.go new file mode 100644 index 00000000..446b1790 --- /dev/null +++ b/src/machine/board_circuitplay_express_baremetal.go @@ -0,0 +1,46 @@ +// +build sam,atsamd21,circuitplay_express + +package machine + +import "device/sam" + +// UART1 on the Circuit Playground Express. +var ( + UART1 = UART{ + Buffer: NewRingBuffer(), + Bus: sam.SERCOM4_USART, + SERCOM: 4, + } +) + +//go:export SERCOM1_IRQHandler +func handleUART1() { + defaultUART1Handler() +} + +// I2C on the Circuit Playground Express. +var ( + // external device + I2C0 = I2C{ + Bus: sam.SERCOM5_I2CM, + SERCOM: 5, + } + // internal device + I2C1 = I2C{ + Bus: sam.SERCOM1_I2CM, + SERCOM: 1, + } +) + +// SPI on the Circuit Playground Express. +var ( + SPI0 = SPI{ + Bus: sam.SERCOM3_SPI, + SERCOM: 3, + } +) + +// I2S on the Circuit Playground Express. +var ( + I2S0 = I2S{Bus: sam.I2S} +) diff --git a/src/machine/machine_atsamd21.go b/src/machine/machine_atsamd21.go index aadbb270..81510d50 100644 --- a/src/machine/machine_atsamd21.go +++ b/src/machine/machine_atsamd21.go @@ -14,8 +14,6 @@ import ( "unsafe" ) -const CPU_FREQUENCY = 48000000 - type PinMode uint8 const ( @@ -35,74 +33,6 @@ const ( PinInputPulldown PinMode = 12 ) -// Hardware pins -const ( - PA00 Pin = 0 - PA01 Pin = 1 - PA02 Pin = 2 - PA03 Pin = 3 - PA04 Pin = 4 - PA05 Pin = 5 - PA06 Pin = 6 - PA07 Pin = 7 - PA08 Pin = 8 - PA09 Pin = 9 - PA10 Pin = 10 - PA11 Pin = 11 - PA12 Pin = 12 - PA13 Pin = 13 - PA14 Pin = 14 - PA15 Pin = 15 - PA16 Pin = 16 - PA17 Pin = 17 - PA18 Pin = 18 - PA19 Pin = 19 - PA20 Pin = 20 - PA21 Pin = 21 - PA22 Pin = 22 - PA23 Pin = 23 - PA24 Pin = 24 - PA25 Pin = 25 - PA26 Pin = 26 - PA27 Pin = 27 - PA28 Pin = 28 - PA29 Pin = 29 - PA30 Pin = 30 - PA31 Pin = 31 - PB00 Pin = 32 - PB01 Pin = 33 - PB02 Pin = 34 - PB03 Pin = 35 - PB04 Pin = 36 - PB05 Pin = 37 - PB06 Pin = 38 - PB07 Pin = 39 - PB08 Pin = 40 - PB09 Pin = 41 - PB10 Pin = 42 - PB11 Pin = 43 - PB12 Pin = 44 - PB13 Pin = 45 - PB14 Pin = 46 - PB15 Pin = 47 - PB16 Pin = 48 - PB17 Pin = 49 - PB18 Pin = 50 - PB19 Pin = 51 - PB20 Pin = 52 - PB21 Pin = 53 - PB22 Pin = 54 - PB23 Pin = 55 - PB24 Pin = 56 - PB25 Pin = 57 - PB26 Pin = 58 - PB27 Pin = 59 - PB28 Pin = 60 - PB29 Pin = 61 - PB30 Pin = 62 - PB31 Pin = 63 -) - const ( pinPadMapSERCOM0Pad0 byte = (0x10 << 1) | 0x00 pinPadMapSERCOM1Pad0 byte = (0x20 << 1) | 0x00