aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/machine/board_grandcentral-m4.go
blob: 46fb956978e1fe59b16ad7ab89a82d05f5d517c8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
//go:build grandcentral_m4

package machine

// Digital pins
const (
	//  = Pin     Alt. Function        SERCOM   PWM Timer   Interrupt
	//   ------  -------------------- -------- ----------- -----------
	D0  = PB25 // UART1 RX              0[1]                 EXTI9
	D1  = PB24 // UART1 TX              0[0]                 EXTI8
	D2  = PC18 //                                TCC0[2]     EXTI2
	D3  = PC19 //                                TCC0[3]     EXTI3
	D4  = PC20 //                                TCC0[4]     EXTI4
	D5  = PC21 //                                TCC0[5]     EXTI5
	D6  = PD20 //                                TCC1[0]     EXTI10
	D7  = PD21 //                                TCC1[1]     EXTI11
	D8  = PB18 //                                TCC1[0]     EXTI2
	D9  = PB02 //                                TC6[0]      EXTI3
	D10 = PB22 //                                TC7[0]      EXTI6
	D11 = PB23 //                                            EXTI7
	D12 = PB00 //                                TC7[0]      EXTI0
	D13 = PB01 // On-board LED                   TC7[1]      EXTI1
	D14 = PB16 // UART4 TX, I2S0 SCK    5[0]     TC6[0]      EXTI0
	D15 = PB17 // UART4 RX, I2S0 MCK    5[1]                 EXTI1
	D16 = PC22 // UART3 TX              1[0]                 EXTI6
	D17 = PC23 // UART3 RX              1[1]                 EXTI6
	D18 = PB12 // UART2 TX              4[0]     TCC3[0]     EXTI12
	D19 = PB13 // UART2 RX              4[1]     TCC3[1]     EXTI13
	D20 = PB20 // I2C0 SDA              3[0]                 EXTI4
	D21 = PB21 // I2C0 SCL              3[1]                 EXTI5
	D22 = PD12 //                                            EXTI7
	D23 = PA15 //                                TCC2[1]     EXTI15
	D24 = PC17 // I2C1 SCL              6[1]     TCC0[1]     EXTI1
	D25 = PC16 // I2C1 SDA              6[0]     TCC0[0]     EXTI0
	D26 = PA12 // PCC DEN1                       TC2[0]      EXTI12
	D27 = PA13 // PCC DEN2                       TC2[1]      EXTI13
	D28 = PA14 // PCC CLK                        TCC2[0]     EXTI14
	D29 = PB19 // PCC XCLK                                   EXTI3
	D30 = PA23 // PCC D7                         TC4[1]      EXTI7
	D31 = PA22 // PCC D6, I2S0 SDI               TC4[0]      EXTI6
	D32 = PA21 // PCC D5, I2S0 SDO                           EXTI5
	D33 = PA20 // PCC D4, I2S0 FS                            EXTI4
	D34 = PA19 // PCC D3                         TC3[1]      EXTI3
	D35 = PA18 // PCC D2                         TC3[0]      EXTI2
	D36 = PA17 // PCC D1                                     EXTI1
	D37 = PA16 // PCC D0                                     EXTI0
	D38 = PB15 // PCC D9                         TCC4[1]     EXTI15
	D39 = PB14 // PCC D8                         TCC4[0]     EXTI14
	D40 = PC13 // PCC D11                                    EXTI13
	D41 = PC12 // PCC D10                                    EXTI12
	D42 = PC15 // PCC D13                                    EXTI15
	D43 = PC14 // PCC D12                                    EXTI14
	D44 = PC11 //                                            EXTI11
	D45 = PC10 //                                            EXTI10
	D46 = PC06 //                                            EXTI6
	D47 = PC07 //                                            EXTI5
	D48 = PC04 //                                            EXTI4
	D49 = PC05 //                                            EXTI5
	D50 = PD11 // SPI0 SDI              7[3]                 EXTI11
	D51 = PD08 // SPI0 SDO              7[0]                 EXTI8
	D52 = PD09 // SPI0 SCK              7[1]                 EXTI9
	D53 = PD10 // SPI0 CS                                    EXTI10
	D54 = PB05 // ADC1 (A8)                                  EXTI5
	D55 = PB06 // ADC1 (A9)                                  EXTI6
	D56 = PB07 // ADC1 (A10)                                 EXTI7
	D57 = PB08 // ADC1 (A11)                                 EXTI8
	D58 = PB09 // ADC1 (A12)                                 EXTI9
	D59 = PA04 // ADC0 (A13)                     TC0[0]      EXTI4
	D60 = PA06 // ADC0 (A14)                     TC1[0]      EXTI6
	D61 = PA07 // ADC0 (A15)                     TC1[1]      EXTI7
	D62 = PB20 // I2C0 SDA              3[0]     TCC1[2]     EXTI4
	D63 = PB21 // I2C0 SCL              3[1]     TCC1[3]     EXTI5
	D64 = PD11 // SPI0 SDI              7[3]                 EXTI6
	D65 = PD08 // SPI0 SDO              7[0]                 EXTI3
	D66 = PD09 // SPI0 SCK              7[1]                 EXTI4
	D67 = PA02 // ADC0 (A0), DAC0                            EXTI2
	D68 = PA05 // ADC0 (A1), DAC1                            EXTI5
	D69 = PB03 // ADC0 (A2)                      TC6[1]      EXTI3
	D70 = PC00 // ADC1 (A3)                                  EXTI0
	D71 = PC01 // ADC1 (A4)                                  EXTI1
	D72 = PC02 // ADC1 (A5)                                  EXTI2
	D73 = PC03 // ADC1 (A6)                                  EXTI3
	D74 = PB04 // ADC1 (A7)                                  EXTI4
	D75 = PC31 // UART RX LED
	D76 = PC30 // UART TX LED
	D77 = PA27 // USB HOST EN
	D78 = PA24 // USB DM                                     EXTI8
	D79 = PA25 // USB DP                                     EXTI9
	D80 = PB29 // SD/SPI1 SDI           2[3]
	D81 = PB27 // SD/SPI1 SCK           2[1]
	D82 = PB26 // SD/SPI1 SDO           2[0]
	D83 = PB28 // SD/SPI1 CS
	D84 = PA03 // AREF                                       EXTI3
	D85 = PA02 // DAC0                                       EXTI2
	D86 = PA05 // DAC1                                       EXTI5
	D87 = PB01 // On-board LED (D13)             TC7[1]      EXTI1
	D88 = PC24 // On-board NeoPixel
	D89 = PB10 // QSPI SCK                                   EXTI10
	D90 = PB11 // QSPI CS                                    EXTI11
	D91 = PA08 // QSPI ID0                                   EXTI(NMI)
	D92 = PA09 // QSPI ID1                                   EXTI9
	D93 = PA10 // QSPI ID2                                   EXTI10
	D94 = PA11 // QSPI ID3                                   EXTI11
	D95 = PB31 // SD Detect                                  EXTI15
	D96 = PB30 // SWO                                        EXTI14
)

