1 /**
2  * \file
3  *
4  * \brief SAM D21 Xplained Pro board definition
5  *
6  * Copyright (c) 2014-2015 Atmel Corporation. All rights reserved.
7  *
8  * \asf_license_start
9  *
10  * \page License
11  *
12  * Redistribution and use in source and binary forms, with or without
13  * modification, are permitted provided that the following conditions are met:
14  *
15  * 1. Redistributions of source code must retain the above copyright notice,
16  *    this list of conditions and the following disclaimer.
17  *
18  * 2. Redistributions in binary form must reproduce the above copyright notice,
19  *    this list of conditions and the following disclaimer in the documentation
20  *    and/or other materials provided with the distribution.
21  *
22  * 3. The name of Atmel may not be used to endorse or promote products derived
23  *    from this software without specific prior written permission.
24  *
25  * 4. This software may only be redistributed and used in connection with an
26  *    Atmel microcontroller product.
27  *
28  * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
29  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
30  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
31  * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
32  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
33  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
34  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
35  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
36  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
37  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
38  * POSSIBILITY OF SUCH DAMAGE.
39  *
40  * \asf_license_stop
41  *
42  */
43 /*
44  * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
45  */
46 
47 #ifndef SAMD21_XPLAINED_PRO_H_INCLUDED
48 #define SAMD21_XPLAINED_PRO_H_INCLUDED
49 
50 #include <conf_board.h>
51 #include <compiler.h>
52 
53 #ifdef __cplusplus
54 extern "C" {
55 #endif
56 
57 /**
58  * \ingroup group_common_boards
59  * \defgroup samd21_xplained_pro_group SAM D21 Xplained Pro board
60  *
61  * @{
62  */
63 
64 void system_board_init(void);
65 
66 /**
67  * \defgroup samd21_xplained_pro_features_group Features
68  *
69  * Symbols that describe features and capabilities of the board.
70  *
71  * @{
72  */
73 
74 /** Name string macro */
75 #define BOARD_NAME                "SAMD21_XPLAINED_PRO"
76 
77 /** \name Resonator definitions
78  *  @{ */
79 #define BOARD_FREQ_SLCK_XTAL      (32768U)
80 #define BOARD_FREQ_SLCK_BYPASS    (32768U)
81 #define BOARD_FREQ_MAINCK_XTAL    0 /* Not Mounted */
82 #define BOARD_FREQ_MAINCK_BYPASS  0 /* Not Mounted */
83 #define BOARD_MCK                 CHIP_FREQ_CPU_MAX
84 #define BOARD_OSC_STARTUP_US      15625
85 /** @} */
86 
87 /** \name LED0 definitions
88  *  @{ */
89 #define LED0_PIN                  PIN_PB30
90 #define LED0_ACTIVE               false
91 #define LED0_INACTIVE             !LED0_ACTIVE
92 /** @} */
93 
94 /** \name SW0 definitions
95  *  @{ */
96 #define SW0_PIN                   PIN_PA15
97 #define SW0_ACTIVE                false
98 #define SW0_INACTIVE              !SW0_ACTIVE
99 #define SW0_EIC_PIN               PIN_PA15A_EIC_EXTINT15
100 #define SW0_EIC_MUX               MUX_PA15A_EIC_EXTINT15
101 #define SW0_EIC_PINMUX            PINMUX_PA15A_EIC_EXTINT15
102 #define SW0_EIC_LINE              15
103 /** @} */
104 
105 /**
106  * \name LED #0 definitions
107  *
108  * Wrapper macros for LED0, to ensure common naming across all Xplained Pro
109  * boards.
110  *
111  *  @{ */
112 #define LED_0_NAME                "LED0 (yellow)"
113 #define LED_0_PIN                 LED0_PIN
114 #define LED_0_ACTIVE              LED0_ACTIVE
115 #define LED_0_INACTIVE            LED0_INACTIVE
116 #define LED0_GPIO                 LED0_PIN
117 #define LED0                      LED0_PIN
118 
119 #define LED_0_PWM4CTRL_MODULE     TCC0
120 #define LED_0_PWM4CTRL_CHANNEL    0
121 #define LED_0_PWM4CTRL_OUTPUT     0
122 #define LED_0_PWM4CTRL_PIN        PIN_PB30E_TCC0_WO0
123 #define LED_0_PWM4CTRL_MUX        MUX_PB30E_TCC0_WO0
124 #define LED_0_PWM4CTRL_PINMUX     PINMUX_PB30E_TCC0_WO0
125 /** @} */
126 
127 /** Number of on-board LEDs */
128 #define LED_COUNT                 1
129 
130 /**
131  * \name Serialflash definitions
132  *
133  * On board Serialflash definitions.
134  *
135  *  @{ */
136 #define SERIALFLASH_SPI_MODULE      SERCOM5
137 #define SERIALFLASH_SPI_MUX_SETTING SPI_SIGNAL_MUX_SETTING_E
138 #define SERIALFLASH_SPI_PINMUX_PAD0 PINMUX_PB16C_SERCOM5_PAD0
139 #define SERIALFLASH_SPI_PINMUX_PAD1 PINMUX_UNUSED
140 #define SERIALFLASH_SPI_PINMUX_PAD2 PINMUX_PB22D_SERCOM5_PAD2
141 #define SERIALFLASH_SPI_PINMUX_PAD3 PINMUX_PB23D_SERCOM5_PAD3
142 #define SERIALFLASH_SPI_CS PIN_PA13
143 /** @} */
144 
145 /**
146  * \name Button #0 definitions
147  *
148  * Wrapper macros for SW0, to ensure common naming across all Xplained Pro
149  * boards.
150  *
151  *  @{ */
152 #define BUTTON_0_NAME             "SW0"
153 #define BUTTON_0_PIN              SW0_PIN
154 #define BUTTON_0_ACTIVE           SW0_ACTIVE
155 #define BUTTON_0_INACTIVE         SW0_INACTIVE
156 #define BUTTON_0_EIC_PIN          SW0_EIC_PIN
157 #define BUTTON_0_EIC_MUX          SW0_EIC_MUX
158 #define BUTTON_0_EIC_PINMUX       SW0_EIC_PINMUX
159 #define BUTTON_0_EIC_LINE         SW0_EIC_LINE
160 /** @} */
161 
162 /** Number of on-board buttons */
163 #define BUTTON_COUNT 1
164 
165 /** \name Extension header #1 pin definitions
166  *  @{
167  */
168 #define EXT1_PIN_3                PIN_PB00
169 #define EXT1_PIN_4                PIN_PB01
170 #define EXT1_PIN_5                PIN_PB06
171 #define EXT1_PIN_6                PIN_PB07
172 #define EXT1_PIN_7                PIN_PB02
173 #define EXT1_PIN_8                PIN_PB03
174 #define EXT1_PIN_9                PIN_PB04
175 #define EXT1_PIN_10               PIN_PB05
176 #define EXT1_PIN_11               PIN_PA08
177 #define EXT1_PIN_12               PIN_PA09
178 #define EXT1_PIN_13               PIN_PB09
179 #define EXT1_PIN_14               PIN_PB08
180 #define EXT1_PIN_15               PIN_PA05
181 #define EXT1_PIN_16               PIN_PA06
182 #define EXT1_PIN_17               PIN_PA04
183 #define EXT1_PIN_18               PIN_PA07
184 /** @} */
185 
186 /** \name Extension header #1 pin definitions by function
187  *  @{
188  */
189 #define EXT1_PIN_ADC_0            EXT1_PIN_3
190 #define EXT1_PIN_ADC_1            EXT1_PIN_4
191 #define EXT1_PIN_GPIO_0           EXT1_PIN_5
192 #define EXT1_PIN_GPIO_1           EXT1_PIN_6
193 #define EXT1_PIN_PWM_0            EXT1_PIN_7
194 #define EXT1_PIN_PWM_1            EXT1_PIN_8
195 #define EXT1_PIN_IRQ              EXT1_PIN_9
196 #define EXT1_PIN_I2C_SDA          EXT1_PIN_11
197 #define EXT1_PIN_I2C_SCL          EXT1_PIN_12
198 #define EXT1_PIN_UART_RX          EXT1_PIN_13
199 #define EXT1_PIN_UART_TX          EXT1_PIN_14
200 #define EXT1_PIN_SPI_SS_1         EXT1_PIN_10
201 #define EXT1_PIN_SPI_SS_0         EXT1_PIN_15
202 #define EXT1_PIN_SPI_MOSI         EXT1_PIN_16
203 #define EXT1_PIN_SPI_MISO         EXT1_PIN_17
204 #define EXT1_PIN_SPI_SCK          EXT1_PIN_18
205 /** @} */
206 
207 /** \name Extension header #1 ADC definitions
208  *  @{
209  */
210 #define EXT1_ADC_MODULE           ADC
211 #define EXT1_ADC_0_CHANNEL        8
212 #define EXT1_ADC_0_PIN            PIN_PB00B_ADC_AIN8
213 #define EXT1_ADC_0_MUX            MUX_PB00B_ADC_AIN8
214 #define EXT1_ADC_0_PINMUX         PINMUX_PB00B_ADC_AIN8
215 #define EXT1_ADC_1_CHANNEL        9
216 #define EXT1_ADC_1_PIN            PIN_PB01B_ADC_AIN9
217 #define EXT1_ADC_1_MUX            MUX_PB01B_ADC_AIN9
218 #define EXT1_ADC_1_PINMUX         PINMUX_PB01B_ADC_AIN9
219 /** @} */
220 
221 /** \name Extension header #1 PWM definitions
222  *  @{
223  */
224 #define EXT1_PWM_MODULE           TC6
225 #define EXT1_PWM_0_CHANNEL        0
226 #define EXT1_PWM_0_PIN            PIN_PB02E_TC6_WO0
227 #define EXT1_PWM_0_MUX            MUX_PB02E_TC6_WO0
228 #define EXT1_PWM_0_PINMUX         PINMUX_PB02E_TC6_WO0
229 #define EXT1_PWM_1_CHANNEL        1
230 #define EXT1_PWM_1_PIN            PIN_PB03E_TC6_WO1
231 #define EXT1_PWM_1_MUX            MUX_PB03E_TC6_WO1
232 #define EXT1_PWM_1_PINMUX         PINMUX_PB03E_TC6_WO1
233 /** @} */
234 
235 /** \name Extension header #1 IRQ/External interrupt definitions
236  *  @{
237  */
238 #define EXT1_IRQ_MODULE           EIC
239 #define EXT1_IRQ_INPUT            4
240 #define EXT1_IRQ_PIN              PIN_PB04A_EIC_EXTINT4
241 #define EXT1_IRQ_MUX              MUX_PB04A_EIC_EXTINT4
242 #define EXT1_IRQ_PINMUX           PINMUX_PB04A_EIC_EXTINT4
243 /** @} */
244 
245 /** \name Extension header #1 I2C definitions
246  *  @{
247  */
248 #define EXT1_I2C_MODULE              SERCOM2
249 #define EXT1_I2C_SERCOM_PINMUX_PAD0  PINMUX_PA08D_SERCOM2_PAD0
250 #define EXT1_I2C_SERCOM_PINMUX_PAD1  PINMUX_PA09D_SERCOM2_PAD1
251 #define EXT1_I2C_SERCOM_DMAC_ID_TX   SERCOM2_DMAC_ID_TX
252 #define EXT1_I2C_SERCOM_DMAC_ID_RX   SERCOM2_DMAC_ID_RX
253 /** @} */
254 
255 /** \name Extension header #1 UART definitions
256  *  @{
257  */
258 #define EXT1_UART_MODULE              SERCOM4
259 #define EXT1_UART_SERCOM_MUX_SETTING  USART_RX_1_TX_0_XCK_1
260 #define EXT1_UART_SERCOM_PINMUX_PAD0  PINMUX_PB08D_SERCOM4_PAD0
261 #define EXT1_UART_SERCOM_PINMUX_PAD1  PINMUX_PB09D_SERCOM4_PAD1
262 #define EXT1_UART_SERCOM_PINMUX_PAD2  PINMUX_UNUSED
263 #define EXT1_UART_SERCOM_PINMUX_PAD3  PINMUX_UNUSED
264 #define EXT1_UART_SERCOM_DMAC_ID_TX   SERCOM4_DMAC_ID_TX
265 #define EXT1_UART_SERCOM_DMAC_ID_RX   SERCOM4_DMAC_ID_RX
266 /** @} */
267 
268 /** \name Extension header #1 SPI definitions
269  *  @{
270  */
271 #define EXT1_SPI_MODULE              SERCOM0
272 #define EXT1_SPI_SERCOM_MUX_SETTING  SPI_SIGNAL_MUX_SETTING_E
273 #define EXT1_SPI_SERCOM_PINMUX_PAD0  PINMUX_PA04D_SERCOM0_PAD0
274 #define EXT1_SPI_SERCOM_PINMUX_PAD1  PINMUX_PA05D_SERCOM0_PAD1
275 #define EXT1_SPI_SERCOM_PINMUX_PAD2  PINMUX_PA06D_SERCOM0_PAD2
276 #define EXT1_SPI_SERCOM_PINMUX_PAD3  PINMUX_PA07D_SERCOM0_PAD3
277 #define EXT1_SPI_SERCOM_DMAC_ID_TX   SERCOM0_DMAC_ID_TX
278 #define EXT1_SPI_SERCOM_DMAC_ID_RX   SERCOM0_DMAC_ID_RX
279 /** @} */
280 
281 /** \name Extension header #2 pin definitions
282  *  @{
283  */
284 #define EXT2_PIN_3                PIN_PA10
285 #define EXT2_PIN_4                PIN_PA11
286 #define EXT2_PIN_5                PIN_PA20
287 #define EXT2_PIN_6                PIN_PA21
288 #define EXT2_PIN_7                PIN_PB12
289 #define EXT2_PIN_8                PIN_PB13
290 #define EXT2_PIN_9                PIN_PB14
291 #define EXT2_PIN_10               PIN_PB15
292 #define EXT2_PIN_11               PIN_PA08
293 #define EXT2_PIN_12               PIN_PA09
294 #define EXT2_PIN_13               PIN_PB11
295 #define EXT2_PIN_14               PIN_PB10
296 #define EXT2_PIN_15               PIN_PA17
297 #define EXT2_PIN_16               PIN_PA18
298 #define EXT2_PIN_17               PIN_PA16
299 #define EXT2_PIN_18               PIN_PA19
300 /** @} */
301 
302 /** \name Extension header #2 pin definitions by function
303  *  @{
304  */
305 #define EXT2_PIN_ADC_0            EXT2_PIN_3
306 #define EXT2_PIN_ADC_1            EXT2_PIN_4
307 #define EXT2_PIN_GPIO_0           EXT2_PIN_5
308 #define EXT2_PIN_GPIO_1           EXT2_PIN_6
309 #define EXT2_PIN_PWM_0            EXT2_PIN_7
310 #define EXT2_PIN_PWM_1            EXT2_PIN_8
311 #define EXT2_PIN_IRQ              EXT2_PIN_9
312 #define EXT2_PIN_I2C_SDA          EXT2_PIN_11
313 #define EXT2_PIN_I2C_SCL          EXT2_PIN_12
314 #define EXT2_PIN_UART_RX          EXT2_PIN_13
315 #define EXT2_PIN_UART_TX          EXT2_PIN_14
316 #define EXT2_PIN_SPI_SS_1         EXT2_PIN_10
317 #define EXT2_PIN_SPI_SS_0         EXT2_PIN_15
318 #define EXT2_PIN_SPI_MOSI         EXT2_PIN_16
319 #define EXT2_PIN_SPI_MISO         EXT2_PIN_17
320 #define EXT2_PIN_SPI_SCK          EXT2_PIN_18
321 /** @} */
322 
323 /** \name Extension header #2 ADC definitions
324  *  @{
325  */
326 #define EXT2_ADC_MODULE           ADC
327 #define EXT2_ADC_0_CHANNEL        18
328 #define EXT2_ADC_0_PIN            PIN_PA10B_ADC_AIN18
329 #define EXT2_ADC_0_MUX            MUX_PA10B_ADC_AIN18
330 #define EXT2_ADC_0_PINMUX         PINMUX_PA10B_ADC_AIN18
331 #define EXT2_ADC_1_CHANNEL        19
332 #define EXT2_ADC_1_PIN            PIN_PA11B_ADC_AIN19
333 #define EXT2_ADC_1_MUX            MUX_PA11B_ADC_AIN19
334 #define EXT2_ADC_1_PINMUX         PINMUX_PA11B_ADC_AIN19
335 /** @} */
336 
337 /** \name Extension header #2 PWM definitions
338  *  @{
339  */
340 #define EXT2_PWM_MODULE           TC4
341 #define EXT2_PWM_0_CHANNEL        0
342 #define EXT2_PWM_0_PIN            PIN_PB12E_TC4_WO0
343 #define EXT2_PWM_0_MUX            MUX_PB12E_TC4_WO0
344 #define EXT2_PWM_0_PINMUX         PINMUX_PB12E_TC4_WO0
345 #define EXT2_PWM_1_CHANNEL        1
346 #define EXT2_PWM_1_PIN            PIN_PB13E_TC4_WO1
347 #define EXT2_PWM_1_MUX            MUX_PB13E_TC4_WO1
348 #define EXT2_PWM_1_PINMUX         PINMUX_PB13E_TC4_WO1
349 /** @} */
350 
351 /** \name Extension header #2 PWM for Control definitions
352  *  @{
353  */
354 #define EXT2_PWM4CTRL_MODULE      TCC0
355 #define EXT2_PWM4CTRL_0_CHANNEL   2
356 #define EXT2_PWM4CTRL_0_OUTPUT    6
357 #define EXT2_PWM4CTRL_0_PIN       PIN_PB12F_TCC0_WO6
358 #define EXT2_PWM4CTRL_0_MUX       MUX_PB12F_TCC0_WO6
359 #define EXT2_PWM4CTRL_0_PINMUX    PINMUX_PB12F_TCC0_WO6
360 #define EXT2_PWM4CTRL_1_CHANNEL   3
361 #define EXT2_PWM4CTRL_1_OUTPUT    7
362 #define EXT2_PWM4CTRL_1_PIN       PIN_PB13F_TCC0_WO7
363 #define EXT2_PWM4CTRL_1_MUX       MUX_PB13F_TCC0_WO7
364 #define EXT2_PWM4CTRL_1_PINMUX    PINMUX_PB13F_TCC0_WO7
365 /** @} */
366 
367 /** \name Extension header #2 IRQ/External interrupt definitions
368  *  @{
369  */
370 #define EXT2_IRQ_MODULE           EIC
371 #define EXT2_IRQ_INPUT            14
372 #define EXT2_IRQ_PIN              PIN_PB14A_EIC_EXTINT14
373 #define EXT2_IRQ_MUX              MUX_PB14A_EIC_EXTINT14
374 #define EXT2_IRQ_PINMUX           PINMUX_PB14A_EIC_EXTINT14
375 /** @} */
376 
377  /** \name Extension header #2 I2C definitions
378  *  @{
379  */
380 #define EXT2_I2C_MODULE              SERCOM2
381 #define EXT2_I2C_SERCOM_PINMUX_PAD0  PINMUX_PA08D_SERCOM2_PAD0
382 #define EXT2_I2C_SERCOM_PINMUX_PAD1  PINMUX_PA09D_SERCOM2_PAD1
383 #define EXT2_I2C_SERCOM_DMAC_ID_TX   SERCOM2_DMAC_ID_TX
384 #define EXT2_I2C_SERCOM_DMAC_ID_RX   SERCOM2_DMAC_ID_RX
385 /** @} */
386 
387 /** \name Extension header #2 UART definitions
388  *  @{
389  */
390 #define EXT2_UART_MODULE              SERCOM4
391 #define EXT2_UART_SERCOM_MUX_SETTING  USART_RX_1_TX_0_XCK_1
392 #define EXT2_UART_SERCOM_PINMUX_PAD0  PINMUX_PB12C_SERCOM4_PAD0
393 #define EXT2_UART_SERCOM_PINMUX_PAD1  PINMUX_PB13C_SERCOM4_PAD1
394 #define EXT2_UART_SERCOM_PINMUX_PAD2  PINMUX_UNUSED
395 #define EXT2_UART_SERCOM_PINMUX_PAD3  PINMUX_UNUSED
396 #define EXT2_UART_SERCOM_DMAC_ID_TX   SERCOM4_DMAC_ID_TX
397 #define EXT2_UART_SERCOM_DMAC_ID_RX   SERCOM4_DMAC_ID_RX
398 /** @} */
399 
400 /** \name Extension header #2 SPI definitions
401  *  @{
402  */
403 #define EXT2_SPI_MODULE              SERCOM1
404 #define EXT2_SPI_SERCOM_MUX_SETTING  SPI_SIGNAL_MUX_SETTING_E
405 #define EXT2_SPI_SERCOM_PINMUX_PAD0  PINMUX_PA16C_SERCOM1_PAD0
406 #define EXT2_SPI_SERCOM_PINMUX_PAD1  PINMUX_PA17C_SERCOM1_PAD1
407 #define EXT2_SPI_SERCOM_PINMUX_PAD2  PINMUX_PA18C_SERCOM1_PAD2
408 #define EXT2_SPI_SERCOM_PINMUX_PAD3  PINMUX_PA19C_SERCOM1_PAD3
409 #define EXT2_SPI_SERCOM_DMAC_ID_TX   SERCOM1_DMAC_ID_TX
410 #define EXT2_SPI_SERCOM_DMAC_ID_RX   SERCOM1_DMAC_ID_RX
411 /** @} */
412 
413 /** \name Extension header #3 pin definitions
414  *  @{
415  */
416 #define EXT3_PIN_3                PIN_PA02
417 #define EXT3_PIN_4                PIN_PA03
418 #define EXT3_PIN_5                PIN_PB30
419 #define EXT3_PIN_6                PIN_PA15
420 #define EXT3_PIN_7                PIN_PA12
421 #define EXT3_PIN_8                PIN_PA13
422 #define EXT3_PIN_9                PIN_PA28
423 #define EXT3_PIN_10               PIN_PA27
424 #define EXT3_PIN_11               PIN_PA08
425 #define EXT3_PIN_12               PIN_PA09
426 #define EXT3_PIN_13               PIN_PB11
427 #define EXT3_PIN_14               PIN_PB10
428 #define EXT3_PIN_15               PIN_PB17
429 #define EXT3_PIN_16               PIN_PB22
430 #define EXT3_PIN_17               PIN_PB16
431 #define EXT3_PIN_18               PIN_PB23
432 /** @} */
433 
434 /** \name Extension header #3 pin definitions by function
435  *  @{
436  */
437 #define EXT3_PIN_ADC_0            EXT3_PIN_3
438 #define EXT3_PIN_ADC_1            EXT3_PIN_4
439 #define EXT3_PIN_GPIO_0           EXT3_PIN_5
440 #define EXT3_PIN_GPIO_1           EXT3_PIN_6
441 #define EXT3_PIN_PWM_0            EXT3_PIN_7
442 #define EXT3_PIN_PWM_1            EXT3_PIN_8
443 #define EXT3_PIN_IRQ              EXT3_PIN_9
444 #define EXT3_PIN_I2C_SDA          EXT3_PIN_11
445 #define EXT3_PIN_I2C_SCL          EXT3_PIN_12
446 #define EXT3_PIN_UART_RX          EXT3_PIN_13
447 #define EXT3_PIN_UART_TX          EXT3_PIN_14
448 #define EXT3_PIN_SPI_SS_1         EXT3_PIN_10
449 #define EXT3_PIN_SPI_SS_0         EXT3_PIN_15
450 #define EXT3_PIN_SPI_MOSI         EXT3_PIN_16
451 #define EXT3_PIN_SPI_MISO         EXT3_PIN_17
452 #define EXT3_PIN_SPI_SCK          EXT3_PIN_18
453 /** @} */
454 
455 /** \name Extension header #3 ADC definitions
456  *  @{
457  */
458 #define EXT3_ADC_MODULE           ADC
459 #define EXT3_ADC_0_CHANNEL        0
460 #define EXT3_ADC_0_PIN            PIN_PA02B_ADC_AIN0
461 #define EXT3_ADC_0_MUX            MUX_PA02B_ADC_AIN0
462 #define EXT3_ADC_0_PINMUX         PINMUX_PA02B_ADC_AIN0
463 #define EXT3_ADC_1_CHANNEL        1
464 #define EXT3_ADC_1_PIN            PIN_PA03B_ADC_AIN1
465 #define EXT3_ADC_1_MUX            MUX_PA03B_ADC_AIN1
466 #define EXT3_ADC_1_PINMUX         PINMUX_PA03B_ADC_AIN1
467 /** @} */
468 
469 /** \name Extension header #3 PWM for Control definitions
470  *  @{
471  */
472 #define EXT3_PWM4CTRL_MODULE      TCC2
473 #define EXT3_PWM4CTRL_0_CHANNEL   0
474 #define EXT3_PWM4CTRL_0_OUTPUT    0
475 #define EXT3_PWM4CTRL_0_PIN       PIN_PA12E_TCC2_WO0
476 #define EXT3_PWM4CTRL_0_MUX       MUX_PA12E_TCC2_WO0
477 #define EXT3_PWM4CTRL_0_PINMUX    PINMUX_PA12E_TCC2_WO0
478 #define EXT3_PWM4CTRL_1_CHANNEL   1
479 #define EXT3_PWM4CTRL_1_OUTPUT    1
480 #define EXT3_PWM4CTRL_1_PIN       PIN_PA13E_TCC2_WO1
481 #define EXT3_PWM4CTRL_1_MUX       MUX_PA13E_TCC2_WO1
482 #define EXT3_PWM4CTRL_1_PINMUX    PINMUX_PA13E_TCC2_WO1
483 /** @} */
484 
485 /** \name Extension header #3 IRQ/External interrupt definitions
486  *  @{
487  */
488 #define EXT3_IRQ_MODULE           EIC
489 #define EXT3_IRQ_INPUT            8
490 #define EXT3_IRQ_PIN              PIN_PA28A_EIC_EXTINT8
491 #define EXT3_IRQ_MUX              MUX_PA28A_EIC_EXTINT8
492 #define EXT3_IRQ_PINMUX           PINMUX_PA28A_EIC_EXTINT8
493 /** @} */
494 
495 /** \name Extension header #3 I2C definitions
496  *  @{
497  */
498 #define EXT3_I2C_MODULE              SERCOM2
499 #define EXT3_I2C_SERCOM_PINMUX_PAD0  PINMUX_PA08D_SERCOM2_PAD0
500 #define EXT3_I2C_SERCOM_PINMUX_PAD1  PINMUX_PA09D_SERCOM2_PAD1
501 #define EXT3_I2C_SERCOM_DMAC_ID_TX   SERCOM2_DMAC_ID_TX
502 #define EXT3_I2C_SERCOM_DMAC_ID_RX   SERCOM2_DMAC_ID_RX
503 /** @} */
504 
505 /** \name Extension header #3 UART definitions
506  *  @{
507  */
508 #define EXT3_UART_MODULE              SERCOM4
509 #define EXT3_UART_SERCOM_MUX_SETTING  USART_RX_3_TX_2_XCK_3
510 #define EXT3_UART_SERCOM_PINMUX_PAD0  PINMUX_UNUSED
511 #define EXT3_UART_SERCOM_PINMUX_PAD1  PINMUX_UNUSED
512 #define EXT3_UART_SERCOM_PINMUX_PAD2  PINMUX_PB10D_SERCOM4_PAD2
513 #define EXT3_UART_SERCOM_PINMUX_PAD3  PINMUX_PB11D_SERCOM4_PAD3
514 #define EXT3_UART_SERCOM_DMAC_ID_TX   SERCOM4_DMAC_ID_TX
515 #define EXT3_UART_SERCOM_DMAC_ID_RX   SERCOM4_DMAC_ID_RX
516 /** @} */
517 
518 /** \name Extension header #3 SPI definitions
519  *  @{
520  */
521 #define EXT3_SPI_MODULE              SERCOM5
522 #define EXT3_SPI_SERCOM_MUX_SETTING  SPI_SIGNAL_MUX_SETTING_E
523 #define EXT3_SPI_SERCOM_PINMUX_PAD0  PINMUX_PB16C_SERCOM5_PAD0
524 #define EXT3_SPI_SERCOM_PINMUX_PAD1  PINMUX_PB17C_SERCOM5_PAD1
525 #define EXT3_SPI_SERCOM_PINMUX_PAD2  PINMUX_PB22D_SERCOM5_PAD2
526 #define EXT3_SPI_SERCOM_PINMUX_PAD3  PINMUX_PB23D_SERCOM5_PAD3
527 #define EXT3_SPI_SERCOM_DMAC_ID_TX   SERCOM5_DMAC_ID_TX
528 #define EXT3_SPI_SERCOM_DMAC_ID_RX   SERCOM5_DMAC_ID_RX
529 /** @} */
530 
531 /** \name Extension header #3 Dataflash
532  *  @{
533  */
534 #define EXT3_DATAFLASH_SPI_MODULE      EXT3_SPI_MODULE
535 #define EXT3_DATAFLASH_SPI_MUX_SETTING EXT3_SPI_SERCOM_MUX_SETTING
536 #define EXT3_DATAFLASH_SPI_PINMUX_PAD0 EXT3_SPI_SERCOM_PINMUX_PAD0
537 #define EXT3_DATAFLASH_SPI_PINMUX_PAD1 EXT3_SPI_SERCOM_PINMUX_PAD1
538 #define EXT3_DATAFLASH_SPI_PINMUX_PAD2 EXT3_SPI_SERCOM_PINMUX_PAD2
539 #define EXT3_DATAFLASH_SPI_PINMUX_PAD3 EXT3_SPI_SERCOM_PINMUX_PAD3
540 /** @} */
541 
542 /** \name USB definitions
543  * @{
544  */
545 #define USB_ID
546 #define USB_TARGET_DP_PIN            PIN_PA25G_USB_DP
547 #define USB_TARGET_DP_MUX            MUX_PA25G_USB_DP
548 #define USB_TARGET_DP_PINMUX         PINMUX_PA25G_USB_DP
549 #define USB_TARGET_DM_PIN            PIN_PA24G_USB_DM
550 #define USB_TARGET_DM_MUX            MUX_PA24G_USB_DM
551 #define USB_TARGET_DM_PINMUX         PINMUX_PA24G_USB_DM
552 #define USB_VBUS_PIN                 PIN_PA14
553 #define USB_VBUS_EIC_LINE            14
554 #define USB_VBUS_EIC_MUX             MUX_PA14A_EIC_EXTINT14
555 #define USB_VBUS_EIC_PINMUX          PINMUX_PA14A_EIC_EXTINT14
556 #define USB_ID_PIN                   PIN_PA03
557 #define USB_ID_EIC_LINE              3
558 #define USB_ID_EIC_MUX               MUX_PA03A_EIC_EXTINT3
559 #define USB_ID_EIC_PINMUX            PINMUX_PA03A_EIC_EXTINT3
560 /** @} */
561 
562 /** \name Embedded debugger GPIO interface definitions
563  * @{
564  */
565 #define EDBG_GPIO0_PIN            PIN_PA27
566 #define EDBG_GPIO1_PIN            PIN_PA28
567 #define EDBG_GPIO2_PIN            PIN_PA20
568 #define EDBG_GPIO3_PIN            PIN_PA21
569 /** @} */
570 
571 /** \name Embedded debugger USART interface definitions
572  * @{
573  */
574 #define EDBG_UART_MODULE          -1 /* Not available on this board */
575 #define EDBG_UART_RX_PIN          -1 /* Not available on this board */
576 #define EDBG_UART_RX_MUX          -1 /* Not available on this board */
577 #define EDBG_UART_RX_PINMUX       -1 /* Not available on this board */
578 #define EDBG_UART_RX_SERCOM_PAD   -1 /* Not available on this board */
579 #define EDBG_UART_TX_PIN          -1 /* Not available on this board */
580 #define EDBG_UART_TX_MUX          -1 /* Not available on this board */
581 #define EDBG_UART_TX_PINMUX       -1 /* Not available on this board */
582 #define EDBG_UART_TX_SERCOM_PAD   -1 /* Not available on this board */
583 /** @} */
584 
585 /** \name Embedded debugger I2C interface definitions
586  * @{
587  */
588 #define EDBG_I2C_MODULE              SERCOM2
589 #define EDBG_I2C_SERCOM_PINMUX_PAD0  PINMUX_PA08D_SERCOM2_PAD0
590 #define EDBG_I2C_SERCOM_PINMUX_PAD1  PINMUX_PA09D_SERCOM2_PAD1
591 #define EDBG_I2C_SERCOM_DMAC_ID_TX   SERCOM2_DMAC_ID_TX
592 #define EDBG_I2C_SERCOM_DMAC_ID_RX   SERCOM2_DMAC_ID_RX
593 /** @} */
594 
595 /** \name Embedded debugger SPI interface definitions
596  * @{
597  */
598 #define EDBG_SPI_MODULE              SERCOM5
599 #define EDBG_SPI_SERCOM_MUX_SETTING  SPI_SIGNAL_MUX_SETTING_E
600 #define EDBG_SPI_SERCOM_PINMUX_PAD0  PINMUX_PB16C_SERCOM5_PAD0
601 #define EDBG_SPI_SERCOM_PINMUX_PAD1  PINMUX_PB31D_SERCOM5_PAD1
602 #define EDBG_SPI_SERCOM_PINMUX_PAD2  PINMUX_PB22D_SERCOM5_PAD2
603 #define EDBG_SPI_SERCOM_PINMUX_PAD3  PINMUX_PB23D_SERCOM5_PAD3
604 #define EDBG_SPI_SERCOM_DMAC_ID_TX   SERCOM5_DMAC_ID_TX
605 #define EDBG_SPI_SERCOM_DMAC_ID_RX   SERCOM5_DMAC_ID_RX
606 /** @} */
607 
608 /** \name Embedded debugger CDC Gateway USART interface definitions
609  * @{
610  */
611 #define EDBG_CDC_MODULE              SERCOM3
612 #define EDBG_CDC_SERCOM_MUX_SETTING  USART_RX_1_TX_0_XCK_1
613 #define EDBG_CDC_SERCOM_PINMUX_PAD0  PINMUX_PA22C_SERCOM3_PAD0
614 #define EDBG_CDC_SERCOM_PINMUX_PAD1  PINMUX_PA23C_SERCOM3_PAD1
615 #define EDBG_CDC_SERCOM_PINMUX_PAD2  PINMUX_UNUSED
616 #define EDBG_CDC_SERCOM_PINMUX_PAD3  PINMUX_UNUSED
617 #define EDBG_CDC_SERCOM_DMAC_ID_TX   SERCOM3_DMAC_ID_TX
618 #define EDBG_CDC_SERCOM_DMAC_ID_RX   SERCOM3_DMAC_ID_RX
619 /** @} */
620 
621 /** @} */
622 
623 /** \name 802.15.4 TRX Interface definitions
624  * @{
625  */
626 #ifndef EXT2_CONFIG
627 #define AT86RFX_SPI                  EXT1_SPI_MODULE
628 #define AT86RFX_RST_PIN              EXT1_PIN_7
629 #define AT86RFX_MISC_PIN             EXT1_PIN_12
630 #define AT86RFX_IRQ_PIN              EXT1_PIN_9
631 #define AT86RFX_SLP_PIN              EXT1_PIN_10
632 #define AT86RFX_SPI_CS               EXT1_PIN_15
633 #define AT86RFX_SPI_MOSI             EXT1_PIN_16
634 #define AT86RFX_SPI_MISO             EXT1_PIN_17
635 #define AT86RFX_SPI_SCK              EXT1_PIN_18
636 #define AT86RFX_CSD                  EXT1_PIN_5
637 #define AT86RFX_CPS                  EXT1_PIN_8
638 
639 #define AT86RFX_SPI_SERCOM_MUX_SETTING   EXT1_SPI_SERCOM_MUX_SETTING
640 #define AT86RFX_SPI_SERCOM_PINMUX_PAD0   EXT1_SPI_SERCOM_PINMUX_PAD0
641 #define AT86RFX_SPI_SERCOM_PINMUX_PAD1   PINMUX_UNUSED
642 #define AT86RFX_SPI_SERCOM_PINMUX_PAD2   EXT1_SPI_SERCOM_PINMUX_PAD2
643 #define AT86RFX_SPI_SERCOM_PINMUX_PAD3   EXT1_SPI_SERCOM_PINMUX_PAD3
644 
645 #define AT86RFX_IRQ_CHAN       EXT1_IRQ_INPUT
646 #define AT86RFX_IRQ_PINMUX     EXT1_IRQ_PINMUX
647 
648 
649 #endif
650 /** Enables the transceiver main interrupt. */
651 #define ENABLE_TRX_IRQ()     \
652 		extint_chan_enable_callback(AT86RFX_IRQ_CHAN, EXTINT_CALLBACK_TYPE_DETECT)
653 
654 /** Disables the transceiver main interrupt. */
655 #define DISABLE_TRX_IRQ()    \
656 		extint_chan_disable_callback(AT86RFX_IRQ_CHAN, EXTINT_CALLBACK_TYPE_DETECT)
657 
658 /** Clears the transceiver main interrupt. */
659 #define CLEAR_TRX_IRQ()      \
660 		extint_chan_clear_detected(AT86RFX_IRQ_CHAN);
661 
662 /*
663  * This macro saves the trx interrupt status and disables the trx interrupt.
664  */
665 #define ENTER_TRX_REGION()   \
666 		{ extint_chan_disable_callback(AT86RFX_IRQ_CHAN, EXTINT_CALLBACK_TYPE_DETECT)
667 
668 /*
669  *  This macro restores the transceiver interrupt status
670  */
671 #define LEAVE_TRX_REGION()   \
672 		extint_chan_enable_callback(AT86RFX_IRQ_CHAN, EXTINT_CALLBACK_TYPE_DETECT); }
673 
674 /** @} */
675 
676 /**
677  * \brief Turns off the specified LEDs.
678  *
679  * \param led_gpio LED to turn off (LEDx_GPIO).
680  *
681  * \note The pins of the specified LEDs are set to GPIO output mode.
682  */
683 #define LED_Off(led_gpio)     port_pin_set_output_level(led_gpio,true)
684 
685 /**
686  * \brief Turns on the specified LEDs.
687  *
688  * \param led_gpio LED to turn on (LEDx_GPIO).
689  *
690  * \note The pins of the specified LEDs are set to GPIO output mode.
691  */
692 #define LED_On(led_gpio)      port_pin_set_output_level(led_gpio,false)
693 
694 /**
695  * \brief Toggles the specified LEDs.
696  *
697  * \param led_gpio LED to toggle (LEDx_GPIO).
698  *
699  * \note The pins of the specified LEDs are set to GPIO output mode.
700  */
701 #define LED_Toggle(led_gpio)  port_pin_toggle_output_level(led_gpio)
702 
703 /** @} */
704 
705 #ifdef __cplusplus
706 }
707 #endif
708 
709 #endif  /* SAMD21_XPLAINED_PRO_H_INCLUDED */
710