Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit a43dc36

Browse files
committedFeb 1, 2020
support grove ui wireless
1 parent d9d26c0 commit a43dc36

11 files changed

+2392
-0
lines changed
 

‎boards.txt

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,3 +202,68 @@ seeed_XIAO_m0.menu.debug.off=Off
202202
seeed_XIAO_m0.menu.debug.on=On
203203
seeed_XIAO_m0.menu.debug.on.build.flags.debug=-g
204204

205+
206+
# Seeed Grove UI Wireless (SAMD51)
207+
# ------------------------------
208+
seeed_grove_ui_wireless.name=Seeeduino Grove UI Wireles (SAMD51)
209+
seeed_grove_ui_wireless.vid.0=0x2886
210+
seeed_grove_ui_wireless.pid.0=0x802D
211+
seeed_grove_ui_wireless.vid.1=0x2886
212+
seeed_grove_ui_wireless.pid.1=0x802D
213+
seeed_grove_ui_wireless.upload.tool=bossac18
214+
seeed_grove_ui_wireless.upload.protocol=sam-ba
215+
seeed_grove_ui_wireless.upload.maximum_size=507904
216+
seeed_grove_ui_wireless.upload.offset=0x4000
217+
seeed_grove_ui_wireless.upload.use_1200bps_touch=true
218+
seeed_grove_ui_wireless.upload.wait_for_upload_port=true
219+
seeed_grove_ui_wireless.upload.native_usb=true
220+
seeed_grove_ui_wireless.build.mcu=cortex-m4
221+
#seeed_grove_ui_wireless.build.f_cpu=120000000L
222+
seeed_grove_ui_wireless.build.usb_product="Seeed Grove UI Wireles"
223+
seeed_grove_ui_wireless.build.usb_manufacturer="Seeed Studio"
224+
seeed_grove_ui_wireless.build.board=GROVE_UI_WIRELESS
225+
seeed_grove_ui_wireless.build.core=arduino
226+
seeed_grove_ui_wireless.build.extra_flags=-DVREFLESS -D__SAMD51P19A__ -DSEEED_GROVE_UI_WIRELESS -D__SAMD51__ {build.usb_flags} -D__FPU_PRESENT -DARM_MATH_CM4 -mfloat-abi=hard -mfpu=fpv4-sp-d16
227+
seeed_grove_ui_wireless.build.ldscript=linker_scripts/gcc/flash_with_bootloader.ld
228+
seeed_grove_ui_wireless.build.openocdscript=openocd_scripts/arduino_zero.cfg
229+
seeed_grove_ui_wireless.build.variant=grove_ui_wireless
230+
seeed_grove_ui_wireless.build.variant_system_lib=
231+
seeed_grove_ui_wireless.build.vid=0x2886
232+
seeed_grove_ui_wireless.build.pid=0x802D
233+
seeed_grove_ui_wireless.bootloader.tool=openocd
234+
seeed_grove_ui_wireless.bootloader.file=groveUIWireless/bootloader-groveUIWireless_m4-v3.7.0-Seeed.bin
235+
seeed_grove_ui_wireless.compiler.arm.cmsis.ldflags="-L{build.variant.path}" -larm_cortexM4lf_math -mfloat-abi=hard -mfpu=fpv4-sp-d16
236+
seeed_grove_ui_wireless.menu.cache.on=Enabled
237+
seeed_grove_ui_wireless.menu.cache.on.build.cache_flags=-DENABLE_CACHE
238+
seeed_grove_ui_wireless.menu.cache.off=Disabled
239+
seeed_grove_ui_wireless.menu.cache.off.build.cache_flags=
240+
seeed_grove_ui_wireless.menu.speed.120=120 MHz (standard)
241+
seeed_grove_ui_wireless.menu.speed.120.build.f_cpu=120000000L
242+
seeed_grove_ui_wireless.menu.speed.150=150 MHz (overclock)
243+
seeed_grove_ui_wireless.menu.speed.150.build.f_cpu=150000000L
244+
seeed_grove_ui_wireless.menu.speed.180=180 MHz (overclock)
245+
seeed_grove_ui_wireless.menu.speed.180.build.f_cpu=180000000L
246+
seeed_grove_ui_wireless.menu.speed.200=200 MHz (overclock)
247+
seeed_grove_ui_wireless.menu.speed.200.build.f_cpu=200000000L
248+
seeed_grove_ui_wireless.menu.opt.small=Small (-Os) (standard)
249+
seeed_grove_ui_wireless.menu.opt.small.build.flags.optimize=-Os
250+
seeed_grove_ui_wireless.menu.opt.fast=Fast (-O2)
251+
seeed_grove_ui_wireless.menu.opt.fast.build.flags.optimize=-O2
252+
seeed_grove_ui_wireless.menu.opt.faster=Faster (-O3)
253+
seeed_grove_ui_wireless.menu.opt.faster.build.flags.optimize=-O3
254+
seeed_grove_ui_wireless.menu.opt.fastest=Fastest (-Ofast)
255+
seeed_grove_ui_wireless.menu.opt.fastest.build.flags.optimize=-Ofast
256+
seeed_grove_ui_wireless.menu.opt.dragons=Here be dragons (-Ofast -funroll-loops)
257+
seeed_grove_ui_wireless.menu.opt.dragons.build.flags.optimize=-Ofast -funroll-loops
258+
seeed_grove_ui_wireless.menu.maxqspi.50=50 MHz (standard)
259+
seeed_grove_ui_wireless.menu.maxqspi.50.build.flags.maxqspi=-DVARIANT_QSPI_BAUD_DEFAULT=50000000
260+
seeed_grove_ui_wireless.menu.maxqspi.fcpu=CPU Speed / 2
261+
seeed_grove_ui_wireless.menu.maxqspi.fcpu.build.flags.maxqspi=-DVARIANT_QSPI_BAUD_DEFAULT=({build.f_cpu})
262+
seeed_grove_ui_wireless.menu.usbstack.arduino=Arduino
263+
seeed_grove_ui_wireless.menu.usbstack.tinyusb=TinyUSB
264+
seeed_grove_ui_wireless.menu.usbstack.tinyusb.build.flags.usbstack=-DUSE_TINYUSB
265+
seeed_grove_ui_wireless.menu.debug.off=Off
266+
seeed_grove_ui_wireless.menu.debug.on=On
267+
seeed_grove_ui_wireless.menu.debug.on.build.flags.debug=-g
268+
269+

