From 35abaa84b074478f6d5ebd2f632ce38f968fc074 Mon Sep 17 00:00:00 2001
From: Jake <jake.read@cba.mit.edu>
Date: Fri, 23 Feb 2018 08:48:37 -0500
Subject: [PATCH] unit test all uart lines

---
 circuit/mkrouter/eagle.epf                    |  60 ++++++------
 .../mkrouter-v04/.vs/mkrouter-v04/v14/.atsuo  | Bin 50688 -> 78336 bytes
 .../mkrouter-v04/mkrouter-v04/src/hardware.h  |  13 +++
 embedded/mkrouter-v04/mkrouter-v04/src/main.c |  89 +++++++++++++++---
 .../mkrouter-v04/mkrouter-v04/src/uartport.c  |  12 ++-
 .../mkrouter-v04/mkrouter-v04/src/uartport.h  |  10 +-
 6 files changed, 133 insertions(+), 51 deletions(-)

diff --git a/circuit/mkrouter/eagle.epf b/circuit/mkrouter/eagle.epf
index 5b80877..f5771b3 100644
--- a/circuit/mkrouter/eagle.epf
+++ b/circuit/mkrouter/eagle.epf
@@ -18,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="Board Editor"
-Loc="0 0 1919 1016"
+Type="Schematic Editor"
+Loc="-1928 -8 -9 1008"
 State=1
-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"
+Number=1
+File="mkrouter.sch"
+View="32.8807 29.5621 186.974 128.623"
+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"
@@ -39,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=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
@@ -61,22 +61,24 @@ SwapLevel=0
 ArcDirection=0
 AddLevel=2
 PadsSameType=0
-Layer=48
+Layer=91
+Views=" 1: 32.8807 29.5621 186.974 128.623"
+Sheet="1"
 
 [Win_2]
-Type="Schematic Editor"
-Loc="-8 -8 1911 1008"
+Type="Board Editor"
+Loc="0 0 1919 1016"
 State=1
-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"
+Number=2
+File="mkrouter.brd"
+View="-18.1943 -5.95386 106.38 63.5619"
+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"
@@ -85,14 +87,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
@@ -107,9 +109,7 @@ SwapLevel=0
 ArcDirection=0
 AddLevel=2
 PadsSameType=0
-Layer=91
-Views=" 1: -38.8736 18.8994 146.038 137.772"
-Sheet="1"
+Layer=48
 
 [Win_3]
 Type="Control Panel"
diff --git a/embedded/mkrouter-v04/.vs/mkrouter-v04/v14/.atsuo b/embedded/mkrouter-v04/.vs/mkrouter-v04/v14/.atsuo
index 07adfb5871f44f430c24eb74dfa487801033f9c2..702c75e579fec4c716f781747136091ed6bb2d83 100644
GIT binary patch
delta 2953
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

