From e1e6cc210ce15a067104480676792d14271467fb Mon Sep 17 00:00:00 2001
From: Jake <jake.read@cba.mit.edu>
Date: Thu, 22 Feb 2018 18:45:36 -0500
Subject: [PATCH] working atsams70 uartport port

---
 circuit/mkrouter/eagle.epf                    |  62 ++-
 .../mkrouter-v04/.vs/mkrouter-v04/v14/.atsuo  | Bin 17408 -> 50688 bytes
 .../mkrouter-v04/mkrouter-v04/Debug/Makefile  |  14 +
 .../mkrouter-v04/Debug/makedep.mk             |   4 +
 .../mkrouter-v04/mkrouter-v04.cproj           | 374 +++++++++---------
 .../mkrouter-v04/src/config/conf_clock.h      |   8 +-
 .../mkrouter-v04/mkrouter-v04/src/hardware.h  |  21 +-
 embedded/mkrouter-v04/mkrouter-v04/src/main.c | 100 +++--
 .../mkrouter-v04/src/ringbuffer.c             |  67 ++++
 .../mkrouter-v04/src/ringbuffer.h             |  43 ++
 .../mkrouter-v04/mkrouter-v04/src/uartport.c  |  81 ++++
 .../mkrouter-v04/mkrouter-v04/src/uartport.h  |  45 +++
 12 files changed, 579 insertions(+), 240 deletions(-)
 create mode 100644 embedded/mkrouter-v04/mkrouter-v04/src/ringbuffer.c
 create mode 100644 embedded/mkrouter-v04/mkrouter-v04/src/ringbuffer.h
 create mode 100644 embedded/mkrouter-v04/mkrouter-v04/src/uartport.c
 create mode 100644 embedded/mkrouter-v04/mkrouter-v04/src/uartport.h

diff --git a/circuit/mkrouter/eagle.epf b/circuit/mkrouter/eagle.epf
index 393fdf7..5b80877 100644
--- a/circuit/mkrouter/eagle.epf
+++ b/circuit/mkrouter/eagle.epf
@@ -8,8 +8,6 @@ Desktop="Desktop"
 AutoSaveProject=1
 UsedLibraryUrn="urn:adsk.eagle:library:371"
 UsedLibrary="D:/Dropbox (Personal)/CBA/doc/libraries_jake/eagle/transistor-power.lbr"
-UsedLibrary="D:/Dropbox (Personal)/CBA/doc/libraries/eagle/BC832.lbr"
-UsedLibrary="D:/Dropbox (Personal)/CBA/doc/libraries/eagle/atsam.lbr"
 UsedLibrary="D:/Dropbox (Personal)/CBA/doc/libraries/eagle/fab.lbr"
 UsedLibrary="D:/Dropbox (Personal)/CBA/doc/libraries/eagle/motors.lbr"
 UsedLibrary="D:/Dropbox (Personal)/CBA/doc/libraries/eagle/power.lbr"
@@ -20,19 +18,19 @@ UsedLibrary="D:/Dropbox (Personal)/CBA/doc/libraries_jake/eagle/sparkfun/SparkFu
 UsedLibrary="D:/Dropbox (Personal)/CBA/doc/libraries_jake/eagle/marekr/borkedlabs-passives.lbr"
 
 [Win_1]
-Type="Schematic Editor"
+Type="Board Editor"
 Loc="0 0 1919 1016"
 State=1
-Number=1
-File="mkrouter.sch"
-View="-37.3431 65.3764 184.551 208.023"
-WireWidths=" 0.0762 0.1016 0.127 0.15 0.2 0.2032 0.254 0.3048 0.4064 0.508 0.6096 0.8128 1.016 1.27 2.54 0.1524"
+Number=2
+File="mkrouter.brd"
+View="2.78266 15.3697 62.859 48.8939"
+WireWidths=" 0.0762 0.1016 0.127 0.15 0.2 0.4064 0.508 0.6096 0.8128 1.016 1.27 2.54 0.254 0.3048 0.2032 0.1524"
 PadDiameters=" 0.254 0.3048 0.4064 0.6096 0.8128 1.016 1.27 1.4224 1.6764 1.778 1.9304 2.1844 2.54 3.81 6.4516 0"
-PadDrills=" 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0.55 0.65 0.7 0.75 0.8 0.85 0.9 1 0.6"
+PadDrills=" 0.2 0.25 0.35 0.4 0.45 0.5 0.55 0.65 0.7 0.75 0.8 0.85 0.9 1 0.6 0.3"
 ViaDiameters=" 0.55 0.6 0.65 0.7 0.75 0.8 0.85 0.9 0.95 1 1.05 1.1 1.15 1.2 1.3 0"
-ViaDrills=" 0.2 0.25 0.3 0.4 0.45 0.5 0.55 0.6 0.65 0.7 0.75 0.8 0.85 0.9 1 0.35"
-HoleDrills=" 0.2 0.25 0.3 0.4 0.45 0.5 0.55 0.6 0.65 0.7 0.75 0.8 0.85 0.9 1 0.35"
-TextSizes=" 0.254 0.3048 0.4064 0.6096 0.8128 1.016 1.27 1.4224 1.6764 1.9304 2.1844 2.54 3.81 5.08 6.4516 1.778"
+ViaDrills=" 0.2 0.4 0.45 0.5 0.55 0.6 0.65 0.7 0.75 0.8 0.85 0.9 1 0.35 0.25 0.3"
+HoleDrills=" 0.2 0.25 0.4 0.45 0.5 0.55 0.6 0.65 0.7 0.75 0.8 0.85 0.9 1 0.35 0.3"
+TextSizes=" 0.254 0.3048 0.4064 0.8128 1.27 1.9304 2.1844 2.54 3.81 5.08 6.4516 1.778 1.016 0.6096 1.4224 1.6764"
 PolygonSpacings=" 0.254 0.3048 0.4064 0.6096 0.8128 1.016 1.4224 1.6764 1.778 1.9304 2.1844 2.54 3.81 5.08 6.4516 1.27"
 PolygonIsolates=" 0.254 0.3048 0.4064 0.6096 0.8128 1.016 1.27 1.4224 1.6764 1.778 1.9304 2.1844 2.54 3.81 6.4516 0"
 MiterRadiuss=" 0.254 0.3175 0.635 1.27 2.54 1 2 2.5 5 7.5 10 0"
@@ -41,14 +39,14 @@ DimensionExtWidths=" 0.127 0.254 0.1 0.13 0.26 0"
 DimensionExtLengths=" 1.27 2.54 1 2 3 0"
 DimensionExtOffsets=" 1.27 2.54 1 2 3 0"
 SmdSizes=" 0.3048 0.1524 0.4064 0.2032 0.6096 0.3048 0.8128 0.4064 1.016 0.508 1.27 0.6604 1.4224 0.7112 1.6764 0.8128 1.778 0.9144 1.9304 0.9652 2.1844 1.0668 2.54 1.27 3.81 1.9304 5.08 2.54 6.4516 3.2512 1.27 0.635"
-WireBend=0
-WireBendSet=31
+WireBend=4
+WireBendSet=0
 WireCap=1
 MiterStyle=0
 PadShape=0
 ViaShape=1
 PolygonPour=0
-PolygonRank=0
+PolygonRank=1
 PolygonThermals=1
 PolygonOrphans=0
 TextRatio=8
@@ -63,24 +61,22 @@ SwapLevel=0
 ArcDirection=0
 AddLevel=2
 PadsSameType=0
-Layer=91
-Views=" 1: -37.3431 65.3764 184.551 208.023"
-Sheet="1"
+Layer=48
 
 [Win_2]
-Type="Board Editor"
-Loc="0 0 1919 1016"
+Type="Schematic Editor"
+Loc="-8 -8 1911 1008"
 State=1
