Test program running on MAX32625MBED. Control through USB Serial commands using a terminal emulator such as teraterm or putty.
Dependencies: MaximTinyTester CmdLine MAX541 USBDevice
Diff: Test_Menu_MAX11043.cpp
- 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') {