mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-08 13:03:39 +00:00
90b42799a2
This makes it possible to assign I2C objects (machine.I2C0, machine.I2C1, etc.) without needing to take a pointer. This is important especially in the future when I2C may be driven using DMA and the machine.I2C type needs to store some state.
127 lines
2.1 KiB
Go
127 lines
2.1 KiB
Go
// +build sam,atsamd21,xiao
|
|
|
|
package machine
|
|
|
|
import (
|
|
"device/sam"
|
|
"runtime/interrupt"
|
|
)
|
|
|
|
// used to reset into bootloader
|
|
const RESET_MAGIC_VALUE = 0xf01669ef
|
|
|
|
// GPIO Pins
|
|
const (
|
|
D0 = PA02 // can be used for PWM or DAC
|
|
D1 = PA04 // PWM available
|
|
D2 = PA10 // PWM available
|
|
D3 = PA11 // PWM available
|
|
D4 = PA08 // can be used for PWM or I2C SDA
|
|
D5 = PA09 // can be used for PWM or I2C SCL
|
|
D6 = PB08 // can be used for PWM or UART1 TX
|
|
D7 = PB09 // can be used for PWM or UART1 RX
|
|
D8 = PA07 // can be used for PWM or SPI SCK
|
|
D9 = PA05 // can be used for PWM or SPI SDI
|
|
D10 = PA06 // can be used for PWM or SPI SDO
|
|
)
|
|
|
|
// Analog pins
|
|
const (
|
|
A0 = PA02 // ADC/AIN[0]
|
|
A1 = PA04 // ADC/AIN[4]
|
|
A2 = PA10 // ADC/AIN[18]
|
|
A3 = PA11 // ADC/AIN[19]
|
|
A4 = PA08 // ADC/AIN[16]
|
|
A5 = PA09 // ADC/AIN[17]
|
|
A6 = PB08 // ADC/AIN[2]
|
|
A7 = PB09 // ADC/AIN[3]
|
|
A8 = PA07 // ADC/AIN[7]
|
|
A9 = PA05 // ADC/AIN[6]
|
|
A10 = PA06 // ADC/AIN[5]
|
|
)
|
|
|
|
const (
|
|
LED = PA17
|
|
LED_RXL = PA18
|
|
LED_TXL = PA19
|
|
LED2 = LED_RXL
|
|
LED3 = LED_TXL
|
|
)
|
|
|
|
// UART0 aka USBCDC pins
|
|
const (
|
|
USBCDC_DM_PIN = PA24
|
|
USBCDC_DP_PIN = PA25
|
|
)
|
|
|
|
// UART1 pins
|
|
const (
|
|
UART_TX_PIN = D6
|
|
UART_RX_PIN = D7
|
|
)
|
|
|
|
// UART1 on the Xiao
|
|
var (
|
|
UART1 = UART{
|
|
Buffer: NewRingBuffer(),
|
|
Bus: sam.SERCOM4_USART,
|
|
SERCOM: 4,
|
|
}
|
|
)
|
|
|
|
func init() {
|
|
UART1.Interrupt = interrupt.New(sam.IRQ_SERCOM4, UART1.handleInterrupt)
|
|
}
|
|
|
|
// I2C pins
|
|
const (
|
|
SDA_PIN = PA08 // SDA: SERCOM2/PAD[0]
|
|
SCL_PIN = PA09 // SCL: SERCOM2/PAD[1]
|
|
)
|
|
|
|
// I2C on the Xiao
|
|
var (
|
|
I2C0 = &I2C{
|
|
Bus: sam.SERCOM2_I2CM,
|
|
SERCOM: 2,
|
|
}
|
|
)
|
|
|
|
// SPI pins
|
|
const (
|
|
SPI0_SCK_PIN = PA07 // SCK: SERCOM0/PAD[3]
|
|
SPI0_SDO_PIN = PA06 // SDO: SERCOM0/PAD[2]
|
|
SPI0_SDI_PIN = PA05 // SDI: SERCOM0/PAD[1]
|
|
)
|
|
|
|
// SPI on the Xiao
|
|
var (
|
|
SPI0 = SPI{
|
|
Bus: sam.SERCOM0_SPI,
|
|
SERCOM: 0,
|
|
}
|
|
)
|
|
|
|
// I2S pins
|
|
const (
|
|
I2S_SCK_PIN = PA10
|
|
I2S_SD_PIN = PA08
|
|
I2S_WS_PIN = NoPin // TODO: figure out what this is on Xiao
|
|
)
|
|
|
|
// I2S on the Xiao
|
|
var (
|
|
I2S0 = I2S{Bus: sam.I2S}
|
|
)
|
|
|
|
// USB CDC identifiers
|
|
const (
|
|
usb_STRING_PRODUCT = "Seeed XIAO M0"
|
|
usb_STRING_MANUFACTURER = "Seeed"
|
|
)
|
|
|
|
var (
|
|
usb_VID uint16 = 0x2886
|
|
usb_PID uint16 = 0x802F
|
|
)
|