// Analog pins
const (
	A0  = D67 // (PA02) ADC0 ch. 0,
	A1  = D68 // (PA05) ADC0 ch. 5,
	A2  = D69 // (PB03) ADC0 ch. 15
	A3  = D70 // (PC00) ADC1 ch. 10
	A4  = D71 // (PC01) ADC1 ch. 11
	A5  = D72 // (PC02) ADC1 ch. 4
	A6  = D73 // (PC03) ADC1 ch. 5
	A7  = D74 // (PB04) ADC1 ch. 6
	A8  = D54 // (PB05) ADC1 ch. 7
	A9  = D55 // (PB06) ADC1 ch. 8
	A10 = D56 // (PB07) ADC1 ch. 9
	A11 = D57 // (PB08) ADC1 ch. 0
	A12 = D58 // (PB09) ADC1 ch. 1
	A13 = D59 // (PA04) ADC0 ch. 4
	A14 = D60 // (PA06) ADC0 ch. 6
	A15 = D61 // (PA07) ADC0 ch. 7

	AREF = D84 // (PA03)
)

// LED pins
const (
	LED_PIN         = D13 // (PB01), also on D87
	UART_RX_LED_PIN = D75 // (PC31)
	UART_TX_LED_PIN = D76 // (PC30)
	NEOPIXEL_PIN    = D88 // (PC24)

	// aliases used by examples and drivers
	LED      = LED_PIN
	LED_RX   = UART_RX_LED_PIN
	LED_TX   = UART_TX_LED_PIN
	NEOPIXEL = NEOPIXEL_PIN
	WS2812   = NEOPIXEL_PIN
)

