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_Main_MAX11043.cpp
- Revision:
- 52:607010f0c54e
- Child:
- 53:3d5a3d241a5e
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test_Main_MAX11043.cpp Tue Feb 11 01:16:34 2020 +0000 @@ -0,0 +1,2165 @@ +// /******************************************************************************* +// * Copyright (C) 2020 Maxim Integrated Products, Inc., All Rights Reserved. +// * +// * Permission is hereby granted, free of charge, to any person obtaining a +// * copy of this software and associated documentation files (the "Software"), +// * to deal in the Software without restriction, including without limitation +// * the rights to use, copy, modify, merge, publish, distribute, sublicense, +// * and/or sell copies of the Software, and to permit persons to whom the +// * Software is furnished to do so, subject to the following conditions: +// * +// * The above copyright notice and this permission notice shall be included +// * in all copies or substantial portions of the Software. +// * +// * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES +// * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// * OTHER DEALINGS IN THE SOFTWARE. +// * +// * Except as contained in this notice, the name of Maxim Integrated +// * Products, Inc. shall not be used except as stated in the Maxim Integrated +// * Products, Inc. Branding Policy. +// * +// * The mere transfer of this software does not imply any licenses +// * of trade secrets, proprietary technology, copyrights, patents, +// * trademarks, maskwork rights, or any other form of intellectual +// * property whatsoever. Maxim Integrated Products, Inc. retains all +// * ownership rights. +// ******************************************************************************* +// */ +//---------- CODE GENERATOR: testMainCppCodeList +// CODE GENERATOR: example code includes + +// example code includes +// standard include for target platform -- Platform_Include_Boilerplate +#include "mbed.h" +// Platforms: +// - MAX32625MBED +// - supports mbed-os-5.11, requires USBDevice library +// - add https://developer.mbed.org/teams/MaximIntegrated/code/USBDevice/ +// - remove max32630fthr library (if present) +// - remove MAX32620FTHR library (if present) +// - MAX32600MBED +// - remove max32630fthr library (if present) +// - remove MAX32620FTHR library (if present) +// - Windows 10 note: Don't connect HDK until you are ready to load new firmware into the board. +// - NUCLEO_F446RE +// - remove USBDevice library +// - remove max32630fthr library (if present) +// - remove MAX32620FTHR library (if present) +// - NUCLEO_F401RE +// - remove USBDevice library +// - remove max32630fthr library (if present) +// - remove MAX32620FTHR library (if present) +// - MAX32630FTHR +// - #include "max32630fthr.h" +// - add http://os.mbed.org/teams/MaximIntegrated/code/max32630fthr/ +// - remove MAX32620FTHR library (if present) +// - MAX32620FTHR +// - #include "MAX32620FTHR.h" +// - remove max32630fthr library (if present) +// - add https://os.mbed.com/teams/MaximIntegrated/code/MAX32620FTHR/ +// - not tested yet +// - MAX32625PICO +// - remove max32630fthr library (if present) +// - remove MAX32620FTHR library (if present) +// - not tested yet +// +// end Platform_Include_Boilerplate +#include "MAX11043.h" +#include "CmdLine.h" +#include "MaximTinyTester.h" + +// optional: serial port +// note: some platforms such as Nucleo-F446RE do not support the USBSerial library. +// In those cases, remove the USBDevice lib from the project and rebuild. +#if defined(TARGET_MAX32625MBED) +#include "USBSerial.h" +USBSerial serial; // virtual serial port over USB (DEV connector) +#elif defined(TARGET_MAX32630MBED) +#include "USBSerial.h" +USBSerial serial; // virtual serial port over USB (DEV connector) +#else +//#include "USBSerial.h" +Serial serial(USBTX, USBRX); // tx, rx +#endif + +void on_immediate_0x21(); // Unicode (U+0021) ! EXCLAMATION MARK +void on_immediate_0x7b(); // Unicode (U+007B) { LEFT CURLY BRACKET +void on_immediate_0x7d(); // Unicode (U+007D) } RIGHT CURLY BRACKET + +#include "CmdLine.h" + +# if HAS_DAPLINK_SERIAL +CmdLine cmdLine_DAPLINKserial(DAPLINKserial, "DAPLINK"); +# endif // HAS_DAPLINK_SERIAL +CmdLine cmdLine_serial(serial, "serial"); + + +//-------------------------------------------------- + + +#if defined(TARGET) +// TARGET_NAME macros from targets/TARGET_Maxim/TARGET_MAX32625/device/mxc_device.h +// Create a string definition for the TARGET +#define STRING_ARG(arg) #arg +#define STRING_NAME(name) STRING_ARG(name) +#define TARGET_NAME STRING_NAME(TARGET) +#elif defined(TARGET_MAX32600) +#define TARGET_NAME "MAX32600" +#elif defined(TARGET_LPC1768) +#define TARGET_NAME "LPC1768" +#elif defined(TARGET_NUCLEO_F446RE) +#define TARGET_NAME "NUCLEO_F446RE" +#elif defined(TARGET_NUCLEO_F401RE) +#define TARGET_NAME "NUCLEO_F401RE" +#else +#error TARGET NOT DEFINED +#endif +#if defined(TARGET_MAX32630) +//-------------------------------------------------- +// TARGET=MAX32630FTHR ARM Cortex-M4F 96MHz 2048kB Flash 512kB SRAM +// +-------------[microUSB]-------------+ +// | J1 MAX32630FTHR J2 | +// ______ | [ ] RST GND [ ] | +// ______ | [ ] 3V3 BAT+[ ] | +// ______ | [ ] 1V8 reset SW1 | +// ______ | [ ] GND J4 J3 | +// analogIn0/4 | [a] AIN_0 1.2Vfs (bat) SYS [ ] | switched BAT+ +// analogIn1/5 | [a] AIN_1 1.2Vfs PWR [ ] | external pwr btn +// analogIn2 | [a] AIN_2 1.2Vfs +5V VBUS [ ] | USB +5V power +// analogIn3 | [a] AIN_3 1.2Vfs 1-WIRE P4_0 [d] | D0 dig9 +// (I2C2.SDA) | [d] P5_7 SDA2 SRN P5_6 [d] | D1 dig8 +// (I2C2.SCL) | [d] P6_0 SCL2 SDIO3 P5_5 [d] | D2 dig7 +// D13/SCLK | [s] P5_0 SCLK SDIO2 P5_4 [d] | D3 dig6 +// D11/MOSI | [s] P5_1 MOSI SSEL P5_3 [d] | D4 dig5 +// D12/MISO | [s] P5_2 MISO RTS P3_3 [d] | D5 dig4 +// D10/CS | [s] P3_0 RX CTS P3_2 [d] | D6 dig3 +// D9 dig0 | [d] P3_1 TX SCL P3_5 [d] | D7 dig2 +// ______ | [ ] GND SDA P3_4 [d] | D8 dig1 +// | | +// | XIP Flash MAX14690N | +// | XIP_SCLK P1_0 SDA2 P5_7 | +// | XIP_MOSI P1_1 SCL2 P6_0 | +// | XIP_MISO P1_2 PMIC_INIT P3_7 | +// | XIP_SSEL P1_3 MPC P2_7 | +// | XIP_DIO2 P1_4 MON AIN_0 | +// | XIP_DIO3 P1_5 | +// | | +// | PAN1326B MicroSD LED | +// | BT_RX P0_0 SD_SCLK P0_4 r P2_4 | +// | BT_TX P0_1 SD_MOSI P0_5 g P2_5 | +// | BT_CTS P0_2 SD_MISO P0_6 b P2_6 | +// | BT_RTS P0_3 SD_SSEL P0_7 | +// | BT_RST P1_6 DETECT P2_2 | +// | BT_CLK P1_7 SW2 P2_3 | +// +------------------------------------+ +// MAX32630FTHR board has MAX14690 PMIC on I2C bus (P5_7 SDA, P6_0 SCL) at slave address 0101_000r 0x50 (or 0x28 for 7 MSbit address). +// MAX32630FTHR board has BMI160 accelerometer on I2C bus (P5_7 SDA, P6_0 SCL) at slave address 1101_000r 0xD0 (or 0x68 for 7 MSbit address). +// AIN_0 = AIN0 pin fullscale is 1.2V +// AIN_1 = AIN1 pin fullscale is 1.2V +// AIN_2 = AIN2 pin fullscale is 1.2V +// AIN_3 = AIN3 pin fullscale is 1.2V +// AIN_4 = AIN0 / 5.0 fullscale is 6.0V +// AIN_5 = AIN1 / 5.0 fullscale is 6.0V +// AIN_6 = VDDB / 4.0 fullscale is 4.8V +// AIN_7 = VDD18 fullscale is 1.2V +// AIN_8 = VDD12 fullscale is 1.2V +// AIN_9 = VRTC / 2.0 fullscale is 2.4V +// AIN_10 = x undefined? +// AIN_11 = VDDIO / 4.0 fullscale is 4.8V +// AIN_12 = VDDIOH / 4.0 fullscale is 4.8V +// + #include "max32630fthr.h" +MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3); +#define analogIn4_IS_HIGH_RANGE_OF_analogIn0 1 +// MAX32630FTHR board supports only internal VREF = 1.200V at bypass capacitor C15 +const float ADC_FULL_SCALE_VOLTAGE = 1.200; +// Arduino connector +#ifndef A0 +#define A0 AIN_0 +#endif +#ifndef A1 +#define A1 AIN_1 +#endif +#ifndef A2 +#define A2 AIN_2 +#endif +#ifndef A3 +#define A3 AIN_3 +#endif +#ifndef D0 +#define D0 P4_0 +#endif +#ifndef D1 +#define D1 P5_6 +#endif +#ifndef D2 +#define D2 P5_5 +#endif +#ifndef D3 +#define D3 P5_4 +#endif +#ifndef D4 +#define D4 P5_3 +#endif +#ifndef D5 +#define D5 P3_3 +#endif +#ifndef D6 +#define D6 P3_2 +#endif +#ifndef D7 +#define D7 P3_5 +#endif +#ifndef D8 +#define D8 P3_4 +#endif +#ifndef D9 +#define D9 P3_1 +#endif +#ifndef D10 +#define D10 P3_0 +#endif +#ifndef D11 +#define D11 P5_1 +#endif +#ifndef D12 +#define D12 P5_2 +#endif +#ifndef D13 +#define D13 P5_0 +#endif +//-------------------------------------------------- +#elif defined(TARGET_MAX32625MBED) +//-------------------------------------------------- +// TARGET=MAX32625MBED ARM Cortex-M4F 96MHz 512kB Flash 160kB SRAM +// +-------------------------------------+ +// | MAX32625MBED Arduino UNO header | +// | | +// | A5/SCL[ ] | P1_7 dig15 +// | A4/SDA[ ] | P1_6 dig14 +// | AREF=N/C[ ] | +// | GND[ ] | +// | [ ]N/C SCK/13[ ] | P1_0 dig13 +// | [ ]IOREF=3V3 MISO/12[ ] | P1_2 dig12 +// | [ ]RST MOSI/11[ ]~| P1_1 dig11 +// | [ ]3V3 CS/10[ ]~| P1_3 dig10 +// | [ ]5V0 9[ ]~| P1_5 dig9 +// | [ ]GND 8[ ] | P1_4 dig8 +// | [ ]GND | +// | [ ]Vin 7[ ] | P0_7 dig7 +// | 6[ ]~| P0_6 dig6 +// AIN_0 | [ ]A0 5[ ]~| P0_5 dig5 +// AIN_1 | [ ]A1 4[ ] | P0_4 dig4 +// AIN_2 | [ ]A2 INT1/3[ ]~| P0_3 dig3 +// AIN_3 | [ ]A3 INT0/2[ ] | P0_2 dig2 +// dig16 P3_4 | [ ]A4/SDA RST SCK MISO TX>1[ ] | P0_1 dig1 +// dig17 P3_5 | [ ]A5/SCL [ ] [ ] [ ] RX<0[ ] | P0_0 dig0 +// | [ ] [ ] [ ] | +// | UNO_R3 GND MOSI 5V ____________/ +// \_______________________/ +// +// +------------------------+ +// | | +// | MicroSD LED | +// | SD_SCLK P2_4 r P3_0 | +// | SD_MOSI P2_5 g P3_1 | +// | SD_MISO P2_6 b P3_2 | +// | SD_SSEL P2_7 y P3_3 | +// | | +// | DAPLINK BUTTONS | +// | TX P2_1 SW3 P2_3 | +// | RX P2_0 SW2 P2_2 | +// +------------------------+ +// +// AIN_0 = AIN0 pin fullscale is 1.2V +// AIN_1 = AIN1 pin fullscale is 1.2V +// AIN_2 = AIN2 pin fullscale is 1.2V +// AIN_3 = AIN3 pin fullscale is 1.2V +// AIN_4 = AIN0 / 5.0 fullscale is 6.0V +// AIN_5 = AIN1 / 5.0 fullscale is 6.0V +// AIN_6 = VDDB / 4.0 fullscale is 4.8V +// AIN_7 = VDD18 fullscale is 1.2V +// AIN_8 = VDD12 fullscale is 1.2V +// AIN_9 = VRTC / 2.0 fullscale is 2.4V +// AIN_10 = x undefined? +// AIN_11 = VDDIO / 4.0 fullscale is 4.8V +// AIN_12 = VDDIOH / 4.0 fullscale is 4.8V +// +//#include "max32625mbed.h" // ? +//MAX32625MBED mbed(MAX32625MBED::VIO_3V3); // ? +#define analogIn4_IS_HIGH_RANGE_OF_analogIn0 1 +// MAX32630FTHR board supports only internal VREF = 1.200V at bypass capacitor C15 +const float ADC_FULL_SCALE_VOLTAGE = 1.200; // TODO: ADC_FULL_SCALE_VOLTAGE Pico? +// Arduino connector +#ifndef A0 +#define A0 AIN_0 +#endif +#ifndef A1 +#define A1 AIN_1 +#endif +#ifndef A2 +#define A2 AIN_2 +#endif +#ifndef A3 +#define A3 AIN_3 +#endif +#ifndef D0 +#define D0 P0_0 +#endif +#ifndef D1 +#define D1 P0_1 +#endif +#ifndef D2 +#define D2 P0_2 +#endif +#ifndef D3 +#define D3 P0_3 +#endif +#ifndef D4 +#define D4 P0_4 +#endif +#ifndef D5 +#define D5 P0_5 +#endif +#ifndef D6 +#define D6 P0_6 +#endif +#ifndef D7 +#define D7 P0_7 +#endif +#ifndef D8 +#define D8 P1_4 +#endif +#ifndef D9 +#define D9 P1_5 +#endif +#ifndef D10 +#define D10 P1_3 +#endif +#ifndef D11 +#define D11 P1_1 +#endif +#ifndef D12 +#define D12 P1_2 +#endif +#ifndef D13 +#define D13 P1_0 +#endif +//-------------------------------------------------- +#elif defined(TARGET_MAX32600) +// target MAX32600 +// +#define analogIn4_IS_HIGH_RANGE_OF_analogIn0 0 +const float ADC_FULL_SCALE_VOLTAGE = 1.500; +// +//-------------------------------------------------- +#elif defined(TARGET_MAX32620FTHR) +#warning "TARGET_MAX32620FTHR not previously tested; need to define pins..." +#include "MAX32620FTHR.h" +// Initialize I/O voltages on MAX32620FTHR board +MAX32620FTHR fthr(MAX32620FTHR::VIO_3V3); +//#define USE_LEDS 0 ? +#define analogIn4_IS_HIGH_RANGE_OF_analogIn0 1 +#warning "TARGET_MAX32620FTHR not previously tested; need to verify ADC_FULL_SCALE_VOLTAGE..." +const float ADC_FULL_SCALE_VOLTAGE = 1.200; +// +//-------------------------------------------------- +#elif defined(TARGET_MAX32625PICO) +#warning "TARGET_MAX32625PICO not previously tested; need to define pins..." +//#define USE_LEDS 0 ? +#define analogIn4_IS_HIGH_RANGE_OF_analogIn0 1 +#warning "TARGET_MAX32625PICO not previously tested; need to verify ADC_FULL_SCALE_VOLTAGE..." +const float ADC_FULL_SCALE_VOLTAGE = 1.200; +// +//-------------------------------------------------- +#elif defined(TARGET_NUCLEO_F446RE) || defined(TARGET_NUCLEO_F401RE) +// TODO1: target NUCLEO_F446RE +// +// USER_BUTTON PC13 +// LED1 is shared with SPI_SCK on NUCLEO_F446RE PA_5, so don't use LED1. +#define USE_LEDS 0 +// SPI spi(SPI_MOSI, SPI_MISO, SPI_SCK); +// Serial serial(SERIAL_TX, SERIAL_RX); +#define analogIn4_IS_HIGH_RANGE_OF_analogIn0 0 +const float ADC_FULL_SCALE_VOLTAGE = 3.300; // TODO: ADC_FULL_SCALE_VOLTAGE Pico? +// +//-------------------------------------------------- +#elif defined(TARGET_LPC1768) +//-------------------------------------------------- +// TARGET=LPC1768 ARM Cortex-M3 100 MHz 512kB flash 64kB SRAM +// +-------------[microUSB]-------------+ +// ______ | [ ] GND +3.3V VOUT [ ] | ______ +// ______ | [ ] 4.5V<VIN<9.0V +5.0V VU [ ] | ______ +// ______ | [ ] VB USB.IF- [ ] | ______ +// ______ | [ ] nR USB.IF+ [ ] | ______ +// digitalInOut0 | [ ] p5 MOSI ETHERNET.RD- [ ] | ______ +// digitalInOut1 | [ ] p6 MISO ETHERNET.RD+ [ ] | ______ +// digitalInOut2 | [ ] p7 SCLK ETHERNET.TD- [ ] | ______ +// digitalInOut3 | [ ] p8 ETHERNET.TD+ [ ] | ______ +// digitalInOut4 | [ ] p9 TX SDA USB.D- [ ] | ______ +// digitalInOut5 | [ ] p10 RX SCL USB.D+ [ ] | ______ +// digitalInOut6 | [ ] p11 MOSI CAN-RD p30 [ ] | digitalInOut13 +// digitalInOut7 | [ ] p12 MISO CAN-TD p29 [ ] | digitalInOut12 +// digitalInOut8 | [ ] p13 TX SCLK SDA TX p28 [ ] | digitalInOut11 +// digitalInOut9 | [ ] p14 RX SCL RX p27 [ ] | digitalInOut10 +// analogIn0 | [ ] p15 AIN0 3.3Vfs PWM1 p26 [ ] | pwmDriver1 +// analogIn1 | [ ] p16 AIN1 3.3Vfs PWM2 p25 [ ] | pwmDriver2 +// analogIn2 | [ ] p17 AIN2 3.3Vfs PWM3 p24 [ ] | pwmDriver3 +// analogIn3 | [ ] p18 AIN3 AOUT PWM4 p23 [ ] | pwmDriver4 +// analogIn4 | [ ] p19 AIN4 3.3Vfs PWM5 p22 [ ] | pwmDriver5 +// analogIn5 | [ ] p20 AIN5 3.3Vfs PWM6 p21 [ ] | pwmDriver6 +// +------------------------------------+ +// AIN6 = P0.3 = TGT_SBL_RXD? +// AIN7 = P0.2 = TGT_SBL_TXD? +// +//-------------------------------------------------- +// LPC1768 board uses VREF = 3.300V +A3,3V thru L1 to bypass capacitor C14 +#define analogIn4_IS_HIGH_RANGE_OF_analogIn0 0 +const float ADC_FULL_SCALE_VOLTAGE = 3.300; +#else // not defined(TARGET_LPC1768 etc.) +//-------------------------------------------------- +// unknown target +//-------------------------------------------------- +#endif // target definition + + + +// uncrustify-0.66.1 *INDENT-OFF* +//-------------------------------------------------- +// Declare the AnalogIn driver +// Optional analogIn support. If there is only one it should be analogIn1. +// A) analog input +#if defined(TARGET_MAX32630) + #define HAS_analogIn0 1 + #define HAS_analogIn1 1 + #define HAS_analogIn2 1 + #define HAS_analogIn3 1 + #define HAS_analogIn4 1 + #define HAS_analogIn5 1 + #define HAS_analogIn6 1 + #define HAS_analogIn7 1 + #define HAS_analogIn8 1 + #define HAS_analogIn9 1 +// #define HAS_analogIn10 0 +// #define HAS_analogIn11 0 +// #define HAS_analogIn12 0 +// #define HAS_analogIn13 0 +// #define HAS_analogIn14 0 +// #define HAS_analogIn15 0 +#if HAS_analogIn0 + AnalogIn analogIn0(AIN_0); // TARGET_MAX32630 J1.5 AIN_0 = AIN0 pin fullscale is 1.2V +#endif +#if HAS_analogIn1 + AnalogIn analogIn1(AIN_1); // TARGET_MAX32630 J1.6 AIN_1 = AIN1 pin fullscale is 1.2V +#endif +#if HAS_analogIn2 + AnalogIn analogIn2(AIN_2); // TARGET_MAX32630 J1.7 AIN_2 = AIN2 pin fullscale is 1.2V +#endif +#if HAS_analogIn3 + AnalogIn analogIn3(AIN_3); // TARGET_MAX32630 J1.8 AIN_3 = AIN3 pin fullscale is 1.2V +#endif +#if HAS_analogIn4 + AnalogIn analogIn4(AIN_4); // TARGET_MAX32630 J1.5 AIN_4 = AIN0 / 5.0 fullscale is 6.0V +#endif +#if HAS_analogIn5 + AnalogIn analogIn5(AIN_5); // TARGET_MAX32630 J1.6 AIN_5 = AIN1 / 5.0 fullscale is 6.0V +#endif +#if HAS_analogIn6 + AnalogIn analogIn6(AIN_6); // TARGET_MAX32630 AIN_6 = VDDB / 4.0 fullscale is 4.8V +#endif +#if HAS_analogIn7 + AnalogIn analogIn7(AIN_7); // TARGET_MAX32630 AIN_7 = VDD18 fullscale is 1.2V +#endif +#if HAS_analogIn8 + AnalogIn analogIn8(AIN_8); // TARGET_MAX32630 AIN_8 = VDD12 fullscale is 1.2V +#endif +#if HAS_analogIn9 + AnalogIn analogIn9(AIN_9); // TARGET_MAX32630 AIN_9 = VRTC / 2.0 fullscale is 2.4V +#endif +#if HAS_analogIn10 + AnalogIn analogIn10(____); // TARGET_MAX32630 AIN_10 = x undefined? +#endif +#if HAS_analogIn11 + AnalogIn analogIn11(____); // TARGET_MAX32630 AIN_11 = VDDIO / 4.0 fullscale is 4.8V +#endif +#if HAS_analogIn12 + AnalogIn analogIn12(____); // TARGET_MAX32630 AIN_12 = VDDIOH / 4.0 fullscale is 4.8V +#endif +#if HAS_analogIn13 + AnalogIn analogIn13(____); +#endif +#if HAS_analogIn14 + AnalogIn analogIn14(____); +#endif +#if HAS_analogIn15 + AnalogIn analogIn15(____); +#endif +//-------------------------------------------------- +#elif defined(TARGET_MAX32625MBED) + #define HAS_analogIn0 1 + #define HAS_analogIn1 1 + #define HAS_analogIn2 1 + #define HAS_analogIn3 1 + #define HAS_analogIn4 1 + #define HAS_analogIn5 1 +#if HAS_analogIn0 + AnalogIn analogIn0(AIN_0); // TARGET_MAX32630 J1.5 AIN_0 = AIN0 pin fullscale is 1.2V +#endif +#if HAS_analogIn1 + AnalogIn analogIn1(AIN_1); // TARGET_MAX32630 J1.6 AIN_1 = AIN1 pin fullscale is 1.2V +#endif +#if HAS_analogIn2 + AnalogIn analogIn2(AIN_2); // TARGET_MAX32630 J1.7 AIN_2 = AIN2 pin fullscale is 1.2V +#endif +#if HAS_analogIn3 + AnalogIn analogIn3(AIN_3); // TARGET_MAX32630 J1.8 AIN_3 = AIN3 pin fullscale is 1.2V +#endif +#if HAS_analogIn4 + AnalogIn analogIn4(AIN_4); // TARGET_MAX32630 J1.5 AIN_4 = AIN0 / 5.0 fullscale is 6.0V +#endif +#if HAS_analogIn5 + AnalogIn analogIn5(AIN_5); // TARGET_MAX32630 J1.6 AIN_5 = AIN1 / 5.0 fullscale is 6.0V +#endif +//-------------------------------------------------- +#elif defined(TARGET_MAX32620FTHR) +#warning "TARGET_MAX32620FTHR not previously tested; need to verify analogIn0..." + #define HAS_analogIn0 1 + #define HAS_analogIn1 1 + #define HAS_analogIn2 1 + #define HAS_analogIn3 1 + #define HAS_analogIn4 1 + #define HAS_analogIn5 1 + #define HAS_analogIn6 1 + #define HAS_analogIn7 1 + #define HAS_analogIn8 1 + #define HAS_analogIn9 1 +// #define HAS_analogIn10 0 +// #define HAS_analogIn11 0 +// #define HAS_analogIn12 0 +// #define HAS_analogIn13 0 +// #define HAS_analogIn14 0 +// #define HAS_analogIn15 0 +#if HAS_analogIn0 + AnalogIn analogIn0(AIN_0); // TARGET_MAX32620FTHR J1.5 AIN_0 = AIN0 pin fullscale is 1.2V +#endif +#if HAS_analogIn1 + AnalogIn analogIn1(AIN_1); // TARGET_MAX32620FTHR J1.6 AIN_1 = AIN1 pin fullscale is 1.2V +#endif +#if HAS_analogIn2 + AnalogIn analogIn2(AIN_2); // TARGET_MAX32620FTHR J1.7 AIN_2 = AIN2 pin fullscale is 1.2V +#endif +#if HAS_analogIn3 + AnalogIn analogIn3(AIN_3); // TARGET_MAX32620FTHR J1.8 AIN_3 = AIN3 pin fullscale is 1.2V +#endif +#if HAS_analogIn4 + AnalogIn analogIn4(AIN_4); // TARGET_MAX32620FTHR J1.5 AIN_4 = AIN0 / 5.0 fullscale is 6.0V +#endif +#if HAS_analogIn5 + AnalogIn analogIn5(AIN_5); // TARGET_MAX32620FTHR J1.6 AIN_5 = AIN1 / 5.0 fullscale is 6.0V +#endif +#if HAS_analogIn6 + AnalogIn analogIn6(AIN_6); // TARGET_MAX32620FTHR AIN_6 = VDDB / 4.0 fullscale is 4.8V +#endif +#if HAS_analogIn7 + AnalogIn analogIn7(AIN_7); // TARGET_MAX32620FTHR AIN_7 = VDD18 fullscale is 1.2V +#endif +#if HAS_analogIn8 + AnalogIn analogIn8(AIN_8); // TARGET_MAX32620FTHR AIN_8 = VDD12 fullscale is 1.2V +#endif +#if HAS_analogIn9 + AnalogIn analogIn9(AIN_9); // TARGET_MAX32620FTHR AIN_9 = VRTC / 2.0 fullscale is 2.4V +#endif +#if HAS_analogIn10 + AnalogIn analogIn10(____); // TARGET_MAX32620FTHR AIN_10 = x undefined? +#endif +#if HAS_analogIn11 + AnalogIn analogIn11(____); // TARGET_MAX32620FTHR AIN_11 = VDDIO / 4.0 fullscale is 4.8V +#endif +#if HAS_analogIn12 + AnalogIn analogIn12(____); // TARGET_MAX32620FTHR AIN_12 = VDDIOH / 4.0 fullscale is 4.8V +#endif +#if HAS_analogIn13 + AnalogIn analogIn13(____); +#endif +#if HAS_analogIn14 + AnalogIn analogIn14(____); +#endif +#if HAS_analogIn15 + AnalogIn analogIn15(____); +#endif +//-------------------------------------------------- +#elif defined(TARGET_MAX32625PICO) +#warning "TARGET_MAX32625PICO not previously tested; need to verify analogIn0..." + #define HAS_analogIn0 1 + #define HAS_analogIn1 1 + #define HAS_analogIn2 1 + #define HAS_analogIn3 1 + #define HAS_analogIn4 1 + #define HAS_analogIn5 1 +#if HAS_analogIn0 + AnalogIn analogIn0(AIN_0); // TARGET_MAX32630 J1.5 AIN_0 = AIN0 pin fullscale is 1.2V +#endif +#if HAS_analogIn1 + AnalogIn analogIn1(AIN_1); // TARGET_MAX32630 J1.6 AIN_1 = AIN1 pin fullscale is 1.2V +#endif +#if HAS_analogIn2 + AnalogIn analogIn2(AIN_2); // TARGET_MAX32630 J1.7 AIN_2 = AIN2 pin fullscale is 1.2V +#endif +#if HAS_analogIn3 + AnalogIn analogIn3(AIN_3); // TARGET_MAX32630 J1.8 AIN_3 = AIN3 pin fullscale is 1.2V +#endif +#if HAS_analogIn4 + AnalogIn analogIn4(AIN_4); // TARGET_MAX32630 J1.5 AIN_4 = AIN0 / 5.0 fullscale is 6.0V +#endif +#if HAS_analogIn5 + AnalogIn analogIn5(AIN_5); // TARGET_MAX32630 J1.6 AIN_5 = AIN1 / 5.0 fullscale is 6.0V +#endif +//-------------------------------------------------- +#elif defined(TARGET_MAX32600) + #define HAS_analogIn0 1 + #define HAS_analogIn1 1 + #define HAS_analogIn2 1 + #define HAS_analogIn3 1 + #define HAS_analogIn4 1 + #define HAS_analogIn5 1 +#if HAS_analogIn0 + AnalogIn analogIn0(A0); +#endif +#if HAS_analogIn1 + AnalogIn analogIn1(A1); +#endif +#if HAS_analogIn2 + AnalogIn analogIn2(A2); +#endif +#if HAS_analogIn3 + AnalogIn analogIn3(A3); +#endif +#if HAS_analogIn4 + AnalogIn analogIn4(A4); +#endif +#if HAS_analogIn5 + AnalogIn analogIn5(A5); +#endif +//-------------------------------------------------- +#elif defined(TARGET_NUCLEO_F446RE) + #define HAS_analogIn0 1 + #define HAS_analogIn1 1 + #define HAS_analogIn2 1 + #define HAS_analogIn3 1 + #define HAS_analogIn4 1 + #define HAS_analogIn5 1 +#if HAS_analogIn0 + AnalogIn analogIn0(A0); +#endif +#if HAS_analogIn1 + AnalogIn analogIn1(A1); +#endif +#if HAS_analogIn2 + AnalogIn analogIn2(A2); +#endif +#if HAS_analogIn3 + AnalogIn analogIn3(A3); +#endif +#if HAS_analogIn4 + AnalogIn analogIn4(A4); +#endif +#if HAS_analogIn5 + AnalogIn analogIn5(A5); +#endif +//-------------------------------------------------- +#elif defined(TARGET_NUCLEO_F401RE) + #define HAS_analogIn0 1 + #define HAS_analogIn1 1 + #define HAS_analogIn2 1 + #define HAS_analogIn3 1 + #define HAS_analogIn4 1 + #define HAS_analogIn5 1 +#if HAS_analogIn0 + AnalogIn analogIn0(A0); +#endif +#if HAS_analogIn1 + AnalogIn analogIn1(A1); +#endif +#if HAS_analogIn2 + AnalogIn analogIn2(A2); +#endif +#if HAS_analogIn3 + AnalogIn analogIn3(A3); +#endif +#if HAS_analogIn4 + AnalogIn analogIn4(A4); +#endif +#if HAS_analogIn5 + AnalogIn analogIn5(A5); +#endif +//-------------------------------------------------- +// TODO1: TARGET=MAX32625MBED ARM Cortex-M4F 96MHz 512kB Flash 160kB SRAM +#elif defined(TARGET_LPC1768) + #define HAS_analogIn0 1 + #define HAS_analogIn1 1 + #define HAS_analogIn2 1 + #define HAS_analogIn3 1 + #define HAS_analogIn4 1 + #define HAS_analogIn5 1 +// #define HAS_analogIn6 1 +// #define HAS_analogIn7 1 +// #define HAS_analogIn8 1 +// #define HAS_analogIn9 1 +// #define HAS_analogIn10 1 +// #define HAS_analogIn11 1 +// #define HAS_analogIn12 1 +// #define HAS_analogIn13 1 +// #define HAS_analogIn14 1 +// #define HAS_analogIn15 1 +#if HAS_analogIn0 + AnalogIn analogIn0(p15); // TARGET_LPC1768 P0.23/AD0.0/I2SRX_CLK/CAP3.0 +#endif +#if HAS_analogIn1 + AnalogIn analogIn1(p16); // TARGET_LPC1768 P0.24/AD0.1/I2SRX_WS/CAP3.1 +#endif +#if HAS_analogIn2 + AnalogIn analogIn2(p17); // TARGET_LPC1768 P0.25/AD0.2/I2SRX_SDA/TXD3 +#endif +#if HAS_analogIn3 + AnalogIn analogIn3(p18); // TARGET_LPC1768 P0.26/AD0.3/AOUT/RXD3 +#endif +#if HAS_analogIn4 + AnalogIn analogIn4(p19); // TARGET_LPC1768 P1.30/VBUS/AD0.4 +#endif +#if HAS_analogIn5 + AnalogIn analogIn5(p20); // TARGET_LPC1768 P1.31/SCK1/AD0.5 +#endif +#if HAS_analogIn6 + AnalogIn analogIn6(____); +#endif +#if HAS_analogIn7 + AnalogIn analogIn7(____); +#endif +#if HAS_analogIn8 + AnalogIn analogIn8(____); +#endif +#if HAS_analogIn9 + AnalogIn analogIn9(____); +#endif +#if HAS_analogIn10 + AnalogIn analogIn10(____); +#endif +#if HAS_analogIn11 + AnalogIn analogIn11(____); +#endif +#if HAS_analogIn12 + AnalogIn analogIn12(____); +#endif +#if HAS_analogIn13 + AnalogIn analogIn13(____); +#endif +#if HAS_analogIn14 + AnalogIn analogIn14(____); +#endif +#if HAS_analogIn15 + AnalogIn analogIn15(____); +#endif +#else + // unknown target +#endif +// uncrustify-0.66.1 *INDENT-ON* +#if HAS_analogIn0 || HAS_analogIn1 \ + || HAS_analogIn2 || HAS_analogIn3 \ + || HAS_analogIn4 || HAS_analogIn5 \ + || HAS_analogIn6 || HAS_analogIn7 \ + || HAS_analogIn8 || HAS_analogIn9 \ + || HAS_analogIn10 || HAS_analogIn11 \ + || HAS_analogIn12 || HAS_analogIn13 \ + || HAS_analogIn14 || HAS_analogIn15 +#define HAS_analogIns 1 +#endif + + + +// AnalogIn pin resource: search index +#if HAS_analogIns +AnalogIn& find_analogInPin(int cPinIndex) +{ + switch (cPinIndex) + { + default: // default to the first defined analogIn pin +#if HAS_analogIn0 + case '0': case 0x00: return analogIn0; +#endif +#if HAS_analogIn1 + case '1': case 0x01: return analogIn1; +#endif +#if HAS_analogIn2 + case '2': case 0x02: return analogIn2; +#endif +#if HAS_analogIn3 + case '3': case 0x03: return analogIn3; +#endif +#if HAS_analogIn4 + case '4': case 0x04: return analogIn4; +#endif +#if HAS_analogIn5 + case '5': case 0x05: return analogIn5; +#endif +#if HAS_analogIn6 + case '6': case 0x06: return analogIn6; +#endif +#if HAS_analogIn7 + case '7': case 0x07: return analogIn7; +#endif +#if HAS_analogIn8 + case '8': case 0x08: return analogIn8; +#endif +#if HAS_analogIn9 + case '9': case 0x09: return analogIn9; +#endif +#if HAS_analogIn10 + case 'a': case 0x0a: return analogIn10; +#endif +#if HAS_analogIn11 + case 'b': case 0x0b: return analogIn11; +#endif +#if HAS_analogIn12 + case 'c': case 0x0c: return analogIn12; +#endif +#if HAS_analogIn13 + case 'd': case 0x0d: return analogIn13; +#endif +#if HAS_analogIn14 + case 'e': case 0x0e: return analogIn14; +#endif +#if HAS_analogIn15 + case 'f': case 0x0f: return analogIn15; +#endif + } +} +#endif + +#if HAS_analogIns +const float analogInPin_fullScaleVoltage[] = { +# if defined(TARGET_MAX32630) + ADC_FULL_SCALE_VOLTAGE, // analogIn0 + ADC_FULL_SCALE_VOLTAGE, // analogIn1 + ADC_FULL_SCALE_VOLTAGE, // analogIn2 + ADC_FULL_SCALE_VOLTAGE, // analogIn3 + ADC_FULL_SCALE_VOLTAGE * 5.0f, // analogIn4 // AIN_4 = AIN0 / 5.0 fullscale is 6.0V + ADC_FULL_SCALE_VOLTAGE * 5.0f, // analogIn4 // AIN_5 = AIN1 / 5.0 fullscale is 6.0V + ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn6 // AIN_6 = VDDB / 4.0 fullscale is 4.8V + ADC_FULL_SCALE_VOLTAGE, // analogIn7 // AIN_7 = VDD18 fullscale is 1.2V + ADC_FULL_SCALE_VOLTAGE, // analogIn8 // AIN_8 = VDD12 fullscale is 1.2V + ADC_FULL_SCALE_VOLTAGE * 2.0f, // analogIn9 // AIN_9 = VRTC / 2.0 fullscale is 2.4V + ADC_FULL_SCALE_VOLTAGE, // analogIn10 // AIN_10 = x undefined? + ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn11 // AIN_11 = VDDIO / 4.0 fullscale is 4.8V + ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn12 // AIN_12 = VDDIOH / 4.0 fullscale is 4.8V + ADC_FULL_SCALE_VOLTAGE, // analogIn13 + ADC_FULL_SCALE_VOLTAGE, // analogIn14 + ADC_FULL_SCALE_VOLTAGE // analogIn15 +# elif defined(TARGET_MAX32620FTHR) +#warning "TARGET_MAX32620FTHR not previously tested; need to verify analogIn0..." + ADC_FULL_SCALE_VOLTAGE, // analogIn0 + ADC_FULL_SCALE_VOLTAGE, // analogIn1 + ADC_FULL_SCALE_VOLTAGE, // analogIn2 + ADC_FULL_SCALE_VOLTAGE, // analogIn3 + ADC_FULL_SCALE_VOLTAGE * 5.0f, // analogIn4 // AIN_4 = AIN0 / 5.0 fullscale is 6.0V + ADC_FULL_SCALE_VOLTAGE * 5.0f, // analogIn4 // AIN_5 = AIN1 / 5.0 fullscale is 6.0V + ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn6 // AIN_6 = VDDB / 4.0 fullscale is 4.8V + ADC_FULL_SCALE_VOLTAGE, // analogIn7 // AIN_7 = VDD18 fullscale is 1.2V + ADC_FULL_SCALE_VOLTAGE, // analogIn8 // AIN_8 = VDD12 fullscale is 1.2V + ADC_FULL_SCALE_VOLTAGE * 2.0f, // analogIn9 // AIN_9 = VRTC / 2.0 fullscale is 2.4V + ADC_FULL_SCALE_VOLTAGE, // analogIn10 // AIN_10 = x undefined? + ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn11 // AIN_11 = VDDIO / 4.0 fullscale is 4.8V + ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn12 // AIN_12 = VDDIOH / 4.0 fullscale is 4.8V + ADC_FULL_SCALE_VOLTAGE, // analogIn13 + ADC_FULL_SCALE_VOLTAGE, // analogIn14 + ADC_FULL_SCALE_VOLTAGE // analogIn15 +#elif defined(TARGET_MAX32625MBED) + ADC_FULL_SCALE_VOLTAGE * 1.0f, // analogIn0 // fullscale is 1.2V + ADC_FULL_SCALE_VOLTAGE * 1.0f, // analogIn1 // fullscale is 1.2V + ADC_FULL_SCALE_VOLTAGE * 1.0f, // analogIn2 // fullscale is 1.2V + ADC_FULL_SCALE_VOLTAGE * 1.0f, // analogIn3 // fullscale is 1.2V + ADC_FULL_SCALE_VOLTAGE * 5.0f, // analogIn4 // AIN_4 = AIN0 / 5.0 fullscale is 6.0V + ADC_FULL_SCALE_VOLTAGE * 5.0f, // analogIn4 // AIN_5 = AIN1 / 5.0 fullscale is 6.0V + ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn6 // AIN_6 = VDDB / 4.0 fullscale is 4.8V + ADC_FULL_SCALE_VOLTAGE, // analogIn7 // AIN_7 = VDD18 fullscale is 1.2V + ADC_FULL_SCALE_VOLTAGE, // analogIn8 // AIN_8 = VDD12 fullscale is 1.2V + ADC_FULL_SCALE_VOLTAGE * 2.0f, // analogIn9 // AIN_9 = VRTC / 2.0 fullscale is 2.4V + ADC_FULL_SCALE_VOLTAGE, // analogIn10 // AIN_10 = x undefined? + ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn11 // AIN_11 = VDDIO / 4.0 fullscale is 4.8V + ADC_FULL_SCALE_VOLTAGE * 4.0f, // analogIn12 // AIN_12 = VDDIOH / 4.0 fullscale is 4.8V + ADC_FULL_SCALE_VOLTAGE, // analogIn13 + ADC_FULL_SCALE_VOLTAGE, // analogIn14 + ADC_FULL_SCALE_VOLTAGE // analogIn15 +#elif defined(TARGET_NUCLEO_F446RE) + ADC_FULL_SCALE_VOLTAGE, // analogIn0 + ADC_FULL_SCALE_VOLTAGE, // analogIn1 + ADC_FULL_SCALE_VOLTAGE, // analogIn2 + ADC_FULL_SCALE_VOLTAGE, // analogIn3 + ADC_FULL_SCALE_VOLTAGE, // analogIn4 + ADC_FULL_SCALE_VOLTAGE, // analogIn5 + ADC_FULL_SCALE_VOLTAGE, // analogIn6 + ADC_FULL_SCALE_VOLTAGE, // analogIn7 + ADC_FULL_SCALE_VOLTAGE, // analogIn8 + ADC_FULL_SCALE_VOLTAGE, // analogIn9 + ADC_FULL_SCALE_VOLTAGE, // analogIn10 + ADC_FULL_SCALE_VOLTAGE, // analogIn11 + ADC_FULL_SCALE_VOLTAGE, // analogIn12 + ADC_FULL_SCALE_VOLTAGE, // analogIn13 + ADC_FULL_SCALE_VOLTAGE, // analogIn14 + ADC_FULL_SCALE_VOLTAGE // analogIn15 +#elif defined(TARGET_NUCLEO_F401RE) + ADC_FULL_SCALE_VOLTAGE, // analogIn0 + ADC_FULL_SCALE_VOLTAGE, // analogIn1 + ADC_FULL_SCALE_VOLTAGE, // analogIn2 + ADC_FULL_SCALE_VOLTAGE, // analogIn3 + ADC_FULL_SCALE_VOLTAGE, // analogIn4 + ADC_FULL_SCALE_VOLTAGE, // analogIn5 + ADC_FULL_SCALE_VOLTAGE, // analogIn6 + ADC_FULL_SCALE_VOLTAGE, // analogIn7 + ADC_FULL_SCALE_VOLTAGE, // analogIn8 + ADC_FULL_SCALE_VOLTAGE, // analogIn9 + ADC_FULL_SCALE_VOLTAGE, // analogIn10 + ADC_FULL_SCALE_VOLTAGE, // analogIn11 + ADC_FULL_SCALE_VOLTAGE, // analogIn12 + ADC_FULL_SCALE_VOLTAGE, // analogIn13 + ADC_FULL_SCALE_VOLTAGE, // analogIn14 + ADC_FULL_SCALE_VOLTAGE // analogIn15 +//#elif defined(TARGET_LPC1768) +#else + // unknown target + ADC_FULL_SCALE_VOLTAGE, // analogIn0 + ADC_FULL_SCALE_VOLTAGE, // analogIn1 + ADC_FULL_SCALE_VOLTAGE, // analogIn2 + ADC_FULL_SCALE_VOLTAGE, // analogIn3 + ADC_FULL_SCALE_VOLTAGE, // analogIn4 + ADC_FULL_SCALE_VOLTAGE, // analogIn5 + ADC_FULL_SCALE_VOLTAGE, // analogIn6 + ADC_FULL_SCALE_VOLTAGE, // analogIn7 + ADC_FULL_SCALE_VOLTAGE, // analogIn8 + ADC_FULL_SCALE_VOLTAGE, // analogIn9 + ADC_FULL_SCALE_VOLTAGE, // analogIn10 + ADC_FULL_SCALE_VOLTAGE, // analogIn11 + ADC_FULL_SCALE_VOLTAGE, // analogIn12 + ADC_FULL_SCALE_VOLTAGE, // analogIn13 + ADC_FULL_SCALE_VOLTAGE, // analogIn14 + ADC_FULL_SCALE_VOLTAGE // analogIn15 +# endif +}; +#endif + + + + +//-------------------------------------------------- +// Option to use LEDs to show status +#ifndef USE_LEDS +#define USE_LEDS 1 +#endif +#if USE_LEDS +#if defined(TARGET_MAX32630) +# define LED_ON 0 +# define LED_OFF 1 +//-------------------------------------------------- +#elif defined(TARGET_MAX32625MBED) +# define LED_ON 0 +# define LED_OFF 1 +//-------------------------------------------------- +// TODO1: TARGET=MAX32625MBED ARM Cortex-M4F 96MHz 512kB Flash 160kB SRAM +#elif defined(TARGET_LPC1768) +# define LED_ON 1 +# define LED_OFF 0 +#else // not defined(TARGET_LPC1768 etc.) +// USE_LEDS with some platform other than MAX32630, MAX32625MBED, LPC1768 +// bugfix for MAX32600MBED LED blink pattern: check if LED_ON/LED_OFF already defined +# ifndef LED_ON +# define LED_ON 0 +# endif +# ifndef LED_OFF +# define LED_OFF 1 +# endif +//# define LED_ON 1 +//# define LED_OFF 0 +#endif // target definition +DigitalOut led1(LED1, LED_OFF); // MAX32630FTHR: LED1 = LED_RED +DigitalOut led2(LED2, LED_OFF); // MAX32630FTHR: LED2 = LED_GREEN +DigitalOut led3(LED3, LED_OFF); // MAX32630FTHR: LED3 = LED_BLUE +DigitalOut led4(LED4, LED_OFF); +#else // USE_LEDS=0 +// issue #41 support Nucleo_F446RE +// there are no LED indicators on the board, LED1 interferes with SPI; +// but we still need placeholders led1 led2 led3 led4. +// Declare DigitalOut led1 led2 led3 led4 targeting safe pins. +// PinName NC means NOT_CONNECTED; DigitalOut::is_connected() returns false +# define LED_ON 0 +# define LED_OFF 1 +DigitalOut led1(NC, LED_OFF); +DigitalOut led2(NC, LED_OFF); +DigitalOut led3(NC, LED_OFF); +DigitalOut led4(NC, LED_OFF); +#endif // USE_LEDS +#define led1_RFailLED led1 +#define led2_GPassLED led2 +#define led3_BBusyLED led3 + +//-------------------------------------------------- + + +// example code board support +//MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3); +//DigitalOut rLED(LED1); +//DigitalOut gLED(LED2); +//DigitalOut bLED(LED3); +// +// Arduino "shield" connector port definitions (MAX32625MBED shown) +#if defined(TARGET_MAX32625MBED) +#define A0 AIN_0 +#define A1 AIN_1 +#define A2 AIN_2 +#define A3 AIN_3 +#define D0 P0_0 +#define D1 P0_1 +#define D2 P0_2 +#define D3 P0_3 +#define D4 P0_4 +#define D5 P0_5 +#define D6 P0_6 +#define D7 P0_7 +#define D8 P1_4 +#define D9 P1_5 +#define D10 P1_3 +#define D11 P1_1 +#define D12 P1_2 +#define D13 P1_0 +#endif + +// example code declare SPI interface +#if defined(TARGET_MAX32625MBED) +SPI spi(SPI1_MOSI, SPI1_MISO, SPI1_SCK); // mosi, miso, sclk spi1 TARGET_MAX32625MBED: P1_1 P1_2 P1_0 Arduino 10-pin header D11 D12 D13 +DigitalOut spi_cs(SPI1_SS); // TARGET_MAX32625MBED: P1_3 Arduino 10-pin header D10 +#elif defined(TARGET_MAX32600MBED) +SPI spi(SPI2_MOSI, SPI2_MISO, SPI2_SCK); // mosi, miso, sclk spi1 TARGET_MAX32600MBED: Arduino 10-pin header D11 D12 D13 +DigitalOut spi_cs(SPI2_SS); // Generic: Arduino 10-pin header D10 +#else +SPI spi(D11, D12, D13); // mosi, miso, sclk spi1 TARGET_MAX32600MBED: Arduino 10-pin header D11 D12 D13 +DigitalOut spi_cs(D10); // Generic: Arduino 10-pin header D10 +#endif + +// example code declare GPIO interface pins +DigitalOut CONVRUN_pin(D9); // Digital Configuration Input to MAX11043 device +DigitalOut SHDN_pin(D8); // Digital Configuration Input to MAX11043 device +DigitalOut DACSTEP_pin(D7); // Digital Configuration Input to MAX11043 device +DigitalOut UP_slash_DWNb_pin(D6); // Digital Configuration Input to MAX11043 device +DigitalIn EOC_pin(D2); // Digital Event Output from MAX11043 device +// example code declare device instance +MAX11043 g_MAX11043_device(spi, spi_cs, CONVRUN_pin, SHDN_pin, DACSTEP_pin, UP_slash_DWNb_pin, EOC_pin, MAX11043::MAX11043_IC); + + +//---------------------------------------- +// Global SPI options +// + +//---------------------------------------- +// Global I2C options +// + +#define APPLICATION_ArduinoPinsMonitor 1 + +//-------------------------------------------------- +// use BUTTON1 trigger some action +#if defined(TARGET_MAX32630) +#define HAS_BUTTON1_DEMO_INTERRUPT 1 +#define HAS_BUTTON2_DEMO 0 +#define HAS_BUTTON2_DEMO_INTERRUPT 0 +#elif defined(TARGET_MAX32625PICO) +#warning "TARGET_MAX32625PICO not previously tested; need to define buttons..." +#define HAS_BUTTON1_DEMO_INTERRUPT 1 +#define HAS_BUTTON2_DEMO 0 +#define HAS_BUTTON2_DEMO_INTERRUPT 0 +#elif defined(TARGET_MAX32625) +#define HAS_BUTTON1_DEMO_INTERRUPT 1 +#define HAS_BUTTON2_DEMO_INTERRUPT 1 +#elif defined(TARGET_MAX32620FTHR) +#warning "TARGET_MAX32620FTHR not previously tested; need to define buttons..." +#define BUTTON1 SW1 +#define HAS_BUTTON1_DEMO_INTERRUPT 1 +#define HAS_BUTTON2_DEMO 0 +#define HAS_BUTTON2_DEMO_INTERRUPT 0 +#elif defined(TARGET_NUCLEO_F446RE) +#define HAS_BUTTON1_DEMO_INTERRUPT 0 +#define HAS_BUTTON2_DEMO_INTERRUPT 0 +#elif defined(TARGET_NUCLEO_F401RE) +#define HAS_BUTTON1_DEMO_INTERRUPT 0 +#define HAS_BUTTON2_DEMO_INTERRUPT 0 +#else +#warning "target not previously tested; need to define buttons..." +#endif +// +#ifndef HAS_BUTTON1_DEMO +#define HAS_BUTTON1_DEMO 0 +#endif +#ifndef HAS_BUTTON2_DEMO +#define HAS_BUTTON2_DEMO 0 +#endif +// +// avoid runtime error on button1 press [mbed-os-5.11] +// instead of using InterruptIn, use DigitalIn and poll in main while(1) +#ifndef HAS_BUTTON1_DEMO_INTERRUPT_POLLING +#define HAS_BUTTON1_DEMO_INTERRUPT_POLLING 1 +#endif +// +#ifndef HAS_BUTTON1_DEMO_INTERRUPT +#define HAS_BUTTON1_DEMO_INTERRUPT 1 +#endif +#ifndef HAS_BUTTON2_DEMO_INTERRUPT +#define HAS_BUTTON2_DEMO_INTERRUPT 1 +#endif +// +#if HAS_BUTTON1_DEMO_INTERRUPT +# if HAS_BUTTON1_DEMO_INTERRUPT_POLLING +// avoid runtime error on button1 press [mbed-os-5.11] +// instead of using InterruptIn, use DigitalIn and poll in main while(1) +DigitalIn button1(BUTTON1); +# else +InterruptIn button1(BUTTON1); +# endif +#elif HAS_BUTTON1_DEMO +DigitalIn button1(BUTTON1); +#endif +#if HAS_BUTTON2_DEMO_INTERRUPT +# if HAS_BUTTON1_DEMO_INTERRUPT_POLLING +// avoid runtime error on button1 press [mbed-os-5.11] +// instead of using InterruptIn, use DigitalIn and poll in main while(1) +DigitalIn button2(BUTTON2); +# else +InterruptIn button2(BUTTON2); +# endif +#elif HAS_BUTTON2_DEMO +DigitalIn button2(BUTTON2); +#endif + +//-------------------------------------------------- +// When user presses button BUTTON1, perform self test +#if HAS_BUTTON1_DEMO_INTERRUPT +void onButton1FallingEdge(void) +{ + void SelfTest(CmdLine & cmdLine); + SelfTest(cmdLine_serial); +} +#endif // HAS_BUTTON1_DEMO_INTERRUPT + +//-------------------------------------------------- +// When user presses button BUTTON2, perform demo configuration +#if HAS_BUTTON2_DEMO_INTERRUPT +void onButton2FallingEdge(void) +{ + // TBD demo configuration + // TODO diagnostic LED +} +#endif // HAS_BUTTON2_DEMO_INTERRUPT + +//-------------------------------------------------- +void SelfTest(CmdLine & cmdLine) +{ + //-------------------------------------------------- +#if analogIn4_IS_HIGH_RANGE_OF_analogIn0 + // Platform board uses AIN4,AIN5,.. as high range of AIN0,AIN1,.. + MaximTinyTester tinyTester(cmdLine, analogIn4, analogIn5, analogIn2, analogIn3, analogIn0, analogIn4, led1_RFailLED, led2_GPassLED, led3_BBusyLED); + tinyTester.analogInPin_fullScaleVoltage[0] = analogInPin_fullScaleVoltage[4]; // board support + tinyTester.analogInPin_fullScaleVoltage[1] = analogInPin_fullScaleVoltage[5]; // board support + tinyTester.analogInPin_fullScaleVoltage[2] = analogInPin_fullScaleVoltage[2]; // board support + tinyTester.analogInPin_fullScaleVoltage[3] = analogInPin_fullScaleVoltage[3]; // board support + tinyTester.analogInPin_fullScaleVoltage[4] = analogInPin_fullScaleVoltage[0]; // board support + tinyTester.analogInPin_fullScaleVoltage[5] = analogInPin_fullScaleVoltage[1]; // board support + // low range channels AIN0, AIN1, AIN2, AIN3 +#else // analogIn4_IS_HIGH_RANGE_OF_analogIn0 + // Platform board uses simple analog inputs + MaximTinyTester tinyTester(cmdLine, analogIn0, analogIn1, analogIn2, analogIn3, analogIn4, analogIn5, led1_RFailLED, led2_GPassLED, led3_BBusyLED); + tinyTester.analogInPin_fullScaleVoltage[0] = analogInPin_fullScaleVoltage[0]; // board support + tinyTester.analogInPin_fullScaleVoltage[1] = analogInPin_fullScaleVoltage[1]; // board support + tinyTester.analogInPin_fullScaleVoltage[2] = analogInPin_fullScaleVoltage[2]; // board support + tinyTester.analogInPin_fullScaleVoltage[3] = analogInPin_fullScaleVoltage[3]; // board support + tinyTester.analogInPin_fullScaleVoltage[4] = analogInPin_fullScaleVoltage[4]; // board support + tinyTester.analogInPin_fullScaleVoltage[5] = analogInPin_fullScaleVoltage[5]; // board support +#endif + tinyTester.clear(); + + // CODE GENERATOR: generate SelfTest based on function docstrings @test lines + + // +#if INJECT_SELFTEST_FAIL + // Test of the pass/fail report mechanism + tinyTester.FAIL(); + cmdLine.serial().print(F("injecting one false failure for test reporting")); +#endif + // + // Report number of pass and number of fail test results + tinyTester.Report_Summary(); +} + + +//-------------------------------------------------- +inline void print_command_prompt() +{ + cmdLine_serial.serial().printf("\r\n> "); + +} + + +//-------------------------------------------------- +void pinsMonitor_submenu_onEOLcommandParser(CmdLine& cmdLine) +{ + // % diagnostic commands submenu + // %Hpin -- digital output high + // %Lpin -- digital output low + // %?pin -- digital input + // %A %Apin -- analog input + // %Ppin df=xx -- pwm output + // %Wpin -- measure high pulsewidth input in usec + // %wpin -- measure low pulsewidth input in usec + // %I... -- I2C diagnostics + // %IP -- I2C probe + // %IC scl=100khz ADDR=? -- I2C configure + // %IW byte byte ... byte RD=? ADDR=0x -- write + // %IR ADDR=? RD=? -- read + // %I^ cmd=? -- i2c_smbus_read_word_data + // %S... -- SPI diagnostics + // %SC sclk=1Mhz -- SPI configure + // %SW -- write (write and read) + // %SR -- read (alias for %SW because SPI always write and read) + // A-Z,a-z,0-9 reserved for application use + // + char strPinIndex[3]; + strPinIndex[0] = cmdLine[2]; + strPinIndex[1] = cmdLine[3]; + strPinIndex[2] = '\0'; + int pinIndex = strtoul(strPinIndex, NULL, 10); // strtol(str, NULL, 10): get decimal value + //cmdLine.serial().printf(" pinIndex=%d ", pinIndex); + // + // get next character + switch (cmdLine[1]) + { +#if HAS_digitalInOuts + case 'H': case 'h': + { + // %Hpin -- digital output high +#if ARDUINO_STYLE + pinMode(pinIndex, OUTPUT); // digital pins 0, 1, 2, .. 13, analog input pins A0, A1, .. A5 + digitalWrite(pinIndex, HIGH); // digital pins 0, 1, 2, .. 13, analog input pins A0, A1, .. A5 +#else + DigitalInOut& digitalInOutPin = find_digitalInOutPin(pinIndex); + digitalInOutPin.output(); + digitalInOutPin.write(1); +#endif + cmdLine.serial().printf(" digitalInOutPin %d Output High ", pinIndex); + } + break; + case 'L': case 'l': + { + // %Lpin -- digital output low +#if ARDUINO_STYLE + pinMode(pinIndex, OUTPUT); // digital pins 0, 1, 2, .. 13, analog input pins A0, A1, .. A5 + digitalWrite(pinIndex, LOW); // digital pins 0, 1, 2, .. 13, analog input pins A0, A1, .. A5 +#else + DigitalInOut& digitalInOutPin = find_digitalInOutPin(pinIndex); + digitalInOutPin.output(); + digitalInOutPin.write(0); +#endif + cmdLine.serial().printf(" digitalInOutPin %d Output Low ", pinIndex); + } + break; + case '?': + { + // %?pin -- digital input +#if ARDUINO_STYLE + pinMode(pinIndex, INPUT); // digital pins 0, 1, 2, .. 13, analog input pins A0, A1, .. A5 +#else + DigitalInOut& digitalInOutPin = find_digitalInOutPin(pinIndex); + digitalInOutPin.input(); +#endif + serial.printf(" digitalInOutPin %d Input ", pinIndex); +#if ARDUINO_STYLE + int value = digitalRead(pinIndex); +#else + int value = digitalInOutPin.read(); +#endif + cmdLine.serial().printf("%d ", value); + } + break; +#endif + // +#if HAS_analogIns + case 'A': case 'a': + { + // %A %Apin -- analog input +#if analogIn4_IS_HIGH_RANGE_OF_analogIn0 + // Platform board uses AIN4,AIN5,.. as high range of AIN0,AIN1,.. + for (int pinIndex = 0; pinIndex < 2; pinIndex++) + { + int cPinIndex = '0' + pinIndex; + AnalogIn& analogInPin = find_analogInPin(cPinIndex); + float adc_full_scale_voltage = analogInPin_fullScaleVoltage[pinIndex]; + float normValue_0_1 = analogInPin.read(); + // + int pinIndexH = pinIndex + 4; + int cPinIndexH = '0' + pinIndexH; + AnalogIn& analogInPinH = find_analogInPin(cPinIndexH); + float adc_full_scale_voltageH = analogInPin_fullScaleVoltage[pinIndexH]; + float normValueH_0_1 = analogInPinH.read(); + // + cmdLine.serial().printf("AIN%c = %7.3f%% = %1.3fV AIN%c = %7.3f%% = %1.3fV \r\n", + cPinIndex, + normValue_0_1 * 100.0, + normValue_0_1 * adc_full_scale_voltage, + cPinIndexH, + normValueH_0_1 * 100.0, + normValueH_0_1 * adc_full_scale_voltageH + ); + } + for (int pinIndex = 2; pinIndex < 4; pinIndex++) + { + int cPinIndex = '0' + pinIndex; + AnalogIn& analogInPin = find_analogInPin(cPinIndex); + float adc_full_scale_voltage = analogInPin_fullScaleVoltage[pinIndex]; + float normValue_0_1 = analogInPin.read(); + // + cmdLine.serial().printf("AIN%c = %7.3f%% = %1.3fV\r\n", + cPinIndex, + normValue_0_1 * 100.0, + normValue_0_1 * adc_full_scale_voltage + ); + } +#else // analogIn4_IS_HIGH_RANGE_OF_analogIn0 + // Platform board uses simple analog inputs + // assume standard Arduino analog inputs A0-A5 + for (int pinIndex = 0; pinIndex < 6; pinIndex++) + { + int cPinIndex = '0' + pinIndex; + AnalogIn& analogInPin = find_analogInPin(cPinIndex); + float adc_full_scale_voltage = analogInPin_fullScaleVoltage[pinIndex]; + float normValue_0_1 = analogInPin.read(); + // + cmdLine.serial().printf("AIN%c = %7.3f%% = %1.3fV\r\n", + cPinIndex, + normValue_0_1 * 100.0, + normValue_0_1 * adc_full_scale_voltage + ); + } +#endif // analogIn4_IS_HIGH_RANGE_OF_analogIn0 + } + break; +#endif + // +#if HAS_SPI2_MAX541 + case 'D': case 'd': + { + // %D -- DAC output MAX541 (SPI2) -- need cmdLine.parse_float(voltageV) + // MAX541 max541(spi2_max541, spi2_max541_cs); + float voltageV = max541.Get_Voltage(); + // if (cmdLine[2] == '+') { + // // %D+ + // voltageV = voltageV * 1.25f; + // if (voltageV >= max541.VRef) voltageV = max541.VRef; + // SelfTest_MAX541_Voltage(cmdLine, max541, voltageV); + // } + // else if (cmdLine[2] == '-') { + // // %D- + // voltageV = voltageV * 0.75f; + // if (voltageV < 0.1f) voltageV = 0.1f; + // SelfTest_MAX541_Voltage(cmdLine, max541, voltageV); + // } + if (cmdLine.parse_float("V", voltageV)) + { + // %D V=1.234 -- set voltage + max541.Set_Voltage(voltageV); + } + else if (cmdLine.parse_float("TEST", voltageV)) + { + // %D TEST=1.234 -- set voltage and compare with AIN0 + SelfTest_MAX541_Voltage(cmdLine, max541, voltageV); + } + else if (cmdLine.parse_float("CAL", voltageV)) + { + // %D CAL=1.234 -- calibrate VRef and compare with AIN0 + + max541.Set_Code(0x8000); // we don't know the fullscale voltage yet, so set code to midscale + double max541_midscale_V = analogInPin_fullScaleVoltage[4] * analogIn4.read(); // TARGET_MAX32630 J1.5 AIN_4 = AIN0 / 5.0 fullscale is 6.0V + const int average_count = 100; + const double average_K = 0.25; + for (int count = 0; count < average_count; count++) { + double measurement_V = analogInPin_fullScaleVoltage[4] * analogIn4.read(); // TARGET_MAX32630 J1.5 AIN_4 = AIN0 / 5.0 fullscale is 6.0V + max541_midscale_V = ((1 - average_K) * max541_midscale_V) + (average_K * measurement_V); + } + max541.VRef = 2.0 * max541_midscale_V; + cmdLine.serial().printf( + "\r\n MAX541 midscale = %1.3fV, so fullscale = %1.3fV", + max541_midscale_V, max541.VRef); + // Detect whether MAX541 is really connected to MAX32625MBED.AIN0/AIN4 + voltageV = 1.0f; + SelfTest_MAX541_Voltage(cmdLine, max541, voltageV); + } + else { + // %D -- print MAX541 DAC status + cmdLine.serial().printf("MAX541 code=0x%4.4x = %1.3fV VRef=%1.3fV\r\n", + max541.Get_Code(), max541.Get_Voltage(), max541.VRef); + } + } + break; +#endif + + // +#if HAS_I2C // SUPPORT_I2C + case 'I': case 'i': + // %I... -- I2C diagnostics + // %IP -- I2C probe + // %IC scl=100khz ADDR=? -- I2C configure + // %IW byte byte ... byte RD=? ADDR=0x -- write + // %IR ADDR=? RD=? -- read + // %I^ cmd=? -- i2c_smbus_read_word_data + // get next character + // TODO: parse cmdLine arg (ADDR=\d+)? --> g_I2C_deviceAddress7 + cmdLine.parse_byte_hex("ADDR", g_I2C_deviceAddress7); + // TODO: parse cmdLine arg (RD=\d)? --> g_I2C_read_count + g_I2C_read_count = 0; // read count must be reset every command + cmdLine.parse_byte_dec("RD", g_I2C_read_count); + // TODO: parse cmdLine arg (CMD=\d)? --> g_I2C_command_regAddress + cmdLine.parse_byte_hex("CMD", g_I2C_command_regAddress); + switch (cmdLine[2]) + { + case 'P': case 'p': + { + // %IP -- I2C probe + HuntAttachedI2CDevices(cmdLine, 0x03, 0x77); + } + break; + case 'C': case 'c': + { + bool isUpdatedI2CConfig = false; + // %IC scl=100khz ADDR=? -- I2C configure + // parse cmdLine arg (SCL=\d+(kHZ|MHZ)?)? --> g_I2C_SCL_Hz + if (cmdLine.parse_frequency_Hz("SCL", g_I2C_SCL_Hz)) + { + isUpdatedI2CConfig = true; + // TODO1: validate g_I2C_SCL_Hz against system clock frequency F_CPU + if (g_I2C_SCL_Hz > limit_max_I2C_SCL_Hz) + { + g_I2C_SCL_Hz = limit_max_I2C_SCL_Hz; + } + if (g_I2C_SCL_Hz < limit_min_I2C_SCL_Hz) + { + g_I2C_SCL_Hz = limit_min_I2C_SCL_Hz; + } + } + if (isUpdatedI2CConfig) + { + // declare in narrower scope: MAX32625MBED I2C i2cMaster(...) + I2C i2cMaster(I2C0_SDA, I2C0_SCL); // sda scl TARGET_MAX32635MBED: P1_6, P1_7 Arduino 10-pin header + i2cMaster.frequency(g_I2C_SCL_Hz); + i2cMaster.start(); + i2cMaster.stop(); + i2cMaster.frequency(g_I2C_SCL_Hz); + cmdLine.serial().printf( + "\r\n %%IC ADDR=0x%2.2x=(0x%2.2x>>1) SCL=%d=%1.3fkHz -- I2C config", + g_I2C_deviceAddress7, (g_I2C_deviceAddress7 << 1), g_I2C_SCL_Hz, + (g_I2C_SCL_Hz / 1000.)); + i2cMaster.start(); + i2cMaster.stop(); + } + } + break; + case 'W': case 'w': + { + // declare in narrower scope: MAX32625MBED I2C i2cMaster(...) + I2C i2cMaster(I2C0_SDA, I2C0_SCL); // sda scl TARGET_MAX32635MBED: P1_6, P1_7 Arduino 10-pin header + i2cMaster.frequency(g_I2C_SCL_Hz); + // %IW byte byte ... byte RD=? ADDR=0x -- write + // parse cmdLine byte list --> int byteCount; int mosiData[MAX_SPI_BYTE_COUNT]; + #define MAX_I2C_BYTE_COUNT 32 + size_t byteCount = byteCount; + static char mosiData[MAX_I2C_BYTE_COUNT]; + static char misoData[MAX_I2C_BYTE_COUNT]; + if (cmdLine.parse_byteCount_byteList_hex(byteCount, mosiData, + MAX_I2C_BYTE_COUNT)) + { + // hex dump mosiData[0..byteCount-1] + cmdLine.serial().printf( + "\r\nADDR=0x%2.2x=(0x%2.2x>>1) byteCount:%d RD=%d\r\nI2C MOSI->", + g_I2C_deviceAddress7, + (g_I2C_deviceAddress7 << 1), byteCount, g_I2C_read_count); + for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++) + { + cmdLine.serial().printf(" 0x%2.2X", mosiData[byteIndex]); + } + // + // TODO: i2c transfer + //const int addr7bit = 0x48; // 7 bit I2C address + //const int addr8bit = 0x48 << 1; // 8bit I2C address, 0x90 + // /* int */ i2cMaster.read (int addr8bit, char *data, int length, bool repeated=false) // Read from an I2C slave. + // /* int */ i2cMaster.read (int ack) // Read a single byte from the I2C bus. + // /* int */ i2cMaster.write (int addr8bit, const char *data, int length, bool repeated=false) // Write to an I2C slave. + // /* int */ i2cMaster.write (int data) // Write single byte out on the I2C bus. + // /* void */ i2cMaster.start (void) // Creates a start condition on the I2C bus. + // /* void */ i2cMaster.stop (void) // Creates a stop condition on the I2C bus. + // /* int */ i2cMaster.transfer (int addr8bit, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length, const event_callback_t &callback, int event=I2C_EVENT_TRANSFER_COMPLETE, bool repeated=false) // Start nonblocking I2C transfer. More... + // /* void */ i2cMaster.abort_transfer () // Abort the ongoing I2C transfer. More... + const int addr8bit = g_I2C_deviceAddress7 << 1; // 8bit I2C address, 0x90 + unsigned int misoLength = 0; + bool repeated = (g_I2C_read_count > 0); + // + int writeStatus = i2cMaster.write (addr8bit, mosiData, byteCount, repeated); + switch (writeStatus) + { + case 0: cmdLine.serial().printf(" ack "); break; + case 1: cmdLine.serial().printf(" nack "); break; + default: cmdLine.serial().printf(" {writeStatus 0x%2.2X} ", + writeStatus); + } + if (repeated) + { + int readStatus = + i2cMaster.read (addr8bit, misoData, g_I2C_read_count, false); + switch (readStatus) + { + case 1: cmdLine.serial().printf(" nack "); break; + case 0: cmdLine.serial().printf(" ack "); break; + default: cmdLine.serial().printf(" {readStatus 0x%2.2X} ", + readStatus); + } + } + // + if (misoLength > 0) + { + // hex dump misoData[0..byteCount-1] + cmdLine.serial().printf(" MISO<-"); + for (unsigned int byteIndex = 0; byteIndex < g_I2C_read_count; + byteIndex++) + { + cmdLine.serial().printf(" 0x%2.2X", misoData[byteIndex]); + } + } + cmdLine.serial().printf(" "); + } + } + break; + case 'R': case 'r': + { + // declare in narrower scope: MAX32625MBED I2C i2cMaster(...) + I2C i2cMaster(I2C0_SDA, I2C0_SCL); // sda scl TARGET_MAX32635MBED: P1_6, P1_7 Arduino 10-pin header + i2cMaster.frequency(g_I2C_SCL_Hz); + // %IR ADDR=? RD=? -- read + // TODO: i2c transfer + //const int addr7bit = 0x48; // 7 bit I2C address + //const int addr8bit = 0x48 << 1; // 8bit I2C address, 0x90 + // /* int */ i2cMaster.read (int addr8bit, char *data, int length, bool repeated=false) // Read from an I2C slave. + // /* int */ i2cMaster.read (int ack) // Read a single byte from the I2C bus. + // /* int */ i2cMaster.write (int addr8bit, const char *data, int length, bool repeated=false) // Write to an I2C slave. + // /* int */ i2cMaster.write (int data) // Write single byte out on the I2C bus. + // /* void */ i2cMaster.start (void) // Creates a start condition on the I2C bus. + // /* void */ i2cMaster.stop (void) // Creates a stop condition on the I2C bus. + // /* int */ i2cMaster.transfer (int addr8bit, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length, const event_callback_t &callback, int event=I2C_EVENT_TRANSFER_COMPLETE, bool repeated=false) // Start nonblocking I2C transfer. More... + // /* void */ i2cMaster.abort_transfer () // Abort the ongoing I2C transfer. More... + } + break; + case '^': + { + // declare in narrower scope: MAX32625MBED I2C i2cMaster(...) + I2C i2cMaster(I2C0_SDA, I2C0_SCL); // sda scl TARGET_MAX32635MBED: P1_6, P1_7 Arduino 10-pin header + i2cMaster.frequency(g_I2C_SCL_Hz); + // %I^ cmd=? -- i2c_smbus_read_word_data + // TODO: i2c transfer + //const int addr7bit = 0x48; // 7 bit I2C address + //const int addr8bit = 0x48 << 1; // 8bit I2C address, 0x90 + // /* int */ i2cMaster.read (int addr8bit, char *data, int length, bool repeated=false) // Read from an I2C slave. + // /* int */ i2cMaster.read (int ack) // Read a single byte from the I2C bus. + // /* int */ i2cMaster.write (int addr8bit, const char *data, int length, bool repeated=false) // Write to an I2C slave. + // /* int */ i2cMaster.write (int data) // Write single byte out on the I2C bus. + // /* void */ i2cMaster.start (void) // Creates a start condition on the I2C bus. + // /* void */ i2cMaster.stop (void) // Creates a stop condition on the I2C bus. + // /* int */ i2cMaster.transfer (int addr8bit, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length, const event_callback_t &callback, int event=I2C_EVENT_TRANSFER_COMPLETE, bool repeated=false) // Start nonblocking I2C transfer. More... + // /* void */ i2cMaster.abort_transfer () // Abort the ongoing I2C transfer. More... + } + break; + } // switch(cmdLine[2]) + break; +#endif + // +#if HAS_SPI // SUPPORT_SPI + case 'S': case 's': + { + // %S... -- SPI diagnostics + // %SC sclk=1Mhz -- SPI configure + // %SW -- write (write and read) + // %SR -- read (alias for %SW because SPI always write and read) + // + // Process arguments SCLK=\d+(kHZ|MHZ) CPOL=\d CPHA=\d + bool isUpdatedSPIConfig = false; + // parse cmdLine arg (CPOL=\d)? --> g_SPI_dataMode | SPI_MODE2 + // parse cmdLine arg (CPHA=\d)? --> g_SPI_dataMode | SPI_MODE1 + if (cmdLine.parse_flag("CPOL", g_SPI_dataMode, SPI_MODE2)) + { + isUpdatedSPIConfig = true; + } + if (cmdLine.parse_flag("CPHA", g_SPI_dataMode, SPI_MODE1)) + { + isUpdatedSPIConfig = true; + } + if (cmdLine.parse_flag("CS", g_SPI_cs_state, 1)) + { + isUpdatedSPIConfig = true; + } + // parse cmdLine arg (SCLK=\d+(kHZ|MHZ)?)? --> g_SPI_SCLK_Hz + if (cmdLine.parse_frequency_Hz("SCLK", g_SPI_SCLK_Hz)) + { + isUpdatedSPIConfig = true; + // TODO1: validate g_SPI_SCLK_Hz against system clock frequency F_CPU + if (g_SPI_SCLK_Hz > limit_max_SPI_SCLK_Hz) + { + g_SPI_SCLK_Hz = limit_max_SPI_SCLK_Hz; + } + if (g_SPI_SCLK_Hz < limit_min_SPI_SCLK_Hz) + { + g_SPI_SCLK_Hz = limit_min_SPI_SCLK_Hz; + } + } + // Update SPI configuration + if (isUpdatedSPIConfig) + { + // %SC sclk=1Mhz -- SPI configure + spi_cs = g_SPI_cs_state; + spi.format(8,g_SPI_dataMode); // int bits_must_be_8, int mode=0_3 CPOL=0,CPHA=0 +#if APPLICATION_MAX5715 + g_MAX5715_device.spi_frequency(g_SPI_SCLK_Hz); +#elif APPLICATION_MAX11131 + g_MAX11131_device.spi_frequency(g_SPI_SCLK_Hz); +#elif APPLICATION_MAX5171 + g_MAX5171_device.spi_frequency(g_SPI_SCLK_Hz); +#elif APPLICATION_MAX11410 + g_MAX11410_device.spi_frequency(g_SPI_SCLK_Hz); +#elif APPLICATION_MAX12345 + g_MAX12345_device.spi_frequency(g_SPI_SCLK_Hz); +#else + spi.frequency(g_SPI_SCLK_Hz); // int SCLK_Hz=1000000 = 1MHz (initial default) +#endif + // + double ideal_divisor = ((double)SystemCoreClock) / g_SPI_SCLK_Hz; + int actual_divisor = (int)(ideal_divisor + 0.0); // frequency divisor truncate + double actual_SCLK_Hz = SystemCoreClock / actual_divisor; + // + // fixed: mbed-os-5.11: [Warning] format '%d' expects argument of type 'int', but argument 6 has type 'uint32_t {aka long unsigned int}' [-Wformat=] + cmdLine.serial().printf( + "\r\n %%SC CPOL=%d CPHA=%d CS=%d SCLK=%ld=%1.3fMHz (%1.1fMHz/%1.2f = actual %1.3fMHz) -- SPI config", + ((g_SPI_dataMode & SPI_MODE2) ? 1 : 0), + ((g_SPI_dataMode & SPI_MODE1) ? 1 : 0), + g_SPI_cs_state, + g_SPI_SCLK_Hz, + (g_SPI_SCLK_Hz / 1000000.), + ((double)(SystemCoreClock / 1000000.)), + ideal_divisor, + (actual_SCLK_Hz / 1000000.) + ); + } + // get next character + switch (cmdLine[2]) + { + case 'C': case 's': + // %SC sclk=1Mhz -- SPI configure + break; + case 'W': case 'R': case 'w': case 'r': + { + // %SW -- write (write and read) + // %SR -- read (alias for %SW because SPI always write and read) + // parse cmdLine byte list --> int byteCount; int mosiData[MAX_SPI_BYTE_COUNT]; + #define MAX_SPI_BYTE_COUNT 32 + size_t byteCount = byteCount; + static char mosiData[MAX_SPI_BYTE_COUNT]; + static char misoData[MAX_SPI_BYTE_COUNT]; + if (cmdLine.parse_byteCount_byteList_hex(byteCount, mosiData, + MAX_SPI_BYTE_COUNT)) + { + // hex dump mosiData[0..byteCount-1] + cmdLine.serial().printf("\r\nSPI"); + if (byteCount > 7) { + cmdLine.serial().printf(" byteCount:%d", byteCount); + } + cmdLine.serial().printf(" MOSI->"); + for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++) + { + cmdLine.serial().printf(" 0x%2.2X", mosiData[byteIndex]); + } + spi_cs = 0; + unsigned int numBytesTransferred = + spi.write(mosiData, byteCount, misoData, byteCount); + spi_cs = 1; + // hex dump misoData[0..byteCount-1] + cmdLine.serial().printf(" MISO<-"); + for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred; + byteIndex++) + { + cmdLine.serial().printf(" 0x%2.2X", misoData[byteIndex]); + } + cmdLine.serial().printf(" "); + } + } + break; + } // switch(cmdLine[2]) + } // case 'S': // %S... -- SPI diagnostics + break; +#endif + // + // A-Z,a-z,0-9 reserved for application use + } // switch(cmdLine[1]) +} // end void pinsMonitor_submenu_onEOLcommandParser(CmdLine & cmdLine) + + +//-------------------------------------------------- +void main_menu_status(CmdLine & cmdLine) +{ + cmdLine.serial().printf("\r\nMain menu"); + + cmdLine.serial().printf(" MAX11043 24-bit 200ksps Delta-Sigma ADC"); + + //cmdLine.serial().print(" %s", TARGET_NAME); + if (cmdLine.nameStr()) + { + cmdLine.serial().printf(" [%s]", cmdLine.nameStr()); + + } + cmdLine.serial().printf("\r\n ? -- help"); + +} + + +//-------------------------------------------------- +void main_menu_help(CmdLine & cmdLine) +{ + // ? -- help + //~ cmdLine.serial().print(F("\r\nMenu:")); + cmdLine.serial().printf("\r\n # -- lines beginning with # are comments"); + + cmdLine.serial().printf("\r\n . -- SelfTest"); + + //cmdLine.serial().print(F("\r\n ! -- Initial Configuration")); + // + // % standardize diagnostic commands + // %Hpin -- digital output high + // %Lpin -- digital output low + // %?pin -- digital input + // %A %Apin -- analog input + // %Ppin df=xx -- pwm output + // %Wpin -- measure high pulsewidth input in usec + // %wpin -- measure low pulsewidth input in usec + // %I... -- I2C diagnostics + // %IP -- I2C probe + // %IC scl=100khz ADDR=? -- I2C configure + // %IW ADDR=? cmd=? data,data,data -- write + // %IR ADDR=? RD=? -- read + // %I^ cmd=? -- i2c_smbus_read_word_data + // %S... -- SPI diagnostics + // %SC sclk=1Mhz -- SPI configure + // %SW -- write (write and read) + // %SR -- read (alias for %SW because SPI always write and read) + // A-Z,a-z,0-9 reserved for application use + // +#if HAS_digitalInOuts + // %Hpin -- digital output high + // %Lpin -- digital output low + // %?pin -- digital input + cmdLine.serial().printf("\r\n %%Hn {pin:"); + list_digitalInOutPins(cmdLine.serial()); + cmdLine.serial().printf("} -- High Output"); + cmdLine.serial().printf("\r\n %%Ln {pin:"); + list_digitalInOutPins(cmdLine.serial()); + cmdLine.serial().printf("} -- Low Output"); + cmdLine.serial().printf("\r\n %%?n {pin:"); + list_digitalInOutPins(cmdLine.serial()); + cmdLine.serial().printf("} -- Input"); +#endif + +#if HAS_analogIns + // Menu A) analogRead A0..7 + // %A %Apin -- analog input + // analogRead(pinIndex) // analog input pins A0, A1, A2, A3, A4, A5; float voltage = analogRead(A0) * (5.0 / 1023.0) + cmdLine.serial().printf("\r\n %%A -- analogRead"); +#endif + +#if HAS_SPI2_MAX541 + // TODO1: MAX541 max541(spi2_max541, spi2_max541_cs); + cmdLine.serial().printf("\r\n %%D -- DAC output MAX541 (SPI2)"); +#endif + +#if HAS_I2C // SUPPORT_I2C + // TODO: support I2C HAS_I2C // SUPPORT_I2C + // VERIFY: I2C utility commands SUPPORT_I2C + // VERIFY: report g_I2C_SCL_Hz = (F_CPU / ((TWBR * 2) + 16)) from last Wire_Sr.setClock(I2C_SCL_Hz); + // %I... -- I2C diagnostics + // %IP -- I2C probe + // %IC scl=100khz ADDR=? -- I2C configure + // %IW byte byte ... byte RD=? ADDR=0x -- write + // %IR ADDR=? RD=? -- read + // %I^ cmd=? -- i2c_smbus_read_word_data + //g_I2C_SCL_Hz = (F_CPU / ((TWBR * 2) + 16)); // 'F_CPU' 'TWBR' not declared in this scope + cmdLine.serial().printf("\r\n %%IC ADDR=0x%2.2x=(0x%2.2x>>1) SCL=%d=%1.3fkHz -- I2C config", + g_I2C_deviceAddress7, (g_I2C_deviceAddress7 << 1), g_I2C_SCL_Hz, + (g_I2C_SCL_Hz / 1000.)); + cmdLine.serial().printf("\r\n %%IW byte byte ... byte RD=? ADDR=0x%2.2x -- I2C write/read", + g_I2C_deviceAddress7); + // +#if SUPPORT_I2C + // Menu ^ cmd=?) i2c_smbus_read_word_data + cmdLine.serial().printf("\r\n %%I^ cmd=? -- i2c_smbus_read_word_data"); + // test low-level I2C i2c_smbus_read_word_data +#endif // SUPPORT_I2C + //cmdLine.serial().printf(" H) Hunt for attached I2C devices"); + cmdLine.serial().printf("\r\n %%IP -- I2C Probe for attached devices"); + // cmdLine.serial().printf(" s) search i2c address"); +#endif // SUPPORT_I2C + +#if HAS_SPI // SUPPORT_SPI + // TODO: support SPI HAS_SPI // SUPPORT_SPI + // SPI test command S (mosiData)+ + // %S... -- SPI diagnostics + // %SC sclk=1Mhz -- SPI configure + // %SW -- write (write and read) + // %SR -- read (alias for %SW because SPI always write and read) + // spi.format(8,0); // int bits_must_be_8, int mode=0_3 CPOL=0,CPHA=0 rising edge (initial default) + // spi.format(8,1); // int bits_must_be_8, int mode=0_3 CPOL=0,CPHA=1 falling edge (initial default) + // spi.format(8,2); // int bits_must_be_8, int mode=0_3 CPOL=1,CPHA=0 falling edge (initial default) + // spi.format(8,3); // int bits_must_be_8, int mode=0_3 CPOL=1,CPHA=1 rising edge (initial default) + // spi.frequency(1000000); // int SCLK_Hz=1000000 = 1MHz (initial default) + // mode | POL PHA + // -----+-------- + // 0 | 0 0 + // 1 | 0 1 + // 2 | 1 0 + // 3 | 1 1 + //cmdLine.serial().printf(" S) SPI mosi,mosi,...mosi hex bytes SCLK=1000000 CPOL=0 CPHA=0"); + // fixed: mbed-os-5.11: [Warning] format '%d' expects argument of type 'int', but argument 3 has type 'uint32_t {aka long unsigned int}' [-Wformat=] + cmdLine.serial().printf("\r\n %%SC SCLK=%ld=%1.3fMHz CPOL=%d CPHA=%d -- SPI config", + g_SPI_SCLK_Hz, (g_SPI_SCLK_Hz / 1000000.), + ((g_SPI_dataMode & SPI_MODE2) ? 1 : 0), + ((g_SPI_dataMode & SPI_MODE1) ? 1 : 0)); + cmdLine.serial().printf("\r\n %%SW mosi,mosi,...mosi -- SPI write hex bytes"); + // VERIFY: parse new SPI settings parse_strCommandArgs() SCLK=1000000 CPOL=0 CPHA=0 +#endif // SUPPORT_SPI + // + // Application-specific commands (help text) here + // +#if APPLICATION_ArduinoPinsMonitor + cmdLine.serial().printf("\r\n A-Z,a-z,0-9 -- reserved for application use"); // ArduinoPinsMonitor +#endif // APPLICATION_ArduinoPinsMonitor + // + + extern bool MAX11043_menu_help(CmdLine & cmdLine); // defined in Test_Menu_MAX11043.cpp\n + MAX11043_menu_help(cmdLine); +} + + + +//-------------------------------------------------- +// main menu command-line parser +// invoked by CmdLine::append(char ch) or CmdLine::idleAppendIfReadable() +void main_menu_onEOLcommandParser(CmdLine & cmdLine) +{ + // DIAGNOSTIC: print line buffer + //~ cmdLine.serial().printf("\r\nmain_menu_onEOLcommandParser: ~%s~\r\n", cmdLine.str()); + // + switch (cmdLine[0]) + { + case '?': + main_menu_status(cmdLine); + main_menu_help(cmdLine); + // print command prompt + //cmdLine.serial().printf("\r\n>"); + break; + case '\r': case '\n': // ignore blank line + case '\0': // ignore empty line + case '#': // ignore comment line + // # -- lines beginning with # are comments + main_menu_status(cmdLine); + //~ main_menu_help(cmdLine); + // print command prompt + //cmdLine.serial().printf("\r\n>"); + break; +#if ECHO_EOF_ON_EOL + case '\x04': // Unicode (U+0004) EOT END OF TRANSMISSION = CTRL+D as EOF end of file + cmdLine.serial().printf("\x04"); // immediately echo EOF for test scripting + diagnostic_led_EOF(); + break; + case '\x1a': // Unicode (U+001A) SUB SUBSTITUTE = CTRL+Z as EOF end of file + cmdLine.serial().printf("\x1a"); // immediately echo EOF for test scripting + diagnostic_led_EOF(); + break; +#endif +#if APPLICATION_ArduinoPinsMonitor + case '.': + { + // . -- SelfTest + cmdLine.serial().printf("SelfTest()"); + SelfTest(cmdLine); + } + break; + case '%': + { + pinsMonitor_submenu_onEOLcommandParser(cmdLine); + } + break; // case '%' +#endif // APPLICATION_ArduinoPinsMonitor + // + // Application-specific commands here + // alphanumeric command codes A-Z,a-z,0-9 reserved for application use + // +#if APPLICATION_ArduinoPinsMonitor +#endif // APPLICATION_ArduinoPinsMonitor + + // + // add new commands here + // + default: + extern bool MAX11043_menu_onEOLcommandParser(CmdLine & cmdLine); // defined in Test_Menu_MAX11043.cpp + if (!MAX11043_menu_onEOLcommandParser(cmdLine)) + { // not_handled_by_device_submenu + cmdLine.serial().printf("\r\n unknown command 0x%2.2x \"%s\"\r\n", cmdLine.str()[0], cmdLine.str()); + +# if HAS_DAPLINK_SERIAL + cmdLine_DAPLINKserial.serial().printf("\r\n unknown command 0x%2.2x \"%s\"\r\n", cmdLine.str()[0], cmdLine.str()); + +# endif // HAS_DAPLINK_SERIAL + } + } // switch (cmdLine[0]) +// +// print command prompt + cmdLine.serial().printf("\r\nMAX11043 > "); + +} // end void main_menu_onEOLcommandParser(CmdLine & cmdLine) + +//-------------------------------------------------- +void InitializeConfiguration() +{ + // CODE GENERATOR: example code: member function Init +# if HAS_DAPLINK_SERIAL + cmdLine_DAPLINKserial.serial().printf("\r\nMAX11043_Init()"); + +# endif + cmdLine_serial.serial().printf("\r\nMAX11043_Init()"); + + int initResult = g_MAX11043_device.Init(); // defined in #include MAX11043.h +# if HAS_DAPLINK_SERIAL + cmdLine_DAPLINKserial.serial().printf("\r\nMAX11043_Init() returned %d\r\n", initResult); + +# endif + cmdLine_serial.serial().printf("\r\nMAX11043_Init() returned %d\r\n", initResult); + +# if MAX11043_ONSPIPRINT + // Optional Diagnostic function to print SPI transactions + g_MAX11043_device.onSPIprint = onSPIprint_handler; +# endif +} + +//-------------------------------------------------- +// diagnostic rbg led GREEN +void diagnostic_led_EOF() +{ +#if USE_LEDS + led1 = LED_ON; led2 = LED_ON; led3 = LED_OFF; // diagnostic rbg led RED+GREEN=YELLOW + // TODO1: mbed-os-5.11: [Warning] 'static osStatus rtos::Thread::wait(uint32_t)' is deprecated: Static methods only affecting current thread cause confusion. Replaced by ThisThread::sleep_for. [since mbed-os-5.10] [-Wdeprecated-declarations] + ThisThread::sleep_for(250); // [since mbed-os-5.10] vs Thread::wait(250); + led1 = LED_OFF; led2 = LED_ON; led3 = LED_OFF; // diagnostic rbg led GREEN + ThisThread::sleep_for(250); // [since mbed-os-5.10] vs Thread::wait(250); + led1 = LED_ON; led2 = LED_ON; led3 = LED_OFF; // diagnostic rbg led RED+GREEN=YELLOW + ThisThread::sleep_for(250); // [since mbed-os-5.10] vs Thread::wait(250); + led1 = LED_OFF; led2 = LED_ON; led3 = LED_OFF; // diagnostic rbg led GREEN + ThisThread::sleep_for(250); // [since mbed-os-5.10] vs Thread::wait(250); +#endif // USE_LEDS +} + +//-------------------------------------------------- +// Support commands that get handled immediately w/o waiting for EOL +// handled as immediate command, do not append to buffer +void on_immediate_0x21() // Unicode (U+0021) ! EXCLAMATION MARK +{ +#if USE_LEDS + led1 = LED_OFF; led2 = LED_OFF; led3 = LED_ON; // diagnostic rbg led BLUE +#endif // USE_LEDS + InitializeConfiguration(); + ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125); +} + +//-------------------------------------------------- +// Support commands that get handled immediately w/o waiting for EOL +// handled as immediate command, do not append to buffer +void on_immediate_0x7b() // Unicode (U+007B) { LEFT CURLY BRACKET +{ +#if HAS_BUTTON2_DEMO_INTERRUPT + onButton2FallingEdge(); +#endif +} + +//-------------------------------------------------- +// Support commands that get handled immediately w/o waiting for EOL +// handled as immediate command, do not append to buffer +void on_immediate_0x7d() // Unicode (U+007D) } RIGHT CURLY BRACKET +{ +#if HAS_BUTTON1_DEMO_INTERRUPT + onButton1FallingEdge(); +#endif +} + +//---------------------------------------- +// example code main function +int main() +{ + // Configure serial ports + cmdLine_serial.clear(); + //~ cmdLine_serial.serial().printf("\r\n cmdLine_serial.serial().printf test\r\n"); + cmdLine_serial.onEOLcommandParser = main_menu_onEOLcommandParser; + cmdLine_serial.diagnostic_led_EOF = diagnostic_led_EOF; + /// CmdLine::set_immediate_handler(char, functionPointer_void_void_on_immediate_0x21); + cmdLine_serial.on_immediate_0x21 = on_immediate_0x21; + cmdLine_serial.on_immediate_0x7b = on_immediate_0x7b; + cmdLine_serial.on_immediate_0x7d = on_immediate_0x7d; +# if HAS_DAPLINK_SERIAL + cmdLine_DAPLINKserial.clear(); + //~ cmdLine_DAPLINKserial.serial().printf("\r\n cmdLine_DAPLINKserial.serial().printf test\r\n"); + cmdLine_DAPLINKserial.onEOLcommandParser = main_menu_onEOLcommandParser; + /// @todo CmdLine::set_immediate_handler(char, functionPointer_void_void_on_immediate_0x21); + cmdLine_DAPLINKserial.on_immediate_0x21 = on_immediate_0x21; + cmdLine_DAPLINKserial.on_immediate_0x7b = on_immediate_0x7b; + cmdLine_DAPLINKserial.on_immediate_0x7d = on_immediate_0x7d; +# endif + + + //print_banner(); + + + +#if USE_LEDS +#if defined(TARGET_MAX32630) + led1 = LED_ON; led2 = LED_OFF; led3 = LED_OFF; // diagnostic rbg led RED + ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125); + led1 = LED_OFF; led2 = LED_ON; led3 = LED_OFF; // diagnostic rbg led GREEN + ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125); + led1 = LED_OFF; led2 = LED_OFF; led3 = LED_ON; // diagnostic rbg led BLUE + ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125); + led1 = LED_ON; led2 = LED_ON; led3 = LED_ON; // diagnostic rbg led RED+GREEN+BLUE=WHITE + ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125); + led1 = LED_OFF; led2 = LED_ON; led3 = LED_ON; // diagnostic rbg led GREEN+BLUE=CYAN + ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125); + led1 = LED_ON; led2 = LED_OFF; led3 = LED_ON; // diagnostic rbg led RED+BLUE=MAGENTA + ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125); + led1 = LED_ON; led2 = LED_ON; led3 = LED_OFF; // diagnostic rbg led RED+GREEN=YELLOW + ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125); + led1 = LED_OFF; led2 = LED_OFF; led3 = LED_OFF; // diagnostic rbg led BLACK + ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125); +#elif defined(TARGET_MAX32625MBED) + led1 = LED_ON; led2 = LED_OFF; led3 = LED_OFF; // diagnostic rbg led RED + ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125); + led1 = LED_OFF; led2 = LED_ON; led3 = LED_OFF; // diagnostic rbg led GREEN + ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125); + led1 = LED_OFF; led2 = LED_OFF; led3 = LED_ON; // diagnostic rbg led BLUE + ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125); + led1 = LED_ON; led2 = LED_ON; led3 = LED_ON; // diagnostic rbg led RED+GREEN+BLUE=WHITE + ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125); + led1 = LED_OFF; led2 = LED_ON; led3 = LED_ON; // diagnostic rbg led GREEN+BLUE=CYAN + ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125); + led1 = LED_ON; led2 = LED_OFF; led3 = LED_ON; // diagnostic rbg led RED+BLUE=MAGENTA + ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125); + led1 = LED_ON; led2 = LED_ON; led3 = LED_OFF; // diagnostic rbg led RED+GREEN=YELLOW + ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125); + led1 = LED_OFF; led2 = LED_OFF; led3 = LED_OFF; // diagnostic rbg led BLACK + ThisThread::sleep_for(125); // [since mbed-os-5.10] vs Thread::wait(125); +#else // not defined(TARGET_LPC1768 etc.) + led1 = LED_ON; + led2 = LED_OFF; + led3 = LED_OFF; + led4 = LED_OFF; + ThisThread::sleep_for(75); // [since mbed-os-5.10] vs Thread::wait(75); + //led1 = LED_ON; + led2 = LED_ON; + ThisThread::sleep_for(75); // [since mbed-os-5.10] vs Thread::wait(75); + led1 = LED_OFF; + //led2 = LED_ON; + led3 = LED_ON; + ThisThread::sleep_for(75); // [since mbed-os-5.10] vs Thread::wait(75); + led2 = LED_OFF; + //led3 = LED_ON; + led4 = LED_ON; + ThisThread::sleep_for(75); // [since mbed-os-5.10] vs Thread::wait(75); + led3 = LED_OFF; + led4 = LED_ON; + // +#endif // target definition +#endif + + // cmd_TE(); + +// #if USE_LEDS +// rgb_led.white(); // diagnostic rbg led RED+GREEN+BLUE=WHITE +// #endif // USE_LEDS + led1 = LED_ON; + led2 = LED_ON; + led3 = LED_ON; + + InitializeConfiguration(); + // CODE GENERATOR: example code: member function Init + g_MAX11043_device.Init(); + + // example code: serial port banner message + #if defined(TARGET_MAX32625MBED) + serial.printf("MAX32625MBED "); + #elif defined(TARGET_MAX32600MBED) + serial.printf("MAX32600MBED "); + #elif defined(TARGET_NUCLEO_F446RE) + serial.printf("NUCLEO_F446RE "); + #endif + serial.printf("MAX11043BOB\r\n"); + + + while (1) { +#if HAS_BUTTON1_DEMO_INTERRUPT_POLLING + // avoid runtime error on button1 press [mbed-os-5.11] + // instead of using InterruptIn, use DigitalIn and poll in main while(1) +# if HAS_BUTTON1_DEMO_INTERRUPT + static int button1_value_prev = 1; + static int button1_value_now = 1; + button1_value_prev = button1_value_now; + button1_value_now = button1.read(); + if ((button1_value_prev - button1_value_now) == 1) + { + // on button1 falling edge (button1 press) + onButton1FallingEdge(); + } +# endif // HAS_BUTTON1_DEMO_INTERRUPT +# if HAS_BUTTON2_DEMO_INTERRUPT + static int button2_value_prev = 1; + static int button2_value_now = 1; + button2_value_prev = button2_value_now; + button2_value_now = button2.read(); + if ((button2_value_prev - button2_value_now) == 1) + { + // on button2 falling edge (button2 press) + onButton2FallingEdge(); + } +# endif // HAS_BUTTON2_DEMO_INTERRUPT +#endif + # if HAS_DAPLINK_SERIAL + if (DAPLINKserial.readable()) { + cmdLine_DAPLINKserial.append(DAPLINKserial.getc()); + } + # endif // HAS_DAPLINK_SERIAL + if (serial.readable()) { + int c = serial.getc(); + cmdLine_serial.append(c); +#if IGNORE_AT_COMMANDS +# if HAS_DAPLINK_SERIAL + cmdLine_DAPLINKserial.serial().printf("%c", c); +# endif // HAS_DAPLINK_SERIAL +#endif // IGNORE_AT_COMMANDS + // + } + } // while(1) +} +//---------- CODE GENERATOR: end testMainCppCodeList +