Test program running on MAX32625MBED. Control through USB Serial commands using a terminal emulator such as teraterm or putty.

Dependencies:   MaximTinyTester CmdLine MAX541 USBDevice

Revision:
87:4bc981dfd54b
Parent:
86:c116654dfa32
Child:
88:e4fd5033a55f
--- a/Test_Menu_MAX11043.cpp	Thu Feb 27 02:14:11 2020 +0000
+++ b/Test_Menu_MAX11043.cpp	Thu Feb 27 03:42:16 2020 +0000
@@ -109,12 +109,20 @@
 #define MYTIMEREVENTFLAG_ENABLE_SPI (1UL << 0)
 EventFlags Read4Command_Thread_event_flags;
 Thread Read4Command_Thread;
-int16_t adcX_MIN_SEEN_INIT_INT16_MAX = 0x7FFF; // INT16_MAX
-int16_t adcX_MAX_SEEN_INIT_INT16_MIN = 0x8000; // INT16_MIN
-int16_t adca_MIN_SEEN = adcX_MIN_SEEN_INIT_INT16_MAX;
-int16_t adca_MAX_SEEN = adcX_MAX_SEEN_INIT_INT16_MIN;
-int16_t adcb_MIN_SEEN = adcX_MIN_SEEN_INIT_INT16_MAX;
-int16_t adcb_MAX_SEEN = adcX_MAX_SEEN_INIT_INT16_MIN;
+int adca_newest = 0;
+int adcb_newest = 0;
+int adcc_newest = 0;
+int adcd_newest = 0;
+int adcX_MIN_SEEN_INIT_INT16_MAX = 0x7FFF; // INT16_MAX
+int adcX_MAX_SEEN_INIT_INT16_MIN = 0x8000; // INT16_MIN
+int adca_MIN_SEEN = adcX_MIN_SEEN_INIT_INT16_MAX;
+int adca_MAX_SEEN = adcX_MAX_SEEN_INIT_INT16_MIN;
+int adcb_MIN_SEEN = adcX_MIN_SEEN_INIT_INT16_MAX;
+int adcb_MAX_SEEN = adcX_MAX_SEEN_INIT_INT16_MIN;
+int adcc_MIN_SEEN = adcX_MIN_SEEN_INIT_INT16_MAX;
+int adcc_MAX_SEEN = adcX_MAX_SEEN_INIT_INT16_MIN;
+int adcd_MIN_SEEN = adcX_MIN_SEEN_INIT_INT16_MAX;
+int adcd_MAX_SEEN = adcX_MAX_SEEN_INIT_INT16_MIN;
 #endif // Use_Read4Command_Thread
 #if Use_Read4Command_Thread
 void Read4Command_Thread_handler()
@@ -154,12 +162,19 @@
         // post: g_MAX11043_device.adcd was updated
         //
         // TODO: capture min/max 2's complement value each channel