-Number=2
-File="mkrouter.brd"
-View="-17.6895 10.0557 68.8204 58.3304"
-WireWidths=" 0.0762 0.1016 0.127 0.15 0.2 0.4064 0.508 0.6096 0.8128 1.016 1.27 2.54 0.254 0.3048 0.2032 0.1524"
+Number=1
+File="mkrouter.sch"
+View="-38.8736 18.8994 146.038 137.772"
+WireWidths=" 0.0762 0.1016 0.127 0.15 0.2 0.2032 0.254 0.3048 0.4064 0.508 0.6096 0.8128 1.016 1.27 2.54 0.1524"
 PadDiameters=" 0.254 0.3048 0.4064 0.6096 0.8128 1.016 1.27 1.4224 1.6764 1.778 1.9304 2.1844 2.54 3.81 6.4516 0"
-PadDrills=" 0.2 0.25 0.35 0.4 0.45 0.5 0.55 0.65 0.7 0.75 0.8 0.85 0.9 1 0.6 0.3"
+PadDrills=" 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0.55 0.65 0.7 0.75 0.8 0.85 0.9 1 0.6"
 ViaDiameters=" 0.55 0.6 0.65 0.7 0.75 0.8 0.85 0.9 0.95 1 1.05 1.1 1.15 1.2 1.3 0"
-ViaDrills=" 0.2 0.4 0.45 0.5 0.55 0.6 0.65 0.7 0.75 0.8 0.85 0.9 1 0.35 0.25 0.3"
-HoleDrills=" 0.2 0.25 0.4 0.45 0.5 0.55 0.6 0.65 0.7 0.75 0.8 0.85 0.9 1 0.35 0.3"
-TextSizes=" 0.254 0.3048 0.4064 0.8128 1.27 1.9304 2.1844 2.54 3.81 5.08 6.4516 1.778 1.016 0.6096 1.4224 1.6764"
+ViaDrills=" 0.2 0.25 0.3 0.4 0.45 0.5 0.55 0.6 0.65 0.7 0.75 0.8 0.85 0.9 1 0.35"
+HoleDrills=" 0.2 0.25 0.3 0.4 0.45 0.5 0.55 0.6 0.65 0.7 0.75 0.8 0.85 0.9 1 0.35"
+TextSizes=" 0.254 0.3048 0.4064 0.6096 0.8128 1.016 1.27 1.4224 1.6764 1.9304 2.1844 2.54 3.81 5.08 6.4516 1.778"
 PolygonSpacings=" 0.254 0.3048 0.4064 0.6096 0.8128 1.016 1.4224 1.6764 1.778 1.9304 2.1844 2.54 3.81 5.08 6.4516 1.27"
 PolygonIsolates=" 0.254 0.3048 0.4064 0.6096 0.8128 1.016 1.27 1.4224 1.6764 1.778 1.9304 2.1844 2.54 3.81 6.4516 0"
 MiterRadiuss=" 0.254 0.3175 0.635 1.27 2.54 1 2 2.5 5 7.5 10 0"
@@ -89,14 +85,14 @@ DimensionExtWidths=" 0.127 0.254 0.1 0.13 0.26 0"
 DimensionExtLengths=" 1.27 2.54 1 2 3 0"
 DimensionExtOffsets=" 1.27 2.54 1 2 3 0"
 SmdSizes=" 0.3048 0.1524 0.4064 0.2032 0.6096 0.3048 0.8128 0.4064 1.016 0.508 1.27 0.6604 1.4224 0.7112 1.6764 0.8128 1.778 0.9144 1.9304 0.9652 2.1844 1.0668 2.54 1.27 3.81 1.9304 5.08 2.54 6.4516 3.2512 1.27 0.635"
-WireBend=4
-WireBendSet=0
+WireBend=0
+WireBendSet=31
 WireCap=1
 MiterStyle=0
 PadShape=0
 ViaShape=1
 PolygonPour=0
-PolygonRank=1
+PolygonRank=0
 PolygonThermals=1
 PolygonOrphans=0
 TextRatio=8
@@ -111,7 +107,9 @@ SwapLevel=0
 ArcDirection=0
 AddLevel=2
 PadsSameType=0
-Layer=48
+Layer=91
+Views=" 1: -38.8736 18.8994 146.038 137.772"
+Sheet="1"
 
 [Win_3]
 Type="Control Panel"
@@ -120,7 +118,7 @@ State=1
 Number=0
 
 [Desktop]
-Screen="1920 1080"
+Screen="3840 1080"
 Window="Win_1"
 Window="Win_2"
 Window="Win_3"
diff --git a/embedded/mkrouter-v04/.vs/mkrouter-v04/v14/.atsuo b/embedded/mkrouter-v04/.vs/mkrouter-v04/v14/.atsuo
index dfcfd088ad4adb7233fe54d43453da49d15671a5..07adfb5871f44f430c24eb74dfa487801033f9c2 100644
GIT binary patch
literal 50688
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

delta 948
zcmZqZVQ%PP+~C8+$UIq*NuJN(Q~QeK)t4Fh7#J8Bcqdmec}_meY{+Ol`74t@hd2WR
zgBSw?!{h~O3X=_(cqUgc`*46%aw7ye*o+t$7&sUv|6*23<zQf7;ACK6;9_840IA^t
z8Op%G@bCZs|NIOL3<3-c41x>{3_=VH48jZy3?fiDkR>3?Bp4VNBpDbOq!<_&q!}0(
zWEdD2WEmJ3<QNzj<QW(k6hP`X2G%o9V)9{R1bg5^jo&hm2Ur;x7#tWu9^hpB|NsAg
zCL||Lb_i#g{DaAR@?j>!$p%a;j29+f6!V^ZM9fAMq!fffF8urd|9=quZ)4zk#)%0w
zlek1ShOA+nnBcG|h;i}(d6UTjE6z-A2xXbf!qp-QR{8(`e^mws1~mo-26YAo293#c
zS;QqlGWsBw!pwuw8v~6QC-GD;H8W1G;_>3(Wnf@nM{*{k=;W_F!7QKvf`&K;qv7OI
zUO!ew7Lc+zYATZrm^fGsKmk7ar@YtX!vXe_n-rWlK;aDvFPJtqJq8AbFowy$6udY<
zVGaswnB3$N#Q+Xa=zt;$Cdj73z`zj4H2IgL*W@G228_y+OQnJ*d$?Ill6K}~WMg1p
z0EI71_2d%io=MUQlNH>QCp$~qPHu2>;SgnDU;sroT+J7^0FY6WOWZF^c5$<r+#uq@
z0*cGYP;X5B;t|3EifFiw643w-P|5(M0+=8h$XrnB^7rBZ#S<uXz~m-7#IQ`R2sjOn
z){?*g4p4FeB^9`Wh6ol$j>$iry&y_l&T}$?k`ySJ!qqs0voP|&(!-)4c1Fj^jFGC$
zj0_T!6Qd-U-ZD&n9eIfn%$ZyneSES36Zd9^m<A^QFlZuXU|?imU}R)?CHZpgJdbn-
z21W)a-QW-_11kfo>SRlE6EpMFBwb4jb8}r2qtsO0#5BWX-Q=VsLkr`SWOE}6gIZ9y
fF;BiIW;iLnWugJ+<hx?VpyakWU<D83qE!+Afx-)@

diff --git a/embedded/mkrouter-v04/mkrouter-v04/Debug/Makefile b/embedded/mkrouter-v04/mkrouter-v04/Debug/Makefile
index 2164a29..551e8aa 100644
--- a/embedded/mkrouter-v04/mkrouter-v04/Debug/Makefile
+++ b/embedded/mkrouter-v04/mkrouter-v04/Debug/Makefile
@@ -79,6 +79,8 @@ SUBDIRS :=  \
 # Add inputs and outputs from these tool invocations to the build variables 
 C_SRCS +=  \
 ../src/pin.c \
