Maxim Integrated MAX11131 SPI 12-bit 16-channel ADC with SampleSet
Dependents: MAX11131BOB_Tester MAX11131BOB_12bit_16ch_SampleSet_SPI_ADC MAX11131BOB_Serial_Tester
Diff: MAX11131.h
- Revision:
- 0:f7d706d2904d
- Child:
- 1:77f1ee332e4a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MAX11131.h Wed Jun 05 02:16:46 2019 +0000 @@ -0,0 +1,1721 @@ +// /******************************************************************************* +// * Copyright (C) 2019 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. +// ******************************************************************************* +// */ +// ********************************************************************* +// @file MAX11131.h +// ********************************************************************* +// Header file +// DO NOT EDIT; except areas designated "CUSTOMIZE". Automatically generated file. +// generated by XMLSystemOfDevicesToMBED.py +// System Name = ExampleSystem +// System Description = Device driver example +// Device Name = MAX11131 +// Device Description = 3Msps, Low-Power, Serial SPI 12-Bit, 16-Channel, Differential/Single-Ended Input, SAR ADC +// Device Manufacturer = Maxim Integrated +// Device PartNumber = MAX11131ATI+ +// Device RegValue_Width = DataWidth16bit_HL +// +// ADC MaxOutputDataRate = 3Msps +// ADC NumChannels = 16 +// ADC ResolutionBits = 12 +// +// SPI CS = ActiveLow +// SPI FrameStart = CS +// SPI CPOL = 1 +// SPI CPHA = 1 +// SPI MOSI and MISO Data are both stable on Rising edge of SCLK +// SPI SCLK Idle High +// SPI SCLKMaxMHz = 48 +// SPI SCLKMinMHz = 0.48 +// + + +// Prevent multiple declaration +#ifndef __MAX11131_H__ +#define __MAX11131_H__ + +#include "mbed.h" + +// CODE GENERATOR: conditional defines +//---------------------------------------- +// Global setting for all channels: ADC_CONFIGURATION.REFSEL +// +// CUSTOMIZE: select one of the following options +// either by uncommenting in this file or define at the project level +//-------------------- +// external single-ended reference +//~ #define REFSEL_0 1 +// +//-------------------- +// external differential reference (For the 16-channel chips: channel AIN15 is unavailable, the pin is assigned to REF-.) +//~ #define REFSEL_1 1 +// +//-------------------- +// +// Default settings if not defined at project level +#ifndef REFSEL_0 +# ifndef REFSEL_1 +# define REFSEL_0 1 +# define REFSEL_1 0 +# endif // REFSEL_1 +#endif // REFSEL_0 +// +// (optional diagnostic) pragma message the active setting +#if REFSEL_0 +//~ # pragma message("REFSEL_0: external single-ended reference") +#endif // REFSEL_0 +#if REFSEL_1 +//~ # pragma message("REFSEL_1: external differential reference (For the 16-channel chips: channel AIN15 is unavailable, the pin is assigned to REF-.)") +#endif // REFSEL_1 +// +// Validate the REFSEL_0 setting +#if REFSEL_0 +# if REFSEL_1 +# error("cannot have both REFSEL_0 and REFSEL_1; choose one") +# endif // REFSEL_1 +#endif // REFSEL_0 + +//---------------------------------------- +// Global setting for all channels: UNIPOLAR.PDIFF_COMM +// +// CUSTOMIZE: select one of the following options +// either by uncommenting in this file or define at the project level +//-------------------- +// all single-ended channels are pseudo-differential with REF- as common +//~ #define PDIFF_COMM_1 1 +// +//-------------------- +// all single-ended channels use GND as common +//~ #define PDIFF_COMM_0 1 +// +//-------------------- +// +// Default settings if not defined at project level +#ifndef PDIFF_COMM_1 +# ifndef PDIFF_COMM_0 +# define PDIFF_COMM_1 0 +# define PDIFF_COMM_0 1 +# endif // PDIFF_COMM_0 +#endif // PDIFF_COMM_1 +// +// (optional diagnostic) pragma message the active setting +#if PDIFF_COMM_1 +//~ # pragma message("PDIFF_COMM_1: all single-ended channels are pseudo-differential with REF- as common") +#endif // PDIFF_COMM_1 +#if PDIFF_COMM_0 +//~ # pragma message("PDIFF_COMM_0: all single-ended channels use GND as common") +#endif // PDIFF_COMM_0 +// +// Validate the PDIFF_COMM_1 setting +#if PDIFF_COMM_1 +# if PDIFF_COMM_0 +# error("cannot have both PDIFF_COMM_1 and PDIFF_COMM_0; choose one") +# endif // PDIFF_COMM_0 +#endif // PDIFF_COMM_1 + +//---------------------------------------- +// ADC Channels AIN0, AIN1 +// +// CUSTOMIZE: select one of the following options +// either by uncommenting in this file or define at the project level +//-------------------- +// ADC Channels AIN0, AIN1 = Differential Unipolar (AIN0 > AIN1) +// Full Scale = VREF +// Voltage per LSB count = VREF/2048 +// AIN0, AIN1 are a Differential pair using Unipolar transfer function. +// AIN0 voltage must always be between 0 and VREF. +// AIN1 voltage must always be between 0 and VREF. +// +//~ #define AIN_0_1_DifferentialUnipolar 1 +// +//-------------------- +// ADC Channels AIN0, AIN1 = Differential Bipolar +// Full Scale = VREF +// Voltage per LSB count = VREF/2048 +// AIN0, AIN1 are a Differential pair using Bipolar transfer function with range ±½Vref +// AIN0 voltage must always be between 0 and VREF. +// AIN1 voltage must always be between 0 and VREF. +// +//~ #define AIN_0_1_DifferentialBipolarFSVref 1 +// +//-------------------- +// ADC Channels AIN0, AIN1 = Differential Bipolar +// Full Scale = 2 * VREF +// Voltage per LSB count = VREF/2048 +// AIN0, AIN1 are a Differential pair using Bipolar transfer function with range ±Vref +// AIN0 voltage must always be between 0 and VREF. +// AIN1 voltage must always be between 0 and VREF. +// +//~ #define AIN_0_1_DifferentialBipolarFS2Vref 1 +// +//-------------------- +// ADC Channels AIN0, AIN1 = Both Single-Ended, Unipolar +// Full Scale = VREF +// Voltage per LSB count = VREF/2048 +// AIN0 is a Single-Ended input using Unipolar transfer function. +// AIN1 is a Single-Ended input using Unipolar transfer function. +// If PDIFF_COM_1, both are Pseudo-Differential with REF- as common. +// AIN0 voltage must always be between 0 and VREF. +// AIN1 voltage must always be between 0 and VREF. +// +//~ #define AIN_0_1_SingleEnded 1 +// +//-------------------- +// +// Default settings if not defined at project level +#ifndef AIN_0_1_DifferentialUnipolar +# ifndef AIN_0_1_DifferentialBipolarFSVref +# ifndef AIN_0_1_DifferentialBipolarFS2Vref +# ifndef AIN_0_1_SingleEnded +# define AIN_0_1_DifferentialUnipolar 0 +# define AIN_0_1_DifferentialBipolarFSVref 0 +# define AIN_0_1_DifferentialBipolarFS2Vref 0 +# define AIN_0_1_SingleEnded 1 +# endif // AIN_0_1_SingleEnded +# endif // AIN_0_1_DifferentialBipolarFS2Vref +# endif // AIN_0_1_DifferentialBipolarFSVref +#endif // AIN_0_1_DifferentialUnipolar +// +// (optional diagnostic) pragma message the active setting +#if AIN_0_1_DifferentialUnipolar +//~ # pragma message("AIN_0_1_DifferentialUnipolar: ADC Channels AIN0, AIN1 = Differential Unipolar (AIN0 > AIN1)") +#endif // AIN_0_1_DifferentialUnipolar +#if AIN_0_1_DifferentialBipolarFSVref +//~ # pragma message("AIN_0_1_DifferentialBipolarFSVref: ADC Channels AIN0, AIN1 = Differential Bipolar") +#endif // AIN_0_1_DifferentialBipolarFSVref +#if AIN_0_1_DifferentialBipolarFS2Vref +//~ # pragma message("AIN_0_1_DifferentialBipolarFS2Vref: ADC Channels AIN0, AIN1 = Differential Bipolar") +#endif // AIN_0_1_DifferentialBipolarFS2Vref +#if AIN_0_1_SingleEnded +//~ # pragma message("AIN_0_1_SingleEnded: ADC Channels AIN0, AIN1 = Both Single-Ended, Unipolar") +#endif // AIN_0_1_SingleEnded +// +// Validate the AIN_0_1_DifferentialUnipolar setting +#if AIN_0_1_DifferentialUnipolar +# if AIN_0_1_DifferentialBipolarFSVref +# error("cannot have both AIN_0_1_DifferentialUnipolar and AIN_0_1_DifferentialBipolarFSVref; choose one") +# endif // AIN_0_1_DifferentialBipolarFSVref +# if AIN_0_1_DifferentialBipolarFS2Vref +# error("cannot have both AIN_0_1_DifferentialUnipolar and AIN_0_1_DifferentialBipolarFS2Vref; choose one") +# endif // AIN_0_1_DifferentialBipolarFS2Vref +# if AIN_0_1_SingleEnded +# error("cannot have both AIN_0_1_DifferentialUnipolar and AIN_0_1_SingleEnded; choose one") +# endif // AIN_0_1_SingleEnded +#endif // AIN_0_1_DifferentialUnipolar +// +// Validate the AIN_0_1_DifferentialBipolarFSVref setting +#if AIN_0_1_DifferentialBipolarFSVref +# if AIN_0_1_DifferentialBipolarFS2Vref +# error("cannot have both AIN_0_1_DifferentialBipolarFSVref and AIN_0_1_DifferentialBipolarFS2Vref; choose one") +# endif // AIN_0_1_DifferentialBipolarFS2Vref +# if AIN_0_1_SingleEnded +# error("cannot have both AIN_0_1_DifferentialBipolarFSVref and AIN_0_1_SingleEnded; choose one") +# endif // AIN_0_1_SingleEnded +#endif // AIN_0_1_DifferentialBipolarFSVref +// +// Validate the AIN_0_1_DifferentialBipolarFS2Vref setting +#if AIN_0_1_DifferentialBipolarFS2Vref +# if AIN_0_1_SingleEnded +# error("cannot have both AIN_0_1_DifferentialBipolarFS2Vref and AIN_0_1_SingleEnded; choose one") +# endif // AIN_0_1_SingleEnded +#endif // AIN_0_1_DifferentialBipolarFS2Vref + +//---------------------------------------- +// ADC Channels AIN2, AIN3 +// +// CUSTOMIZE: select one of the following options +// either by uncommenting in this file or define at the project level +//-------------------- +// ADC Channels AIN2, AIN3 = Differential Bipolar +// Full Scale = VREF +// Voltage per LSB count = VREF/2048 +// AIN2, AIN3 are a Differential pair using Bipolar transfer function with range ±½Vref +// AIN2 voltage must always be between 0 and VREF. +// AIN3 voltage must always be between 0 and VREF. +// +//~ #define AIN_2_3_DifferentialBipolarFSVref 1 +// +//-------------------- +// ADC Channels AIN2, AIN3 = Differential Bipolar +// Full Scale = 2 * VREF +// Voltage per LSB count = VREF/2048 +// AIN2, AIN3 are a Differential pair using Bipolar transfer function with range ±Vref +// AIN2 voltage must always be between 0 and VREF. +// AIN3 voltage must always be between 0 and VREF. +// +//~ #define AIN_2_3_DifferentialBipolarFS2Vref 1 +// +//-------------------- +// ADC Channels AIN2, AIN3 = Both Single-Ended, Unipolar +// Full Scale = VREF +// Voltage per LSB count = VREF/2048 +// AIN2 is a Single-Ended input using Unipolar transfer function. +// AIN3 is a Single-Ended input using Unipolar transfer function. +// If PDIFF_COM_1, both are Pseudo-Differential with REF- as common. +// AIN2 voltage must always be between 0 and VREF. +// AIN3 voltage must always be between 0 and VREF. +// +//~ #define AIN_2_3_SingleEnded 1 +// +//-------------------- +// ADC Channels AIN2, AIN3 = Differential Unipolar (AIN2 > AIN3) +// Full Scale = VREF +// Voltage per LSB count = VREF/2048 +// AIN2, AIN3 are a Differential pair using Unipolar transfer function. +// AIN2 voltage must always be between 0 and VREF. +// AIN3 voltage must always be between 0 and VREF. +// +//~ #define AIN_2_3_DifferentialUnipolar 1 +// +//-------------------- +// +// Default settings if not defined at project level +#ifndef AIN_2_3_DifferentialBipolarFSVref +# ifndef AIN_2_3_DifferentialBipolarFS2Vref +# ifndef AIN_2_3_SingleEnded +# ifndef AIN_2_3_DifferentialUnipolar +# define AIN_2_3_DifferentialBipolarFSVref 0 +# define AIN_2_3_DifferentialBipolarFS2Vref 0 +# define AIN_2_3_SingleEnded 1 +# define AIN_2_3_DifferentialUnipolar 0 +# endif // AIN_2_3_DifferentialUnipolar +# endif // AIN_2_3_SingleEnded +# endif // AIN_2_3_DifferentialBipolarFS2Vref +#endif // AIN_2_3_DifferentialBipolarFSVref +// +// (optional diagnostic) pragma message the active setting +#if AIN_2_3_DifferentialBipolarFSVref +//~ # pragma message("AIN_2_3_DifferentialBipolarFSVref: ADC Channels AIN2, AIN3 = Differential Bipolar") +#endif // AIN_2_3_DifferentialBipolarFSVref +#if AIN_2_3_DifferentialBipolarFS2Vref +//~ # pragma message("AIN_2_3_DifferentialBipolarFS2Vref: ADC Channels AIN2, AIN3 = Differential Bipolar") +#endif // AIN_2_3_DifferentialBipolarFS2Vref +#if AIN_2_3_SingleEnded +//~ # pragma message("AIN_2_3_SingleEnded: ADC Channels AIN2, AIN3 = Both Single-Ended, Unipolar") +#endif // AIN_2_3_SingleEnded +#if AIN_2_3_DifferentialUnipolar +//~ # pragma message("AIN_2_3_DifferentialUnipolar: ADC Channels AIN2, AIN3 = Differential Unipolar (AIN2 > AIN3)") +#endif // AIN_2_3_DifferentialUnipolar +// +// Validate the AIN_2_3_DifferentialBipolarFSVref setting +#if AIN_2_3_DifferentialBipolarFSVref +# if AIN_2_3_DifferentialBipolarFS2Vref +# error("cannot have both AIN_2_3_DifferentialBipolarFSVref and AIN_2_3_DifferentialBipolarFS2Vref; choose one") +# endif // AIN_2_3_DifferentialBipolarFS2Vref +# if AIN_2_3_SingleEnded +# error("cannot have both AIN_2_3_DifferentialBipolarFSVref and AIN_2_3_SingleEnded; choose one") +# endif // AIN_2_3_SingleEnded +# if AIN_2_3_DifferentialUnipolar +# error("cannot have both AIN_2_3_DifferentialBipolarFSVref and AIN_2_3_DifferentialUnipolar; choose one") +# endif // AIN_2_3_DifferentialUnipolar +#endif // AIN_2_3_DifferentialBipolarFSVref +// +// Validate the AIN_2_3_DifferentialBipolarFS2Vref setting +#if AIN_2_3_DifferentialBipolarFS2Vref +# if AIN_2_3_SingleEnded +# error("cannot have both AIN_2_3_DifferentialBipolarFS2Vref and AIN_2_3_SingleEnded; choose one") +# endif // AIN_2_3_SingleEnded +# if AIN_2_3_DifferentialUnipolar +# error("cannot have both AIN_2_3_DifferentialBipolarFS2Vref and AIN_2_3_DifferentialUnipolar; choose one") +# endif // AIN_2_3_DifferentialUnipolar +#endif // AIN_2_3_DifferentialBipolarFS2Vref +// +// Validate the AIN_2_3_SingleEnded setting +#if AIN_2_3_SingleEnded +# if AIN_2_3_DifferentialUnipolar +# error("cannot have both AIN_2_3_SingleEnded and AIN_2_3_DifferentialUnipolar; choose one") +# endif // AIN_2_3_DifferentialUnipolar +#endif // AIN_2_3_SingleEnded + +//---------------------------------------- +// ADC Channels AIN4, AIN5 +// +// CUSTOMIZE: select one of the following options +// either by uncommenting in this file or define at the project level +//-------------------- +// ADC Channels AIN4, AIN5 = Differential Unipolar (AIN4 > AIN5) +// Full Scale = VREF +// Voltage per LSB count = VREF/2048 +// AIN4, AIN5 are a Differential pair using Unipolar transfer function. +// AIN4 voltage must always be between 0 and VREF. +// AIN5 voltage must always be between 0 and VREF. +// +//~ #define AIN_4_5_DifferentialUnipolar 1 +// +//-------------------- +// ADC Channels AIN4, AIN5 = Differential Bipolar +// Full Scale = VREF +// Voltage per LSB count = VREF/2048 +// AIN4, AIN5 are a Differential pair using Bipolar transfer function with range ±½Vref +// AIN4 voltage must always be between 0 and VREF. +// AIN5 voltage must always be between 0 and VREF. +// +//~ #define AIN_4_5_DifferentialBipolarFSVref 1 +// +//-------------------- +// ADC Channels AIN4, AIN5 = Differential Bipolar +// Full Scale = 2 * VREF +// Voltage per LSB count = VREF/2048 +// AIN4, AIN5 are a Differential pair using Bipolar transfer function with range ±Vref +// AIN4 voltage must always be between 0 and VREF. +// AIN5 voltage must always be between 0 and VREF. +// +//~ #define AIN_4_5_DifferentialBipolarFS2Vref 1 +// +//-------------------- +// ADC Channels AIN4, AIN5 = Both Single-Ended, Unipolar +// Full Scale = VREF +// Voltage per LSB count = VREF/2048 +// AIN4 is a Single-Ended input using Unipolar transfer function. +// AIN5 is a Single-Ended input using Unipolar transfer function. +// If PDIFF_COM_1, both are Pseudo-Differential with REF- as common. +// AIN4 voltage must always be between 0 and VREF. +// AIN5 voltage must always be between 0 and VREF. +// +//~ #define AIN_4_5_SingleEnded 1 +// +//-------------------- +// +// Default settings if not defined at project level +#ifndef AIN_4_5_DifferentialUnipolar +# ifndef AIN_4_5_DifferentialBipolarFSVref +# ifndef AIN_4_5_DifferentialBipolarFS2Vref +# ifndef AIN_4_5_SingleEnded +# define AIN_4_5_DifferentialUnipolar 0 +# define AIN_4_5_DifferentialBipolarFSVref 0 +# define AIN_4_5_DifferentialBipolarFS2Vref 0 +# define AIN_4_5_SingleEnded 1 +# endif // AIN_4_5_SingleEnded +# endif // AIN_4_5_DifferentialBipolarFS2Vref +# endif // AIN_4_5_DifferentialBipolarFSVref +#endif // AIN_4_5_DifferentialUnipolar +// +// (optional diagnostic) pragma message the active setting +#if AIN_4_5_DifferentialUnipolar +//~ # pragma message("AIN_4_5_DifferentialUnipolar: ADC Channels AIN4, AIN5 = Differential Unipolar (AIN4 > AIN5)") +#endif // AIN_4_5_DifferentialUnipolar +#if AIN_4_5_DifferentialBipolarFSVref +//~ # pragma message("AIN_4_5_DifferentialBipolarFSVref: ADC Channels AIN4, AIN5 = Differential Bipolar") +#endif // AIN_4_5_DifferentialBipolarFSVref +#if AIN_4_5_DifferentialBipolarFS2Vref +//~ # pragma message("AIN_4_5_DifferentialBipolarFS2Vref: ADC Channels AIN4, AIN5 = Differential Bipolar") +#endif // AIN_4_5_DifferentialBipolarFS2Vref +#if AIN_4_5_SingleEnded +//~ # pragma message("AIN_4_5_SingleEnded: ADC Channels AIN4, AIN5 = Both Single-Ended, Unipolar") +#endif // AIN_4_5_SingleEnded +// +// Validate the AIN_4_5_DifferentialUnipolar setting +#if AIN_4_5_DifferentialUnipolar +# if AIN_4_5_DifferentialBipolarFSVref +# error("cannot have both AIN_4_5_DifferentialUnipolar and AIN_4_5_DifferentialBipolarFSVref; choose one") +# endif // AIN_4_5_DifferentialBipolarFSVref +# if AIN_4_5_DifferentialBipolarFS2Vref +# error("cannot have both AIN_4_5_DifferentialUnipolar and AIN_4_5_DifferentialBipolarFS2Vref; choose one") +# endif // AIN_4_5_DifferentialBipolarFS2Vref +# if AIN_4_5_SingleEnded +# error("cannot have both AIN_4_5_DifferentialUnipolar and AIN_4_5_SingleEnded; choose one") +# endif // AIN_4_5_SingleEnded +#endif // AIN_4_5_DifferentialUnipolar +// +// Validate the AIN_4_5_DifferentialBipolarFSVref setting +#if AIN_4_5_DifferentialBipolarFSVref +# if AIN_4_5_DifferentialBipolarFS2Vref +# error("cannot have both AIN_4_5_DifferentialBipolarFSVref and AIN_4_5_DifferentialBipolarFS2Vref; choose one") +# endif // AIN_4_5_DifferentialBipolarFS2Vref +# if AIN_4_5_SingleEnded +# error("cannot have both AIN_4_5_DifferentialBipolarFSVref and AIN_4_5_SingleEnded; choose one") +# endif // AIN_4_5_SingleEnded +#endif // AIN_4_5_DifferentialBipolarFSVref +// +// Validate the AIN_4_5_DifferentialBipolarFS2Vref setting +#if AIN_4_5_DifferentialBipolarFS2Vref +# if AIN_4_5_SingleEnded +# error("cannot have both AIN_4_5_DifferentialBipolarFS2Vref and AIN_4_5_SingleEnded; choose one") +# endif // AIN_4_5_SingleEnded +#endif // AIN_4_5_DifferentialBipolarFS2Vref + +//---------------------------------------- +// ADC Channels AIN6, AIN7 +// +// CUSTOMIZE: select one of the following options +// either by uncommenting in this file or define at the project level +//-------------------- +// ADC Channels AIN6, AIN7 = Differential Bipolar +// Full Scale = VREF +// Voltage per LSB count = VREF/2048 +// AIN6, AIN7 are a Differential pair using Bipolar transfer function with range ±½Vref +// AIN6 voltage must always be between 0 and VREF. +// AIN7 voltage must always be between 0 and VREF. +// +//~ #define AIN_6_7_DifferentialBipolarFSVref 1 +// +//-------------------- +// ADC Channels AIN6, AIN7 = Differential Bipolar +// Full Scale = 2 * VREF +// Voltage per LSB count = VREF/2048 +// AIN6, AIN7 are a Differential pair using Bipolar transfer function with range ±Vref +// AIN6 voltage must always be between 0 and VREF. +// AIN7 voltage must always be between 0 and VREF. +// +//~ #define AIN_6_7_DifferentialBipolarFS2Vref 1 +// +//-------------------- +// ADC Channels AIN6, AIN7 = Both Single-Ended, Unipolar +// Full Scale = VREF +// Voltage per LSB count = VREF/2048 +// AIN6 is a Single-Ended input using Unipolar transfer function. +// AIN7 is a Single-Ended input using Unipolar transfer function. +// If PDIFF_COM_1, both are Pseudo-Differential with REF- as common. +// AIN6 voltage must always be between 0 and VREF. +// AIN7 voltage must always be between 0 and VREF. +// +//~ #define AIN_6_7_SingleEnded 1 +// +//-------------------- +// ADC Channels AIN6, AIN7 = Differential Unipolar (AIN6 > AIN7) +// Full Scale = VREF +// Voltage per LSB count = VREF/2048 +// AIN6, AIN7 are a Differential pair using Unipolar transfer function. +// AIN6 voltage must always be between 0 and VREF. +// AIN7 voltage must always be between 0 and VREF. +// +//~ #define AIN_6_7_DifferentialUnipolar 1 +// +//-------------------- +// +// Default settings if not defined at project level +#ifndef AIN_6_7_DifferentialBipolarFSVref +# ifndef AIN_6_7_DifferentialBipolarFS2Vref +# ifndef AIN_6_7_SingleEnded +# ifndef AIN_6_7_DifferentialUnipolar +# define AIN_6_7_DifferentialBipolarFSVref 0 +# define AIN_6_7_DifferentialBipolarFS2Vref 0 +# define AIN_6_7_SingleEnded 1 +# define AIN_6_7_DifferentialUnipolar 0 +# endif // AIN_6_7_DifferentialUnipolar +# endif // AIN_6_7_SingleEnded +# endif // AIN_6_7_DifferentialBipolarFS2Vref +#endif // AIN_6_7_DifferentialBipolarFSVref +// +// (optional diagnostic) pragma message the active setting +#if AIN_6_7_DifferentialBipolarFSVref +//~ # pragma message("AIN_6_7_DifferentialBipolarFSVref: ADC Channels AIN6, AIN7 = Differential Bipolar") +#endif // AIN_6_7_DifferentialBipolarFSVref +#if AIN_6_7_DifferentialBipolarFS2Vref +//~ # pragma message("AIN_6_7_DifferentialBipolarFS2Vref: ADC Channels AIN6, AIN7 = Differential Bipolar") +#endif // AIN_6_7_DifferentialBipolarFS2Vref +#if AIN_6_7_SingleEnded +//~ # pragma message("AIN_6_7_SingleEnded: ADC Channels AIN6, AIN7 = Both Single-Ended, Unipolar") +#endif // AIN_6_7_SingleEnded +#if AIN_6_7_DifferentialUnipolar +//~ # pragma message("AIN_6_7_DifferentialUnipolar: ADC Channels AIN6, AIN7 = Differential Unipolar (AIN6 > AIN7)") +#endif // AIN_6_7_DifferentialUnipolar +// +// Validate the AIN_6_7_DifferentialBipolarFSVref setting +#if AIN_6_7_DifferentialBipolarFSVref +# if AIN_6_7_DifferentialBipolarFS2Vref +# error("cannot have both AIN_6_7_DifferentialBipolarFSVref and AIN_6_7_DifferentialBipolarFS2Vref; choose one") +# endif // AIN_6_7_DifferentialBipolarFS2Vref +# if AIN_6_7_SingleEnded +# error("cannot have both AIN_6_7_DifferentialBipolarFSVref and AIN_6_7_SingleEnded; choose one") +# endif // AIN_6_7_SingleEnded +# if AIN_6_7_DifferentialUnipolar +# error("cannot have both AIN_6_7_DifferentialBipolarFSVref and AIN_6_7_DifferentialUnipolar; choose one") +# endif // AIN_6_7_DifferentialUnipolar +#endif // AIN_6_7_DifferentialBipolarFSVref +// +// Validate the AIN_6_7_DifferentialBipolarFS2Vref setting +#if AIN_6_7_DifferentialBipolarFS2Vref +# if AIN_6_7_SingleEnded +# error("cannot have both AIN_6_7_DifferentialBipolarFS2Vref and AIN_6_7_SingleEnded; choose one") +# endif // AIN_6_7_SingleEnded +# if AIN_6_7_DifferentialUnipolar +# error("cannot have both AIN_6_7_DifferentialBipolarFS2Vref and AIN_6_7_DifferentialUnipolar; choose one") +# endif // AIN_6_7_DifferentialUnipolar +#endif // AIN_6_7_DifferentialBipolarFS2Vref +// +// Validate the AIN_6_7_SingleEnded setting +#if AIN_6_7_SingleEnded +# if AIN_6_7_DifferentialUnipolar +# error("cannot have both AIN_6_7_SingleEnded and AIN_6_7_DifferentialUnipolar; choose one") +# endif // AIN_6_7_DifferentialUnipolar +#endif // AIN_6_7_SingleEnded + +//---------------------------------------- +// ADC Channels AIN8, AIN9 +// +// CUSTOMIZE: select one of the following options +// either by uncommenting in this file or define at the project level +//-------------------- +// ADC Channels AIN8, AIN9 = Differential Unipolar (AIN8 > AIN9) +// Full Scale = VREF +// Voltage per LSB count = VREF/2048 +// AIN8, AIN9 are a Differential pair using Unipolar transfer function. +// AIN8 voltage must always be between 0 and VREF. +// AIN9 voltage must always be between 0 and VREF. +// +//~ #define AIN_8_9_DifferentialUnipolar 1 +// +//-------------------- +// ADC Channels AIN8, AIN9 = Differential Bipolar +// Full Scale = VREF +// Voltage per LSB count = VREF/2048 +// AIN8, AIN9 are a Differential pair using Bipolar transfer function with range ±½Vref +// AIN8 voltage must always be between 0 and VREF. +// AIN9 voltage must always be between 0 and VREF. +// +//~ #define AIN_8_9_DifferentialBipolarFSVref 1 +// +//-------------------- +// ADC Channels AIN8, AIN9 = Differential Bipolar +// Full Scale = 2 * VREF +// Voltage per LSB count = VREF/2048 +// AIN8, AIN9 are a Differential pair using Bipolar transfer function with range ±Vref +// AIN8 voltage must always be between 0 and VREF. +// AIN9 voltage must always be between 0 and VREF. +// +//~ #define AIN_8_9_DifferentialBipolarFS2Vref 1 +// +//-------------------- +// ADC Channels AIN8, AIN9 = Both Single-Ended, Unipolar +// Full Scale = VREF +// Voltage per LSB count = VREF/2048 +// AIN8 is a Single-Ended input using Unipolar transfer function. +// AIN9 is a Single-Ended input using Unipolar transfer function. +// If PDIFF_COM_1, both are Pseudo-Differential with REF- as common. +// AIN8 voltage must always be between 0 and VREF. +// AIN9 voltage must always be between 0 and VREF. +// +//~ #define AIN_8_9_SingleEnded 1 +// +//-------------------- +// +// Default settings if not defined at project level +#ifndef AIN_8_9_DifferentialUnipolar +# ifndef AIN_8_9_DifferentialBipolarFSVref +# ifndef AIN_8_9_DifferentialBipolarFS2Vref +# ifndef AIN_8_9_SingleEnded +# define AIN_8_9_DifferentialUnipolar 0 +# define AIN_8_9_DifferentialBipolarFSVref 0 +# define AIN_8_9_DifferentialBipolarFS2Vref 0 +# define AIN_8_9_SingleEnded 1 +# endif // AIN_8_9_SingleEnded +# endif // AIN_8_9_DifferentialBipolarFS2Vref +# endif // AIN_8_9_DifferentialBipolarFSVref +#endif // AIN_8_9_DifferentialUnipolar +// +// (optional diagnostic) pragma message the active setting +#if AIN_8_9_DifferentialUnipolar +//~ # pragma message("AIN_8_9_DifferentialUnipolar: ADC Channels AIN8, AIN9 = Differential Unipolar (AIN8 > AIN9)") +#endif // AIN_8_9_DifferentialUnipolar +#if AIN_8_9_DifferentialBipolarFSVref +//~ # pragma message("AIN_8_9_DifferentialBipolarFSVref: ADC Channels AIN8, AIN9 = Differential Bipolar") +#endif // AIN_8_9_DifferentialBipolarFSVref +#if AIN_8_9_DifferentialBipolarFS2Vref +//~ # pragma message("AIN_8_9_DifferentialBipolarFS2Vref: ADC Channels AIN8, AIN9 = Differential Bipolar") +#endif // AIN_8_9_DifferentialBipolarFS2Vref +#if AIN_8_9_SingleEnded +//~ # pragma message("AIN_8_9_SingleEnded: ADC Channels AIN8, AIN9 = Both Single-Ended, Unipolar") +#endif // AIN_8_9_SingleEnded +// +// Validate the AIN_8_9_DifferentialUnipolar setting +#if AIN_8_9_DifferentialUnipolar +# if AIN_8_9_DifferentialBipolarFSVref +# error("cannot have both AIN_8_9_DifferentialUnipolar and AIN_8_9_DifferentialBipolarFSVref; choose one") +# endif // AIN_8_9_DifferentialBipolarFSVref +# if AIN_8_9_DifferentialBipolarFS2Vref +# error("cannot have both AIN_8_9_DifferentialUnipolar and AIN_8_9_DifferentialBipolarFS2Vref; choose one") +# endif // AIN_8_9_DifferentialBipolarFS2Vref +# if AIN_8_9_SingleEnded +# error("cannot have both AIN_8_9_DifferentialUnipolar and AIN_8_9_SingleEnded; choose one") +# endif // AIN_8_9_SingleEnded +#endif // AIN_8_9_DifferentialUnipolar +// +// Validate the AIN_8_9_DifferentialBipolarFSVref setting +#if AIN_8_9_DifferentialBipolarFSVref +# if AIN_8_9_DifferentialBipolarFS2Vref +# error("cannot have both AIN_8_9_DifferentialBipolarFSVref and AIN_8_9_DifferentialBipolarFS2Vref; choose one") +# endif // AIN_8_9_DifferentialBipolarFS2Vref +# if AIN_8_9_SingleEnded +# error("cannot have both AIN_8_9_DifferentialBipolarFSVref and AIN_8_9_SingleEnded; choose one") +# endif // AIN_8_9_SingleEnded +#endif // AIN_8_9_DifferentialBipolarFSVref +// +// Validate the AIN_8_9_DifferentialBipolarFS2Vref setting +#if AIN_8_9_DifferentialBipolarFS2Vref +# if AIN_8_9_SingleEnded +# error("cannot have both AIN_8_9_DifferentialBipolarFS2Vref and AIN_8_9_SingleEnded; choose one") +# endif // AIN_8_9_SingleEnded +#endif // AIN_8_9_DifferentialBipolarFS2Vref + +//---------------------------------------- +// ADC Channels AIN10, AIN11 +// +// CUSTOMIZE: select one of the following options +// either by uncommenting in this file or define at the project level +//-------------------- +// ADC Channels AIN10, AIN11 = Differential Bipolar +// Full Scale = 2 * VREF +// Voltage per LSB count = VREF/2048 +// AIN10, AIN11 are a Differential pair using Bipolar transfer function with range ±Vref +// AIN10 voltage must always be between 0 and VREF. +// AIN11 voltage must always be between 0 and VREF. +// +//~ #define AIN_10_11_DifferentialBipolarFS2Vref 1 +// +//-------------------- +// ADC Channels AIN10, AIN11 = Both Single-Ended, Unipolar +// Full Scale = VREF +// Voltage per LSB count = VREF/2048 +// AIN10 is a Single-Ended input using Unipolar transfer function. +// AIN11 is a Single-Ended input using Unipolar transfer function. +// If PDIFF_COM_1, both are Pseudo-Differential with REF- as common. +// AIN10 voltage must always be between 0 and VREF. +// AIN11 voltage must always be between 0 and VREF. +// +//~ #define AIN_10_11_SingleEnded 1 +// +//-------------------- +// ADC Channels AIN10, AIN11 = Differential Unipolar (AIN10 > AIN11) +// Full Scale = VREF +// Voltage per LSB count = VREF/2048 +// AIN10, AIN11 are a Differential pair using Unipolar transfer function. +// AIN10 voltage must always be between 0 and VREF. +// AIN11 voltage must always be between 0 and VREF. +// +//~ #define AIN_10_11_DifferentialUnipolar 1 +// +//-------------------- +// ADC Channels AIN10, AIN11 = Differential Bipolar +// Full Scale = VREF +// Voltage per LSB count = VREF/2048 +// AIN10, AIN11 are a Differential pair using Bipolar transfer function with range ±½Vref +// AIN10 voltage must always be between 0 and VREF. +// AIN11 voltage must always be between 0 and VREF. +// +//~ #define AIN_10_11_DifferentialBipolarFSVref 1 +// +//-------------------- +// +// Default settings if not defined at project level +#ifndef AIN_10_11_DifferentialBipolarFS2Vref +# ifndef AIN_10_11_SingleEnded +# ifndef AIN_10_11_DifferentialUnipolar +# ifndef AIN_10_11_DifferentialBipolarFSVref +# define AIN_10_11_DifferentialBipolarFS2Vref 0 +# define AIN_10_11_SingleEnded 1 +# define AIN_10_11_DifferentialUnipolar 0 +# define AIN_10_11_DifferentialBipolarFSVref 0 +# endif // AIN_10_11_DifferentialBipolarFSVref +# endif // AIN_10_11_DifferentialUnipolar +# endif // AIN_10_11_SingleEnded +#endif // AIN_10_11_DifferentialBipolarFS2Vref +// +// (optional diagnostic) pragma message the active setting +#if AIN_10_11_DifferentialBipolarFS2Vref +//~ # pragma message("AIN_10_11_DifferentialBipolarFS2Vref: ADC Channels AIN10, AIN11 = Differential Bipolar") +#endif // AIN_10_11_DifferentialBipolarFS2Vref +#if AIN_10_11_SingleEnded +//~ # pragma message("AIN_10_11_SingleEnded: ADC Channels AIN10, AIN11 = Both Single-Ended, Unipolar") +#endif // AIN_10_11_SingleEnded +#if AIN_10_11_DifferentialUnipolar +//~ # pragma message("AIN_10_11_DifferentialUnipolar: ADC Channels AIN10, AIN11 = Differential Unipolar (AIN10 > AIN11)") +#endif // AIN_10_11_DifferentialUnipolar +#if AIN_10_11_DifferentialBipolarFSVref +//~ # pragma message("AIN_10_11_DifferentialBipolarFSVref: ADC Channels AIN10, AIN11 = Differential Bipolar") +#endif // AIN_10_11_DifferentialBipolarFSVref +// +// Validate the AIN_10_11_DifferentialBipolarFS2Vref setting +#if AIN_10_11_DifferentialBipolarFS2Vref +# if AIN_10_11_SingleEnded +# error("cannot have both AIN_10_11_DifferentialBipolarFS2Vref and AIN_10_11_SingleEnded; choose one") +# endif // AIN_10_11_SingleEnded +# if AIN_10_11_DifferentialUnipolar +# error("cannot have both AIN_10_11_DifferentialBipolarFS2Vref and AIN_10_11_DifferentialUnipolar; choose one") +# endif // AIN_10_11_DifferentialUnipolar +# if AIN_10_11_DifferentialBipolarFSVref +# error("cannot have both AIN_10_11_DifferentialBipolarFS2Vref and AIN_10_11_DifferentialBipolarFSVref; choose one") +# endif // AIN_10_11_DifferentialBipolarFSVref +#endif // AIN_10_11_DifferentialBipolarFS2Vref +// +// Validate the AIN_10_11_SingleEnded setting +#if AIN_10_11_SingleEnded +# if AIN_10_11_DifferentialUnipolar +# error("cannot have both AIN_10_11_SingleEnded and AIN_10_11_DifferentialUnipolar; choose one") +# endif // AIN_10_11_DifferentialUnipolar +# if AIN_10_11_DifferentialBipolarFSVref +# error("cannot have both AIN_10_11_SingleEnded and AIN_10_11_DifferentialBipolarFSVref; choose one") +# endif // AIN_10_11_DifferentialBipolarFSVref +#endif // AIN_10_11_SingleEnded +// +// Validate the AIN_10_11_DifferentialUnipolar setting +#if AIN_10_11_DifferentialUnipolar +# if AIN_10_11_DifferentialBipolarFSVref +# error("cannot have both AIN_10_11_DifferentialUnipolar and AIN_10_11_DifferentialBipolarFSVref; choose one") +# endif // AIN_10_11_DifferentialBipolarFSVref +#endif // AIN_10_11_DifferentialUnipolar + +//---------------------------------------- +// ADC Channels AIN12, AIN13 +// +// CUSTOMIZE: select one of the following options +// either by uncommenting in this file or define at the project level +//-------------------- +// ADC Channels AIN12, AIN13 = Differential Bipolar +// Full Scale = 2 * VREF +// Voltage per LSB count = VREF/2048 +// AIN12, AIN13 are a Differential pair using Bipolar transfer function with range ±Vref +// AIN12 voltage must always be between 0 and VREF. +// AIN13 voltage must always be between 0 and VREF. +// +//~ #define AIN_12_13_DifferentialBipolarFS2Vref 1 +// +//-------------------- +// ADC Channels AIN12, AIN13 = Both Single-Ended, Unipolar +// Full Scale = VREF +// Voltage per LSB count = VREF/2048 +// AIN12 is a Single-Ended input using Unipolar transfer function. +// AIN13 is a Single-Ended input using Unipolar transfer function. +// If PDIFF_COM_1, both are Pseudo-Differential with REF- as common. +// AIN12 voltage must always be between 0 and VREF. +// AIN13 voltage must always be between 0 and VREF. +// +//~ #define AIN_12_13_SingleEnded 1 +// +//-------------------- +// ADC Channels AIN12, AIN13 = Differential Unipolar (AIN12 > AIN13) +// Full Scale = VREF +// Voltage per LSB count = VREF/2048 +// AIN12, AIN13 are a Differential pair using Unipolar transfer function. +// AIN12 voltage must always be between 0 and VREF. +// AIN13 voltage must always be between 0 and VREF. +// +//~ #define AIN_12_13_DifferentialUnipolar 1 +// +//-------------------- +// ADC Channels AIN12, AIN13 = Differential Bipolar +// Full Scale = VREF +// Voltage per LSB count = VREF/2048 +// AIN12, AIN13 are a Differential pair using Bipolar transfer function with range ±½Vref +// AIN12 voltage must always be between 0 and VREF. +// AIN13 voltage must always be between 0 and VREF. +// +//~ #define AIN_12_13_DifferentialBipolarFSVref 1 +// +//-------------------- +// +// Default settings if not defined at project level +#ifndef AIN_12_13_DifferentialBipolarFS2Vref +# ifndef AIN_12_13_SingleEnded +# ifndef AIN_12_13_DifferentialUnipolar +# ifndef AIN_12_13_DifferentialBipolarFSVref +# define AIN_12_13_DifferentialBipolarFS2Vref 0 +# define AIN_12_13_SingleEnded 1 +# define AIN_12_13_DifferentialUnipolar 0 +# define AIN_12_13_DifferentialBipolarFSVref 0 +# endif // AIN_12_13_DifferentialBipolarFSVref +# endif // AIN_12_13_DifferentialUnipolar +# endif // AIN_12_13_SingleEnded +#endif // AIN_12_13_DifferentialBipolarFS2Vref +// +// (optional diagnostic) pragma message the active setting +#if AIN_12_13_DifferentialBipolarFS2Vref +//~ # pragma message("AIN_12_13_DifferentialBipolarFS2Vref: ADC Channels AIN12, AIN13 = Differential Bipolar") +#endif // AIN_12_13_DifferentialBipolarFS2Vref +#if AIN_12_13_SingleEnded +//~ # pragma message("AIN_12_13_SingleEnded: ADC Channels AIN12, AIN13 = Both Single-Ended, Unipolar") +#endif // AIN_12_13_SingleEnded +#if AIN_12_13_DifferentialUnipolar +//~ # pragma message("AIN_12_13_DifferentialUnipolar: ADC Channels AIN12, AIN13 = Differential Unipolar (AIN12 > AIN13)") +#endif // AIN_12_13_DifferentialUnipolar +#if AIN_12_13_DifferentialBipolarFSVref +//~ # pragma message("AIN_12_13_DifferentialBipolarFSVref: ADC Channels AIN12, AIN13 = Differential Bipolar") +#endif // AIN_12_13_DifferentialBipolarFSVref +// +// Validate the AIN_12_13_DifferentialBipolarFS2Vref setting +#if AIN_12_13_DifferentialBipolarFS2Vref +# if AIN_12_13_SingleEnded +# error("cannot have both AIN_12_13_DifferentialBipolarFS2Vref and AIN_12_13_SingleEnded; choose one") +# endif // AIN_12_13_SingleEnded +# if AIN_12_13_DifferentialUnipolar +# error("cannot have both AIN_12_13_DifferentialBipolarFS2Vref and AIN_12_13_DifferentialUnipolar; choose one") +# endif // AIN_12_13_DifferentialUnipolar +# if AIN_12_13_DifferentialBipolarFSVref +# error("cannot have both AIN_12_13_DifferentialBipolarFS2Vref and AIN_12_13_DifferentialBipolarFSVref; choose one") +# endif // AIN_12_13_DifferentialBipolarFSVref +#endif // AIN_12_13_DifferentialBipolarFS2Vref +// +// Validate the AIN_12_13_SingleEnded setting +#if AIN_12_13_SingleEnded +# if AIN_12_13_DifferentialUnipolar +# error("cannot have both AIN_12_13_SingleEnded and AIN_12_13_DifferentialUnipolar; choose one") +# endif // AIN_12_13_DifferentialUnipolar +# if AIN_12_13_DifferentialBipolarFSVref +# error("cannot have both AIN_12_13_SingleEnded and AIN_12_13_DifferentialBipolarFSVref; choose one") +# endif // AIN_12_13_DifferentialBipolarFSVref +#endif // AIN_12_13_SingleEnded +// +// Validate the AIN_12_13_DifferentialUnipolar setting +#if AIN_12_13_DifferentialUnipolar +# if AIN_12_13_DifferentialBipolarFSVref +# error("cannot have both AIN_12_13_DifferentialUnipolar and AIN_12_13_DifferentialBipolarFSVref; choose one") +# endif // AIN_12_13_DifferentialBipolarFSVref +#endif // AIN_12_13_DifferentialUnipolar + +//---------------------------------------- +// ADC Channels AIN14, AIN15 +// +// CUSTOMIZE: select one of the following options +// either by uncommenting in this file or define at the project level +//-------------------- +// ADC Channels AIN14, AIN15 = Differential Bipolar +// Full Scale = 2 * VREF +// Voltage per LSB count = VREF/2048 +// AIN14, AIN15 are a Differential pair using Bipolar transfer function with range ±Vref +// AIN14 voltage must always be between 0 and VREF. +// AIN15 voltage must always be between 0 and VREF. +// +//~ #define AIN_14_15_DifferentialBipolarFS2Vref 1 +// +//-------------------- +// ADC Channels AIN14, AIN15 = Both Single-Ended, Unipolar +// Full Scale = VREF +// Voltage per LSB count = VREF/2048 +// AIN14 is a Single-Ended input using Unipolar transfer function. +// AIN15 is a Single-Ended input using Unipolar transfer function. +// If PDIFF_COM_1, both are Pseudo-Differential with REF- as common. +// AIN14 voltage must always be between 0 and VREF. +// AIN15 voltage must always be between 0 and VREF. +// +//~ #define AIN_14_15_SingleEnded 1 +// +//-------------------- +// ADC Channels AIN14, AIN15 = Differential Unipolar (AIN14 > AIN15) +// Full Scale = VREF +// Voltage per LSB count = VREF/2048 +// AIN14, AIN15 are a Differential pair using Unipolar transfer function. +// AIN14 voltage must always be between 0 and VREF. +// AIN15 voltage must always be between 0 and VREF. +// +//~ #define AIN_14_15_DifferentialUnipolar 1 +// +//-------------------- +// ADC Channels AIN14, AIN15 = Differential Bipolar +// Full Scale = VREF +// Voltage per LSB count = VREF/2048 +// AIN14, AIN15 are a Differential pair using Bipolar transfer function with range ±½Vref +// AIN14 voltage must always be between 0 and VREF. +// AIN15 voltage must always be between 0 and VREF. +// +//~ #define AIN_14_15_DifferentialBipolarFSVref 1 +// +//-------------------- +// +// Default settings if not defined at project level +#ifndef AIN_14_15_DifferentialBipolarFS2Vref +# ifndef AIN_14_15_SingleEnded +# ifndef AIN_14_15_DifferentialUnipolar +# ifndef AIN_14_15_DifferentialBipolarFSVref +# define AIN_14_15_DifferentialBipolarFS2Vref 0 +# define AIN_14_15_SingleEnded 1 +# define AIN_14_15_DifferentialUnipolar 0 +# define AIN_14_15_DifferentialBipolarFSVref 0 +# endif // AIN_14_15_DifferentialBipolarFSVref +# endif // AIN_14_15_DifferentialUnipolar +# endif // AIN_14_15_SingleEnded +#endif // AIN_14_15_DifferentialBipolarFS2Vref +// +// (optional diagnostic) pragma message the active setting +#if AIN_14_15_DifferentialBipolarFS2Vref +//~ # pragma message("AIN_14_15_DifferentialBipolarFS2Vref: ADC Channels AIN14, AIN15 = Differential Bipolar") +#endif // AIN_14_15_DifferentialBipolarFS2Vref +#if AIN_14_15_SingleEnded +//~ # pragma message("AIN_14_15_SingleEnded: ADC Channels AIN14, AIN15 = Both Single-Ended, Unipolar") +#endif // AIN_14_15_SingleEnded +#if AIN_14_15_DifferentialUnipolar +//~ # pragma message("AIN_14_15_DifferentialUnipolar: ADC Channels AIN14, AIN15 = Differential Unipolar (AIN14 > AIN15)") +#endif // AIN_14_15_DifferentialUnipolar +#if AIN_14_15_DifferentialBipolarFSVref +//~ # pragma message("AIN_14_15_DifferentialBipolarFSVref: ADC Channels AIN14, AIN15 = Differential Bipolar") +#endif // AIN_14_15_DifferentialBipolarFSVref +// +// Validate the AIN_14_15_DifferentialBipolarFS2Vref setting +#if AIN_14_15_DifferentialBipolarFS2Vref +# if AIN_14_15_SingleEnded +# error("cannot have both AIN_14_15_DifferentialBipolarFS2Vref and AIN_14_15_SingleEnded; choose one") +# endif // AIN_14_15_SingleEnded +# if AIN_14_15_DifferentialUnipolar +# error("cannot have both AIN_14_15_DifferentialBipolarFS2Vref and AIN_14_15_DifferentialUnipolar; choose one") +# endif // AIN_14_15_DifferentialUnipolar +# if AIN_14_15_DifferentialBipolarFSVref +# error("cannot have both AIN_14_15_DifferentialBipolarFS2Vref and AIN_14_15_DifferentialBipolarFSVref; choose one") +# endif // AIN_14_15_DifferentialBipolarFSVref +#endif // AIN_14_15_DifferentialBipolarFS2Vref +// +// Validate the AIN_14_15_SingleEnded setting +#if AIN_14_15_SingleEnded +# if AIN_14_15_DifferentialUnipolar +# error("cannot have both AIN_14_15_SingleEnded and AIN_14_15_DifferentialUnipolar; choose one") +# endif // AIN_14_15_DifferentialUnipolar +# if AIN_14_15_DifferentialBipolarFSVref +# error("cannot have both AIN_14_15_SingleEnded and AIN_14_15_DifferentialBipolarFSVref; choose one") +# endif // AIN_14_15_DifferentialBipolarFSVref +#endif // AIN_14_15_SingleEnded +// +// Validate the AIN_14_15_DifferentialUnipolar setting +#if AIN_14_15_DifferentialUnipolar +# if AIN_14_15_DifferentialBipolarFSVref +# error("cannot have both AIN_14_15_DifferentialUnipolar and AIN_14_15_DifferentialBipolarFSVref; choose one") +# endif // AIN_14_15_DifferentialBipolarFSVref +#endif // AIN_14_15_DifferentialUnipolar + +// CODE GENERATOR: class declaration and docstrings +/** + * @brief MAX11131 3Msps, Low-Power, Serial SPI 12-Bit, 16-Channel, Differential/Single-Ended Input, SAR ADC + * + * + * + * Datasheet: https://www.maximintegrated.com/MAX11131 + * + * + * + * //---------- CODE GENERATOR: testMainCppCodeList + * @code + * // CODE GENERATOR: example code includes + * // example code includes + * #include "mbed.h" + * //#include "max32625.h" + * #include "MAX11131.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 + * + * // 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 CNVST_pin(D9); // Digital Trigger Input to MAX11131 device + * // AnalogOut REF__pin(Px_x_PortName_To_Be_Determined); // Reference Input to MAX11131 device + * // AnalogOut REF__AIN15_pin(Px_x_PortName_To_Be_Determined); // Reference Input to MAX11131 device + * DigitalIn EOC_pin(D2); // Digital Event Output from MAX11131 device + * // example code declare device instance + * MAX11131 g_MAX11131_device(spi, spi_cs, CNVST_pin, EOC_pin, MAX11131::MAX11131_IC); + * + * // example code main function + * int main() + * { + * while (1) + * { + * // 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("MAX5715BOB\r\n"); + * + * //MAX11131 dac(spi, spi_cs, MAX11131::MAX11131_IC); + * //dac.Init(); + * + * // CODE GENERATOR: example code: member function Init + * g_MAX11131_device.Init(); + * + * // CODE GENERATOR: example code: has no member function REF + * // CODE GENERATOR: example code: has no member function CODE_LOAD + * // CODE GENERATOR: example code: has no member function CODEallLOADall + * // CODE GENERATOR: example code: has no member function CODEnLOADn + * // CODE GENERATOR: example code: member function ScanManual + * // @param[in] g_MAX11131_device.channelNumber_0_15: AIN Channel Number + * // @param[in] g_MAX11131_device.PowerManagement_0_2: 0=Normal, 1=AutoShutdown, 2=AutoStandby + * // @param[in] g_MAX11131_device.chan_id_0_1: ADC_MODE_CONTROL.CHAN_ID + * int channelId_0_15 = 3; + * g_MAX11131_device.channelNumber_0_15 = channelId_0_15; + * g_MAX11131_device.PowerManagement_0_2 = 0; + * g_MAX11131_device.chan_id_0_1 = 1; + * g_MAX11131_device.NumWords = g_MAX11131_device.ScanManual(); + * + * // CODE GENERATOR: example code: member function ReadAINcode + * // TODO1: CODE GENERATOR: example code: member function ReadAINcode + * // Read raw ADC codes from device into AINcode[] and RAW_misoData16[] + * // @pre one of the MAX11311_Scan functions was called, setting g_MAX11131_device.NumWords + * g_MAX11131_device.ReadAINcode(); + * // @post RAW_misoData16[index] contains the raw SPI Master-In,Slave-Out data + * // @post AINcode[NUM_CHANNELS] contains the latest readings in LSBs + * + * wait(3.0); + * } + * } + * @endcode + * //---------- CODE GENERATOR: end testMainCppCodeList + */ +class MAX11131 { +public: +// CODE GENERATOR: TypedefEnum EnumItem declarations +// CODE GENERATOR: TypedefEnum MAX11131_SCAN_enum_t + //---------------------------------------- + /// ADC_MODE_CONTROL.SCAN[3:0] ADC Scan Control (command) + typedef enum MAX11131_SCAN_enum_t { + SCAN_0000_NOP = 0x00, //!< 8'b00000000 + SCAN_0001_Manual = 0x01, //!< 8'b00000001 + SCAN_0010_Repeat = 0x02, //!< 8'b00000010 + SCAN_0011_StandardInternalClock = 0x03, //!< 8'b00000011 + SCAN_0100_StandardExternalClock = 0x04, //!< 8'b00000100 + SCAN_0101_UpperInternalClock = 0x05, //!< 8'b00000101 + SCAN_0110_UpperExternalClock = 0x06, //!< 8'b00000110 + SCAN_0111_CustomInternalClock = 0x07, //!< 8'b00000111 + SCAN_1000_CustomExternalClock = 0x08, //!< 8'b00001000 + SCAN_1001_SampleSetExternalClock = 0x09, //!< 8'b00001001 + } MAX11131_SCAN_enum_t; + +// CODE GENERATOR: TypedefEnum MAX11131_RESET_enum_t + //---------------------------------------- + /// ADC_MODE_CONTROL.RESET[1:0] Reset 0=Normal 1=ResetFIFO 2=ResetAllRegisters 3=reserved + typedef enum MAX11131_RESET_enum_t { + RESET_00_Normal = 0x00, //!< 8'b00000000 + RESET_01_ResetFIFO = 0x01, //!< 8'b00000001 + RESET_10_ResetAllRegisters = 0x02, //!< 8'b00000010 + } MAX11131_RESET_enum_t; + +// CODE GENERATOR: TypedefEnum MAX11131_PM_enum_t + //---------------------------------------- + /// ADC_MODE_CONTROL.PM[1:0] Power Management 0=Normal, 1=AutoShutdown, 2=AutoStandby 3=reserved + typedef enum MAX11131_PM_enum_t { + PM_00_Normal = 0x00, //!< 8'b00000000 + PM_01_AutoShutdown = 0x01, //!< 8'b00000001 + PM_10_AutoStandby = 0x02, //!< 8'b00000010 + } MAX11131_PM_enum_t; + +// TODO1: CODE GENERATOR: ic_variant -- IC's supported with this driver + /** + * @brief IC's supported with this driver + * @details MAX11131 + */ + typedef enum + { + MAX11131_IC = 0, + //MAX11131_IC = 1 + } MAX11131_ic_t; + +// TODO1: CODE GENERATOR: class constructor declaration + /**********************************************************//** + * @brief Constructor for MAX11131 Class. + * + * @details Requires an existing SPI object as well as a DigitalOut object. + * The DigitalOut object is used for a chip enable signal + * + * On Entry: + * @param[in] spi - pointer to existing SPI object + * @param[in] cs_pin - pointer to a DigitalOut pin object + * CODE GENERATOR: class constructor docstrings gpio InputPin pins + * @param[in] CNVST_pin - pointer to a DigitalOut pin object + * CODE GENERATOR: class constructor docstrings gpio OutputPin pins + * @param[in] EOC_pin - pointer to a DigitalIn pin object + * @param[in] ic_variant - which type of MAX11131 is used + * + * On Exit: + * + * @return None + **************************************************************/ + MAX11131(SPI &spi, DigitalOut &cs_pin, // SPI interface + // CODE GENERATOR: class constructor declaration gpio InputPin pins + DigitalOut &CNVST_pin, // Digital Trigger Input to MAX11131 device + // AnalogOut &REF__pin, // Reference Input to MAX11131 device + // AnalogOut &REF__AIN15_pin, // Reference Input to MAX11131 device + // CODE GENERATOR: class constructor declaration gpio OutputPin pins + DigitalIn &EOC_pin, // Digital Event Output from MAX11131 device + MAX11131_ic_t ic_variant); + +// CODE GENERATOR: class destructor declaration + /************************************************************ + * @brief Default destructor for MAX11131 Class. + * + * @details Destroys SPI object if owner + * + * On Entry: + * + * On Exit: + * + * @return None + **************************************************************/ + ~MAX11131(); + + // CODE GENERATOR: spi_frequency setter declaration + // set SPI SCLK frequency + void spi_frequency(int spi_sclk_Hz); + +//---------------------------------------- +// CODE GENERATOR: omit typedef enum MAX11131_device_t, class members instead of global device object +public: + + /// shadow of write-only register ADC_MODE_CONTROL + /// mosiData16 0x0000..0x7FFF format: 0 SCAN[3:0] CHSEL[3:0] RESET[1:0] PM[1:0] CHAN_ID SWCNV 0 + int16_t ADC_MODE_CONTROL; + + /// shadow of write-only register ADC_CONFIGURATION + /// mosiData16 0x8000..0x87FF format: 1 0 0 0 0 REFSEL AVGON NAVG[1:0] NSCAN[1:0] SPM[1:0] ECHO 0 0 + int16_t ADC_CONFIGURATION; + + /// shadow of write-only register UNIPOLAR + /// mosiData16 0x8800..0x8FFF format: 1 0 0 0 1 UCH0/1 UCH2/3 UCH4/5 UCH6/7 UCH8/9 UCH10/11 UCH12/13 UCH14/15 PDIFF_COM x x + int16_t UNIPOLAR; + + /// shadow of write-only register BIPOLAR + /// mosiData16 0x9000..0x97FF format: 1 0 0 1 0 BCH0/1 BCH2/3 BCH4/5 BCH6/7 BCH8/9 BCH10/11 BCH12/13 BCH14/15 x x x + int16_t BIPOLAR; + + /// shadow of write-only register RANGE + /// mosiData16 0x9800..0x9FFF format: 1 0 0 1 1 RANGE0/1 RANGE2/3 RANGE4/5 RANGE6/7 RANGE8/9 RANGE10/11 RANGE12/13 RANGE14/15 x x x + int16_t RANGE; + + /// shadow of write-only register CSCAN0 + /// mosiData16 0xA000..0xA7FF format: 1 0 1 0 0 CHSCAN15 CHSCAN14 CHSCAN13 CHSCAN12 CHSCAN11 CHSCAN10 CHSCAN9 CHSCAN8 x x x + int16_t CSCAN0; + + /// shadow of write-only register CSCAN1 + /// mosiData16 0xA800..0xAFFF format: 1 0 1 0 1 CHSCAN7 CHSCAN6 CHSCAN5 CHSCAN4 CHSCAN3 CHSCAN2 CHSCAN1 CHSCAN0 x x x + int16_t CSCAN1; + + /// shadow of write-only register SAMPLESET + /// mosiData16 0xB000..0xB7FF format: 1 0 1 1 0 SEQ_LENGTH[7:0] x x x followed by enabledChannelsPattern. + /// NOTE: Send the sampleset pattern, with 4 entries packed into each 16-bit SPI word. Pad unused entries with 0. + /// NOTE: Keep CS low during the entire enabledChannelsPattern entry. + int16_t SAMPLESET; + + /// unpacked SAMPLESET.SEQ_LENGTH[7:0] determines length of pattern + /// NOTE: SAMPLESET.SEQ_LENGTH[7:0] is the number of channel entries in the pattern. + /// NOTE: Each channel entry is 4 bits. The first 4 bits are the first channel in the sequence. + /// NOTE: Channels can be repeated in any arbitrary order. + /// NOTE: The channel entry pattern is sent immediately after writing SAMPLESET. + uint8_t enabledChannelsPatternLength_1_256; + + /// unpacked shadow of write-only register SAMPLESET enabledChannelsPattern. + /// Each entry is a channel number between 0 and 15. + uint8_t enabledChannelsPattern[256]; + + /// Diagnostic: what is the meaning of SPI Master Out data. + /// 0:Nothing 1:regWrite 2:sampleSetPattern + uint8_t SPI_MOSI_Semantic; + + /// number of ScanRead() words needed to retrieve all measurements. + uint16_t NumWords; + + /// Is the currently configured mode external or internal clock. 1:External Clock 0:Internal Clock + uint8_t isExternalClock; + + /// unpacked ADC_MODE_CONTROL.SCAN[3:0] Scan Mode MAX11131_SCAN_enum_t + uint8_t ScanMode; + + /// unpacked ADC_MODE_CONTROL.CHSEL[3:0] Analog Input Channel Select + uint8_t channelNumber_0_15; + + /// unpacked ADC_MODE_CONTROL.PM[1:0] Power Management MAX11131_PM_enum_t + uint8_t PowerManagement_0_2; + + /// unpacked ADC_MODE_CONTROL.CHAN_ID + uint8_t chan_id_0_1; + + /// unpacked ADC_CONFIGURATION.AVG and ADC_CONFIGURATION.NAVG[1:0] may be 0, 4, 8, 16, or 32 + uint8_t average_0_4_8_16_32; + + /// unpacked ADC_CONFIGURATION.NSCAN[1:0] may be 4, 8, 12, or 16 + uint8_t nscan_4_8_12_16; + + /// unpacked ADC_MODE_CONTROL.SWCNV + uint8_t swcnv_0_1; + + /// unpacked CSCAN0 and CSCAN1 + int16_t enabledChannelsMask; + + /// Each channel's most recent value in LSBs. + /// Updated by ReadAINcode function. + /// Use VoltageOfCode function to convert LSBs to physical voltage. + uint16_t AINcode[16]; + + /// SPI master-in slave-out data. + /// Updated by ReadAINcode function. + /// SampleSet mode allows up to 256 channel entry selections. + int16_t RAW_misoData16[256]; + + /// reference voltage, in Volts + double VRef; + +// CODE GENERATOR: omit global g_MAX11131_device + +// CODE GENERATOR: extern function declarations +// CODE GENERATOR: extern function declaration SPIoutputCS +//---------------------------------------- +// Assert SPI Chip Select +// SPI chip-select for MAX11131 +// + void SPIoutputCS(int isLogicHigh); + +// CODE GENERATOR: extern function declaration SPIwrite16bits +//---------------------------------------- +// SPI write 16 bits +// SPI interface to MAX11131 shift 16 bits mosiData16 into MAX11131 DIN +// ignoring MAX11131 DOUT +// + void SPIwrite16bits(int16_t mosiData16); + +// CODE GENERATOR: extern function declaration SPIwrite24bits +//---------------------------------------- +// SPI write 17-24 bits +// SPI interface to MAX11131 shift 16 bits mosiData16 into MAX11131 DIN +// followed by one additional SCLK byte. +// ignoring MAX11131 DOUT +// + void SPIwrite24bits(int16_t mosiData16_FFFF00, int8_t mosiData8_0000FF); + +// CODE GENERATOR: extern function declaration SPIread16bits +//---------------------------------------- +// SPI read 16 bits while MOSI (MAX11131 DIN) is 0 +// SPI interface to capture 16 bits miso data from MAX11131 DOUT +// + int16_t SPIread16bits(); + +// CODE GENERATOR: extern function declaration CNVSToutputPulseLow +//---------------------------------------- +// Assert MAX11131 CNVST convert start. +// Required when using any of the InternalClock modes with SWCNV 0. +// Trigger measurement by driving CNVST/AIN14 pin low for a minimum active-low pulse duration of 5ns. (AIN14 is not available) +// + void CNVSToutputPulseLow(); + +// CODE GENERATOR: extern function declaration EOCinputWaitUntilLow +//---------------------------------------- +// Wait for MAX11131 EOC pin low, indicating end of conversion. +// Required when using any of the InternalClock modes. +// + void EOCinputWaitUntilLow(); + +// CODE GENERATOR: extern function declaration EOCinputValue +//---------------------------------------- +// Return the status of the MAX11131 EOC pin. +// + int EOCinputValue(); + +// CODE GENERATOR: class member data +private: +// CODE GENERATOR: class member data for SPI interface + // SPI object + SPI &m_spi; + int m_SPI_SCLK_Hz; + int m_SPI_dataMode; + int m_SPI_cs_state; + + // Selector pin object + DigitalOut &m_cs_pin; + +// CODE GENERATOR: class member data for gpio InputPin pins +// InputPin Name = CNVST +// InputPin Description = Active-Low Conversion Start Input/Analog Input 14 +// InputPin Function = Trigger + DigitalOut &m_CNVST_pin; +// +// InputPin Name = REF+ +// InputPin Description = External Positive Reference Input. Apply a reference voltage at REF+. Bypass to GND with a 0.47uF capacitor. +// InputPin Function = Reference + // AnalogOut &m_REF__pin; +// +// InputPin Name = REF-/AIN15 +// InputPin Description = External Differential Reference Negative Input/Analog Input 15 +// InputPin Function = Reference + // AnalogOut &m_REF__AIN15_pin; +// +// CODE GENERATOR: class member data for gpio OutputPin pins +// OutputPin Name = EOC +// OutputPin Description = End of Conversion Output. Data is valid after EOC pulls low (Internal clock mode only). +// OutputPin Function = Event + DigitalIn &m_EOC_pin; +// + + // Identifies which IC variant is being used + MAX11131_ic_t m_ic_variant; + +public: + +// CODE GENERATOR: class member function declarations + //---------------------------------------- + /// Initialize device + void Init(void); + + //---------------------------------------- + /// ADC Channels AIN(channelId), AIN(channelId+1) = Both Single-Ended, Unipolar + /// Full Scale = VREF + /// Voltage per LSB count = VREF/4096 + /// AIN(channelId) is a Single-Ended input using Unipolar transfer function. + /// AIN(channelId+1) is a Single-Ended input using Unipolar transfer function. + /// If PDIFF_COM_1, both are Pseudo-Differential with REF- as common. + /// AIN(channelId) voltage must always be between 0 and VREF. + /// AIN(channelId+1) voltage must always be between 0 and VREF. + /// + void Reconfigure_SingleEnded(int channelNumber_0_15); + + //---------------------------------------- + /// ADC Channels AIN(channelId), AIN(channelId+1) = Differential Unipolar (AIN(channelId) > AIN(channelId+1)) + /// Full Scale = VREF + /// Voltage per LSB count = VREF/4096 + /// AIN(channelId), AIN(channelId+1) are a Differential pair using Unipolar transfer function. + /// AIN(channelId) voltage must always be between 0 and VREF. + /// AIN(channelId+1) voltage must always be between 0 and VREF. + /// + void Reconfigure_DifferentialUnipolar(int channelNumber_0_15); + + //---------------------------------------- + /// ADC Channels AIN(channelId), AIN(channelId+1) = Differential Bipolar + /// Full Scale = VREF + /// Voltage per LSB count = VREF/4096 + /// AIN(channelId), AIN(channelId+1) are a Differential pair using Bipolar transfer function with range ±½Vref + /// AIN(channelId) voltage must always be between 0 and VREF. + /// AIN(channelId+1) voltage must always be between 0 and VREF. + /// + void Reconfigure_DifferentialBipolarFSVref(int channelNumber_0_15); + + //---------------------------------------- + /// ADC Channels AIN(channelId), AIN(channelId+1) = Differential Bipolar + /// Full Scale = 2 * VREF + /// Voltage per LSB count = VREF/2048 + /// AIN(channelId), AIN(channelId+1) are a Differential pair using Bipolar transfer function with range ±Vref + /// AIN(channelId) voltage must always be between 0 and VREF. + /// AIN(channelId+1) voltage must always be between 0 and VREF. + /// + void Reconfigure_DifferentialBipolarFS2Vref(int channelNumber_0_15); + + //---------------------------------------- + /// SCAN_0000_NOP + /// + /// Shift 16 bits out of ADC, without changing configuration. + /// Note: @return data format depends on CHAN_ID bit: + /// "CH[3:0] DATA[11:0]" when CHAN_ID = 1, or + /// "0 DATA[11:0] x x x" when CHAN_ID = 0. + int16_t ScanRead(void); + + //---------------------------------------- + /// SCAN_0000_NOP + /// + /// Read raw ADC codes from device into AINcode[] and RAW_misoData16[]. + /// If internal clock mode with SWCNV=0, measurements will be triggered using CNVST pin. + /// + /// @pre one of the Scan functions was called, setting g_MAX11131_device.NumWords + /// @post g_MAX11131_device.RAW_misoData16[index] contains the raw SPI Master-In,Slave-Out data + /// @post g_MAX11131_device.AINcode[NUM_CHANNELS] contains the latest readings in LSBs + /// + void ReadAINcode(void); + + //---------------------------------------- + /// Sign-Extend a right-aligned MAX11131 code into a signed 2's complement value. + /// Supports the bipolar transfer functions. + /// @param[in] value_u12: raw 12-bit MAX11131 code (right justified). + /// @return sign-extended 2's complement value. + /// + int32_t TwosComplementValue(uint32_t regValue); + + //---------------------------------------- + /// Return the physical voltage corresponding to MAX11131 code. + /// Does not perform any offset or gain correction. + /// @pre g_MAX11131_device.VRef = Voltage of REF input, in Volts + /// @param[in] value_u12: raw 12-bit MAX11131 code (right justified). + /// @param[in] channelId: AIN channel number. + /// @return physical voltage corresponding to MAX11131 code. + /// + double VoltageOfCode(int16_t value_u12, int channelId); + + //---------------------------------------- + /// SCAN_0001_Manual + /// + /// Measure ADC channel channelNumber_0_15 once. + /// External clock mode. + /// @param[in] g_MAX11131_device.channelNumber_0_15: AIN Channel Number + /// @param[in] g_MAX11131_device.PowerManagement_0_2: 0=Normal, 1=AutoShutdown, 2=AutoStandby + /// @param[in] g_MAX11131_device.chan_id_0_1: ADC_MODE_CONTROL.CHAN_ID + /// @return number of ScanRead() words needed to retrieve the data. + /// For external clock modes, the data format depends on CHAN_ID. + /// when CHAN_ID = 0: misoData16 = 0 DATA[11:0] x x x + /// when CHAN_ID = 1: misoData16 = CH[3:0] DATA[11:0] + /// + int ScanManual(void); + + //---------------------------------------- + /// SCAN_0010_Repeat + /// + /// Measure ADC channel channelNumber_0_15 repeatedly with averaging. + /// Internal clock mode. + /// @param[in] g_MAX11131_device.channelNumber_0_15: AIN Channel Number + /// @param[in] g_MAX11131_device.average_0_4_8_16_32: Number of samples averaged per ScanRead() word. + /// average_0_4_8_16_32=0 to disable averaging. + /// @param[in] g_MAX11131_device.nscan_4_8_12_16: Number of ScanRead() words to report. + /// @param[in] g_MAX11131_device.swcnv_0_1: ADC_MODE_CONTROL.SWCNV + /// SWCNV=0: trigger measurement by driving CNVST pin low. + /// Minimum active-low pulse duration of 5ns. (AIN14 is not available) + /// SWCNV=1: trigger measurement on SPI CS rising edge. + /// CS must be held low for minimum of 17 SCLK cycles. + /// CNVST pin is not used. (AIN14 is available) + /// @param[in] g_MAX11131_device.PowerManagement_0_2: 0=Normal, 1=AutoShutdown, 2=AutoStandby + /// @return number of ScanRead() words needed to retrieve the data. + /// For internal clock modes, the data format always includes the channel address. + /// misoData16 = CH[3:0] DATA[11:0] + /// + int ScanRepeat(void); + + //---------------------------------------- + /// SCAN_0011_StandardInternalClock + /// + /// Measure ADC channels in sequence from AIN0 to channelNumber_0_15. + /// Internal clock mode. + /// @param[in] g_MAX11131_device.channelNumber_0_15: AIN Channel Number + /// @param[in] g_MAX11131_device.average_0_4_8_16_32: Number of samples averaged per ScanRead() word. + /// average_0_4_8_16_32=0 to disable averaging. + /// @param[in] g_MAX11131_device.PowerManagement_0_2: 0=Normal, 1=AutoShutdown, 2=AutoStandby + /// @param[in] g_MAX11131_device.swcnv_0_1: ADC_MODE_CONTROL.SWCNV + /// SWCNV=0: trigger measurement by driving CNVST pin low. + /// Minimum active-low pulse duration of 5ns. (AIN14 is not available) + /// SWCNV=1: trigger measurement on SPI CS rising edge. + /// CS must be held low for minimum of 17 SCLK cycles. + /// CNVST pin is not used. (AIN14 is available) + /// @return number of ScanRead() words needed to retrieve the data. + /// For internal clock modes, the data format always includes the channel address. + /// misoData16 = CH[3:0] DATA[11:0] + /// + int ScanStandardInternalClock(void); + + //---------------------------------------- + /// SCAN_0100_StandardExternalClock + /// + /// Measure ADC channels in sequence from AIN0 to channelNumber_0_15. + /// External clock mode. + /// @param[in] g_MAX11131_device.channelNumber_0_15: AIN Channel Number + /// @param[in] g_MAX11131_device.PowerManagement_0_2: 0=Normal, 1=AutoShutdown, 2=AutoStandby + /// @param[in] g_MAX11131_device.chan_id_0_1: ADC_MODE_CONTROL.CHAN_ID + /// @return number of ScanRead() words needed to retrieve the data. + /// For external clock modes, the data format depends on CHAN_ID. + /// when CHAN_ID = 0: misoData16 = 0 DATA[11:0] x x x + /// when CHAN_ID = 1: misoData16 = CH[3:0] DATA[11:0] + /// + int ScanStandardExternalClock(void); + + //---------------------------------------- + /// SCAN_0101_UpperInternalClock + /// + /// Measure ADC channels in sequence from channelNumber_0_15 to AIN15. + /// Internal clock mode. + /// @param[in] g_MAX11131_device.channelNumber_0_15: AIN Channel Number + /// @param[in] g_MAX11131_device.average_0_4_8_16_32: Number of samples averaged per ScanRead() word. + /// average_0_4_8_16_32=0 to disable averaging. + /// @param[in] g_MAX11131_device.PowerManagement_0_2: 0=Normal, 1=AutoShutdown, 2=AutoStandby + /// @param[in] g_MAX11131_device.swcnv_0_1: ADC_MODE_CONTROL.SWCNV + /// SWCNV=0: trigger measurement by driving CNVST pin low. + /// Minimum active-low pulse duration of 5ns. (AIN14 is not available) + /// SWCNV=1: trigger measurement on SPI CS rising edge. + /// CS must be held low for minimum of 17 SCLK cycles. + /// CNVST pin is not used. (AIN14 is available) + /// @return number of ScanRead() words needed to retrieve the data. + /// For internal clock modes, the data format always includes the channel address. + /// misoData16 = CH[3:0] DATA[11:0] + /// + int ScanUpperInternalClock(void); + + //---------------------------------------- + /// SCAN_0110_UpperExternalClock + /// + /// Measure ADC channels in sequence from channelNumber_0_15 to AIN15. + /// External clock mode. + /// @param[in] g_MAX11131_device.channelNumber_0_15: AIN Channel Number + /// @param[in] g_MAX11131_device.PowerManagement_0_2: 0=Normal, 1=AutoShutdown, 2=AutoStandby + /// @param[in] g_MAX11131_device.chan_id_0_1: ADC_MODE_CONTROL.CHAN_ID + /// @return number of ScanRead() words needed to retrieve the data. + /// For external clock modes, the data format depends on CHAN_ID. + /// when CHAN_ID = 0: misoData16 = 0 DATA[11:0] x x x + /// when CHAN_ID = 1: misoData16 = CH[3:0] DATA[11:0] + /// + int ScanUpperExternalClock(void); + + //---------------------------------------- + /// SCAN_0111_CustomInternalClock + /// + /// Measure selected ADC channels in sequence from AIN0 to AIN15, + /// using only the channels enabled by enabledChannelsMask. + /// Bit 0x0001 enables AIN0. + /// Bit 0x0002 enables AIN1. + /// Bit 0x0004 enables AIN2. + /// Bit 0x0008 enables AIN3. + /// Bit 0x0010 enables AIN4. + /// Bit 0x0020 enables AIN5. + /// Bit 0x0040 enables AIN6. + /// Bit 0x0080 enables AIN7. + /// Bit 0x0100 enables AIN8. + /// Bit 0x0200 enables AIN9. + /// Bit 0x0400 enables AIN10. + /// Bit 0x0800 enables AIN11. + /// Bit 0x1000 enables AIN12. + /// Bit 0x2000 enables AIN13. + /// Bit 0x4000 enables AIN14. + /// Bit 0x8000 enables AIN15. + /// Internal clock mode. + /// @param[in] g_MAX11131_device.enabledChannelsMask: Bitmap of AIN Channels to scan. + /// @param[in] g_MAX11131_device.average_0_4_8_16_32: Number of samples averaged per ScanRead() word. + /// average_0_4_8_16_32=0 to disable averaging. + /// @param[in] g_MAX11131_device.PowerManagement_0_2: 0=Normal, 1=AutoShutdown, 2=AutoStandby + /// @param[in] g_MAX11131_device.swcnv_0_1: ADC_MODE_CONTROL.SWCNV + /// SWCNV=0: trigger measurement by driving CNVST pin low. + /// Minimum active-low pulse duration of 5ns. (AIN14 is not available) + /// SWCNV=1: trigger measurement on SPI CS rising edge. + /// CS must be held low for minimum of 17 SCLK cycles. + /// CNVST pin is not used. (AIN14 is available) + /// @return number of ScanRead() words needed to retrieve the data. + /// For internal clock modes, the data format always includes the channel address. + /// misoData16 = CH[3:0] DATA[11:0] + /// + int ScanCustomInternalClock(void); + + //---------------------------------------- + /// SCAN_1000_CustomExternalClock + /// + /// Measure selected ADC channels in sequence from AIN0 to AIN15, + /// using only the channels enabled by enabledChannelsMask. + /// Bit 0x0001 enables AIN0. + /// Bit 0x0002 enables AIN1. + /// Bit 0x0004 enables AIN2. + /// Bit 0x0008 enables AIN3. + /// Bit 0x0010 enables AIN4. + /// Bit 0x0020 enables AIN5. + /// Bit 0x0040 enables AIN6. + /// Bit 0x0080 enables AIN7. + /// Bit 0x0100 enables AIN8. + /// Bit 0x0200 enables AIN9. + /// Bit 0x0400 enables AIN10. + /// Bit 0x0800 enables AIN11. + /// Bit 0x1000 enables AIN12. + /// Bit 0x2000 enables AIN13. + /// Bit 0x4000 enables AIN14. + /// Bit 0x8000 enables AIN15. + /// External clock mode. + /// @param[in] g_MAX11131_device.enabledChannelsMask: Bitmap of AIN Channels to scan. + /// @param[in] g_MAX11131_device.PowerManagement_0_2: 0=Normal, 1=AutoShutdown, 2=AutoStandby + /// @param[in] g_MAX11131_device.chan_id_0_1: ADC_MODE_CONTROL.CHAN_ID + /// @return number of ScanRead() words needed to retrieve the data. + /// For external clock modes, the data format depends on CHAN_ID. + /// when CHAN_ID = 0: misoData16 = 0 DATA[11:0] x x x + /// when CHAN_ID = 1: misoData16 = CH[3:0] DATA[11:0] + /// + int ScanCustomExternalClock(void); + + //---------------------------------------- + /// SCAN_1001_SampleSetExternalClock + /// + /// Measure ADC channels in an arbitrary pattern. + /// Channels can be visited in any order, with repetition allowed. + /// External clock mode. + /// @pre g_MAX11131_device.enabledChannelsPatternLength_1_256: number of channel selections + /// @pre g_MAX11131_device.enabledChannelsPattern: array containing channel selection pattern + /// In the array, one channel select per byte. + /// In the SPI interface, immediately after SAMPLESET register is written, + /// each byte encodes two channelNumber selections. + /// The high 4 bits encode the first channelNumber. + /// (((enabledChannelsPattern[0]) & 0x0F) << 4) | ((enabledChannelsPattern[1]) & 0x0F) + /// If it is an odd number of channels, additional nybbles will be ignored. + /// CS will be asserted low during the entire SAMPLESET pattern selection. + /// @param[in] g_MAX11131_device.PowerManagement_0_2: 0=Normal, 1=AutoShutdown, 2=AutoStandby + /// @param[in] g_MAX11131_device.chan_id_0_1: ADC_MODE_CONTROL.CHAN_ID + /// @return number of ScanRead() words needed to retrieve the data. + /// For external clock modes, the data format depends on CHAN_ID. + /// when CHAN_ID = 0: misoData16 = 0 DATA[11:0] x x x + /// when CHAN_ID = 1: misoData16 = CH[3:0] DATA[11:0] + /// + int ScanSampleSetExternalClock(void); + + //---------------------------------------- + /// Example configure and perform some measurements in ScanManual mode. + /// @param[out] pd_mean = address for double mean (avearge) + /// @param[out] pd_variance = address for double variance (variance) + /// @param[out] pd_stddev = address for double stddev (standard deviation) + /// @param[out] pd_Sx = address for double Sx (sum of all X) + /// @param[out] pd_Sxx = address for double Sxx (sum of squares of each X) + void Example_ScanManual(int channelNumber_0_15, int nWords, + double* pd_mean, double* pd_variance, double* pd_stddev, + double* pd_Sx, double* pd_Sxx); + +}; // end of class MAX11131 + +#endif // __MAX11131_H__ + +// End of file +