-        int16_t new_adca = g_MAX11043_device.adca;
-        int16_t new_adcb = g_MAX11043_device.adcb;
-        int16_t new_adcc = g_MAX11043_device.adcc;
-        int16_t new_adcd = g_MAX11043_device.adcd;
-        if (adca_MAX_SEEN < new_adca) {
-            adca_MAX_SEEN = new_adca;
+        // #define SIGN_EXTEND_INT16_VALUE(x) (((x)&(0x8000))?((x)-65536):(x))
+        // adca_newest = SIGN_EXTEND_INT16_VALUE(g_MAX11043_device.adca);
+        // adcb_newest = SIGN_EXTEND_INT16_VALUE(g_MAX11043_device.adcb);
+        // adcc_newest = SIGN_EXTEND_INT16_VALUE(g_MAX11043_device.adcc);
+        // adcd_newest = SIGN_EXTEND_INT16_VALUE(g_MAX11043_device.adcd);
+        adca_newest = g_MAX11043_device.adca; if (adca_newest & 0x8000) { adca_newest = adca_newest - 65536; }
+        adcb_newest = g_MAX11043_device.adcb; if (adcb_newest & 0x8000) { adcb_newest = adcb_newest - 65536; }
+        adcc_newest = g_MAX11043_device.adcc; if (adcc_newest & 0x8000) { adcc_newest = adcc_newest - 65536; }
+        adcd_newest = g_MAX11043_device.adcd; if (adcd_newest & 0x8000) { adcd_newest = adcd_newest - 65536; }
+        // 2020-02-26 this fails because using LDRHI instruction (unsigned comparison), must use signed instead.
+        // Try SIGN_EXTEND_INT16_VALUE to force signed comparison (ldrGE, ldrLT, ldrGT, ldrLE) instead of unsigned comparision (ldrHS, ldrLO, ldrHI, ldrLS)
+        if (adca_MAX_SEEN < adca_newest) {
+            adca_MAX_SEEN = adca_newest;
 #if MAX11043_ScopeTrigger_MAX32625MBED_D5
 // Diagnostic: Use MAX32625MBED pin D5 as DigitalOut EOC#-detected
             digitalInOut5.write(0); // ScopeTrigger
@@ -167,8 +182,8 @@
             digitalInOut5.write(1); // ScopeTrigger
 #endif // MAX11043_ScopeTrigger_MAX32625MBED_D5
         }
-        if (adca_MIN_SEEN > new_adca) {
-            adca_MIN_SEEN = new_adca;
+        if (adca_MIN_SEEN > adca_newest) {
+            adca_MIN_SEEN = adca_newest;
 #if MAX11043_ScopeTrigger_MAX32625MBED_D5
 // Diagnostic: Use MAX32625MBED pin D5 as DigitalOut EOC#-detected
             digitalInOut5.write(0); // ScopeTrigger
@@ -176,8 +191,8 @@
             digitalInOut5.write(1); // ScopeTrigger
 #endif // MAX11043_ScopeTrigger_MAX32625MBED_D5
         }
-        if (adcb_MAX_SEEN < new_adcb) {
-            adcb_MAX_SEEN = new_adcb;
+        if (adcb_MAX_SEEN < adcb_newest) {
+            adcb_MAX_SEEN = adcb_newest;
 #if MAX11043_ScopeTrigger_MAX32625MBED_D5
 // Diagnostic: Use MAX32625MBED pin D5 as DigitalOut EOC#-detected
             digitalInOut5.write(0); // ScopeTrigger
@@ -185,8 +200,8 @@
             digitalInOut5.write(1); // ScopeTrigger
 #endif // MAX11043_ScopeTrigger_MAX32625MBED_D5
         }
-        if (adcb_MIN_SEEN > new_adcb) {
-            adcb_MIN_SEEN = new_adcb;
+        if (adcb_MIN_SEEN > adcb_newest) {
+            adcb_MIN_SEEN = adcb_newest;
 #if MAX11043_ScopeTrigger_MAX32625MBED_D5
 // Diagnostic: Use MAX32625MBED pin D5 as DigitalOut EOC#-detected
             digitalInOut5.write(0); // ScopeTrigger
@@ -194,6 +209,8 @@
             digitalInOut5.write(1); // ScopeTrigger
 #endif // MAX11043_ScopeTrigger_MAX32625MBED_D5
         }
+        // TODO: compare adcc_newest, update MIN_SEEN MAX_SEEN
+        // TODO: compare adcd_newest, update MIN_SEEN MAX_SEEN
         // TODO: compare with thresholds, report if exceeded
         //
         // blocking delay time us_timestamp_t periodicInterruptTimer_interval_usec
@@ -612,24 +629,57 @@
                     cmdLine.serial().printf(" press X to stop...\r\n");
                     continue;
                 }
-                // display min/max limits
-                cmdLine.serial().printf(" adca_MIN_SEEN 0x%4.4x %d\r\n",
-                    (adca_MIN_SEEN & 0xFFFF), (adca_MIN_SEEN & 0xFFFF));
-                cmdLine.serial().printf("                                  adca_MAX_SEEN 0x%4.4x %d\r\n",
-                    (adca_MAX_SEEN & 0xFFFF), (adca_MAX_SEEN & 0xFFFF));
-                cmdLine.serial().printf(" adcb_MIN_SEEN 0x%4.4x %d\r\n",
-                    (adcb_MIN_SEEN & 0xFFFF), (adcb_MIN_SEEN & 0xFFFF));
-                cmdLine.serial().printf("                                  adcb_MAX_SEEN 0x%4.4x %d\r\n",
-                    (adcb_MAX_SEEN & 0xFFFF), (adcb_MAX_SEEN & 0xFFFF));
-                if (ch == 'D' || ch == 'd') {
-                    continue;
-                }
                 if (ch == 'R' || ch == 'r') {
                     // reset min/max limits
                     adca_MIN_SEEN = adcX_MIN_SEEN_INIT_INT16_MAX;
                     adca_MAX_SEEN = adcX_MAX_SEEN_INIT_INT16_MIN;
                     adcb_MIN_SEEN = adcX_MIN_SEEN_INIT_INT16_MAX;
                     adcb_MAX_SEEN = adcX_MAX_SEEN_INIT_INT16_MIN;
+                    adcc_MIN_SEEN = adcX_MIN_SEEN_INIT_INT16_MAX;
+                    adcc_MAX_SEEN = adcX_MAX_SEEN_INIT_INT16_MIN;
+                    adcd_MIN_SEEN = adcX_MIN_SEEN_INIT_INT16_MAX;
+                    adcd_MAX_SEEN = adcX_MAX_SEEN_INIT_INT16_MIN;
+                }
+                if (ch == 'D' || ch == 'd' || ch == 'R' || ch == 'r') {
+                    // display min/max limits
+                    cmdLine.serial().printf(" %s\tNEW 0x%4.4x %+d \tMIN 0x%4.4x %+d \tMAX 0x%4.4x %+d \r\n",
+                        "adca",
+                        (adca_newest   & 0xFFFF),
+                        (adca_newest           ),
+                        (adca_MIN_SEEN & 0xFFFF),
+                        (adca_MIN_SEEN         ),
+                        (adca_MAX_SEEN & 0xFFFF),
+                        (adca_MAX_SEEN         )
+                    );
+                    cmdLine.serial().printf(" %s\tNEW 0x%4.4x %+d \tMIN 0x%4.4x %+d \tMAX 0x%4.4x %+d \r\n",
+                        "adcb",
+                        (adcb_newest   & 0xFFFF),
+                        (adcb_newest           ),
+                        (adcb_MIN_SEEN & 0xFFFF),
+                        (adcb_MIN_SEEN         ),
+                        (adcb_MAX_SEEN & 0xFFFF),
+                        (adcb_MAX_SEEN         )
+                    );
+                    cmdLine.serial().printf(" %s\tNEW 0x%4.4x %+d \tMIN 0x%4.4x %+d \tMAX 0x%4.4x %+d \r\n",
+                        "adcc",
+                        (adcc_newest   & 0xFFFF),
+                        (adcc_newest           ),
+                        (adcc_MIN_SEEN & 0xFFFF),
+                        (adcc_MIN_SEEN         ),
+                        (adcc_MAX_SEEN & 0xFFFF),
+                        (adcc_MAX_SEEN         )
+                    );
+                    cmdLine.serial().printf(" %s\tNEW 0x%4.4x %+d \tMIN 0x%4.4x %+d \tMAX 0x%4.4x %+d \r\n",
+                        "adcd",
+                        (adcd_newest   & 0xFFFF),
+                        (adcd_newest           ),
+                        (adcd_MIN_SEEN & 0xFFFF),
+                        (adcd_MIN_SEEN         ),
+                        (adcd_MAX_SEEN & 0xFFFF),
+                        (adcd_MAX_SEEN         )
+                    );
+                }
+                if (ch == 'D' || ch == 'd' || ch == 'R' || ch == 'r') {
                     continue;
                 }
                 if (ch == 'X' || ch == 'x' || ch == '\x03') {