+../src/ringbuffer.c \
+../src/uartport.c \
 ../src/ASF/common/services/delay/sam/cycle_counter.c \
 ../src/ASF/common/services/clock/sams70/sysclk.c \
 ../src/ASF/sam/drivers/pmc/pmc.c \
@@ -99,6 +101,8 @@ ASM_SRCS +=
 
 OBJS +=  \
 src/pin.o \
+src/ringbuffer.o \
+src/uartport.o \
 src/ASF/common/services/delay/sam/cycle_counter.o \
 src/ASF/common/services/clock/sams70/sysclk.o \
 src/ASF/sam/drivers/pmc/pmc.o \
@@ -112,6 +116,8 @@ src/main.o
 
 OBJS_AS_ARGS +=  \
 src/pin.o \
+src/ringbuffer.o \
+src/uartport.o \
 src/ASF/common/services/delay/sam/cycle_counter.o \
 src/ASF/common/services/clock/sams70/sysclk.o \
 src/ASF/sam/drivers/pmc/pmc.o \
@@ -125,6 +131,8 @@ src/main.o
 
 C_DEPS +=  \
 src/pin.d \
+src/ringbuffer.d \
+src/uartport.d \
 src/ASF/common/services/delay/sam/cycle_counter.d \
 src/ASF/common/services/clock/sams70/sysclk.d \
 src/ASF/sam/drivers/pmc/pmc.d \
@@ -138,6 +146,8 @@ src/main.d
 
 C_DEPS_AS_ARGS +=  \
 src/pin.d \
+src/ringbuffer.d \
+src/uartport.d \
 src/ASF/common/services/delay/sam/cycle_counter.d \
 src/ASF/common/services/clock/sams70/sysclk.d \
 src/ASF/sam/drivers/pmc/pmc.d \
@@ -182,6 +192,10 @@ LINKER_SCRIPT_DEP+=  \
 
 
 
+
+
+
+
 
 
 
diff --git a/embedded/mkrouter-v04/mkrouter-v04/Debug/makedep.mk b/embedded/mkrouter-v04/mkrouter-v04/Debug/makedep.mk
index 5510f49..036b3dc 100644
--- a/embedded/mkrouter-v04/mkrouter-v04/Debug/makedep.mk
+++ b/embedded/mkrouter-v04/mkrouter-v04/Debug/makedep.mk
@@ -4,6 +4,10 @@
 
 src\pin.c
 
+src\ringbuffer.c
+
+src\uartport.c
+
 src\ASF\common\services\delay\sam\cycle_counter.c
 
 src\ASF\common\services\clock\sams70\sysclk.c
diff --git a/embedded/mkrouter-v04/mkrouter-v04/mkrouter-v04.cproj b/embedded/mkrouter-v04/mkrouter-v04/mkrouter-v04.cproj
index d234417..c432f19 100644
--- a/embedded/mkrouter-v04/mkrouter-v04/mkrouter-v04.cproj
+++ b/embedded/mkrouter-v04/mkrouter-v04/mkrouter-v04.cproj
@@ -30,187 +30,187 @@
     <EraseKey />
     <AsfFrameworkConfig>
       <framework-data>