‎bootloaders/grove_ui_wireless/update-bootloader-grove_ui_wireless-v3.7.0-34-g65ab8cc-dirty.ino

Lines changed: 1201 additions & 0 deletions
Large diffs are not rendered by default.

‎cores/arduino/WVariant.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,8 @@ typedef enum _ETCChannel
149149
TCC1_CH1 = (1<<8)|(1),
150150
TCC1_CH2 = (1<<8)|(2),
151151
TCC1_CH3 = (1<<8)|(3),
152+
TCC1_CH4 = (1<<8)|(4),
153+
TCC1_CH5 = (1<<8)|(5),
152154
TCC2_CH0 = (2<<8)|(0),
153155
TCC2_CH1 = (2<<8)|(1),
154156
TCC2_CH2 = (2<<8)|(2),
Binary file not shown.
Lines changed: 216 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,216 @@
1+
/*
2+
Copyright (c) 2014-2015 Arduino LLC. All right reserved.
3+
4+
This library is free software; you can redistribute it and/or
5+
modify it under the terms of the GNU Lesser General Public
6+
License as published by the Free Software Foundation; either
7+
version 2.1 of the License, or (at your option) any later version.
8+
9+
This library is distributed in the hope that it will be useful,
10+
but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12+
See the GNU Lesser General Public License for more details.
13+
14+
You should have received a copy of the GNU Lesser General Public
15+
License along with this library; if not, write to the Free Software
16+
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17+
*/
18+
19+
/* Linker script to configure memory regions.
20+
* Need modifying for a specific board.
21+
* FLASH.ORIGIN: starting address of flash
22+
* FLASH.LENGTH: length of flash
23+
* RAM.ORIGIN: starting address of RAM bank 0
24+
* RAM.LENGTH: length of RAM bank 0
25+
*/
26+
MEMORY
27+
{
28+
FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00080000-0x4000 /* First 16KB used by bootloader */
29+
RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00030000
30+
}
31+
32+
/* Linker script to place sections and symbol values. Should be used together
33+
* with other linker script that defines memory regions FLASH and RAM.
34+
* It references following symbols, which must be defined in code:
35+
* Reset_Handler : Entry of reset handler
36+
*
37+
* It defines following symbols, which code can use without definition:
38+
* __exidx_start
39+
* __exidx_end
40+
* __copy_table_start__
41+
* __copy_table_end__
42+
* __zero_table_start__
43+
* __zero_table_end__
44+
* __etext
45+
* __data_start__
46+
* __preinit_array_start
47+
* __preinit_array_end
48+
* __init_array_start
49+
* __init_array_end
50+
* __fini_array_start
51+
* __fini_array_end
52+
* __data_end__
53+
* __bss_start__
54+
* __bss_end__
55+
* __end__
56+
* end
57+
* __HeapLimit
58+
* __StackLimit
59+
* __StackTop
60+
* __stack
61+
*/
62+
ENTRY(Reset_Handler)
63+
64+
SECTIONS
65+
{
66+
.text :
67+
{
68+
__text_start__ = .;
69+
70+
KEEP(*(.sketch_boot))
71+
72+
. = ALIGN(0x4000);
73+
KEEP(*(.isr_vector))
74+
*(.text*)
75+
76+
KEEP(*(.init))
77+
KEEP(*(.fini))
78+
79+
/* .ctors */
80+
*crtbegin.o(.ctors)
81+
*crtbegin?.o(.ctors)
82+
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
83+
*(SORT(.ctors.*))
84+
*(.ctors)
85+
86+
/* .dtors */
87+
*crtbegin.o(.dtors)
88+
*crtbegin?.o(.dtors)
89+
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
90+
*(SORT(.dtors.*))
91+
*(.dtors)
92+
93+
*(.rodata*)
94+
95+
KEEP(*(.eh_frame*))
96+
} > FLASH
97+
98+
.ARM.extab :
99+
{
100+
*(.ARM.extab* .gnu.linkonce.armextab.*)
101+
} > FLASH
102+
103+
__exidx_start = .;
104+
.ARM.exidx :
105+
{
106+
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
107+
} > FLASH
108+
__exidx_end = .;
109+
110+
/* To copy multiple ROM to RAM sections,
111+
* uncomment .copy.table section and,
112+
* define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */
113+
/*
114+
.copy.table :
115+
{
116+
. = ALIGN(4);
117+
__copy_table_start__ = .;
118+
LONG (__etext)
119+
LONG (__data_start__)
120+
LONG (__data_end__ - __data_start__)
121+
LONG (__etext2)
122+
LONG (__data2_start__)
123+
LONG (__data2_end__ - __data2_start__)
124+
__copy_table_end__ = .;
125+
} > FLASH
126+
*/
127+
128+
/* To clear multiple BSS sections,
129+
* uncomment .zero.table section and,
130+
* define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */
131+
/*
132+
.zero.table :
133+
{
134+
. = ALIGN(4);
135+
__zero_table_start__ = .;
136+
LONG (__bss_start__)
137+
LONG (__bss_end__ - __bss_start__)
138+
LONG (__bss2_start__)
139+
LONG (__bss2_end__ - __bss2_start__)
140+
__zero_table_end__ = .;
141+
} > FLASH
142+
*/
143+
144+
__etext = .;
145+
146+
.data : AT (__etext)
147+
{
148+
__data_start__ = .;
149+
*(vtable)
150+
*(.data*)
151+
152+
. = ALIGN(4);
153+
/* preinit data */
154+
PROVIDE_HIDDEN (__preinit_array_start = .);
155+
KEEP(*(.preinit_array))
156+
PROVIDE_HIDDEN (__preinit_array_end = .);
157+
158+
. = ALIGN(4);
159+
/* init data */
160+
PROVIDE_HIDDEN (__init_array_start = .);
161+
KEEP(*(SORT(.init_array.*)))
162+
KEEP(*(.init_array))
163+
PROVIDE_HIDDEN (__init_array_end = .);
164+
165+
166+
. = ALIGN(4);
167+
/* finit data */
168+
PROVIDE_HIDDEN (__fini_array_start = .);
169+
KEEP(*(SORT(.fini_array.*)))
170+
KEEP(*(.fini_array))
171+
PROVIDE_HIDDEN (__fini_array_end = .);
172+
173+
KEEP(*(.jcr*))
174+
. = ALIGN(16);
175+
/* All data end */
176+
__data_end__ = .;
177+
178+
} > RAM
179+
180+
.bss :
181+
{
182+
. = ALIGN(4);
183+
__bss_start__ = .;
184+
*(.bss*)
185+
*(COMMON)
186+
. = ALIGN(4);
187+
__bss_end__ = .;
188+
} > RAM
189+
190+
.heap (COPY):
191+
{
192+
__end__ = .;
193+
PROVIDE(end = .);
194+
*(.heap*)
195+
__HeapLimit = .;
196+
} > RAM
197+
198+
/* .stack_dummy section doesn't contains any symbols. It is only
199+
* used for linker to calculate size of stack sections, and assign
200+
* values to stack symbols later */
201+
.stack_dummy (COPY):
202+
{
203+
*(.stack*)
204+
} > RAM
205+
206+
/* Set stack top to end of RAM, and stack limit move down by
207+
* size of stack_dummy section */
208+
__StackTop = ORIGIN(RAM) + LENGTH(RAM);
209+
__StackLimit = __StackTop - SIZEOF(.stack_dummy);
210+
PROVIDE(__stack = __StackTop);
211+
212+
__ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ;
213+
214+
/* Check if data + heap + stack exceeds RAM limit */
215+
ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
216+
}
Lines changed: 214 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,214 @@
1+
/*
2+
Copyright (c) 2014-2015 Arduino LLC. All right reserved.
3+
4+
This library is free software; you can redistribute it and/or
5+
modify it under the terms of the GNU Lesser General Public
6+
License as published by the Free Software Foundation; either
7+
version 2.1 of the License, or (at your option) any later version.
8+
9+
This library is distributed in the hope that it will be useful,
10+
but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12+
See the GNU Lesser General Public License for more details.
13+
14+
You should have received a copy of the GNU Lesser General Public
15+
License along with this library; if not, write to the Free Software
16+
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17+
*/
18+
19+
/* Linker script to configure memory regions.
20+
* Need modifying for a specific board.
21+
* FLASH.ORIGIN: starting address of flash
22+
* FLASH.LENGTH: length of flash
23+
* RAM.ORIGIN: starting address of RAM bank 0
24+
* RAM.LENGTH: length of RAM bank 0
25+
*/
26+
MEMORY
27+
{
28+
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00080000
29+
RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00030000
30+
}
31+
32+
/* Linker script to place sections and symbol values. Should be used together
33+
* with other linker script that defines memory regions FLASH and RAM.
34+
* It references following symbols, which must be defined in code:
35+
* Reset_Handler : Entry of reset handler
36+
*
37+
* It defines following symbols, which code can use without definition:
38+
* __exidx_start
39+
* __exidx_end
40+
* __copy_table_start__
41+
* __copy_table_end__
42+
* __zero_table_start__
43+
* __zero_table_end__
44+
* __etext
45+
* __data_start__
46+
* __preinit_array_start
47+
* __preinit_array_end
48+
* __init_array_start
49+
* __init_array_end
50+
* __fini_array_start
51+
* __fini_array_end
52+
* __data_end__
53+
* __bss_start__
54+
* __bss_end__
55+
* __end__
56+
* end
57+
* __HeapLimit
58+
* __StackLimit
59+
* __StackTop
60+
* __stack
61+
* __ram_end__
62+
*/
63+
ENTRY(Reset_Handler)
64+
65+
SECTIONS
66+
{
67+
.text :
68+
{
69+
__text_start__ = .;
70+
71+
KEEP(*(.isr_vector))
72+
*(.text*)
73+
74+
KEEP(*(.init))
75+
KEEP(*(.fini))
76+
77+
/* .ctors */
78+
*crtbegin.o(.ctors)
79+
*crtbegin?.o(.ctors)
80+
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
81+
*(SORT(.ctors.*))
82+
*(.ctors)
83+
84+
/* .dtors */
85+
*crtbegin.o(.dtors)
86+
*crtbegin?.o(.dtors)
87+
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
88+
*(SORT(.dtors.*))
89+
*(.dtors)
90+
91+
*(.rodata*)
92+
93+
KEEP(*(.eh_frame*))
94+
} > FLASH
95+
96+
.ARM.extab :
97+
{
98+
*(.ARM.extab* .gnu.linkonce.armextab.*)
99+
} > FLASH
100+
101+
__exidx_start = .;
102+
.ARM.exidx :
103+
{
104+
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
105+
} > FLASH
106+
__exidx_end = .;
107+
108+
/* To copy multiple ROM to RAM sections,
109+
* uncomment .copy.table section and,
110+
* define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */
111+
/*
112+
.copy.table :
113+
{
114+
. = ALIGN(4);
115+
__copy_table_start__ = .;
116+
LONG (__etext)
117+
LONG (__data_start__)
118+
LONG (__data_end__ - __data_start__)
119+
LONG (__etext2)
120+
LONG (__data2_start__)
121+
LONG (__data2_end__ - __data2_start__)
122+
__copy_table_end__ = .;
123+
} > FLASH
124+
*/
125+
126+
/* To clear multiple BSS sections,
127+
* uncomment .zero.table section and,
128+
* define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */
129+
/*
130+
.zero.table :
131+
{
132+
. = ALIGN(4);
133+
__zero_table_start__ = .;
134+
LONG (__bss_start__)
135+
LONG (__bss_end__ - __bss_start__)
136+
LONG (__bss2_start__)
137+
LONG (__bss2_end__ - __bss2_start__)
138+
__zero_table_end__ = .;
139+
} > FLASH
140+
*/
141+
142+
__etext = .;
143+
144+
.data : AT (__etext)
145+
{
146+
__data_start__ = .;
147+
*(vtable)
148+
*(.data*)
149+
150+
. = ALIGN(4);
151+
/* preinit data */
152+
PROVIDE_HIDDEN (__preinit_array_start = .);
153+
KEEP(*(.preinit_array))
154+
PROVIDE_HIDDEN (__preinit_array_end = .);
155+
156+
. = ALIGN(4);
157+
/* init data */
158+
PROVIDE_HIDDEN (__init_array_start = .);
159+
KEEP(*(SORT(.init_array.*)))
160+
KEEP(*(.init_array))
161+
PROVIDE_HIDDEN (__init_array_end = .);
162+
163+
164+
. = ALIGN(4);
165+
/* finit data */
166+
PROVIDE_HIDDEN (__fini_array_start = .);
167+
KEEP(*(SORT(.fini_array.*)))
168+
KEEP(*(.fini_array))
169+
PROVIDE_HIDDEN (__fini_array_end = .);
170+
171+
KEEP(*(.jcr*))
172+
. = ALIGN(16);
173+
/* All data end */
174+
__data_end__ = .;
175+
176+
} > RAM
177+
178+
.bss :
179+
{
180+
. = ALIGN(4);
181+
__bss_start__ = .;
182+
*(.bss*)
183+
*(COMMON)
184+
. = ALIGN(4);
185+
__bss_end__ = .;
186+
} > RAM
187+
188+
.heap (COPY):
189+
{
190+
__end__ = .;
191+
PROVIDE(end = .);
192+
*(.heap*)
193+
__HeapLimit = .;
194+
} > RAM
195+
196+
/* .stack_dummy section doesn't contains any symbols. It is only
197+
* used for linker to calculate size of stack sections, and assign
198+
* values to stack symbols later */
199+
.stack_dummy (COPY):
200+
{
201+
*(.stack*)
202+
} > RAM
203+
204+
/* Set stack top to end of RAM, and stack limit move down by
205+
* size of stack_dummy section */
206+
__StackTop = ORIGIN(RAM) + LENGTH(RAM) ;
207+
__StackLimit = __StackTop - SIZEOF(.stack_dummy);
208+
PROVIDE(__stack = __StackTop);
209+
210+
__ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ;
211+
212+
/* Check if data + heap + stack exceeds RAM limit */
213+
ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
214+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/*
2+
Copyright (c) 2014-2015 Arduino LLC. All right reserved.
3+
4+
This library is free software; you can redistribute it and/or
5+
modify it under the terms of the GNU Lesser General Public
6+
License as published by the Free Software Foundation; either
7+
version 2.1 of the License, or (at your option) any later version.
8+
9+
This library is distributed in the hope that it will be useful,
10+
but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12+
See the GNU Lesser General Public License for more details.
13+
14+
You should have received a copy of the GNU Lesser General Public
15+
License along with this library; if not, write to the Free Software
16+
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17+
*/
18+
19+
// API compatibility
20+
#include "../grove_ui_wireless/variant.h"
21+
Lines changed: 237 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,237 @@
1+
/*
2+
Copyright (c) 2014-2015 Arduino LLC. All right reserved.
3+
4+
This library is free software; you can redistribute it and/or
5+
modify it under the terms of the GNU Lesser General Public
6+
License as published by the Free Software Foundation; either
7+
version 2.1 of the License, or (at your option) any later version.
8+
9+
This library is distributed in the hope that it will be useful,
10+
but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12+
See the GNU Lesser General Public License for more details.
13+
14+
You should have received a copy of the GNU Lesser General Public
15+
License along with this library; if not, write to the Free Software
16+
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17+
*/
18+
19+
#include "variant.h"
20+
21+
/*
22+
* Pins descriptions
23+
* TCC0 IOSET4
24+
* TCC1 IOSET2
25+
* TCC2 IOSET1
26+
* TCC3 IOSET1
27+
* TCC4 IOSET1
28+
*/
29+
30+
const PinDescription g_APinDescription[]=
31+
{
32+
// 0..8 - Raspberry pi Digital & AD pins
33+
{ PORTB, 8, PIO_ANALOG, (PIN_ATTR_ANALOG|PIN_ATTR_PWM_E), ADC_Channel2, TC4_CH0, TC4_CH0, EXTERNAL_INT_8 }, // 0/RPI_D0/RPI_A0
34+
{ PORTB, 9, PIO_ANALOG, (PIN_ATTR_ANALOG|PIN_ATTR_PWM_E), ADC_Channel3, TC4_CH1, TC4_CH1, EXTERNAL_INT_9 }, // 1/RPI_D1/RPI_A1
35+
{ PORTA, 4, PIO_ANALOG, (PIN_ATTR_ANALOG|PIN_ATTR_PWM_E), ADC_Channel4, TC0_CH0, TC0_CH0, EXTERNAL_INT_4 }, // 2/RPI_D2/RPI_A2
36+
{ PORTA, 6, PIO_ANALOG, (PIN_ATTR_ANALOG|PIN_ATTR_PWM_E), ADC_Channel6, TC1_CH0, TC1_CH0, EXTERNAL_INT_6 },
37+
{ PORTA, 7, PIO_ANALOG, (PIN_ATTR_ANALOG|PIN_ATTR_PWM_E), ADC_Channel7, TC1_CH1, TC1_CH1, EXTERNAL_INT_7 },
38+
{ PORTB, 4, PIO_ANALOG, PIN_ATTR_ANALOG_ALT, ADC_Channel6, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_4 },
39+
{ PORTB, 5, PIO_ANALOG, PIN_ATTR_ANALOG_ALT, ADC_Channel7, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_5 },
40+
{ PORTB, 6, PIO_ANALOG, PIN_ATTR_ANALOG_ALT, ADC_Channel8, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_6 },
41+
{ PORTB, 7, PIO_ANALOG, PIN_ATTR_ANALOG_ALT, ADC_Channel9, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_7 },
42+
43+
//9..10 DAC1 DAC2
44+
{ PORTA, 5, PIO_ANALOG, PIN_ATTR_ANALOG, ADC_Channel5, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_5 }, //DAC1
45+
{ PORTA, 2, PIO_ANALOG, PIN_ATTR_ANALOG, ADC_Channel0, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_2 }, //DAC2
46+
47+
//11 IRQ
48+
{ PORTC, 20, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_4 },
49+
50+
//12 BUZZER_CTR
51+
{ PORTD, 11, PIO_DIGITAL, PIN_ATTR_PWM_F, No_ADC_Channel, TCC0_CH4, TCC0_CH4, EXTERNAL_INT_6 },
52+
53+
// 13 (LED)
54+
{ PORTA, 15, PIO_DIGITAL, PIN_ATTR_PWM_F, No_ADC_Channel, TCC2_CH1, TCC2_CH1, EXTERNAL_INT_15 },
55+
56+
//14..27 FPC Digital & AD pins
57+
{ PORTA, 14, PIO_DIGITAL, PIN_ATTR_PWM_E, No_ADC_Channel, TC3_CH0, TC3_CH0, EXTERNAL_INT_14 }, // FPC_D0
58+
{ PORTA, 20, PIO_DIGITAL, PIN_ATTR_PWM_G, No_ADC_Channel, TCC0_CH0, TCC0_CH0, EXTERNAL_INT_4 },
59+
{ PORTB, 15, PIO_DIGITAL, PIN_ATTR_PWM_F, No_ADC_Channel, TCC4_CH1, TCC4_CH1, EXTERNAL_INT_15 },
60+
{ PORTB, 16, PIO_DIGITAL, PIN_ATTR_PWM_E, No_ADC_Channel, TC6_CH0, TC6_CH0, EXTERNAL_INT_0 },
61+
{ PORTB, 17, PIO_DIGITAL, PIN_ATTR_PWM_F, No_ADC_Channel, TCC3_CH1, TCC3_CH1, EXTERNAL_INT_1 },
62+
{ PORTB, 29, PIO_DIGITAL, PIN_ATTR_PWM_G, No_ADC_Channel, TCC1_CH5, TCC1_CH5, EXTERNAL_INT_15 },
63+
{ PORTB, 31, PIO_DIGITAL, PIN_ATTR_PWM_E, No_ADC_Channel, TC0_CH1, TC0_CH1, EXTERNAL_INT_15 },
64+
{ PORTC, 1, PIO_DIGITAL, PIN_ATTR_ANALOG_ALT, ADC_Channel11, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_1 }, // FPC_D7/FPC_A7
65+
{ PORTC, 2, PIO_ANALOG, PIN_ATTR_ANALOG_ALT, ADC_Channel4, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_2 },
66+
{ PORTC, 3, PIO_ANALOG, PIN_ATTR_ANALOG_ALT, ADC_Channel5, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_3 },
67+
{ PORTC, 4, PIO_DIGITAL, PIN_ATTR_PWM_G, No_ADC_Channel, TCC0_CH0, TCC0_CH0, EXTERNAL_INT_4},
68+
{ PORTC, 31, PIO_ANALOG, PIN_ATTR_ANALOG_ALT, ADC_Channel13, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_15 },
69+
{ PORTD, 0, PIO_DIGITAL, PIN_ATTR_ANALOG_ALT, ADC_Channel14, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_0 },
70+
{ PORTD, 1, PIO_DIGITAL, PIN_ATTR_ANALOG_ALT, ADC_Channel15, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_1 },
71+
72+
//28..30 USER_BUTTON
73+
{ PORTC, 26, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_10 }, //BUTTON_1
74+
{ PORTC, 27, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_11 }, //BUTTON_2
75+
{ PORTC, 28, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_12 }, //BUTTON_3
76+
77+
//31..35 SWITCH
78+
{ PORTD, 8, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_3 }, // SWITCH_X
79+
{ PORTD, 9, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_4 }, // SWITCH_Y
80+
{ PORTD, 10, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_5 }, // SWITCH_Z
81+
{ PORTD, 12, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_7 }, // SWITCH_B
82+
{ PORTD, 20, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_10 }, // SWITCH_U
83+
84+
//36..38 GCLK
85+
{ PORTB, 12, PIO_DIGITAL, PIN_ATTR_PWM_F, No_ADC_Channel, TCC3_CH0, NOT_ON_TIMER, EXTERNAL_INT_12 }, //GCLK6
86+
{ PORTB, 13, PIO_DIGITAL, PIN_ATTR_PWM_F, No_ADC_Channel, TCC3_CH1, NOT_ON_TIMER, EXTERNAL_INT_13 }, //GCLK7
87+
{ PORTB, 14, PIO_DIGITAL, PIN_ATTR_PWM_F, No_ADC_Channel, TCC4_CH0, NOT_ON_TIMER, EXTERNAL_INT_14 }, //GCLK0
88+
89+
//39 MIC INPUT
90+
{ PORTC, 30, PIO_ANALOG, PIN_ATTR_ANALOG_ALT, ADC_Channel12, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_14 }, //MIC_INPUT
91+
92+
//40..41 UART Serial1
93+
{ PORTB, 26, PIO_SERCOM, (PIN_ATTR_DIGITAL | PIN_ATTR_PWM_F), No_ADC_Channel, TCC1_CH2, NOT_ON_TIMER, EXTERNAL_INT_12 }, //UART_TX
94+
{ PORTB, 27, PIO_SERCOM, (PIN_ATTR_DIGITAL | PIN_ATTR_PWM_F), No_ADC_Channel, TCC1_CH3, NOT_ON_TIMER, EXTERNAL_INT_13 }, //UART_RX
95+
96+
// 42..44 - USB
97+
{ PORTA, 24, PIO_COM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // USB_D-
98+
{ PORTA, 25, PIO_COM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // USB_D+
99+
{ PORTA, 27, PIO_COM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // USB _HOST_EN
100+
101+
//45..46 I2C Wire2
102+
{ PORTA, 16, PIO_SERCOM_ALT, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, TCC1_CH1, EXTERNAL_INT_0 }, // SCL
103+
{ PORTA, 17, PIO_SERCOM_ALT, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, TCC1_CH0, EXTERNAL_INT_1 }, // SDA
104+
105+
//47..50 SPI
106+
//PB00 PB02 PB03 PB01 (MISO:PAD2, MOSI:PAD0, SCK:PAD1, SS:PAD3)
107+
{ PORTB, 0, PIO_SERCOM_ALT, (PIN_ATTR_ANALOG|PIN_ATTR_PWM_E), No_ADC_Channel, TC7_CH0, TC7_CH0, EXTERNAL_INT_0 },
108+
{ PORTB, 2, PIO_SERCOM_ALT, (PIN_ATTR_ANALOG|PIN_ATTR_PWM_E), No_ADC_Channel, TC6_CH0, TC6_CH0, EXTERNAL_INT_2 },
109+
{ PORTB, 3, PIO_SERCOM_ALT, (PIN_ATTR_ANALOG|PIN_ATTR_PWM_E), No_ADC_Channel, TC6_CH1, TC6_CH1, EXTERNAL_INT_3 },
110+
{ PORTB, 1, PIO_SERCOM_ALT, (PIN_ATTR_ANALOG|PIN_ATTR_PWM_E), No_ADC_Channel, TC7_CH1, TC7_CH1, EXTERNAL_INT_1 },
111+
112+
//51..54 I2S
113+
//PA23 PB28 PA22 PA21 (FS SCK SDI SDO);
114+
{ PORTA, 23, PIO_DIGITAL, PIN_ATTR_PWM_G, No_ADC_Channel, TCC0_CH3, TCC0_CH3, EXTERNAL_INT_7 },
115+
{ PORTB, 28, PIO_SERCOM, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE },
116+
{ PORTA, 22, PIO_DIGITAL, PIN_ATTR_PWM_G, No_ADC_Channel, TCC0_CH2, NOT_ON_TIMER, EXTERNAL_INT_6 },
117+
{ PORTA, 21, PIO_DIGITAL, PIN_ATTR_PWM_G, No_ADC_Channel, TCC0_CH1, NOT_ON_TIMER, EXTERNAL_INT_5 },
118+
119+
//55..60 QSPI (SCK, CS, IO0, IO1, IO2, IO3)
120+
{ PORTA, 8, PIO_COM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NMI },
121+
{ PORTA, 9, PIO_COM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_9 },
122+
{ PORTA, 10, PIO_COM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_10 },
123+
{ PORTA, 11, PIO_COM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_11 },
124+
{ PORTB, 10, PIO_COM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_10 },
125+
{ PORTB, 11, PIO_COM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_11 },
126+
127+
//61..65 SPI2 SD_SPI
128+
//PC18 PC16 PC17 PC19 PD21(MISO:PAD2, MOSI:PAD0, SCK:PAD1, SS:PAD3; SD_DET)
129+
{ PORTC, 18, PIO_SERCOM, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_2 },
130+
{ PORTC, 16, PIO_SERCOM, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_0 },
131+
{ PORTC, 17, PIO_SERCOM, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_1 },
132+
{ PORTC, 19, PIO_SERCOM, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_3 },
133+
{ PORTD, 21, PIO_DIGITAL, PIN_ATTR_PWM_F, No_ADC_Channel, TCC1_CH1, NOT_ON_TIMER, EXTERNAL_INT_11 },
134+
135+
//66..76 SPI3 LCD_SPI
136+
//PB8 PB19 PB20 PB21 (MISO PAD2, MOSI PAD3 SCK:PAD1 SS:PAD0)
137+
{ PORTB, 18, PIO_SERCOM_ALT, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_2 },
138+
{ PORTB, 19, PIO_SERCOM_ALT, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_3 },
139+
{ PORTB, 20, PIO_SERCOM_ALT, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_4 },
140+
{ PORTB, 21, PIO_SERCOM_ALT, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_5 },
141+
142+
{ PORTC, 6, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_6 }, //LCD_D/C
143+
{ PORTC, 7, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_5 }, //LCD_RESET
144+
{ PORTC, 5, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_5 }, //LCD_BACKLIGHT
145+
146+
//4 WIRE LCD TOUCH
147+
{ PORTC, 10, PIO_ANALOG, PIN_ATTR_ANALOG, ADC_Channel10, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_10 }, //LCD_XL
148+
{ PORTC, 11, PIO_ANALOG, PIN_ATTR_ANALOG, ADC_Channel11, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_11 }, //LCD_YU
149+
{ PORTC, 12, PIO_DIGITAL, PIN_ATTR_PWM_F, No_ADC_Channel, TCC0_CH2, NOT_ON_TIMER, EXTERNAL_INT_12 }, //LCD_XR
150+
{ PORTC, 13, PIO_DIGITAL, PIN_ATTR_PWM_F, No_ADC_Channel, TCC0_CH2, NOT_ON_TIMER, EXTERNAL_INT_13 }, //LCD_YD
151+
152+
//GYROSCOPE
153+
//................................................
154+
//77..78 I2C Wire1
155+
{ PORTA, 12, PIO_SERCOM_ALT, PIN_ATTR_DIGITAL, No_ADC_Channel, TC2_CH0, TC2_CH0, EXTERNAL_INT_12 }, // GYROSCOPE_SCL
156+
{ PORTA, 13, PIO_SERCOM_ALT, PIN_ATTR_DIGITAL, No_ADC_Channel, TC2_CH1, TC2_CH1, EXTERNAL_INT_13 }, // GYROSCOPE_SDA
157+
158+
//79 GYROSCOPE_INT1
159+
{ PORTC, 21, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_5 },
160+
161+
//ESP32
162+
//................................................
163+
//80..81
164+
{ PORTA, 18, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_2 }, //ESP32_CHIP_PU ESP32_DOWMLOAD
165+
{ PORTA, 19, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_3 }, //ESP32_GPIO0 ESP32_RESET
166+
167+
//82..83 ESP UART Serial2
168+
{ PORTC, 22, PIO_SERCOM, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_6 },
169+
{ PORTC, 23, PIO_SERCOM, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_7 },
170+
171+
//84..87 SPI1 ESP_SPI
172+
//PC24 PB24 PB25 PC25 (MISO:PAD2, MOSI:PAD0, SCK:PAD1, SS:PAD3)
173+
{ PORTC, 24, PIO_SERCOM, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_8 },
174+
{ PORTB, 24, PIO_SERCOM, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_8 },
175+
{ PORTB, 25, PIO_SERCOM, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE },
176+
{ PORTC, 25, PIO_SERCOM, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_9 },
177+
178+
//88..90 SWD
179+
{ PORTA, 30, PIO_COM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE },
180+
{ PORTA, 31, PIO_COM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE },
181+
{ PORTB, 30, PIO_COM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE },
182+
183+
//91..92 OUTPUT_CTR
184+
{ PORTC, 14, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_14 },
185+
{ PORTC, 15, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_15 }
186+
187+
} ;
188+
189+
const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TCC1, TCC2, TCC3, TCC4, TC0, TC1, TC2, TC3, TC4, TC5, TC6, TC7 } ;
190+
const uint32_t GCLK_CLKCTRL_IDs[TCC_INST_NUM+TC_INST_NUM] = { TCC0_GCLK_ID, TCC1_GCLK_ID, TCC2_GCLK_ID, TCC3_GCLK_ID, TCC4_GCLK_ID, TC0_GCLK_ID, TC1_GCLK_ID, TC2_GCLK_ID, TC3_GCLK_ID, TC4_GCLK_ID, TC5_GCLK_ID, TC6_GCLK_ID, TC7_GCLK_ID } ;
191+
192+
// Multi-serial objects instantiation
193+
SERCOM sercom0( SERCOM0 ) ;
194+
SERCOM sercom1( SERCOM1 ) ;
195+
SERCOM sercom2( SERCOM2 ) ;
196+
SERCOM sercom3( SERCOM3 ) ;
197+
SERCOM sercom4( SERCOM4 ) ;
198+
SERCOM sercom5( SERCOM5 ) ;
199+
SERCOM sercom6( SERCOM6 ) ;
200+
SERCOM sercom7( SERCOM7 ) ;
201+
202+
Uart Serial1( &SERCOM_SERIAL1, PIN_SERIAL1_RX, PIN_SERIAL1_TX, PAD_SERIAL1_RX, PAD_SERIAL1_TX ) ;
203+
Uart Serial2( &SERCOM_SERIAL2, PIN_SERIAL2_RX, PIN_SERIAL2_TX, PAD_SERIAL2_RX, PAD_SERIAL2_TX ) ;
204+
205+
void SERCOM_0_Handler()
206+
{
207+
Serial2.IrqHandler();
208+
}
209+
void SERCOM1_1_Handler()
210+
{
211+
Serial2.IrqHandler();
212+
}
213+
void SERCOM1_2_Handler()
214+
{
215+
Serial2.IrqHandler();
216+
}
217+
void SERCOM1_3_Handler()
218+
{
219+
Serial2.IrqHandler();
220+
}
221+
222+
void SERCOM2_0_Handler()
223+
{
224+
Serial1.IrqHandler();
225+
}
226+
void SERCOM2_1_Handler()
227+
{
228+
Serial1.IrqHandler();
229+
}
230+
void SERCOM2_2_Handler()
231+
{
232+
Serial1.IrqHandler();
233+
}
234+
void SERCOM2_3_Handler()
235+
{
236+
Serial1.IrqHandler();
237+
}

‎variants/grove_ui_wireless/variant.h

Lines changed: 436 additions & 0 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)
Please sign in to comment.