Maxim Integrated MAX5171 14-bit Force/Sense DAC

Dependents:   MAX5171BOB_Tester MAX5171BOB_14bit_Remote_Sense_SPI_DAC MAX5171BOB_Serial_Tester

Committer:
whismanoid
Date:
Fri May 31 21:50:12 2019 +0000
Revision:
0:80a9add62408
Child:
1:e73245718b2a
MAX5171 initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
whismanoid 0:80a9add62408 1 // /*******************************************************************************
whismanoid 0:80a9add62408 2 // * Copyright (C) 2019 Maxim Integrated Products, Inc., All Rights Reserved.
whismanoid 0:80a9add62408 3 // *
whismanoid 0:80a9add62408 4 // * Permission is hereby granted, free of charge, to any person obtaining a
whismanoid 0:80a9add62408 5 // * copy of this software and associated documentation files (the "Software"),
whismanoid 0:80a9add62408 6 // * to deal in the Software without restriction, including without limitation
whismanoid 0:80a9add62408 7 // * the rights to use, copy, modify, merge, publish, distribute, sublicense,
whismanoid 0:80a9add62408 8 // * and/or sell copies of the Software, and to permit persons to whom the
whismanoid 0:80a9add62408 9 // * Software is furnished to do so, subject to the following conditions:
whismanoid 0:80a9add62408 10 // *
whismanoid 0:80a9add62408 11 // * The above copyright notice and this permission notice shall be included
whismanoid 0:80a9add62408 12 // * in all copies or substantial portions of the Software.
whismanoid 0:80a9add62408 13 // *
whismanoid 0:80a9add62408 14 // * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
whismanoid 0:80a9add62408 15 // * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
whismanoid 0:80a9add62408 16 // * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
whismanoid 0:80a9add62408 17 // * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
whismanoid 0:80a9add62408 18 // * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
whismanoid 0:80a9add62408 19 // * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
whismanoid 0:80a9add62408 20 // * OTHER DEALINGS IN THE SOFTWARE.
whismanoid 0:80a9add62408 21 // *
whismanoid 0:80a9add62408 22 // * Except as contained in this notice, the name of Maxim Integrated
whismanoid 0:80a9add62408 23 // * Products, Inc. shall not be used except as stated in the Maxim Integrated
whismanoid 0:80a9add62408 24 // * Products, Inc. Branding Policy.
whismanoid 0:80a9add62408 25 // *
whismanoid 0:80a9add62408 26 // * The mere transfer of this software does not imply any licenses
whismanoid 0:80a9add62408 27 // * of trade secrets, proprietary technology, copyrights, patents,
whismanoid 0:80a9add62408 28 // * trademarks, maskwork rights, or any other form of intellectual
whismanoid 0:80a9add62408 29 // * property whatsoever. Maxim Integrated Products, Inc. retains all
whismanoid 0:80a9add62408 30 // * ownership rights.
whismanoid 0:80a9add62408 31 // *******************************************************************************
whismanoid 0:80a9add62408 32 // */
whismanoid 0:80a9add62408 33 // *********************************************************************
whismanoid 0:80a9add62408 34 // @file MAX5171.h
whismanoid 0:80a9add62408 35 // *********************************************************************
whismanoid 0:80a9add62408 36 // Header file
whismanoid 0:80a9add62408 37 // DO NOT EDIT; except areas designated "CUSTOMIZE". Automatically generated file.
whismanoid 0:80a9add62408 38 // generated by XMLSystemOfDevicesToMBED.py
whismanoid 0:80a9add62408 39 // System Name = ExampleSystem
whismanoid 0:80a9add62408 40 // System Description = Device driver example
whismanoid 0:80a9add62408 41 // Device Name = MAX5171
whismanoid 0:80a9add62408 42 // Device Description = Low-Power, Serial, 14-Bit, 1-Channel DACs with Force/Sense Voltage Output and SPI Interface
whismanoid 0:80a9add62408 43 // Device Manufacturer = Maxim Integrated
whismanoid 0:80a9add62408 44 // Device PartNumber = MAX5171AEEE+
whismanoid 0:80a9add62408 45 // Device RegValue_Width = DataWidth16bit_HL
whismanoid 0:80a9add62408 46 //
whismanoid 0:80a9add62408 47 // DAC NumChannels = 1
whismanoid 0:80a9add62408 48 // DAC ResolutionBits = 14
whismanoid 0:80a9add62408 49 //
whismanoid 0:80a9add62408 50 // SPI CS = ActiveLow
whismanoid 0:80a9add62408 51 // SPI FrameStart = CS
whismanoid 0:80a9add62408 52 // SPI CPOL = 0
whismanoid 0:80a9add62408 53 // SPI CPHA = 0
whismanoid 0:80a9add62408 54 // SPI MOSI and MISO Data are both stable on Rising edge of SCLK
whismanoid 0:80a9add62408 55 // SPI SCLK Idle Low
whismanoid 0:80a9add62408 56 // SPI SCLKMaxMHz = 10
whismanoid 0:80a9add62408 57 // SPI SCLKMinMHz = 0
whismanoid 0:80a9add62408 58 //
whismanoid 0:80a9add62408 59
whismanoid 0:80a9add62408 60
whismanoid 0:80a9add62408 61 // Prevent multiple declaration
whismanoid 0:80a9add62408 62 #ifndef __MAX5171_H__
whismanoid 0:80a9add62408 63 #define __MAX5171_H__
whismanoid 0:80a9add62408 64
whismanoid 0:80a9add62408 65 #include "mbed.h"
whismanoid 0:80a9add62408 66
whismanoid 0:80a9add62408 67 // CODE GENERATOR: conditional defines
whismanoid 0:80a9add62408 68 // CODE GENERATOR: class declaration and docstrings
whismanoid 0:80a9add62408 69 /**
whismanoid 0:80a9add62408 70 * @brief MAX5171 Low-Power, Serial, 14-Bit, 1-Channel DACs with Force/Sense Voltage Output and SPI Interface
whismanoid 0:80a9add62408 71 *
whismanoid 0:80a9add62408 72 * //---------- CODE GENERATOR: testMainCppCodeList
whismanoid 0:80a9add62408 73 * @code
whismanoid 0:80a9add62408 74 * // CODE GENERATOR: example code includes
whismanoid 0:80a9add62408 75 * // example code includes
whismanoid 0:80a9add62408 76 * #include "mbed.h"
whismanoid 0:80a9add62408 77 * //#include "max32625.h"
whismanoid 0:80a9add62408 78 * #include "MAX5171.h"
whismanoid 0:80a9add62408 79 *
whismanoid 0:80a9add62408 80 * // optional: serial port
whismanoid 0:80a9add62408 81 * // note: some platforms such as Nucleo-F446RE do not support the USBSerial library.
whismanoid 0:80a9add62408 82 * // In those cases, remove the USBDevice lib from the project and rebuild.
whismanoid 0:80a9add62408 83 * #if defined(TARGET_MAX32625MBED)
whismanoid 0:80a9add62408 84 * #include "USBSerial.h"
whismanoid 0:80a9add62408 85 * USBSerial serial; // virtual serial port over USB (DEV connector)
whismanoid 0:80a9add62408 86 * #elif defined(TARGET_MAX32630MBED)
whismanoid 0:80a9add62408 87 * #include "USBSerial.h"
whismanoid 0:80a9add62408 88 * USBSerial serial; // virtual serial port over USB (DEV connector)
whismanoid 0:80a9add62408 89 * #else
whismanoid 0:80a9add62408 90 * //#include "USBSerial.h"
whismanoid 0:80a9add62408 91 * Serial serial(USBTX, USBRX); // tx, rx
whismanoid 0:80a9add62408 92 * #endif
whismanoid 0:80a9add62408 93 *
whismanoid 0:80a9add62408 94 * // example code board support
whismanoid 0:80a9add62408 95 * //MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3);
whismanoid 0:80a9add62408 96 * //DigitalOut rLED(LED1);
whismanoid 0:80a9add62408 97 * //DigitalOut gLED(LED2);
whismanoid 0:80a9add62408 98 * //DigitalOut bLED(LED3);
whismanoid 0:80a9add62408 99 * //
whismanoid 0:80a9add62408 100 * // Arduino "shield" connector port definitions (MAX32625MBED shown)
whismanoid 0:80a9add62408 101 * #if defined(TARGET_MAX32625MBED)
whismanoid 0:80a9add62408 102 * #define A0 AIN_0
whismanoid 0:80a9add62408 103 * #define A1 AIN_1
whismanoid 0:80a9add62408 104 * #define A2 AIN_2
whismanoid 0:80a9add62408 105 * #define A3 AIN_3
whismanoid 0:80a9add62408 106 * #define D0 P0_0
whismanoid 0:80a9add62408 107 * #define D1 P0_1
whismanoid 0:80a9add62408 108 * #define D2 P0_2
whismanoid 0:80a9add62408 109 * #define D3 P0_3
whismanoid 0:80a9add62408 110 * #define D4 P0_4
whismanoid 0:80a9add62408 111 * #define D5 P0_5
whismanoid 0:80a9add62408 112 * #define D6 P0_6
whismanoid 0:80a9add62408 113 * #define D7 P0_7
whismanoid 0:80a9add62408 114 * #define D8 P1_4
whismanoid 0:80a9add62408 115 * #define D9 P1_5
whismanoid 0:80a9add62408 116 * #define D10 P1_3
whismanoid 0:80a9add62408 117 * #define D11 P1_1
whismanoid 0:80a9add62408 118 * #define D12 P1_2
whismanoid 0:80a9add62408 119 * #define D13 P1_0
whismanoid 0:80a9add62408 120 * #endif
whismanoid 0:80a9add62408 121 *
whismanoid 0:80a9add62408 122 * // example code declare SPI interface
whismanoid 0:80a9add62408 123 * #if defined(TARGET_MAX32625MBED)
whismanoid 0:80a9add62408 124 * 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
whismanoid 0:80a9add62408 125 * DigitalOut spi_cs(SPI1_SS); // TARGET_MAX32625MBED: P1_3 Arduino 10-pin header D10
whismanoid 0:80a9add62408 126 * #elif defined(TARGET_MAX32600MBED)
whismanoid 0:80a9add62408 127 * SPI spi(SPI2_MOSI, SPI2_MISO, SPI2_SCK); // mosi, miso, sclk spi1 TARGET_MAX32600MBED: Arduino 10-pin header D11 D12 D13
whismanoid 0:80a9add62408 128 * DigitalOut spi_cs(SPI2_SS); // Generic: Arduino 10-pin header D10
whismanoid 0:80a9add62408 129 * #else
whismanoid 0:80a9add62408 130 * SPI spi(D11, D12, D13); // mosi, miso, sclk spi1 TARGET_MAX32600MBED: Arduino 10-pin header D11 D12 D13
whismanoid 0:80a9add62408 131 * DigitalOut spi_cs(D10); // Generic: Arduino 10-pin header D10
whismanoid 0:80a9add62408 132 * #endif
whismanoid 0:80a9add62408 133 *
whismanoid 0:80a9add62408 134 * // example code declare GPIO interface pins
whismanoid 0:80a9add62408 135 * // AnalogOut FB_pin(Px_x_PortName_To_Be_Determined); // Analog Input to MAX5171 device
whismanoid 0:80a9add62408 136 * DigitalOut RS_pin(D9); // Digital Configuration Input to MAX5171 device
whismanoid 0:80a9add62408 137 * DigitalOut PDLb_pin(D8); // Digital Configuration Input to MAX5171 device
whismanoid 0:80a9add62408 138 * DigitalOut CLRb_pin(D7); // Digital Configuration Input to MAX5171 device
whismanoid 0:80a9add62408 139 * DigitalOut SHDN_pin(D6); // Digital Configuration Input to MAX5171 device
whismanoid 0:80a9add62408 140 * // AnalogIn OUT_pin(A0); // Analog Output from MAX5171 device
whismanoid 0:80a9add62408 141 * DigitalIn UPO_pin(D5); // Digital General-Purpose Output from MAX5171 device
whismanoid 0:80a9add62408 142 * // example code declare device instance
whismanoid 0:80a9add62408 143 * MAX5171 g_MAX5171_device(spi, spi_cs, RS_pin, PDLb_pin, CLRb_pin, SHDN_pin, UPO_pin, MAX5171::MAX5171_IC);
whismanoid 0:80a9add62408 144 *
whismanoid 0:80a9add62408 145 * // example code main function
whismanoid 0:80a9add62408 146 * int main()
whismanoid 0:80a9add62408 147 * {
whismanoid 0:80a9add62408 148 * while (1)
whismanoid 0:80a9add62408 149 * {
whismanoid 0:80a9add62408 150 * // example code: serial port banner message
whismanoid 0:80a9add62408 151 * #if defined(TARGET_MAX32625MBED)
whismanoid 0:80a9add62408 152 * serial.printf("MAX32625MBED ");
whismanoid 0:80a9add62408 153 * #elif defined(TARGET_MAX32600MBED)
whismanoid 0:80a9add62408 154 * serial.printf("MAX32600MBED ");
whismanoid 0:80a9add62408 155 * #elif defined(TARGET_NUCLEO_F446RE)
whismanoid 0:80a9add62408 156 * serial.printf("NUCLEO_F446RE ");
whismanoid 0:80a9add62408 157 * #endif
whismanoid 0:80a9add62408 158 * serial.printf("MAX5715BOB\r\n");
whismanoid 0:80a9add62408 159 *
whismanoid 0:80a9add62408 160 * //MAX5171 dac(spi, spi_cs, MAX5171::MAX5171_IC);
whismanoid 0:80a9add62408 161 * //dac.Init();
whismanoid 0:80a9add62408 162 *
whismanoid 0:80a9add62408 163 * // CODE GENERATOR: example code: member function Init
whismanoid 0:80a9add62408 164 * g_MAX5171_device.Init();
whismanoid 0:80a9add62408 165 *
whismanoid 0:80a9add62408 166 * // CODE GENERATOR: example code: has no member function REF
whismanoid 0:80a9add62408 167 * // CODE GENERATOR: example code: member function CODE_LOAD
whismanoid 0:80a9add62408 168 * //
whismanoid 0:80a9add62408 169 * uint16_t code = 0xccc;
whismanoid 0:80a9add62408 170 * g_MAX5171_device.CODE_LOAD(code);
whismanoid 0:80a9add62408 171 * //
whismanoid 0:80a9add62408 172 * code = 0x800;
whismanoid 0:80a9add62408 173 * g_MAX5171_device.CODE_LOAD(code);
whismanoid 0:80a9add62408 174 * //
whismanoid 0:80a9add62408 175 * code = 0x666;
whismanoid 0:80a9add62408 176 * g_MAX5171_device.CODE_LOAD(code);
whismanoid 0:80a9add62408 177 * //
whismanoid 0:80a9add62408 178 * code = 0xFFF;
whismanoid 0:80a9add62408 179 * g_MAX5171_device.CODE_LOAD(code);
whismanoid 0:80a9add62408 180 *
whismanoid 0:80a9add62408 181 * // CODE GENERATOR: example code: has no member function CODEallLOADall
whismanoid 0:80a9add62408 182 * // CODE GENERATOR: example code: has no member function CODEnLOADn
whismanoid 0:80a9add62408 183 * // CODE GENERATOR: example code: has no member function ScanManual
whismanoid 0:80a9add62408 184 * // CODE GENERATOR: example code: has no member function ReadAINcode
whismanoid 0:80a9add62408 185 * wait(3.0);
whismanoid 0:80a9add62408 186 * }
whismanoid 0:80a9add62408 187 * }
whismanoid 0:80a9add62408 188 * @endcode
whismanoid 0:80a9add62408 189 * //---------- CODE GENERATOR: end testMainCppCodeList
whismanoid 0:80a9add62408 190 */
whismanoid 0:80a9add62408 191 class MAX5171 {
whismanoid 0:80a9add62408 192 public:
whismanoid 0:80a9add62408 193 // CODE GENERATOR: TypedefEnum EnumItem declarations
whismanoid 0:80a9add62408 194 // CODE GENERATOR: TypedefEnum MAX5171_CMD_enum_t
whismanoid 0:80a9add62408 195 //----------------------------------------
whismanoid 0:80a9add62408 196 /// Command Codes (first byte)
whismanoid 0:80a9add62408 197 ///
whismanoid 0:80a9add62408 198 /// Naming convention is CMD_bitstream_FUNCTION_NAME
whismanoid 0:80a9add62408 199 /// - dd_dddd_dddd_dddd = data field
whismanoid 0:80a9add62408 200 /// - xxxx = don't care
whismanoid 0:80a9add62408 201 typedef enum MAX5171_CMD_enum_t {
whismanoid 0:80a9add62408 202 CMD_00dd_dddd_dddd_dddd_CODE = 0x0000, //!< 16'b0000000000000000
whismanoid 0:80a9add62408 203 CMD_01dd_dddd_dddd_dddd_CODE_LOAD = 0x4000, //!< 16'b0100000000000000
whismanoid 0:80a9add62408 204 CMD_10xx_xxxx_xxxx_xxxx_LOAD = 0x8000, //!< 16'b1000000000000000
whismanoid 0:80a9add62408 205 CMD_1100_xxxx_xxxx_xxxx_NOP = 0xc000, //!< 16'b1100000000000000
whismanoid 0:80a9add62408 206 CMD_1101_xxxx_xxxx_xxxx_SHUTDOWN = 0xd000, //!< 16'b1101000000000000
whismanoid 0:80a9add62408 207 CMD_1110_0xxx_xxxx_xxxx_UPO_LOW = 0xe000, //!< 16'b1110000000000000
whismanoid 0:80a9add62408 208 CMD_1110_1xxx_xxxx_xxxx_UPO_HIGH = 0xe800, //!< 16'b1110100000000000
whismanoid 0:80a9add62408 209 CMD_1111_0xxx_xxxx_xxxx_MODE1_DOUT_SCLK_RISING_EDGE = 0xf000, //!< 16'b1111000000000000
whismanoid 0:80a9add62408 210 CMD_1111_1xxx_xxxx_xxxx_MODE0_DOUT_SCLK_FALLING_EDGE = 0xf800, //!< 16'b1111100000000000
whismanoid 0:80a9add62408 211 } MAX5171_CMD_enum_t;
whismanoid 0:80a9add62408 212
whismanoid 0:80a9add62408 213 // TODO1: CODE GENERATOR: ic_variant -- IC's supported with this driver
whismanoid 0:80a9add62408 214 /**
whismanoid 0:80a9add62408 215 * @brief IC's supported with this driver
whismanoid 0:80a9add62408 216 * @details MAX5171
whismanoid 0:80a9add62408 217 */
whismanoid 0:80a9add62408 218 typedef enum
whismanoid 0:80a9add62408 219 {
whismanoid 0:80a9add62408 220 MAX5171_IC = 0,
whismanoid 0:80a9add62408 221 //MAX5171_IC = 1
whismanoid 0:80a9add62408 222 } MAX5171_ic_t;
whismanoid 0:80a9add62408 223
whismanoid 0:80a9add62408 224 // TODO1: CODE GENERATOR: class constructor declaration
whismanoid 0:80a9add62408 225 /**********************************************************//**
whismanoid 0:80a9add62408 226 * @brief Constructor for MAX5171 Class.
whismanoid 0:80a9add62408 227 *
whismanoid 0:80a9add62408 228 * @details Requires an existing SPI object as well as a DigitalOut object.
whismanoid 0:80a9add62408 229 * The DigitalOut object is used for a chip enable signal
whismanoid 0:80a9add62408 230 *
whismanoid 0:80a9add62408 231 * On Entry:
whismanoid 0:80a9add62408 232 * @param[in] spi - pointer to existing SPI object
whismanoid 0:80a9add62408 233 * @param[in] cs_pin - pointer to a DigitalOut pin object
whismanoid 0:80a9add62408 234 * CODE GENERATOR: class constructor docstrings gpio InputPin pins
whismanoid 0:80a9add62408 235 * @param[in] RS_pin - pointer to a DigitalOut pin object
whismanoid 0:80a9add62408 236 * @param[in] PDLb_pin - pointer to a DigitalOut pin object
whismanoid 0:80a9add62408 237 * @param[in] CLRb_pin - pointer to a DigitalOut pin object
whismanoid 0:80a9add62408 238 * @param[in] SHDN_pin - pointer to a DigitalOut pin object
whismanoid 0:80a9add62408 239 * CODE GENERATOR: class constructor docstrings gpio OutputPin pins
whismanoid 0:80a9add62408 240 * @param[in] UPO_pin - pointer to a DigitalIn pin object
whismanoid 0:80a9add62408 241 * @param[in] ic_variant - which type of MAX5171 is used
whismanoid 0:80a9add62408 242 *
whismanoid 0:80a9add62408 243 * On Exit:
whismanoid 0:80a9add62408 244 *
whismanoid 0:80a9add62408 245 * @return None
whismanoid 0:80a9add62408 246 **************************************************************/
whismanoid 0:80a9add62408 247 MAX5171(SPI &spi, DigitalOut &cs_pin, // SPI interface
whismanoid 0:80a9add62408 248 // CODE GENERATOR: class constructor declaration gpio InputPin pins
whismanoid 0:80a9add62408 249 // AnalogOut &FB_pin, // Analog Input to MAX5171 device
whismanoid 0:80a9add62408 250 DigitalOut &RS_pin, // Digital Configuration Input to MAX5171 device
whismanoid 0:80a9add62408 251 DigitalOut &PDLb_pin, // Digital Configuration Input to MAX5171 device
whismanoid 0:80a9add62408 252 DigitalOut &CLRb_pin, // Digital Configuration Input to MAX5171 device
whismanoid 0:80a9add62408 253 DigitalOut &SHDN_pin, // Digital Configuration Input to MAX5171 device
whismanoid 0:80a9add62408 254 // CODE GENERATOR: class constructor declaration gpio OutputPin pins
whismanoid 0:80a9add62408 255 // AnalogIn &OUT_pin, // Analog Output from MAX5171 device
whismanoid 0:80a9add62408 256 DigitalIn &UPO_pin, // Digital General-Purpose Output from MAX5171 device
whismanoid 0:80a9add62408 257 MAX5171_ic_t ic_variant);
whismanoid 0:80a9add62408 258
whismanoid 0:80a9add62408 259 // CODE GENERATOR: class destructor declaration
whismanoid 0:80a9add62408 260 /************************************************************
whismanoid 0:80a9add62408 261 * @brief Default destructor for MAX5171 Class.
whismanoid 0:80a9add62408 262 *
whismanoid 0:80a9add62408 263 * @details Destroys SPI object if owner
whismanoid 0:80a9add62408 264 *
whismanoid 0:80a9add62408 265 * On Entry:
whismanoid 0:80a9add62408 266 *
whismanoid 0:80a9add62408 267 * On Exit:
whismanoid 0:80a9add62408 268 *
whismanoid 0:80a9add62408 269 * @return None
whismanoid 0:80a9add62408 270 **************************************************************/
whismanoid 0:80a9add62408 271 ~MAX5171();
whismanoid 0:80a9add62408 272
whismanoid 0:80a9add62408 273 // CODE GENERATOR: spi_frequency setter declaration
whismanoid 0:80a9add62408 274 // set SPI SCLK frequency
whismanoid 0:80a9add62408 275 void spi_frequency(int spi_sclk_Hz);
whismanoid 0:80a9add62408 276
whismanoid 0:80a9add62408 277 //----------------------------------------
whismanoid 0:80a9add62408 278 // CODE GENERATOR: omit typedef enum MAX5171_device_t, class members instead of global device object
whismanoid 0:80a9add62408 279 public:
whismanoid 0:80a9add62408 280
whismanoid 0:80a9add62408 281 /// reference voltage, in Volts
whismanoid 0:80a9add62408 282 double VRef;
whismanoid 0:80a9add62408 283
whismanoid 0:80a9add62408 284 /// shadow of write-only dacCodeLsbs field CMD_00dd_dddd_dddd_dddd_CODE or CMD_01dd_dddd_dddd_dddd_CODE_LOAD
whismanoid 0:80a9add62408 285 int16_t DACCode;
whismanoid 0:80a9add62408 286
whismanoid 0:80a9add62408 287 // CODE GENERATOR: omit global g_MAX5171_device
whismanoid 0:80a9add62408 288
whismanoid 0:80a9add62408 289 // CODE GENERATOR: extern function declarations
whismanoid 0:80a9add62408 290 // CODE GENERATOR: extern function declaration SPIoutputCS
whismanoid 0:80a9add62408 291 //----------------------------------------
whismanoid 0:80a9add62408 292 // Assert SPI Chip Select
whismanoid 0:80a9add62408 293 // SPI chip-select for MAX5171
whismanoid 0:80a9add62408 294 //
whismanoid 0:80a9add62408 295 void SPIoutputCS(int isLogicHigh);
whismanoid 0:80a9add62408 296
whismanoid 0:80a9add62408 297 // CODE GENERATOR: extern function declaration SPIwrite16bits
whismanoid 0:80a9add62408 298 //----------------------------------------
whismanoid 0:80a9add62408 299 // SPI write 16 bits
whismanoid 0:80a9add62408 300 // SPI interface to MAX5171 shift 16 bits mosiData into MAX5171 DIN
whismanoid 0:80a9add62408 301 //
whismanoid 0:80a9add62408 302 void SPIwrite16bits(int16_t mosiData16);
whismanoid 0:80a9add62408 303
whismanoid 0:80a9add62408 304 // CODE GENERATOR: class member data
whismanoid 0:80a9add62408 305 private:
whismanoid 0:80a9add62408 306 // CODE GENERATOR: class member data for SPI interface
whismanoid 0:80a9add62408 307 // SPI object
whismanoid 0:80a9add62408 308 SPI &m_spi;
whismanoid 0:80a9add62408 309 int m_SPI_SCLK_Hz;
whismanoid 0:80a9add62408 310 int m_SPI_dataMode;
whismanoid 0:80a9add62408 311 int m_SPI_cs_state;
whismanoid 0:80a9add62408 312
whismanoid 0:80a9add62408 313 // Selector pin object
whismanoid 0:80a9add62408 314 DigitalOut &m_cs_pin;
whismanoid 0:80a9add62408 315
whismanoid 0:80a9add62408 316 // CODE GENERATOR: class member data for gpio InputPin pins
whismanoid 0:80a9add62408 317 // InputPin Name = FB
whismanoid 0:80a9add62408 318 // InputPin Description = Feedback Input
whismanoid 0:80a9add62408 319 // InputPin Function = Analog
whismanoid 0:80a9add62408 320 //
whismanoid 0:80a9add62408 321 // InputPin Name = RS
whismanoid 0:80a9add62408 322 // InputPin Description = Reset Mode Select (digital input). Connect to VDD to select midscale reset output value. Connect to DGND
whismanoid 0:80a9add62408 323 // to select 0 reset output value.
whismanoid 0:80a9add62408 324 // InputPin Function = Configuration
whismanoid 0:80a9add62408 325 DigitalOut &m_RS_pin;
whismanoid 0:80a9add62408 326 //
whismanoid 0:80a9add62408 327 // InputPin Name = PDL#
whismanoid 0:80a9add62408 328 // InputPin Description = Power-Down Lockout (digital input). Connect to VDD to allow shutdown. Connect to DGND to disable shutdown.
whismanoid 0:80a9add62408 329 // InputPin Function = Configuration
whismanoid 0:80a9add62408 330 DigitalOut &m_PDLb_pin;
whismanoid 0:80a9add62408 331 //
whismanoid 0:80a9add62408 332 // InputPin Name = CLR#
whismanoid 0:80a9add62408 333 // InputPin Description = Clear DAC (digital input). Clears the DAC to its predetermined output state as set by RS.
whismanoid 0:80a9add62408 334 // InputPin Function = Configuration
whismanoid 0:80a9add62408 335 DigitalOut &m_CLRb_pin;
whismanoid 0:80a9add62408 336 //
whismanoid 0:80a9add62408 337 // InputPin Name = SHDN
whismanoid 0:80a9add62408 338 // InputPin Description = Shutdown (digital input). Pulling SHDN high when PDL = VDD places the chip in shutdown mode with a
whismanoid 0:80a9add62408 339 // maximum shutdown current 0f 10uA.
whismanoid 0:80a9add62408 340 // InputPin Function = Configuration
whismanoid 0:80a9add62408 341 DigitalOut &m_SHDN_pin;
whismanoid 0:80a9add62408 342 //
whismanoid 0:80a9add62408 343 // CODE GENERATOR: class member data for gpio OutputPin pins
whismanoid 0:80a9add62408 344 // OutputPin Name = OUT
whismanoid 0:80a9add62408 345 // OutputPin Description = Analog Voltage Output. High impedance in shutdown. Output voltage is limited to VDD.
whismanoid 0:80a9add62408 346 // OutputPin Function = Analog
whismanoid 0:80a9add62408 347 // AnalogIn &m_OUT_pin;
whismanoid 0:80a9add62408 348 //
whismanoid 0:80a9add62408 349 // OutputPin Name = UPO
whismanoid 0:80a9add62408 350 // OutputPin Description = User-Programmable Output. State is set by serial input.
whismanoid 0:80a9add62408 351 // OutputPin Function = General-Purpose
whismanoid 0:80a9add62408 352 DigitalIn &m_UPO_pin;
whismanoid 0:80a9add62408 353 //
whismanoid 0:80a9add62408 354
whismanoid 0:80a9add62408 355 // Identifies which IC variant is being used
whismanoid 0:80a9add62408 356 MAX5171_ic_t m_ic_variant;
whismanoid 0:80a9add62408 357
whismanoid 0:80a9add62408 358 public:
whismanoid 0:80a9add62408 359
whismanoid 0:80a9add62408 360 // CODE GENERATOR: class member function declarations
whismanoid 0:80a9add62408 361 //----------------------------------------
whismanoid 0:80a9add62408 362 /// Initialize device
whismanoid 0:80a9add62408 363 /// @return 1 on success; 0 on failure
whismanoid 0:80a9add62408 364 uint8_t Init(void);
whismanoid 0:80a9add62408 365
whismanoid 0:80a9add62408 366 //----------------------------------------
whismanoid 0:80a9add62408 367 /// Return the DAC register value corresponding to physical voltage.
whismanoid 0:80a9add62408 368 /// Does not perform any offset or gain correction.
whismanoid 0:80a9add62408 369 ///
whismanoid 0:80a9add62408 370 /// @pre g_MAX5171_device.VRef = Voltage of REF input, in Volts
whismanoid 0:80a9add62408 371 /// @param[in] voltage = physical voltage in Volts
whismanoid 0:80a9add62408 372 /// @return raw 14-bit MAX5171 code (right justified).
whismanoid 0:80a9add62408 373 uint16_t DACCodeOfVoltage(double voltageV);
whismanoid 0:80a9add62408 374
whismanoid 0:80a9add62408 375 //----------------------------------------
whismanoid 0:80a9add62408 376 /// Return the physical voltage corresponding to DAC register.
whismanoid 0:80a9add62408 377 /// Does not perform any offset or gain correction.
whismanoid 0:80a9add62408 378 ///
whismanoid 0:80a9add62408 379 /// @pre g_MAX5171_device.VRef = Voltage of REF input, in Volts
whismanoid 0:80a9add62408 380 /// @param[in] value_u14: raw 14-bit MAX5171 code (right justified).
whismanoid 0:80a9add62408 381 /// @return physical voltage corresponding to MAX5171 code.
whismanoid 0:80a9add62408 382 double VoltageOfCode(uint16_t value_u14);
whismanoid 0:80a9add62408 383
whismanoid 0:80a9add62408 384 //----------------------------------------
whismanoid 0:80a9add62408 385 /// CMD_00dd_dddd_dddd_dddd_CODE
whismanoid 0:80a9add62408 386 ///
whismanoid 0:80a9add62408 387 /// Load input register; DAC registers are unchanged.
whismanoid 0:80a9add62408 388 /// @return 1 on success; 0 on failure
whismanoid 0:80a9add62408 389 uint8_t CODE(uint16_t dacCodeLsbs);
whismanoid 0:80a9add62408 390
whismanoid 0:80a9add62408 391 //----------------------------------------
whismanoid 0:80a9add62408 392 /// CMD_01dd_dddd_dddd_dddd_CODE_LOAD
whismanoid 0:80a9add62408 393 ///
whismanoid 0:80a9add62408 394 /// Load input register; DAC registers are updated (start up DAC with new data).
whismanoid 0:80a9add62408 395 /// @return 1 on success; 0 on failure
whismanoid 0:80a9add62408 396 uint8_t CODE_LOAD(uint16_t dacCodeLsbs);
whismanoid 0:80a9add62408 397
whismanoid 0:80a9add62408 398 //----------------------------------------
whismanoid 0:80a9add62408 399 /// CMD_10xx_xxxx_xxxx_xxxx_LOAD
whismanoid 0:80a9add62408 400 ///
whismanoid 0:80a9add62408 401 /// Update DAC register from input register (start up DAC with data previously
whismanoid 0:80a9add62408 402 /// stored in the input registers).
whismanoid 0:80a9add62408 403 /// @return 1 on success; 0 on failure
whismanoid 0:80a9add62408 404 uint8_t LOAD(void);
whismanoid 0:80a9add62408 405
whismanoid 0:80a9add62408 406 //----------------------------------------
whismanoid 0:80a9add62408 407 /// CMD_1100_xxxx_xxxx_xxxx_NOP
whismanoid 0:80a9add62408 408 ///
whismanoid 0:80a9add62408 409 /// No operation (NOP).
whismanoid 0:80a9add62408 410 /// @return 1 on success; 0 on failure
whismanoid 0:80a9add62408 411 uint8_t NOP(void);
whismanoid 0:80a9add62408 412
whismanoid 0:80a9add62408 413 //----------------------------------------
whismanoid 0:80a9add62408 414 /// CMD_1101_xxxx_xxxx_xxxx_SHUTDOWN
whismanoid 0:80a9add62408 415 ///
whismanoid 0:80a9add62408 416 /// Shut down DAC (provided PDL# = 1).
whismanoid 0:80a9add62408 417 /// @return 1 on success; 0 on failure
whismanoid 0:80a9add62408 418 uint8_t SHUTDOWN(void);
whismanoid 0:80a9add62408 419
whismanoid 0:80a9add62408 420 //----------------------------------------
whismanoid 0:80a9add62408 421 /// CMD_1110_0xxx_xxxx_xxxx_UPO_LOW
whismanoid 0:80a9add62408 422 ///
whismanoid 0:80a9add62408 423 /// UPO goes low (default).
whismanoid 0:80a9add62408 424 /// @return 1 on success; 0 on failure
whismanoid 0:80a9add62408 425 uint8_t UPO_LOW(void);
whismanoid 0:80a9add62408 426
whismanoid 0:80a9add62408 427 //----------------------------------------
whismanoid 0:80a9add62408 428 /// CMD_1110_1xxx_xxxx_xxxx_UPO_HIGH
whismanoid 0:80a9add62408 429 ///
whismanoid 0:80a9add62408 430 /// UPO goes high.
whismanoid 0:80a9add62408 431 /// @return 1 on success; 0 on failure
whismanoid 0:80a9add62408 432 uint8_t UPO_HIGH(void);
whismanoid 0:80a9add62408 433
whismanoid 0:80a9add62408 434 //----------------------------------------
whismanoid 0:80a9add62408 435 /// CMD_1111_0xxx_xxxx_xxxx_MODE1_DOUT_SCLK_RISING_EDGE
whismanoid 0:80a9add62408 436 ///
whismanoid 0:80a9add62408 437 /// Mode 1, DOUT clocked out on SCLK’s rising edge.
whismanoid 0:80a9add62408 438 /// @return 1 on success; 0 on failure
whismanoid 0:80a9add62408 439 uint8_t MODE1_DOUT_SCLK_RISING_EDGE(void);
whismanoid 0:80a9add62408 440
whismanoid 0:80a9add62408 441 //----------------------------------------
whismanoid 0:80a9add62408 442 /// CMD_1111_1xxx_xxxx_xxxx_MODE0_DOUT_SCLK_FALLING_EDGE
whismanoid 0:80a9add62408 443 ///
whismanoid 0:80a9add62408 444 /// Mode 0, DOUT clocked out on SCLK’s falling edge (default).
whismanoid 0:80a9add62408 445 /// @return 1 on success; 0 on failure
whismanoid 0:80a9add62408 446 uint8_t MODE0_DOUT_SCLK_FALLING_EDGE(void);
whismanoid 0:80a9add62408 447
whismanoid 0:80a9add62408 448 }; // end of class MAX5171
whismanoid 0:80a9add62408 449
whismanoid 0:80a9add62408 450 #endif // __MAX5171_H__
whismanoid 0:80a9add62408 451
whismanoid 0:80a9add62408 452 // End of file
whismanoid 0:80a9add62408 453