Multi COM Nucleo board test

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
CANGuru
Date:
Thu Dec 20 11:46:53 2018 +0000
Commit message:
For Multi RS232 board for Nucleo F767

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /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;
+            };
+        
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Thu Dec 20 11:46:53 2018 +0000
@@ -0,0 +1,1 @@
+https://mbed.org/users/mbed_official/code/mbed/builds/86740a56073b
\ No newline at end of file