delta 2181
zcmZp8!qU*gJV8g1kpT$^Ffgz&Fff3`{{8>|A0)%LF>pQO!~&K{Og@aNlNFid`6e7*
zR?N8OGNT3q1A~Ly<SM2r#)`>bnf!Sa7#J9o85kJ;|NsAg@<la`$ra2#lU;-i7|kYs
zWmfm)hf0B@L8gOf5Eg@q3o|e<a4|42h%zuRNH8!kC^0ZFNHQ=m2r)1)2rw`(s53Ay
zh%hiPNHH)l{F|64&C1Kbz#u*`P*_%xfq_Ajfq_Abfq_Arfq_AXfq_Anfq_Affq@}m
z@=h*k0W$^$26F}m1`7rT21^D8hRIL3Tw=W$7#MsQ7#MsR7#RE*7#RE+7#IQ=7#IQ>
z7#M;W7#M;<7XAPKKa_!iA&h~6A)JAMA%cN{A(DZCA&P;4A)0}KA%=m0A(nxGA&!B8
zAs(tek%56haAIIJBFG*rS%e5OS#Xe*5DYSQd6XdIh6VvB$Uwmd3LXxqjXcmGgasW)
z4Ieb<Kx_~enHZ=H4l>Tc9AsQ`L_nScVdU7Hyn#z%@)a%t9<)ew-~g!v;mJDOOBnx6
zOw^ymQ^9nOX>t{h7Z1qWEYP5td{Iq>F=X;ro?s4HWFgbZrM!N;44||GN@yT0Af=op
z3=9mQ;ANQnmvcV(ZrTEJlRS0Y#Aq`4tKd0aMkWRZ23V#6xs?@^FrQ5RDda!dLr8}e
zlq^3@u9WrWQG@0Sn5S4lDfHUppORj@jGR#a!Q>{FNCohKGCwRWflQwKMJj*?l<z?K
z5}{H$VDb?rgUMf{btWs=DNjDkWVpG+u7`1xf-@tCGr2^*Z!(jJ6OTLt0|O`-!gMlf
zOfD7i<7EW#S&<@P@)wZ{laGklOj2^;0VQE}BsoUo&7}tZj69&^u7V`a3CgWcKqb`V
z0{;oq?<+A1PhMb>An+{TK+@Q#-qa(dWJh3rYS83~z7dl%j3Xu=P&45MB@~brPzmtg
z+=Z7>25KV6MPLt?SOoBZ3L=mI2!jOK^g$(^$K+oYejK0z2qr$c#4>;fR2qRwCzv1`
zs33}Cn*2-tBrhW<=s*P$OmgxUx%0f>VhUCmg3RYBU|?W)0Cm^&iK2{2(>p~Og(jD%
z`AjbM?}hj+L03lb-KB$kyLwY^O<$>>aDQXCKf}a8;mHd$PfV`aA|d$CENS1Q<vZ)c
zlD+Hh%uCn?m6VyJePD8f3ZI}>d`P{}yIIo{ez!2}{25>cmFJs$K-FQAhzlu^b)J_I
zRK$XO1;QXdO#Wh8GP&k}#^woH?-+$L7(SUy(YbkBI(2ezz7NNfN~g&abPO0bO+Kiy
zd~${jk4o{UrDt|s={|Y6SpIOM*ZjjE&x4Et;d9Ik3_VN?43lT*YB27be9$(2vVzcJ
zVw1fvB-w*1Cy-$vw~?3ZLGg$!*>i(ZD7a)`V3<Bpi7|0=g3$tI%yj4ICo;KURm9}D
ztzw%eZOP+Z<iavZ%9)gm2TCKLQXl4z$t94C#|n1A<e$Rcq(mB?95%UBseAHGHJ8ap
o?DkBua3(ohc=3RWBebmH&kL@pk@E%*C`{u(#TNqu!=ivP0E=1WCjbBd

diff --git a/embedded/mkrouter-v04/mkrouter-v04/src/hardware.h b/embedded/mkrouter-v04/mkrouter-v04/src/hardware.h
index f35e5f0..e1c1883 100644
--- a/embedded/mkrouter-v04/mkrouter-v04/src/hardware.h
+++ b/embedded/mkrouter-v04/mkrouter-v04/src/hardware.h
@@ -29,10 +29,23 @@ pin_t *lights[] = {&np1stlr, &np1stlb, &np2stlr, &np2stlb, &np3stlr, &np3stlb, &
 // ringbuffers
 ringbuffer_t np1rbrx;
 ringbuffer_t np1rbtx;
+ringbuffer_t np2rbrx;
+ringbuffer_t np2rbtx;
+ringbuffer_t np3rbrx;
+ringbuffer_t np3rbtx;
+ringbuffer_t np4rbrx;
+ringbuffer_t np4rbtx;
+ringbuffer_t np5rbrx;
+ringbuffer_t np5rbtx;
 
 // uartports
 uartport_t up1;
 uartport_t up2;
+uartport_t up3;
+uartport_t up4;
+uartport_t up5;
+
+uartport_t *ups[] = {&up1, &up2, &up3, &up4, &up5};
 
 
 #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 9bd0594..aa9957c 100644
--- a/embedded/mkrouter-v04/mkrouter-v04/src/main.c
+++ b/embedded/mkrouter-v04/mkrouter-v04/src/main.c
@@ -42,8 +42,10 @@ void setupperipherals(void){
 	
 	// start uart clocks
 	PMC->PMC_PCER0 = 1 << ID_UART0;
-	//PMC->PMC_PCER0 = 1 << ID_UART1;
-	//PMC->PMC_PCER1 = 1 << (ID_UART2 - 32);
+	PMC->PMC_PCER0 = 1 << ID_UART1;
+	PMC->PMC_PCER1 = 1 << (ID_UART2 - 32);
+	PMC->PMC_PCER1 = 1 << (ID_UART3 - 32);
+	PMC->PMC_PCER1 = 1 << (ID_UART4 - 32);
 }
 
 void setupinterrupts(void){
@@ -51,6 +53,26 @@ void setupinterrupts(void){
 	NVIC_ClearPendingIRQ(UART0_IRQn);
 	NVIC_SetPriority(UART0_IRQn, 8);
 	NVIC_EnableIRQ(UART0_IRQn);
+	
+	NVIC_DisableIRQ(UART1_IRQn);
+	NVIC_ClearPendingIRQ(UART1_IRQn);
+	NVIC_SetPriority(UART1_IRQn, 8);
+	NVIC_EnableIRQ(UART1_IRQn);
+	
+	NVIC_DisableIRQ(UART2_IRQn);
+	NVIC_ClearPendingIRQ(UART2_IRQn);
+	NVIC_SetPriority(UART2_IRQn, 8);
+	NVIC_EnableIRQ(UART2_IRQn);
+	
+	NVIC_DisableIRQ(UART3_IRQn);
+	NVIC_ClearPendingIRQ(UART3_IRQn);
+	NVIC_SetPriority(UART3_IRQn, 8);
+	NVIC_EnableIRQ(UART3_IRQn);
+	
+	NVIC_DisableIRQ(UART4_IRQn);
+	NVIC_ClearPendingIRQ(UART4_IRQn);
+	NVIC_SetPriority(UART4_IRQn, 8);
+	NVIC_EnableIRQ(UART4_IRQn);
 }
 
 void lightsetup(void){
@@ -98,28 +120,52 @@ int main (void)
 	
 	lightsetup();
 	
+	// RBs 1
 	rb_init(&np1rbrx);
-	rb_init(&np1rbtx);
-	
+	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);
+	uart_init(&up1, 81, UART_IS_PERIPHERAL_A);
 	
-	/*
+	// RBs 2
+	rb_init(&np2rbrx);
+	rb_init(&np2rbtx);
 	// 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 :|
-	*/
+	up2 = uart_new(UART1, PIOA, 5, 4, &np2rbrx, &np2rbtx);
+	uart_init(&up2, 81, UART_IS_PERIPHERAL_C); // 81 for FTDI 115200 :|
+
+	// RBs 3
+	rb_init(&np3rbrx);
+	rb_init(&np3rbtx);
+	// UP3 on UART2, RX 25 TX 26 on PIOD
+	up3 = uart_new(UART2, PIOD, 25, 26, &np3rbrx, &np3rbtx);
+	uart_init(&up3, 81, UART_IS_PERIPHERAL_C);
+	
+	// RBs 4
+	rb_init(&np4rbrx);
+	rb_init(&np4rbtx);
+	// UP4 on UART3, RX 28 TX 30 on PIOD
+	up4 = uart_new(UART3, PIOD, 28, 30, &np4rbrx, &np4rbtx);
+	uart_init(&up4, 81, UART_IS_PERIPHERAL_A);
+	
+	// RBs 5 
+	rb_init(&np5rbrx);
+	rb_init(&np5rbtx);
+	// UP5 on UART4, RX 18 TX 19 on PIOD
+	up5 = uart_new(UART4, PIOD, 18, 19, &np5rbrx, &np5rbtx);
+	uart_init(&up5, 81, UART_IS_PERIPHERAL_C);
+
+	// currently: unit test, setup ABCDSR registers for uarts, do the main while loop below
 	
 	while(1){
 		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));
+		for(int i = 0; i < 5; i ++){
+			if(!rb_empty(ups[i]->rbrx)){
+				uart_sendchars_buffered(ups[i], hello, 5);
+				uart_sendchar_buffered(ups[i], rb_get(ups[i]->rbrx));
+			}	
 		}
-		*/
 		delay_ms(75);
 	}
 }
@@ -128,3 +174,18 @@ void UART0_Handler(void){
 	uart_handler(&up1);
 }
 
+void UART1_Handler(void){
+	uart_handler(&up2);
+}
+
+void UART2_Handler(void){
+	uart_handler(&up3);
+}
+
+void UART3_Handler(void){
+	uart_handler(&up4);
+}
+
+void UART4_Handler(void){
+	uart_handler(&up5);
+}
\ 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
index 2582891..e67fe54 100644
--- a/embedded/mkrouter-v04/mkrouter-v04/src/uartport.c
+++ b/embedded/mkrouter-v04/mkrouter-v04/src/uartport.c
@@ -24,11 +24,19 @@ uartport_t uart_new(Uart *com, Pio *port, uint32_t pinrx, uint32_t pintx, ringbu
 	return uart;
 }
 
-void uart_init(uartport_t *uart, uint32_t baud){
+void uart_init(uartport_t *uart, uint32_t baud, uint32_t abcdsr){
 	// PIO disable
 	uart->port->PIO_PDR = uart->pinrx_bm | uart->pintx_bm;
 	
-	// abcdsr (global, do later)
+	// abcdsr A[0,0], B[1,0], C[0,1], D[1,1]
+	if(abcdsr == UART_IS_PERIPHERAL_B){
+		uart->port->PIO_ABCDSR[0] |= uart->pinrx_bm | uart->pintx_bm;
+	} else if (abcdsr == UART_IS_PERIPHERAL_C || abcdsr == UART_IS_PERIPHERAL_D){
+		uart->port->PIO_ABCDSR[1] |= uart->pinrx_bm | uart->pintx_bm;
+	}
+	if (abcdsr == UART_IS_PERIPHERAL_D){
+		uart->port->PIO_ABCDSR[0] |= uart->pinrx_bm | uart->pintx_bm;
+	}
 	
 	// UART Registers
 	// mode register
diff --git a/embedded/mkrouter-v04/mkrouter-v04/src/uartport.h b/embedded/mkrouter-v04/mkrouter-v04/src/uartport.h
index d38ecd0..c4c81e2 100644
--- a/embedded/mkrouter-v04/mkrouter-v04/src/uartport.h
+++ b/embedded/mkrouter-v04/mkrouter-v04/src/uartport.h
@@ -12,10 +12,10 @@
 #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
+#define UART_IS_PERIPHERAL_A 0x00
+#define UART_IS_PERIPHERAL_B 0x01
+#define UART_IS_PERIPHERAL_C 0x02
+#define UART_IS_PERIPHERAL_D 0x03
 
 typedef struct{
 	Uart *com;
@@ -32,7 +32,7 @@ typedef struct{
 
 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_init(uartport_t *uart, uint32_t baud, uint32_t abcdsr);
 
 void uart_sendchar_polled(uartport_t *uart, uint8_t data);
 void uart_sendchar_buffered(uartport_t *uart, uint8_t data);
-- 
GitLab