-  <options>
-    <option id="common.boards" value="Add" config="" content-id="Atmel.ASF" />
-    <option id="common.services.basic.clock" value="Add" config="" content-id="Atmel.ASF" />
-    <option id="common.services.delay" value="Add" config="" content-id="Atmel.ASF" />
-    <option id="sam.utils.linker_scripts" value="Add" config="" content-id="Atmel.ASF" />
-  </options>
-  <configurations>
-    <configuration key="config.compiler.armgcc.fpu_used" value="yes" default="yes" content-id="Atmel.ASF" />
-    <configuration key="config.compiler.armgcc.printf" value="iprintf" default="iprintf" content-id="Atmel.ASF" />
-    <configuration key="config.compiler.armgcc.scanf" value="iscanf" default="iscanf" content-id="Atmel.ASF" />
-  </configurations>
-  <files>
-    <file path="src/main.c" framework="" version="" source="common/applications/user_application/main.c" changed="False" content-id="Atmel.ASF" />
-    <file path="src/config/conf_board.h" framework="" version="" source="common/applications/user_application/user_board/config/conf_board.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/common/boards/board.h" framework="" version="" source="common/boards/board.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/common/boards/user_board/init.c" framework="" version="" source="common/boards/user_board/init.c" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/common/boards/user_board/user_board.h" framework="" version="" source="common/boards/user_board/user_board.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/common/utils/interrupt.h" framework="" version="" source="common/utils/interrupt.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/common/utils/interrupt/interrupt_sam_nvic.c" framework="" version="" source="common/utils/interrupt/interrupt_sam_nvic.c" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/common/utils/interrupt/interrupt_sam_nvic.h" framework="" version="" source="common/utils/interrupt/interrupt_sam_nvic.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/common/utils/parts.h" framework="" version="" source="common/utils/parts.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/component/acc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/acc.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/component/aes.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/aes.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/component/afec.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/afec.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/component/chipid.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/chipid.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/component/dacc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/dacc.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/component/efc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/efc.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/component/gpbr.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/gpbr.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/component/hsmci.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/hsmci.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/component/i2sc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/i2sc.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/component/icm.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/icm.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/component/isi.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/isi.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/component/matrix.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/matrix.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/component/pio.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/pio.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/component/pmc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/pmc.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/component/pwm.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/pwm.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/component/qspi.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/qspi.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/component/rstc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/rstc.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/component/rswdt.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/rswdt.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/component/rtc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/rtc.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/component/rtt.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/rtt.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/component/sdramc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/sdramc.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/component/smc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/smc.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/component/spi.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/spi.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/component/ssc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/ssc.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/component/supc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/supc.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/component/tc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/tc.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/component/trng.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/trng.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/component/twihs.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/twihs.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/component/uart.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/uart.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/component/usart.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/usart.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/component/usbhs.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/usbhs.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/component/utmi.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/utmi.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/component/wdt.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/wdt.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/component/xdmac.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/xdmac.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/acc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/acc.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/aes.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/aes.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/afec0.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/afec0.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/afec1.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/afec1.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/chipid.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/chipid.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/dacc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/dacc.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/efc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/efc.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/gpbr.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/gpbr.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/hsmci.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/hsmci.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/i2sc0.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/i2sc0.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/i2sc1.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/i2sc1.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/icm.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/icm.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/isi.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/isi.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/matrix.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/matrix.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/pioa.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/pioa.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/piob.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/piob.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/pioc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/pioc.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/piod.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/piod.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/pioe.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/pioe.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/pmc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/pmc.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/pwm0.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/pwm0.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/pwm1.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/pwm1.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/qspi.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/qspi.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/rstc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/rstc.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/rswdt.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/rswdt.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/rtc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/rtc.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/rtt.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/rtt.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/sdramc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/sdramc.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/smc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/smc.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/spi0.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/spi0.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/spi1.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/spi1.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/ssc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/ssc.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/supc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/supc.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/tc0.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/tc0.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/tc1.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/tc1.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/tc2.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/tc2.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/tc3.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/tc3.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/trng.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/trng.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/twihs0.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/twihs0.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/twihs1.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/twihs1.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/twihs2.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/twihs2.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/uart0.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/uart0.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/uart1.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/uart1.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/uart2.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/uart2.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/uart3.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/uart3.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/uart4.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/uart4.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/usart0.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/usart0.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/usart1.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/usart1.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/usart2.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/usart2.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/usbhs.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/usbhs.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/utmi.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/utmi.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/wdt.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/wdt.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/xdmac.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/xdmac.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/pio/sams70j19.h" framework="" version="" source="sam/utils/cmsis/sams70/include/pio/sams70j19.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/pio/sams70j20.h" framework="" version="" source="sam/utils/cmsis/sams70/include/pio/sams70j20.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/pio/sams70j21.h" framework="" version="" source="sam/utils/cmsis/sams70/include/pio/sams70j21.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/pio/sams70n19.h" framework="" version="" source="sam/utils/cmsis/sams70/include/pio/sams70n19.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/pio/sams70n20.h" framework="" version="" source="sam/utils/cmsis/sams70/include/pio/sams70n20.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/pio/sams70n21.h" framework="" version="" source="sam/utils/cmsis/sams70/include/pio/sams70n21.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/pio/sams70q19.h" framework="" version="" source="sam/utils/cmsis/sams70/include/pio/sams70q19.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/pio/sams70q20.h" framework="" version="" source="sam/utils/cmsis/sams70/include/pio/sams70q20.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/pio/sams70q21.h" framework="" version="" source="sam/utils/cmsis/sams70/include/pio/sams70q21.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/sams70.h" framework="" version="" source="sam/utils/cmsis/sams70/include/sams70.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/sams70j19.h" framework="" version="" source="sam/utils/cmsis/sams70/include/sams70j19.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/sams70j20.h" framework="" version="" source="sam/utils/cmsis/sams70/include/sams70j20.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/sams70j21.h" framework="" version="" source="sam/utils/cmsis/sams70/include/sams70j21.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/sams70n19.h" framework="" version="" source="sam/utils/cmsis/sams70/include/sams70n19.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/sams70n20.h" framework="" version="" source="sam/utils/cmsis/sams70/include/sams70n20.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/sams70n21.h" framework="" version="" source="sam/utils/cmsis/sams70/include/sams70n21.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/sams70q19.h" framework="" version="" source="sam/utils/cmsis/sams70/include/sams70q19.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/sams70q20.h" framework="" version="" source="sam/utils/cmsis/sams70/include/sams70q20.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/include/sams70q21.h" framework="" version="" source="sam/utils/cmsis/sams70/include/sams70q21.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/source/templates/gcc/startup_sams70.c" framework="" version="" source="sam/utils/cmsis/sams70/source/templates/gcc/startup_sams70.c" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/source/templates/system_sams70.c" framework="" version="" source="sam/utils/cmsis/sams70/source/templates/system_sams70.c" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/cmsis/sams70/source/templates/system_sams70.h" framework="" version="" source="sam/utils/cmsis/sams70/source/templates/system_sams70.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/compiler.h" framework="" version="" source="sam/utils/compiler.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/fpu/fpu.h" framework="" version="" source="sam/utils/fpu/fpu.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/header_files/io.h" framework="" version="" source="sam/utils/header_files/io.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/linker_scripts/sams70/sams70n20/gcc/flash.ld" framework="" version="" source="sam/utils/linker_scripts/sams70/sams70n20/gcc/flash.ld" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/make/Makefile.sam.in" framework="" version="" source="sam/utils/make/Makefile.sam.in" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/preprocessor/mrepeat.h" framework="" version="" source="sam/utils/preprocessor/mrepeat.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/preprocessor/preprocessor.h" framework="" version="" source="sam/utils/preprocessor/preprocessor.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/preprocessor/stringz.h" framework="" version="" source="sam/utils/preprocessor/stringz.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/preprocessor/tpaste.h" framework="" version="" source="sam/utils/preprocessor/tpaste.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/status_codes.h" framework="" version="" source="sam/utils/status_codes.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/utils/syscalls/gcc/syscalls.c" framework="" version="" source="sam/utils/syscalls/gcc/syscalls.c" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/thirdparty/CMSIS/ATMEL-disclaimer.txt" framework="" version="" source="thirdparty/CMSIS/ATMEL-disclaimer.txt" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/thirdparty/CMSIS/CMSIS_END_USER_LICENCE_AGREEMENT.pdf" framework="" version="" source="thirdparty/CMSIS/CMSIS_END_USER_LICENCE_AGREEMENT.pdf" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/thirdparty/CMSIS/Include/arm_common_tables.h" framework="" version="" source="thirdparty/CMSIS/Include/arm_common_tables.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/thirdparty/CMSIS/Include/arm_const_structs.h" framework="" version="" source="thirdparty/CMSIS/Include/arm_const_structs.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/thirdparty/CMSIS/Include/arm_math.h" framework="" version="" source="thirdparty/CMSIS/Include/arm_math.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/thirdparty/CMSIS/Include/core_cm7.h" framework="" version="" source="thirdparty/CMSIS/Include/core_cm7.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/thirdparty/CMSIS/Include/core_cmFunc.h" framework="" version="" source="thirdparty/CMSIS/Include/core_cmFunc.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/thirdparty/CMSIS/Include/core_cmInstr.h" framework="" version="" source="thirdparty/CMSIS/Include/core_cmInstr.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/thirdparty/CMSIS/Include/core_cmSimd.h" framework="" version="" source="thirdparty/CMSIS/Include/core_cmSimd.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/thirdparty/CMSIS/Lib/GCC/libarm_cortexM7lfsp_math.a" framework="" version="" source="thirdparty/CMSIS/Lib/GCC/libarm_cortexM7lfsp_math.a" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/thirdparty/CMSIS/Lib/GCC/libarm_cortexM7lfsp_math_softfp.a" framework="" version="" source="thirdparty/CMSIS/Lib/GCC/libarm_cortexM7lfsp_math_softfp.a" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/thirdparty/CMSIS/Lib/license.txt" framework="" version="" source="thirdparty/CMSIS/Lib/license.txt" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/thirdparty/CMSIS/README.txt" framework="" version="" source="thirdparty/CMSIS/README.txt" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/thirdparty/CMSIS/license.txt" framework="" version="" source="thirdparty/CMSIS/license.txt" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/drivers/pmc/pmc.c" framework="" version="3.36.2" source="sam\drivers\pmc\pmc.c" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/drivers/pmc/sleep.c" framework="" version="3.36.2" source="sam\drivers\pmc\sleep.c" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/drivers/pmc/pmc.h" framework="" version="3.36.2" source="sam\drivers\pmc\pmc.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/sam/drivers/pmc/sleep.h" framework="" version="3.36.2" source="sam\drivers\pmc\sleep.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/common/services/clock/sams70/sysclk.c" framework="" version="3.36.2" source="common\services\clock\sams70\sysclk.c" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/common/services/clock/sams70/pll.h" framework="" version="3.36.2" source="common\services\clock\sams70\pll.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/common/services/clock/genclk.h" framework="" version="3.36.2" source="common\services\clock\genclk.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/common/services/clock/osc.h" framework="" version="3.36.2" source="common\services\clock\osc.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/common/services/clock/sams70/sysclk.h" framework="" version="3.36.2" source="common\services\clock\sams70\sysclk.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/common/services/clock/sams70/genclk.h" framework="" version="3.36.2" source="common\services\clock\sams70\genclk.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/common/services/clock/sams70/osc.h" framework="" version="3.36.2" source="common\services\clock\sams70\osc.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/common/services/clock/sysclk.h" framework="" version="3.36.2" source="common\services\clock\sysclk.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/common/services/clock/pll.h" framework="" version="3.36.2" source="common\services\clock\pll.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/Config/conf_clock.h" framework="" version="3.36.2" source="common\services\clock\sams70\module_config\conf_clock.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/common/services/delay/sam/cycle_counter.c" framework="" version="3.36.2" source="common\services\delay\sam\cycle_counter.c" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/common/services/delay/sam/cycle_counter.h" framework="" version="3.36.2" source="common\services\delay\sam\cycle_counter.h" changed="False" content-id="Atmel.ASF" />
-    <file path="src/ASF/common/services/delay/delay.h" framework="" version="3.36.2" source="common\services\delay\delay.h" changed="False" content-id="Atmel.ASF" />
-  </files>
-  <documentation help="http://asf.atmel.com/docs/3.36.2/common.applications.user_application.user_board.sams70n20/html/index.html" />
-  <offline-documentation help="" />
-  <dependencies>
-    <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.36.2" />
-  </dependencies>
-  <project id="common.applications.user_application.user_board.sams70n20" value="Add" config="" content-id="Atmel.ASF" />
-  <board id="board.user_board.sams70n20" value="Add" config="" content-id="Atmel.ASF" />
-</framework-data>
+        <options>
+          <option id="common.boards" value="Add" config="" content-id="Atmel.ASF" />
+          <option id="common.services.basic.clock" value="Add" config="" content-id="Atmel.ASF" />
+          <option id="common.services.delay" value="Add" config="" content-id="Atmel.ASF" />
+          <option id="sam.utils.linker_scripts" value="Add" config="" content-id="Atmel.ASF" />
+        </options>
+        <configurations>
+          <configuration key="config.compiler.armgcc.fpu_used" value="yes" default="yes" content-id="Atmel.ASF" />
+          <configuration key="config.compiler.armgcc.printf" value="iprintf" default="iprintf" content-id="Atmel.ASF" />
+          <configuration key="config.compiler.armgcc.scanf" value="iscanf" default="iscanf" content-id="Atmel.ASF" />
+        </configurations>
+        <files>
+          <file path="src/main.c" framework="" version="" source="common/applications/user_application/main.c" changed="False" content-id="Atmel.ASF" />
+          <file path="src/config/conf_board.h" framework="" version="" source="common/applications/user_application/user_board/config/conf_board.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/common/boards/board.h" framework="" version="" source="common/boards/board.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/common/boards/user_board/init.c" framework="" version="" source="common/boards/user_board/init.c" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/common/boards/user_board/user_board.h" framework="" version="" source="common/boards/user_board/user_board.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/common/utils/interrupt.h" framework="" version="" source="common/utils/interrupt.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/common/utils/interrupt/interrupt_sam_nvic.c" framework="" version="" source="common/utils/interrupt/interrupt_sam_nvic.c" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/common/utils/interrupt/interrupt_sam_nvic.h" framework="" version="" source="common/utils/interrupt/interrupt_sam_nvic.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/common/utils/parts.h" framework="" version="" source="common/utils/parts.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/component/acc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/acc.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/component/aes.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/aes.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/component/afec.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/afec.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/component/chipid.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/chipid.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/component/dacc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/dacc.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/component/efc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/efc.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/component/gpbr.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/gpbr.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/component/hsmci.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/hsmci.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/component/i2sc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/i2sc.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/component/icm.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/icm.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/component/isi.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/isi.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/component/matrix.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/matrix.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/component/pio.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/pio.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/component/pmc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/pmc.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/component/pwm.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/pwm.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/component/qspi.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/qspi.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/component/rstc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/rstc.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/component/rswdt.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/rswdt.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/component/rtc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/rtc.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/component/rtt.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/rtt.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/component/sdramc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/sdramc.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/component/smc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/smc.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/component/spi.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/spi.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/component/ssc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/ssc.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/component/supc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/supc.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/component/tc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/tc.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/component/trng.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/trng.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/component/twihs.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/twihs.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/component/uart.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/uart.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/component/usart.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/usart.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/component/usbhs.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/usbhs.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/component/utmi.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/utmi.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/component/wdt.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/wdt.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/component/xdmac.h" framework="" version="" source="sam/utils/cmsis/sams70/include/component/xdmac.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/acc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/acc.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/aes.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/aes.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/afec0.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/afec0.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/afec1.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/afec1.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/chipid.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/chipid.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/dacc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/dacc.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/efc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/efc.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/gpbr.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/gpbr.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/hsmci.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/hsmci.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/i2sc0.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/i2sc0.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/i2sc1.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/i2sc1.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/icm.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/icm.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/isi.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/isi.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/matrix.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/matrix.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/pioa.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/pioa.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/piob.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/piob.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/pioc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/pioc.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/piod.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/piod.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/pioe.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/pioe.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/pmc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/pmc.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/pwm0.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/pwm0.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/pwm1.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/pwm1.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/qspi.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/qspi.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/rstc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/rstc.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/rswdt.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/rswdt.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/rtc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/rtc.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/rtt.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/rtt.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/sdramc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/sdramc.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/smc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/smc.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/spi0.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/spi0.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/spi1.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/spi1.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/ssc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/ssc.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/supc.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/supc.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/tc0.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/tc0.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/tc1.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/tc1.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/tc2.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/tc2.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/tc3.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/tc3.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/trng.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/trng.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/twihs0.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/twihs0.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/twihs1.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/twihs1.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/twihs2.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/twihs2.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/uart0.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/uart0.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/uart1.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/uart1.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/uart2.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/uart2.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/uart3.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/uart3.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/uart4.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/uart4.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/usart0.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/usart0.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/usart1.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/usart1.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/usart2.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/usart2.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/usbhs.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/usbhs.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/utmi.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/utmi.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/wdt.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/wdt.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/instance/xdmac.h" framework="" version="" source="sam/utils/cmsis/sams70/include/instance/xdmac.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/pio/sams70j19.h" framework="" version="" source="sam/utils/cmsis/sams70/include/pio/sams70j19.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/pio/sams70j20.h" framework="" version="" source="sam/utils/cmsis/sams70/include/pio/sams70j20.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/pio/sams70j21.h" framework="" version="" source="sam/utils/cmsis/sams70/include/pio/sams70j21.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/pio/sams70n19.h" framework="" version="" source="sam/utils/cmsis/sams70/include/pio/sams70n19.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/pio/sams70n20.h" framework="" version="" source="sam/utils/cmsis/sams70/include/pio/sams70n20.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/pio/sams70n21.h" framework="" version="" source="sam/utils/cmsis/sams70/include/pio/sams70n21.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/pio/sams70q19.h" framework="" version="" source="sam/utils/cmsis/sams70/include/pio/sams70q19.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/pio/sams70q20.h" framework="" version="" source="sam/utils/cmsis/sams70/include/pio/sams70q20.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/pio/sams70q21.h" framework="" version="" source="sam/utils/cmsis/sams70/include/pio/sams70q21.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/sams70.h" framework="" version="" source="sam/utils/cmsis/sams70/include/sams70.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/sams70j19.h" framework="" version="" source="sam/utils/cmsis/sams70/include/sams70j19.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/sams70j20.h" framework="" version="" source="sam/utils/cmsis/sams70/include/sams70j20.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/sams70j21.h" framework="" version="" source="sam/utils/cmsis/sams70/include/sams70j21.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/sams70n19.h" framework="" version="" source="sam/utils/cmsis/sams70/include/sams70n19.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/sams70n20.h" framework="" version="" source="sam/utils/cmsis/sams70/include/sams70n20.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/sams70n21.h" framework="" version="" source="sam/utils/cmsis/sams70/include/sams70n21.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/sams70q19.h" framework="" version="" source="sam/utils/cmsis/sams70/include/sams70q19.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/sams70q20.h" framework="" version="" source="sam/utils/cmsis/sams70/include/sams70q20.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/include/sams70q21.h" framework="" version="" source="sam/utils/cmsis/sams70/include/sams70q21.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/source/templates/gcc/startup_sams70.c" framework="" version="" source="sam/utils/cmsis/sams70/source/templates/gcc/startup_sams70.c" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/source/templates/system_sams70.c" framework="" version="" source="sam/utils/cmsis/sams70/source/templates/system_sams70.c" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/cmsis/sams70/source/templates/system_sams70.h" framework="" version="" source="sam/utils/cmsis/sams70/source/templates/system_sams70.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/compiler.h" framework="" version="" source="sam/utils/compiler.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/fpu/fpu.h" framework="" version="" source="sam/utils/fpu/fpu.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/header_files/io.h" framework="" version="" source="sam/utils/header_files/io.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/linker_scripts/sams70/sams70n20/gcc/flash.ld" framework="" version="" source="sam/utils/linker_scripts/sams70/sams70n20/gcc/flash.ld" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/make/Makefile.sam.in" framework="" version="" source="sam/utils/make/Makefile.sam.in" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/preprocessor/mrepeat.h" framework="" version="" source="sam/utils/preprocessor/mrepeat.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/preprocessor/preprocessor.h" framework="" version="" source="sam/utils/preprocessor/preprocessor.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/preprocessor/stringz.h" framework="" version="" source="sam/utils/preprocessor/stringz.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/preprocessor/tpaste.h" framework="" version="" source="sam/utils/preprocessor/tpaste.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/status_codes.h" framework="" version="" source="sam/utils/status_codes.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/utils/syscalls/gcc/syscalls.c" framework="" version="" source="sam/utils/syscalls/gcc/syscalls.c" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/thirdparty/CMSIS/ATMEL-disclaimer.txt" framework="" version="" source="thirdparty/CMSIS/ATMEL-disclaimer.txt" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/thirdparty/CMSIS/CMSIS_END_USER_LICENCE_AGREEMENT.pdf" framework="" version="" source="thirdparty/CMSIS/CMSIS_END_USER_LICENCE_AGREEMENT.pdf" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/thirdparty/CMSIS/Include/arm_common_tables.h" framework="" version="" source="thirdparty/CMSIS/Include/arm_common_tables.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/thirdparty/CMSIS/Include/arm_const_structs.h" framework="" version="" source="thirdparty/CMSIS/Include/arm_const_structs.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/thirdparty/CMSIS/Include/arm_math.h" framework="" version="" source="thirdparty/CMSIS/Include/arm_math.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/thirdparty/CMSIS/Include/core_cm7.h" framework="" version="" source="thirdparty/CMSIS/Include/core_cm7.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/thirdparty/CMSIS/Include/core_cmFunc.h" framework="" version="" source="thirdparty/CMSIS/Include/core_cmFunc.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/thirdparty/CMSIS/Include/core_cmInstr.h" framework="" version="" source="thirdparty/CMSIS/Include/core_cmInstr.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/thirdparty/CMSIS/Include/core_cmSimd.h" framework="" version="" source="thirdparty/CMSIS/Include/core_cmSimd.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/thirdparty/CMSIS/Lib/GCC/libarm_cortexM7lfsp_math.a" framework="" version="" source="thirdparty/CMSIS/Lib/GCC/libarm_cortexM7lfsp_math.a" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/thirdparty/CMSIS/Lib/GCC/libarm_cortexM7lfsp_math_softfp.a" framework="" version="" source="thirdparty/CMSIS/Lib/GCC/libarm_cortexM7lfsp_math_softfp.a" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/thirdparty/CMSIS/Lib/license.txt" framework="" version="" source="thirdparty/CMSIS/Lib/license.txt" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/thirdparty/CMSIS/README.txt" framework="" version="" source="thirdparty/CMSIS/README.txt" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/thirdparty/CMSIS/license.txt" framework="" version="" source="thirdparty/CMSIS/license.txt" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/drivers/pmc/pmc.c" framework="" version="3.36.2" source="sam\drivers\pmc\pmc.c" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/drivers/pmc/sleep.c" framework="" version="3.36.2" source="sam\drivers\pmc\sleep.c" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/drivers/pmc/pmc.h" framework="" version="3.36.2" source="sam\drivers\pmc\pmc.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/sam/drivers/pmc/sleep.h" framework="" version="3.36.2" source="sam\drivers\pmc\sleep.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/common/services/clock/sams70/sysclk.c" framework="" version="3.36.2" source="common\services\clock\sams70\sysclk.c" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/common/services/clock/sams70/pll.h" framework="" version="3.36.2" source="common\services\clock\sams70\pll.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/common/services/clock/genclk.h" framework="" version="3.36.2" source="common\services\clock\genclk.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/common/services/clock/osc.h" framework="" version="3.36.2" source="common\services\clock\osc.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/common/services/clock/sams70/sysclk.h" framework="" version="3.36.2" source="common\services\clock\sams70\sysclk.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/common/services/clock/sams70/genclk.h" framework="" version="3.36.2" source="common\services\clock\sams70\genclk.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/common/services/clock/sams70/osc.h" framework="" version="3.36.2" source="common\services\clock\sams70\osc.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/common/services/clock/sysclk.h" framework="" version="3.36.2" source="common\services\clock\sysclk.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/common/services/clock/pll.h" framework="" version="3.36.2" source="common\services\clock\pll.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/Config/conf_clock.h" framework="" version="3.36.2" source="common\services\clock\sams70\module_config\conf_clock.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/common/services/delay/sam/cycle_counter.c" framework="" version="3.36.2" source="common\services\delay\sam\cycle_counter.c" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/common/services/delay/sam/cycle_counter.h" framework="" version="3.36.2" source="common\services\delay\sam\cycle_counter.h" changed="False" content-id="Atmel.ASF" />
+          <file path="src/ASF/common/services/delay/delay.h" framework="" version="3.36.2" source="common\services\delay\delay.h" changed="False" content-id="Atmel.ASF" />
+        </files>
+        <documentation help="http://asf.atmel.com/docs/3.36.2/common.applications.user_application.user_board.sams70n20/html/index.html" />
+        <offline-documentation help="" />
+        <dependencies>
+          <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.36.2" />
+        </dependencies>
+        <project id="common.applications.user_application.user_board.sams70n20" value="Add" config="" content-id="Atmel.ASF" />
+        <board id="board.user_board.sams70n20" value="Add" config="" content-id="Atmel.ASF" />
+      </framework-data>
     </AsfFrameworkConfig>
     <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>
     <avrtoolserialnumber>J41800087098</avrtoolserialnumber>
