diff --git a/README.md b/README.md index 1ff94089f4..437f617efc 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ See the [getting started instructions](https://tinygo.org/getting-started/) for You can compile TinyGo programs for microcontrollers, WebAssembly and Linux. -The following 40 microcontroller boards are currently supported: +The following 41 microcontroller boards are currently supported: * [Adafruit Circuit Playground Bluefruit](https://www.adafruit.com/product/4333) * [Adafruit Circuit Playground Express](https://www.adafruit.com/product/3333) @@ -62,6 +62,7 @@ The following 40 microcontroller boards are currently supported: * [Arduino Mega 2560](https://store.arduino.cc/arduino-mega-2560-rev3) * [Arduino Nano](https://store.arduino.cc/arduino-nano) * [Arduino Nano33 IoT](https://store.arduino.cc/nano-33-iot) +* [Arduino Zero](https://store.arduino.cc/usa/arduino-zero) * [Arduino Uno](https://store.arduino.cc/arduino-uno-rev3) * [BBC micro:bit](https://microbit.org/) * [Digispark](http://digistump.com/products/1) diff --git a/src/machine/board_arduino_zero.go b/src/machine/board_arduino_zero.go new file mode 100644 index 0000000000..651eea8216 --- /dev/null +++ b/src/machine/board_arduino_zero.go @@ -0,0 +1,101 @@ +// +build sam,atsamd21,arduino_zero + +package machine + +// used to reset into bootloader +const RESET_MAGIC_VALUE = 0x07738135 + +// GPIO Pins - Digital Low +const ( + D0 = PA11 // RX + D1 = PA10 // TX + D2 = PA14 + D3 = PA09 // PWM available + D4 = PA08 // PWM available + D5 = PA15 // PWM available + D6 = PA20 // PWM available + D7 = PA21 +) + +// GPIO Pins - Digital High +const ( + D8 = PA06 // PWM available + D9 = PA07 // PWM available + D10 = PA18 // PWM available + D11 = PA16 // PWM available + D12 = PA19 // PWM available + D13 = PA17 // PWM available +) + +// LEDs on the Arduino Zero +const ( + LED = LED1 + LED1 Pin = D13 + LED2 Pin = PA27 // TX LED + LED3 Pin = PB03 // RX LED +) + +// ADC pins +const ( + AREF Pin = PA03 + ADC0 Pin = PA02 + ADC1 Pin = PB08 + ADC2 Pin = PB09 + ADC3 Pin = PA04 + ADC4 Pin = PA05 + ADC5 Pin = PB02 +) + +// SPI pins - EDBG connected +const ( + SPI0_SDO_PIN Pin = PA16 // MOSI: SERCOM1/PAD[0] + SPI0_SDI_PIN Pin = PA19 // MISO: SERCOM1/PAD[2] + SPI0_SCK_PIN Pin = PA17 // SCK: SERCOM1/PAD[3] +) + +// SPI pins (Legacy ICSP) +const ( + SPI1_SDO_PIN Pin = PB10 // MOSI: SERCOM4/PAD[2] - Pin 4 + SPI1_SDI_PIN Pin = PA12 // MISO: SERCOM4/PAD[0] - Pin 1 + SPI1_SCK_PIN Pin = PB11 // SCK: SERCOM4/PAD[3] - Pin 3 +) + +// I2C pins - EDBG connected +const ( + SDA_PIN Pin = PA22 // SDA: SERCOM3/PAD[0] - Pin 20 + SCL_PIN Pin = PA23 // SCL: SERCOM3/PAD[1] - Pin 21 +) + +// I2S pins - might not be exposed +const ( + I2S_SCK_PIN Pin = PA10 + I2S_SD_PIN Pin = PA07 + I2S_WS_PIN Pin = PA11 +) + +// UART0 pins - EDBG connected +const ( + UART_RX_PIN Pin = D0 + UART_TX_PIN Pin = D1 +) + +// 'native' USB port pins +const ( + USBCDC_DM_PIN Pin = PA24 + USBCDC_DP_PIN Pin = PA25 +) + +// USB CDC identifiers +const ( + usb_STRING_PRODUCT = "Arduino Zero" + usb_STRING_MANUFACTURER = "Arduino LLC" + + usb_VID uint16 = 0x2341 + usb_PID uint16 = 0x804d +) + +// 32.768 KHz Crystal +const ( + XIN32 Pin = PA00 + XOUT32 Pin = PA01 +) diff --git a/targets/arduino-zero.json b/targets/arduino-zero.json new file mode 100644 index 0000000000..672eb09853 --- /dev/null +++ b/targets/arduino-zero.json @@ -0,0 +1,6 @@ +{ + "inherits": ["atsamd21g18a"], + "build-tags": ["sam", "atsamd21g18a", "arduino_zero"], + "flash-command": "bossac -i -e -w -v -R -U --port={port} --offset=0x2000 {bin}", + "flash-1200-bps-reset": "true" +}