1// +build sam,atsamd21,feather_m0
2
3package machine
4
5import (
6	"device/sam"
7	"runtime/interrupt"
8)
9
10// used to reset into bootloader
11const RESET_MAGIC_VALUE = 0xf01669ef
12
13// GPIO Pins
14const (
15	D0  = PA11  // UART0 RX
16	D1  = PA10  // UART0 TX
17	D2  = NoPin // does not seem to exist
18	D3  = PA09
19	D4  = PA08
20	D5  = PA15  // PWM available
21	D6  = PA20  // PWM available
22	D7  = NoPin // does not seem to exist
23	D8  = PA06
24	D9  = PA07 // PWM available
25	D10 = PA18 // can be used for PWM or UART1 TX
26	D11 = PA16 // can be used for PWM or UART1 RX
27	D12 = PA19 // PWM available
28	D13 = PA17 // PWM available
29)
30
31// Analog pins
32const (
33	A0 = PA02 // ADC/AIN[0]
34	A1 = PB08 // ADC/AIN[2]
35	A2 = PB09 // ADC/AIN[3]
36	A3 = PA04 // ADC/AIN[4]
37	A4 = PA05 // ADC/AIN[5]
38	A5 = PB02 // ADC/AIN[10]
39)
40
41const (
42	LED = D13
43)
44
45// UART0 aka USBCDC pins
46const (
47	USBCDC_DM_PIN = PA24
48	USBCDC_DP_PIN = PA25
49)
50
51// UART1 pins
52const (
53	UART_TX_PIN = D10
54	UART_RX_PIN = D11
55)
56
57// UART1 on the Feather M0.
58var (
59	UART1 = UART{
60		Buffer: NewRingBuffer(),
61		Bus:    sam.SERCOM1_USART,
62		SERCOM: 1,
63	}
64)
65
66func init() {
67	UART1.Interrupt = interrupt.New(sam.IRQ_SERCOM1, UART1.handleInterrupt)
68}
69
70// I2C pins
71const (
72	SDA_PIN = PA22 // SDA: SERCOM3/PAD[0]
73	SCL_PIN = PA23 // SCL: SERCOM3/PAD[1]
74)
75
76// I2C on the Feather M0.
77var (
78	I2C0 = I2C{
79		Bus:    sam.SERCOM3_I2CM,
80		SERCOM: 3,
81	}
82)
83
84// SPI pins
85const (
86	SPI0_SCK_PIN = PB11 // SCK: SERCOM4/PAD[3]
87	SPI0_SDO_PIN = PB10 // SDO: SERCOM4/PAD[2]
88	SPI0_SDI_PIN = PA12 // SDI: SERCOM4/PAD[0]
89)
90
91// SPI on the Feather M0.
92var (
93	SPI0 = SPI{
94		Bus:    sam.SERCOM4_SPI,
95		SERCOM: 4,
96	}
97)
98
99// I2S pins
100const (
101	I2S_SCK_PIN = PA10
102	I2S_SD_PIN  = PA08
103	I2S_WS_PIN  = NoPin // TODO: figure out what this is on Feather M0.
104)
105
106// USB CDC identifiers
107const (
108	usb_STRING_PRODUCT      = "Adafruit Feather M0 Express"
109	usb_STRING_MANUFACTURER = "Adafruit"
110)
111
112var (
113	usb_VID uint16 = 0x239A
114	usb_PID uint16 = 0x801B
115)
116