@@ -483,6 +483,18 @@
     <Compile Include="src\pin.h">
       <SubType>compile</SubType>
     </Compile>
+    <Compile Include="src\ringbuffer.c">
+      <SubType>compile</SubType>
+    </Compile>
+    <Compile Include="src\ringbuffer.h">
+      <SubType>compile</SubType>
+    </Compile>
+    <Compile Include="src\uartport.c">
+      <SubType>compile</SubType>
+    </Compile>
+    <Compile Include="src\uartport.h">
+      <SubType>compile</SubType>
+    </Compile>
     <None Include="src\ASF\common\services\delay\delay.h">
       <SubType>compile</SubType>
     </None>
diff --git a/embedded/mkrouter-v04/mkrouter-v04/src/config/conf_clock.h b/embedded/mkrouter-v04/mkrouter-v04/src/config/conf_clock.h
index 36761cd..fc7bc75 100644
--- a/embedded/mkrouter-v04/mkrouter-v04/src/config/conf_clock.h
+++ b/embedded/mkrouter-v04/mkrouter-v04/src/config/conf_clock.h
@@ -52,11 +52,11 @@
 //#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_SLCK_XTAL
 //#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_SLCK_BYPASS
 //#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_MAINCK_4M_RC
-#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_MAINCK_8M_RC
+//#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_MAINCK_8M_RC
 //#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_MAINCK_12M_RC
 //#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_MAINCK_XTAL
 //#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_MAINCK_BYPASS
