From 4eba831add4349debdf34c887b246263cfeaea4f Mon Sep 17 00:00:00 2001
From: Jake <jake.read@cba.mit.edu>
Date: Fri, 18 May 2018 18:16:48 -0400
Subject: [PATCH] ring test all uart ports

---
 embedded/mkrouter-v06/mkrouter-v06/hardware.h |   2 +
 embedded/mkrouter-v06/mkrouter-v06/main.c     | 121 +++++++++++++++---
 2 files changed, 105 insertions(+), 18 deletions(-)

diff --git a/embedded/mkrouter-v06/mkrouter-v06/hardware.h b/embedded/mkrouter-v06/mkrouter-v06/hardware.h
index 4195160..1bddc13 100644
--- a/embedded/mkrouter-v06/mkrouter-v06/hardware.h
+++ b/embedded/mkrouter-v06/mkrouter-v06/hardware.h
@@ -27,6 +27,8 @@
 #define HARDWARE_ON_PERIPHERAL_C 0x2
 #define HARDWARE_ON_PERIPHERAL_D 0x3
 
+#define BAUD_SYSTEM 63018 
+
 /* USB PINS
 
 USBDM		PA24	USB
diff --git a/embedded/mkrouter-v06/mkrouter-v06/main.c b/embedded/mkrouter-v06/mkrouter-v06/main.c
index 5df55ee..be26e16 100644
--- a/embedded/mkrouter-v06/mkrouter-v06/main.c
+++ b/embedded/mkrouter-v06/mkrouter-v06/main.c
@@ -73,46 +73,74 @@ void uarts_init(void){
 	// don't forget to also add the handler
 	NVIC_EnableIRQ(SERCOM0_0_IRQn);
 	NVIC_EnableIRQ(SERCOM0_2_IRQn);
-	
 	// init rbs
 	rb_init(&up0rbrx);
 	rb_init(&up0rbtx);
-	
 	// init uart 
 	up0 = uart_new(SERCOM0, &PORT->Group[0], &up0rbrx, &up0rbtx, 5, 4);
-	MCLK->APBAMASK.reg |= MCLK_APBAMASK_SERCOM0;
-	uart_init(&up0, 7, SERCOM0_GCLK_ID_CORE, 63018, HARDWARE_ON_PERIPHERAL_D);
-	
+	MCLK->APBAMASK.bit.SERCOM0_ = 1;
+	uart_init(&up0, 7, SERCOM0_GCLK_ID_CORE, BAUD_SYSTEM, HARDWARE_ON_PERIPHERAL_D);
 	
 	
+	// handlers
+	NVIC_EnableIRQ(SERCOM1_0_IRQn);
+	NVIC_EnableIRQ(SERCOM1_2_IRQn);
 	// init rbs
 	rb_init(&up1rbrx);
 	rb_init(&up1rbtx);
+	// init uart
+	up1 = uart_new(SERCOM1, &PORT->Group[0], &up1rbrx, &up1rbtx, 1, 0);
+	MCLK->APBAMASK.bit.SERCOM1_ = 1;
+	uart_init(&up1, 7, SERCOM1_GCLK_ID_CORE, BAUD_SYSTEM, HARDWARE_ON_PERIPHERAL_D);
 	
 	
-	
+	// handlers
+	NVIC_EnableIRQ(SERCOM2_0_IRQn);
+	NVIC_EnableIRQ(SERCOM2_2_IRQn);
 	// init rbs
 	rb_init(&up2rbrx);
 	rb_init(&up2rbtx);
+	// init uart
+	up2 = uart_new(SERCOM2, &PORT->Group[0], &up2rbrx, &up2rbtx, 8, 9);
+	MCLK->APBBMASK.bit.SERCOM2_ = 1;
+	uart_init(&up2, 7, SERCOM2_GCLK_ID_CORE, BAUD_SYSTEM, HARDWARE_ON_PERIPHERAL_D);
 	
 	
-	
-	
+	// handlers
+	NVIC_EnableIRQ(SERCOM3_0_IRQn);
+	NVIC_EnableIRQ(SERCOM3_2_IRQn);
 	// init rbs
 	rb_init(&up3rbrx);
 	rb_init(&up3rbtx);
+	// init uart
+	up3 = uart_new(SERCOM3, &PORT->Group[0], &up3rbrx, &up3rbtx, 16, 17);
+	MCLK->APBBMASK.bit.SERCOM3_ = 1;
+	uart_init(&up3, 7, SERCOM3_GCLK_ID_CORE, BAUD_SYSTEM, HARDWARE_ON_PERIPHERAL_D);
 	
 	
-	
-	
+	// handlers
+	NVIC_EnableIRQ(SERCOM4_0_IRQn);
+	NVIC_EnableIRQ(SERCOM4_2_IRQn);
 	// init rbs
 	rb_init(&up4rbrx);
 	rb_init(&up4rbtx);
+	// init uart
+	up4 = uart_new(SERCOM4, &PORT->Group[0], &up4rbrx, &up4rbtx, 12, 13);
+	MCLK->APBDMASK.bit.SERCOM4_ = 1;
+	uart_init(&up4, 7, SERCOM4_GCLK_ID_CORE, BAUD_SYSTEM, HARDWARE_ON_PERIPHERAL_D);
 	
 	
+	// handlers
+	NVIC_EnableIRQ(SERCOM5_0_IRQn);
+	NVIC_EnableIRQ(SERCOM5_2_IRQn);
 	// init rbs
 	rb_init(&up5rbrx);
 	rb_init(&up5rbtx);
+	// uart init
+	up5 = uart_new(SERCOM5, &PORT->Group[0], &up5rbrx, &up5rbtx, 22, 23);
+	MCLK->APBDMASK.bit.SERCOM5_ = 1;
+	uart_init(&up5, 7, SERCOM5_GCLK_ID_CORE, BAUD_SYSTEM, HARDWARE_ON_PERIPHERAL_D);
+	
 	
 	// now pack all into ups
 	ups[0] = &up0;
@@ -148,26 +176,43 @@ int main(void)
 	// a ticker to look for hangouts
 	SysTick_Config(8000000);
 
-    /* Replace with your application code */
+	uint8_t testUart[3] = {12,24,48};
+
     while (1) 
     {
 		// waits for config to config
 		if(pCdc->IsConfigured(pCdc) != 0){
 			main_b_cdc_enable = true;
 		}
-		
-		uint8_t testUart[3] = {12,24,48};
-		
+				
 		// if config is config, and port is opened
 		if(main_b_cdc_enable){
 			sam_ba_monitor_init(SAM_BA_INTERFACE_USBCDC);
 			// loops on this
 			while(1){
 				sam_ba_monitor_run();
-				for(int i = 0; i < NUM_UPS; i ++){	
-					while(!rb_empty(up0.rbrx)){
-						uart_sendchar_buffered(&up0, rb_get(up0.rbrx));
-					}
+				while(!rb_empty(up0.rbrx)){
+					uart_sendchar_buffered(&up0, rb_get(up0.rbrx));
+				}
+				
+				while(!rb_empty(up1.rbrx)){
+					uart_sendchar_buffered(&up1, rb_get(up1.rbrx));
+				}
+				
+				while(!rb_empty(up2.rbrx)){
+					uart_sendchar_buffered(&up2, rb_get(up2.rbrx));
+				}
+				
+				while(!rb_empty(up3.rbrx)){
+					uart_sendchar_buffered(&up3, rb_get(up3.rbrx));
+				}
+				
+				while(!rb_empty(up4.rbrx)){
+					uart_sendchar_buffered(&up4, rb_get(up4.rbrx));
+				}
+				
+				while(!rb_empty(up5.rbrx)){
+					uart_sendchar_buffered(&up5, rb_get(up5.rbrx));
 				}
 				//uart_sendchars_buffered(&up0, &testUart, 3);
 				// apaport loops
@@ -206,4 +251,44 @@ void SERCOM0_0_Handler(void){
 
 void SERCOM0_2_Handler(void){
 	uart_rxhandler(&up0);
+}
+
+void SERCOM1_0_Handler(void){
+	uart_txhandler(&up1);
+}
+
+void SERCOM1_2_Handler(void){
+	uart_rxhandler(&up1);
+}
+
+void SERCOM2_0_Handler(void){
+	uart_txhandler(&up2);
+}
+
+void SERCOM2_2_Handler(void){
+	uart_rxhandler(&up2);
+}
+
+void SERCOM3_0_Handler(void){
+	uart_txhandler(&up3);
+}
+
+void SERCOM3_2_Handler(void){
+	uart_rxhandler(&up3);
+}
+
+void SERCOM4_0_Handler(void){
+	uart_txhandler(&up4);
+}
+
+void SERCOM4_2_Handler(void){
+	uart_rxhandler(&up4);
+}
+
+void SERCOM5_0_Handler(void){
+	uart_txhandler(&up5);
+}
+
+void SERCOM5_2_Handler(void){
+	uart_rxhandler(&up5);
 }
\ No newline at end of file
-- 
GitLab