// UART pins
const (
	UART1_RX_PIN = D0 // (PB25)
	UART1_TX_PIN = D1 // (PB24)

	UART2_RX_PIN = D19 // (PB13)
	UART2_TX_PIN = D18 // (PB12)

	UART3_RX_PIN = D17 // (PC23)
	UART3_TX_PIN = D16 // (PC22)

	UART4_RX_PIN = D15 // (PB17)
	UART4_TX_PIN = D14 // (PB16)

	UART_RX_PIN = UART1_RX_PIN // default pins
	UART_TX_PIN = UART1_TX_PIN //
)

// UART on the Grand Central M4
var (
	UART1 = &sercomUSART0
	UART2 = &sercomUSART4
	UART3 = &sercomUSART1
	UART4 = &sercomUSART5

	DefaultUART = UART1
)

// SPI pins
const (
	SPI0_SCK_PIN = D66 // (PD09), also on D52
	SPI0_SDO_PIN = D65 // (PD08), also on D51
	SPI0_SDI_PIN = D64 // (PD11), also on D50
	SPI0_CS_PIN  = D53 // (PD10)

	SPI1_SCK_PIN = D81 // (PB27)
	SPI1_SDO_PIN = D82 // (PB26)
	SPI1_SDI_PIN = D80 // (PB29)

	SPI_SCK_PIN = SPI0_SCK_PIN // default pins
	SPI_SDO_PIN = SPI0_SDO_PIN //
	SPI_SDI_PIN = SPI0_SDI_PIN //
	SPI_CS_PIN  = SPI0_CS_PIN  //
)

// SPI on the Grand Central M4
var (
	SPI0 = sercomSPIM7
	SPI1 = sercomSPIM2 // SD card
)

// I2C pins
const (
	I2C0_SDA_PIN = D62 // (PB20), also on D20
	I2C0_SCL_PIN = D63 // (PB21), also on D21

	I2C1_SDA_PIN = D25 // (PC16)
	I2C1_SCL_PIN = D24 // (PC17)

	I2C_SDA_PIN = I2C0_SDA_PIN // default pins
	I2C_SCL_PIN = I2C0_SCL_PIN //

	SDA_PIN = I2C_SDA_PIN // unconventional pin names
	SCL_PIN = I2C_SCL_PIN //  (required by machine_atsamd51.go)
)

// I2C on the Grand Central M4
var (
	I2C0 = sercomI2CM3
	I2C1 = sercomI2CM6
)

// I2S pins
const (
	I2S0_SCK_PIN = D14 // (PB16)
	I2S0_MCK_PIN = D15 // (PB17)
	I2S0_FS_PIN  = D33 // (PA20)
	I2S0_SDO_PIN = D32 // (PA21)
	I2S0_SDI_PIN = D31 // (PA22)

	I2S_SCK_PIN = I2S0_SCK_PIN // default pins
	I2S_WS_PIN  = I2S0_FS_PIN  //
	I2S_SD_PIN  = I2S0_SDO_PIN //
)

// SD card pins
const (
	SD0_SCK_PIN = D81 // (PB27)
	SD0_SDO_PIN = D82 // (PB26)
	SD0_SDI_PIN = D80 // (PB29)
	SD0_CS_PIN  = D83 // (PB28)
	SD0_DET_PIN = D95 // (PB31)

	SDCARD_SCK_PIN = SD0_SCK_PIN // default pins
	SDCARD_SDO_PIN = SD0_SDO_PIN //
	SDCARD_SDI_PIN = SD0_SDI_PIN //
	SDCARD_CS_PIN  = SD0_CS_PIN  //
	SDCARD_DET_PIN = SD0_DET_PIN //
)

// Other peripheral constants
const (
	resetMagicValue = 0xF01669EF // Used to reset into bootloader
)

// USB CDC pins
const (
	USBCDC_HOSTEN_PIN = D77 // (PA27) host enable
	USBCDC_DM_PIN     = D78 // (PA24) D-
	USBCDC_DP_PIN     = D79 // (PA25) D+
)

// USB CDC identifiers
const (
	usb_STRING_PRODUCT      = "Adafruit Grand Central M4"
	usb_STRING_MANUFACTURER = "Adafruit"
)

var (
	usb_VID uint16 = 0x239A
	usb_PID uint16 = 0x8031
)