-//#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_PLLACK
+#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_PLLACK
 //#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_UPLLCK
 
 // ===== Processor Clock (HCLK) Prescaler Options   (Fhclk = Fsys / (SYSCLK_PRES))
@@ -70,11 +70,11 @@
 //#define CONFIG_SYSCLK_PRES          SYSCLK_PRES_3
 
 // ===== System Clock (MCK) Division Options     (Fmck = Fhclk / (SYSCLK_DIV))
-#define CONFIG_SYSCLK_DIV            1
+#define CONFIG_SYSCLK_DIV            2
 
 // ===== PLL0 (A) Options   (Fpll = (Fclk * PLL_mul) / PLL_div)
 // Use mul and div effective values here.
-#define CONFIG_PLL0_SOURCE          PLL_SRC_MAINCK_XTAL
+#define CONFIG_PLL0_SOURCE          PLL_SRC_MAINCK_12M_RC
 #define CONFIG_PLL0_MUL             25
 #define CONFIG_PLL0_DIV             1
 
diff --git a/embedded/mkrouter-v04/mkrouter-v04/src/hardware.h b/embedded/mkrouter-v04/mkrouter-v04/src/hardware.h
index c1c4333..f35e5f0 100644
--- a/embedded/mkrouter-v04/mkrouter-v04/src/hardware.h
+++ b/embedded/mkrouter-v04/mkrouter-v04/src/hardware.h
@@ -10,10 +10,29 @@
 #define HARDWARE_H_
 
 #include "pin.h"
