Multi COM Nucleo board test

Dependencies:   mbed

Revision:
0:c206e1eca99c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Dec 20 11:46:53 2018 +0000
@@ -0,0 +1,319 @@
+#include "mbed.h"
+
+DigitalOut myled(LED1);
+DigitalOut tx2led(PG_0);
+DigitalOut tx5led(PG_1);
+
+DigitalOut pd0(PD_0);
+DigitalOut pd1(PD_1);
+DigitalOut ph0(PH_0);
+DigitalOut ph1(PH_1);
+
+Serial pc(USBTX, USBRX); // tx, rx
+
+Ticker second;
+
+RawSerial U8(PE_1,PE_0); // 460K Fast
+RawSerial U6(PG_14,PG_9); // 460K Fast
+RawSerial U5(PC_12,PD_2); // 460K Fast
+RawSerial U3(PB_10,PB_11); // 115K Slow
+RawSerial U2(PD_5,PD_6); // 460K Fast
+
+char mess2[100]={"***T2_UART2______*_1____012345________$!"};
+char mess5[100]={"***T5_UART5______*__2___012345________$!"};
+char mess6[100]={"***T6_UART6______*___3__012345________$!"};
+char mess8[100]={"***T8_UART8______*____4_012345________$!"};
+char mess3[200]={"***T3_UART3_115k_*_DGPS_0123456789ABCDEF***T3_UART3_115k_*_DGPS_0123456789ABCDEF***T3_UART3_115k_*_DGPS_0123456789ABCDEF***T3_UART3_115k_*_DGPS_0123456789ABCDEF***T3_UART3_115k_*_DGPS_0123456789ABC\r\n"};
+
+unsigned char rx2[100];
+unsigned char rx5[100];
+
+unsigned char rcv2[100];
+unsigned char rcv5[100];
+
+
+int u8count;
+int u5count;
+int u6count;
+int u3count;
+int u2count;
+int uscount;
+
+int u2delay;
+int u5delay;
+
+uint16_t csum2;
+uint16_t csum5;
+
+uint16_t drop2;
+uint16_t drop5;
+
+bool tick8=0;
+bool tick5=0;
+bool tick6=0;
+bool tick3=0;
+bool tick2=0;
+
+char *u8pointer;
+char *u5pointer;
+char *u6pointer;
+char *u3pointer;
+char *u2pointer;
+
+bool u2ready;
+bool u5ready;
+
+bool u2txready;
+bool u5txready;
+
+uint32_t basetime; // Base timer in milliseconds
+
+uint32_t lastrx2acttime,lastrx5acttime; // Base timer in milliseconds
+uint32_t lastrx2time,lastrx5time; // Base timer in milliseconds
+
+uint32_t tx2time,tx5time; // Base timer in milliseconds
+
+char tempstr[20];
+
+uint8_t rogue2,rogue5;
+
+#define TXRATE 20
+
+void flip(void) {
+
+    if (uscount < 999) 
+        {
+        uscount++;
+        }
+        else 
+        {
+        uscount=0;
+
+        //PPS=1; // 1 for PPS ON
+        }
+        
+    basetime++; //Increment base timer at 1ms rate.
+
+        if (uscount % TXRATE == 0) {
+            tx2time=basetime;
+            u2txready=1;}
+
+        if (uscount % TXRATE == 10) {
+                tx5time=basetime;
+                u5txready=1;
+                }
+                
+        if (uscount % 500 ==0){
+            //rogue2++;
+            //rogue5++;
+            }
+    
+    pd0=!pd0;
+}
+
+// UART2 character receive interrupt
+void rx2int(void){
+static unsigned char *rxpointer;
+static unsigned char count;
+unsigned char temp;
+unsigned char *source,*dest;
+    __disable_irq();
+    pd1=1;
+    
+        temp=U2.getc();
+        *rxpointer++=temp;
+        
+        if (temp=='!') {
+            *rxpointer=0;
+            source=rx2;
+            dest=rcv2;
+            while(*source)
+                *dest++=*source++;
+            //strcpy(rcv2,rx2);
+            u2ready=1;
+            rxpointer=rx2;
+            count=0;
+            }
+
+    pd1=0;
+
+    __enable_irq();
+
+    }
+
+// UART5 character receive interrupt
+void rx5int(void){
+static unsigned char *rxpointer;
+static unsigned char count;
+unsigned char temp;
+unsigned char *source,*dest;
+    __disable_irq();
+
+    pd1=1;
+        temp=U5.getc();
+        *rxpointer++=temp;
+        if (temp=='!') {
+            *rxpointer=0;
+            source=rx5;
+            dest=rcv5;
+            while(*source)
+                *dest++=*source++;
+//            strcpy(rcv5,rx5);
+            u5ready=1;
+            rxpointer=rx5;
+            }
+        pd1=0;
+    __enable_irq();
+
+}
+
+
+
+
+
+
+int main()
+{
+char tempstring[20];
+uint32_t txtime;  
+uint32_t timediff;  
+uint32_t tmpValue;
+  
+    U2.baud(115200);
+    U5.baud(115200);    
+    pc.baud(460800);
+
+    second.attach(&flip, 0.001); // 1ms ticks
+
+    u2count=40; 
+    u2pointer=mess2;
+    u5count=40; 
+    u5pointer=mess5;
+            
+    U2.attach(&rx2int,Serial::RxIrq);
+    U5.attach(&rx5int,Serial::RxIrq);
+
+    pc.printf("Start\r\n");
+    
+    rogue2=0;
+    rogue5=128;
+
+    while(1) {
+        myled = !myled;
+
+// Transmit U2 Message on UART2
+        if  (u2txready){
+                        u2txready=0;
+                        u2count=40;
+
+                        sprintf(tempstr,"%06d",tx2time);
+
+                        mess2[24]=tempstr[0];
+                        mess2[25]=tempstr[1];
+                        mess2[26]=tempstr[2];
+                        mess2[27]=tempstr[3];
+                        mess2[28]=tempstr[4];
+                        mess2[29]=tempstr[5];
+                        
+                        if (rogue2==0xff) rogue2=0x40;
+                        mess2[14]=rogue2++;
+                        //if (mess2[14]=='!')mess2[14]='*';
+                                                
+                        u2pointer=mess2;
+
+                        tx2led=1;
+                        /*
+                        while (u2count--)
+                            {
+                                U2.putc(*u2pointer++);
+                            }
+                            */
+                        U2.printf("%s",mess2);
+                        tx2led=0;
+                        }
+
+// Transmit U5 Message on UART5
+        if  (u5txready){
+                        u5txready=0;
+                        u5count=40;
+
+                        sprintf(tempstr,"%06d",tx5time);
+
+                        mess5[24]=tempstr[0];
+                        mess5[25]=tempstr[1];
+                        mess5[26]=tempstr[2];
+                        mess5[27]=tempstr[3];
+                        mess5[28]=tempstr[4];
+                        mess5[29]=tempstr[5];
+
+                        if (rogue5==0xff) rogue5=0x40;
+                        mess5[14]=rogue5++;
+                        //if (mess5[14]=='!')mess5[14]='*';
+                        
+                        u5pointer=mess5;
+                        tx5led=1;                        
+/*
+                        while (u5count--)
+                            {
+                                U5.putc(*u5pointer++);
+                            }
+*/
+                        U5.printf("%s",mess5);
+                        tx5led=0;
+                    }
+
+//Receive U5 message on U2        
+    if (u2ready){
+            ph0=1;
+            tempstring[0]=rcv2[24];
+            tempstring[1]=rcv2[25];
+            tempstring[2]=rcv2[26];
+            tempstring[3]=rcv2[27];
+            tempstring[4]=rcv2[28];
+            tempstring[5]=rcv2[29];
+            tempstring[6]=NULL;
+        
+            if (sscanf(tempstring,"%u",&tmpValue) == 1) {
+                    txtime = tmpValue;
+                    timediff=txtime-lastrx2time;
+                    lastrx2acttime=basetime-txtime;
+                }
+            if (timediff>TXRATE)drop2++;
+            pc.printf("_1__TR:%06d Tm:%06d Fl:%06d TD:%06d %03d\t\t%02X\r\n", basetime, txtime, lastrx2acttime, timediff, drop2,rogue2);
+            //pc.printf("%s TR:%06d Tm:%06d Fl:%06d TD:%06d %03d\r\n",rcv2, basetime, txtime, lastrx2acttime, timediff, drop2);
+                                
+            lastrx2time=txtime;        
+
+            u2ready=0;
+            ph0=0;
+            };
+
+//Receive U2 message on U5
+    if (u5ready){
+          ph1=1;
+            tempstring[0]=rcv5[24];
+            tempstring[1]=rcv5[25];
+            tempstring[2]=rcv5[26];
+            tempstring[3]=rcv5[27];
+            tempstring[4]=rcv5[28];
+            tempstring[5]=rcv5[29];
+            tempstring[6]=NULL;
+
+            if (sscanf(tempstring,"%u",&tmpValue) == 1) {
+                    txtime = tmpValue;
+                    timediff=txtime-lastrx5time;
+                    lastrx5acttime=basetime-txtime;
+                }
+
+            if (timediff>TXRATE)drop5++;
+            pc.printf("__2_TR:%06d Tm:%06d Fl:%06d TD:%06d    %03d\t%02X\r\n", basetime, txtime, lastrx5acttime, timediff, drop5,rogue5);
+            //pc.printf("%s TR:%06d Tm:%06d Fl:%06d TD:%06d %03d\r\n",rcv5, basetime, txtime, lastrx5acttime, timediff, drop5);
+
+            lastrx5time=txtime;        
+
+            u5ready=0;
+            ph1=0;
+            };
+        
+    }
+}