+#include "ringbuffer.h"
+#include "uartport.h"
 
+// status lights
 pin_t np1stlr;
-pin_t np1stlg;
 pin_t np1stlb;
+pin_t np2stlr;
+pin_t np2stlb;
+pin_t np3stlr;
+pin_t np3stlb;
+pin_t np4stlr;
+pin_t np4stlb;
+pin_t np5stlr;
+pin_t np5stlb;
+pin_t *lights[] = {&np1stlr, &np1stlb, &np2stlr, &np2stlb, &np3stlr, &np3stlb, &np4stlr, &np4stlb, &np5stlr, &np5stlb};
+
+// ringbuffers
+ringbuffer_t np1rbrx;
+ringbuffer_t np1rbtx;
+
+// uartports
+uartport_t up1;
+uartport_t up2;
 
 
 #endif /* HARDWARE_H_ */
\ No newline at end of file
diff --git a/embedded/mkrouter-v04/mkrouter-v04/src/main.c b/embedded/mkrouter-v04/mkrouter-v04/src/main.c
index 08546a6..9bd0594 100644
--- a/embedded/mkrouter-v04/mkrouter-v04/src/main.c
+++ b/embedded/mkrouter-v04/mkrouter-v04/src/main.c
@@ -32,13 +32,59 @@
 
 #include "hardware.h"
 
-void messysetup(void){
+void setupperipherals(void){
 	// kill the watchdog
 	WDT->WDT_MR = WDT_MR_WDDIS;
 	
 	// start relevant peripheral clocks
 	PMC->PMC_PCER0 = 1 << ID_PIOA;
 	PMC->PMC_PCER0 = 1 << ID_PIOD;
+	
+	// start uart clocks
+	PMC->PMC_PCER0 = 1 << ID_UART0;
+	//PMC->PMC_PCER0 = 1 << ID_UART1;
+	//PMC->PMC_PCER1 = 1 << (ID_UART2 - 32);
+}
+
+void setupinterrupts(void){
+	NVIC_DisableIRQ(UART0_IRQn);
+	NVIC_ClearPendingIRQ(UART0_IRQn);
+	NVIC_SetPriority(UART0_IRQn, 8);
+	NVIC_EnableIRQ(UART0_IRQn);
+}
+
+void lightsetup(void){
+	np1stlr = pin_new(PIOD, PIO_PER_P12);
+	pin_output(&np1stlr);
+	np1stlb = pin_new(PIOA, PIO_PER_P2);
+	pin_output(&np1stlb);
+	
+	np2stlr = pin_new(PIOA, PIO_PER_P11);
+	pin_output(&np2stlr);
+	np2stlb = pin_new(PIOD, PIO_PER_P20);
+	pin_output(&np2stlb);
+	
+	np3stlr = pin_new(PIOA, PIO_PER_P15);
+	pin_output(&np3stlr);
+	np3stlb = pin_new(PIOD, PIO_PER_P27);
+	pin_output(&np3stlb);
+	
+	np4stlr = pin_new(PIOA, PIO_PER_P22);
+	pin_output(&np4stlr);
+	np4stlb = pin_new(PIOA, PIO_PER_P8);
+	pin_output(&np4stlb);
+	
+	np5stlr = pin_new(PIOB, PIO_PER_P0);
+	pin_output(&np5stlr);
+	np5stlb = pin_new(PIOB, PIO_PER_P1);
+	pin_output(&np5stlb);
+}
+
+void lightstoggle(void){
+	for(int i = 0; i < 10; i++){
+		pin_toggle(lights[i]);
+	}
+	
 }
 
 int main (void)
@@ -47,28 +93,38 @@ int main (void)
 	// I think we can do 300, are at 150
 	board_init();
 	
-	//NP1 (0) 
-	// STLR PD12
-	// STLG PA3
-	// STLB PA2
+	setupperipherals();
+	setupinterrupts();
 	
-	messysetup();
+	lightsetup();
+	
+	rb_init(&np1rbrx);
+	rb_init(&np1rbtx);
+	
+	// UP1 on UART0, RX 9 TX 10 on PIOA
+	up1 = uart_new(UART0, PIOA, 9, 10, &np1rbrx, &np1rbtx);
+	uart_init(&up1, 81);
+	
+	/*
+	// UP2 on UART1, RX 5 TX 4 on PIOA
+	up2 = uart_new(UART1, PIOA, 5, 4, &np1rbrx, &np1rbtx);
+	uart_init(&up2, 81); // 81 for FTDI 115200 :|
+	*/
 	
-	np1stlr = pin_new(PIOA, PIO_PER_P11);
-	pin_output(&np1stlr);
-	np1stlg = pin_new(PIOD, PIO_PER_P21);
-	pin_output(&np1stlg);
-	np1stlb = pin_new(PIOD, PIO_PER_P20);
-	pin_output(&np1stlb);
-
 	while(1){
-		pin_set(&np1stlr);
-		pin_set(&np1stlg);
-		pin_set(&np1stlb);
-		delay_ms(100);
-		pin_clear(&np1stlr);
-		pin_clear(&np1stlg);
-		pin_clear(&np1stlb);
-		delay_ms(100);
+		lightstoggle();
+		/*
+		uint8_t hello[] = {'h', 'e', 'l', 'l', 'o'};
+		if(!rb_empty(up1.rbrx)){
+			uart_sendchars_buffered(&up1, hello, 5);
+			uart_sendchar_buffered(&up1, rb_get(up1.rbrx));
+		}
+		*/
+		delay_ms(75);
 	}
-}
\ No newline at end of file
+}
+
+void UART0_Handler(void){
+	uart_handler(&up1);
+}
+
diff --git a/embedded/mkrouter-v04/mkrouter-v04/src/ringbuffer.c b/embedded/mkrouter-v04/mkrouter-v04/src/ringbuffer.c
new file mode 100644
index 0000000..8166854
--- /dev/null
+++ b/embedded/mkrouter-v04/mkrouter-v04/src/ringbuffer.c
@@ -0,0 +1,67 @@
+/*
+ * ringbuffer.c
+ *
+ * Created: 2/7/2018 11:39:44 AM
+ *  Author: Jake
+ */ 
+
+#include "ringbuffer.h"
+
+uint8_t rb_init(ringbuffer_t *rb){
+	rb->size = RINGBUFFER_SIZE; // stuck with this, due to not having malloc, wall of skill
+	//rb->buffer = malloc(size);
+	rb_reset(rb);
+	return 1;
+}
+
+uint8_t rb_reset(ringbuffer_t *rb){
+	if(rb){
+		rb->head = 0;
+		rb->tail = 0;
+		return 1;
+	} else {
+		return 0;
+	}
+}
+
+uint8_t rb_empty(ringbuffer_t *rb){
+	return (rb->head == rb->tail);
+}
+
+uint8_t rb_full(ringbuffer_t *rb){
+	return ((rb->head + 1) % rb->size) == rb->tail;
+}
+
+uint8_t rb_freespace(ringbuffer_t *rb){
+	if(rb->head >= rb->tail){
+		return rb->size - (rb->head - rb->tail);
+	} else {
+		return rb->tail - rb->head - 1;
+	}
+}
+
+uint8_t rb_putchar(ringbuffer_t *rb, uint8_t data){
+	rb->buffer[rb->head] = data;
+	rb->head = (rb->head + 1) % rb->size; // increment and loop about
+	return 1;
+}
+
+uint8_t rb_putdata(ringbuffer_t *rb, uint8_t *data, uint8_t size){
+	if(rb_freespace(rb) >= size){
+		return 0;
+	} else {
+		uint8_t i = 0;
+		while(i < size){
+			rb_putchar(rb, data[i]);
+			i ++;
+		}
+		return 1;
+	}
+}
+
+uint8_t rb_get(ringbuffer_t *rb){
+	uint8_t data = rb->buffer[rb->tail];
+	rb->tail = (rb->tail + 1) % rb->size;
+	return data;
+}
+
diff --git a/embedded/mkrouter-v04/mkrouter-v04/src/ringbuffer.h b/embedded/mkrouter-v04/mkrouter-v04/src/ringbuffer.h
new file mode 100644
index 0000000..9e27fd5
--- /dev/null
+++ b/embedded/mkrouter-v04/mkrouter-v04/src/ringbuffer.h
@@ -0,0 +1,43 @@
+/*
+ * ringbuffer.h
+ *
+ * Created: 2/7/2018 11:39:54 AM
+ *  Author: Jake
+ */ 
+
+#ifndef RINGBUFFER_H_
+#define RINGBUFFER_H_
+
+/*
+a ringbuffer,
+s/o https://github.com/dhess/c-ringbuf
+s/o https://embeddedartistry.com/blog/2017/4/6/circular-buffers-in-cc
+s/o https://www.downtowndougbrown.com/2013/01/microcontrollers-interrupt-safe-ring-buffers/
+*/
+
+#include <stdlib.h> // for size_t
+#include <asf.h>
+
+#define RINGBUFFER_SIZE 256
+
+typedef struct{
+	uint8_t buffer[256]; // static! big enough
+	size_t head;
+	size_t tail;
+	size_t size;
+} ringbuffer_t;
+
+uint8_t rb_init(ringbuffer_t *rb);
+
+uint8_t rb_reset(ringbuffer_t *rb);
+
+uint8_t rb_empty(ringbuffer_t *rb);
+uint8_t rb_full(ringbuffer_t *rb);
+uint8_t rb_freespace(ringbuffer_t *rb);
+
+uint8_t rb_putchar(ringbuffer_t *rb, uint8_t data);
+uint8_t rb_putdata(ringbuffer_t *rb, uint8_t *data, uint8_t size);
+
+uint8_t rb_get(ringbuffer_t *rb);
+
+#endif /* RINGBUFFER_H_ */
\ No newline at end of file
diff --git a/embedded/mkrouter-v04/mkrouter-v04/src/uartport.c b/embedded/mkrouter-v04/mkrouter-v04/src/uartport.c
new file mode 100644
index 0000000..2582891
--- /dev/null
+++ b/embedded/mkrouter-v04/mkrouter-v04/src/uartport.c
@@ -0,0 +1,81 @@
+/*
+ * uartport.c
+ *
+ * Created: 2/22/2018 11:17:00 AM
+ *  Author: Jake
+ */ 
+
+#include "uartport.h"
+
+uartport_t uart_new(Uart *com, Pio *port, uint32_t pinrx, uint32_t pintx, ringbuffer_t *rbrx, ringbuffer_t *rbtx){
+	uartport_t uart;
+	
+	uart.com = com;
+	uart.port = port;
+	
+	uart.pinrx = pinrx;
+	uart.pinrx_bm = 1 << pinrx;
+	uart.pintx = pintx;
+	uart.pintx_bm = 1 << pintx;
+	
+	uart.rbrx = rbrx;
+	uart.rbtx = rbtx;
+	
+	return uart;
+}
+
+void uart_init(uartport_t *uart, uint32_t baud){
+	// PIO disable
+	uart->port->PIO_PDR = uart->pinrx_bm | uart->pintx_bm;
+	
+	// abcdsr (global, do later)
+	
+	// UART Registers
+	// mode register
+	uart->com->UART_MR = UART_MR_BRSRCCK_PERIPH_CLK | UART_MR_CHMODE_NORMAL | UART_MR_PAR_NO | UART_MR_FILTER_DISABLED;
+	// baud: freq ?
+	uart->com->UART_BRGR = baud;
+	// channel enable
+	uart->com->UART_CR = UART_CR_TXEN | UART_CR_RXEN;
+	// interrupt enable (rx only, tx on data)
+	uart->com->UART_IER = UART_IER_RXRDY;
+	
+	rb_reset(uart->rbrx);
+	rb_reset(uart->rbtx);
+}
+
+void uart_sendchar_polled(uartport_t *uart, uint8_t data){
+	while(!(uart->com->UART_SR & UART_SR_TXRDY));
+	uart->com->UART_THR = data;
+}
+
+void uart_sendchar_buffered(uartport_t *uart, uint8_t data){
+	rb_putchar(uart->rbtx, data);
+	uart->com->UART_IER = UART_IER_TXRDY;
+}
+
+void uart_sendchars_buffered(uartport_t *uart, uint8_t *data, uint8_t length){
+	rb_putdata(uart->rbtx, data, length);
+	uart->com->UART_IER = UART_IER_TXRDY;
+}
+
+void uart_handler(uartport_t *uart){
+	if(uart->com->UART_SR & UART_SR_RXRDY){
+		uart_rxhandler(uart);
+	}
+	if((uart->com->UART_SR & UART_SR_TXRDY) && (uart->com->UART_IMR & UART_IMR_TXRDY)){
+		uart_txhandler(uart);
+	}
+}
+
+void uart_rxhandler(uartport_t *uart){
+	rb_putchar(uart->rbrx, uart->com->UART_RHR);
+}
+
+void uart_txhandler(uartport_t *uart){
+	if(!rb_empty(uart->rbtx)){
+		uart->com->UART_THR = rb_get(uart->rbtx); // transmit if non-empty
+	} else {
+		uart->com->UART_IDR = UART_IDR_TXRDY; // or turn this interrupt off
+	}
+}
\ No newline at end of file
diff --git a/embedded/mkrouter-v04/mkrouter-v04/src/uartport.h b/embedded/mkrouter-v04/mkrouter-v04/src/uartport.h
new file mode 100644
index 0000000..d38ecd0
--- /dev/null
+++ b/embedded/mkrouter-v04/mkrouter-v04/src/uartport.h
@@ -0,0 +1,45 @@
+/*
+ * uartport.h
+ *
+ * Created: 2/22/2018 11:16:41 AM
+ *  Author: Jake
+ */ 
+
+
+#ifndef UARTPORT_H_
+#define UARTPORT_H_
+
+#include <asf.h>
+#include "ringbuffer.h"
+
+#define UART_IS_PERIPHERAL_A 0x01
+#define UART_IS_PERIPHERAL_B 0x02
+#define UART_IS_PERIPHERAL_C 0x03
+#define UART_IS_PERIPHERAL_D 0x04
+
+typedef struct{
+	Uart *com;
+	Pio *port;
+		
+	uint32_t pinrx;
+	uint32_t pinrx_bm;
+	uint32_t pintx;
+	uint32_t pintx_bm;
+	
+	ringbuffer_t *rbrx;
+	ringbuffer_t *rbtx;
+}uartport_t;
+
+uartport_t uart_new(Uart *uart, Pio *port, uint32_t pinrx, uint32_t pintx, ringbuffer_t *rbrx, ringbuffer_t *rbtx);
+
+void uart_init(uartport_t *uart, uint32_t baud);
+
+void uart_sendchar_polled(uartport_t *uart, uint8_t data);
+void uart_sendchar_buffered(uartport_t *uart, uint8_t data);
+void uart_sendchars_buffered(uartport_t *uart, uint8_t *data, uint8_t length);
+
+void uart_handler(uartport_t *uart);
+void uart_rxhandler(uartport_t *uart);
+void uart_txhandler(uartport_t *uart);
+
+#endif /* UARTPORT_H_ */
\ No newline at end of file
-- 
GitLab