Maxim Integrated MAX5715 12-bit 4-channel voltage-output DAC

Dependents:   MAX5715BOB_Tester MAX5715BOB_12bit_4ch_SPI_DAC MAX5715BOB_Serial_Tester

Committer:
whismanoid
Date:
Thu May 23 22:18:03 2019 +0000
Revision:
0:777851395940
Child:
3:a3f0518094f4
equivalent to unpublished lib MAX5715 8:ae93fe5

Who changed what in which revision?

UserRevisionLine numberNew contents of line
whismanoid 0:777851395940 1 // /*******************************************************************************
whismanoid 0:777851395940 2 // * Copyright (C) 2019 Maxim Integrated Products, Inc., All Rights Reserved.
whismanoid 0:777851395940 3 // *
whismanoid 0:777851395940 4 // * Permission is hereby granted, free of charge, to any person obtaining a
whismanoid 0:777851395940 5 // * copy of this software and associated documentation files (the "Software"),
whismanoid 0:777851395940 6 // * to deal in the Software without restriction, including without limitation
whismanoid 0:777851395940 7 // * the rights to use, copy, modify, merge, publish, distribute, sublicense,
whismanoid 0:777851395940 8 // * and/or sell copies of the Software, and to permit persons to whom the
whismanoid 0:777851395940 9 // * Software is furnished to do so, subject to the following conditions:
whismanoid 0:777851395940 10 // *
whismanoid 0:777851395940 11 // * The above copyright notice and this permission notice shall be included
whismanoid 0:777851395940 12 // * in all copies or substantial portions of the Software.
whismanoid 0:777851395940 13 // *
whismanoid 0:777851395940 14 // * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
whismanoid 0:777851395940 15 // * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
whismanoid 0:777851395940 16 // * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
whismanoid 0:777851395940 17 // * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
whismanoid 0:777851395940 18 // * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
whismanoid 0:777851395940 19 // * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
whismanoid 0:777851395940 20 // * OTHER DEALINGS IN THE SOFTWARE.
whismanoid 0:777851395940 21 // *
whismanoid 0:777851395940 22 // * Except as contained in this notice, the name of Maxim Integrated
whismanoid 0:777851395940 23 // * Products, Inc. shall not be used except as stated in the Maxim Integrated
whismanoid 0:777851395940 24 // * Products, Inc. Branding Policy.
whismanoid 0:777851395940 25 // *
whismanoid 0:777851395940 26 // * The mere transfer of this software does not imply any licenses
whismanoid 0:777851395940 27 // * of trade secrets, proprietary technology, copyrights, patents,
whismanoid 0:777851395940 28 // * trademarks, maskwork rights, or any other form of intellectual
whismanoid 0:777851395940 29 // * property whatsoever. Maxim Integrated Products, Inc. retains all
whismanoid 0:777851395940 30 // * ownership rights.
whismanoid 0:777851395940 31 // *******************************************************************************
whismanoid 0:777851395940 32 // */
whismanoid 0:777851395940 33 // *********************************************************************
whismanoid 0:777851395940 34 // @file MAX5715.cpp
whismanoid 0:777851395940 35 // *********************************************************************
whismanoid 0:777851395940 36 // Device Driver file
whismanoid 0:777851395940 37 // DO NOT EDIT; except areas designated "CUSTOMIZE". Automatically generated file.
whismanoid 0:777851395940 38 // generated by XMLSystemOfDevicesToMBED.py
whismanoid 0:777851395940 39 // System Name = ExampleSystem
whismanoid 0:777851395940 40 // System Description = Device driver example
whismanoid 0:777851395940 41
whismanoid 0:777851395940 42 #include "MAX5715.h"
whismanoid 0:777851395940 43
whismanoid 0:777851395940 44 // Device Name = MAX5715
whismanoid 0:777851395940 45 // Device Description = Ultra-Small, 12-Bit, 4-Channel, Buffered Output Voltage DAC with Internal Reference and SPI Interface
whismanoid 0:777851395940 46 // Device Manufacturer = Maxim Integrated
whismanoid 0:777851395940 47 // Device PartNumber = MAX5715AAUD+
whismanoid 0:777851395940 48 // Device RegValue_Width = DataWidth16bit_HL
whismanoid 0:777851395940 49 //
whismanoid 0:777851395940 50 // DAC NumChannels = 4
whismanoid 0:777851395940 51 // DAC ResolutionBits = 12
whismanoid 0:777851395940 52 //
whismanoid 0:777851395940 53 // SPI CS = ActiveLow
whismanoid 0:777851395940 54 // SPI FrameStart = CS
whismanoid 0:777851395940 55 // SPI CPOL = 1
whismanoid 0:777851395940 56 // SPI CPHA = 0
whismanoid 0:777851395940 57 // SPI MOSI and MISO Data are both stable on Falling edge of SCLK
whismanoid 0:777851395940 58 // SPI SCLK Idle High
whismanoid 0:777851395940 59 // SPI SCLKMaxMHz = 50
whismanoid 0:777851395940 60 // SPI SCLKMinMHz = 0
whismanoid 0:777851395940 61 //
whismanoid 0:777851395940 62 // InputPin Name = LDAC#
whismanoid 0:777851395940 63 // InputPin Description = Dedicated Active-Low Asynchronous Load DAC.
whismanoid 0:777851395940 64 // InputPin Function = Trigger
whismanoid 0:777851395940 65 //
whismanoid 0:777851395940 66 // InputPin Name = CLR#
whismanoid 0:777851395940 67 // InputPin Description = Active-Low Clear Input.
whismanoid 0:777851395940 68 // InputPin Function = Trigger
whismanoid 0:777851395940 69 //
whismanoid 0:777851395940 70 // InputPin Name = REF
whismanoid 0:777851395940 71 // InputPin Description = Reference Voltage Input/Output.
whismanoid 0:777851395940 72 // Software selectable to be external reference or internal 2.048V, 2.500V, or 4.096V reference.
whismanoid 0:777851395940 73 // Default is external reference mode.
whismanoid 0:777851395940 74 // InputPin Function = Reference
whismanoid 0:777851395940 75 //
whismanoid 0:777851395940 76 // OutputPin Name = OUTA
whismanoid 0:777851395940 77 // OutputPin Description = Buffered Channel A DAC Output
whismanoid 0:777851395940 78 // OutputPin Function = Analog
whismanoid 0:777851395940 79 //
whismanoid 0:777851395940 80 // OutputPin Name = OUTB
whismanoid 0:777851395940 81 // OutputPin Description = Buffered Channel B DAC Output
whismanoid 0:777851395940 82 // OutputPin Function = Analog
whismanoid 0:777851395940 83 //
whismanoid 0:777851395940 84 // OutputPin Name = OUTC
whismanoid 0:777851395940 85 // OutputPin Description = Buffered Channel C DAC Output
whismanoid 0:777851395940 86 // OutputPin Function = Analog
whismanoid 0:777851395940 87 //
whismanoid 0:777851395940 88 // OutputPin Name = OUTD
whismanoid 0:777851395940 89 // OutputPin Description = Buffered Channel D DAC Output
whismanoid 0:777851395940 90 // OutputPin Function = Analog
whismanoid 0:777851395940 91 //
whismanoid 0:777851395940 92 // OutputPin Name = RDY#
whismanoid 0:777851395940 93 // OutputPin Description = SPI RDY Output. In daisy-chained applications connect RDY to the CSB of the next device in the chain.
whismanoid 0:777851395940 94 // OutputPin Function = DaisyChain
whismanoid 0:777851395940 95 //
whismanoid 0:777851395940 96 // SupplyPin Name = VDD
whismanoid 0:777851395940 97 // SupplyPin Description = Supply Voltage Input. Bypass VDD with a 0.1uF capacitor to GND.
whismanoid 0:777851395940 98 // SupplyPin VinMax = 5.5
whismanoid 0:777851395940 99 // SupplyPin VinMin = 2.7 (unless configured DAC VRefInternal = 4.096V, then VinMin = 4.5V)
whismanoid 0:777851395940 100 // SupplyPin Function = Analog
whismanoid 0:777851395940 101 //
whismanoid 0:777851395940 102 // SupplyPin Name = VDDIO
whismanoid 0:777851395940 103 // SupplyPin Description = Digital Interface Power-Supply Input
whismanoid 0:777851395940 104 // SupplyPin VinMax = 5.5
whismanoid 0:777851395940 105 // SupplyPin VinMin = 1.8
whismanoid 0:777851395940 106 // SupplyPin Function = Digital
whismanoid 0:777851395940 107 //
whismanoid 0:777851395940 108
whismanoid 0:777851395940 109 // CODE GENERATOR: class constructor definition
whismanoid 0:777851395940 110 MAX5715::MAX5715(SPI &spi, DigitalOut &cs_pin, // SPI interface
whismanoid 0:777851395940 111 // CODE GENERATOR: class constructor definition gpio InputPin pins
whismanoid 0:777851395940 112 DigitalOut &LDACb_pin, // Digital Trigger Input to MAX5715 device
whismanoid 0:777851395940 113 DigitalOut &CLRb_pin, // Digital Trigger Input to MAX5715 device
whismanoid 0:777851395940 114 // AnalogOut &REF_pin, // Reference Input to MAX5715 device
whismanoid 0:777851395940 115 // CODE GENERATOR: class constructor definition gpio OutputPin pins
whismanoid 0:777851395940 116 // AnalogIn &OUTA_pin, // Analog Output from MAX5715 device
whismanoid 0:777851395940 117 // AnalogIn &OUTB_pin, // Analog Output from MAX5715 device
whismanoid 0:777851395940 118 // AnalogIn &OUTC_pin, // Analog Output from MAX5715 device
whismanoid 0:777851395940 119 // AnalogIn &OUTD_pin, // Analog Output from MAX5715 device
whismanoid 0:777851395940 120 // DigitalIn &RDYb_pin, // Digital DaisyChain Output from MAX5715 device
whismanoid 0:777851395940 121 // CODE GENERATOR: class constructor definition ic_variant
whismanoid 0:777851395940 122 MAX5715_ic_t ic_variant)
whismanoid 0:777851395940 123 // CODE GENERATOR: class constructor initializer list
whismanoid 0:777851395940 124 : m_spi(spi), m_cs_pin(cs_pin), // SPI interface
whismanoid 0:777851395940 125 // CODE GENERATOR: class constructor initializer list gpio InputPin pins
whismanoid 0:777851395940 126 m_LDACb_pin(LDACb_pin), // Digital Trigger Input to MAX5715 device
whismanoid 0:777851395940 127 m_CLRb_pin(CLRb_pin), // Digital Trigger Input to MAX5715 device
whismanoid 0:777851395940 128 // m_REF_pin(REF_pin), // Reference Input to MAX5715 device
whismanoid 0:777851395940 129 // CODE GENERATOR: class constructor initializer list gpio OutputPin pins
whismanoid 0:777851395940 130 // m_OUTA_pin(OUTA_pin), // Analog Output from MAX5715 device
whismanoid 0:777851395940 131 // m_OUTB_pin(OUTB_pin), // Analog Output from MAX5715 device
whismanoid 0:777851395940 132 // m_OUTC_pin(OUTC_pin), // Analog Output from MAX5715 device
whismanoid 0:777851395940 133 // m_OUTD_pin(OUTD_pin), // Analog Output from MAX5715 device
whismanoid 0:777851395940 134 // m_RDYb_pin(RDYb_pin), // Digital DaisyChain Output from MAX5715 device
whismanoid 0:777851395940 135 // CODE GENERATOR: class constructor initializer list ic_variant
whismanoid 0:777851395940 136 m_ic_variant(ic_variant)
whismanoid 0:777851395940 137 {
whismanoid 0:777851395940 138 // CODE GENERATOR: class constructor definition SPI interface initialization
whismanoid 0:777851395940 139 //
whismanoid 0:777851395940 140 // SPI CS = ActiveLow
whismanoid 0:777851395940 141 // SPI FrameStart = CS
whismanoid 0:777851395940 142 m_SPI_cs_state = 1;
whismanoid 0:777851395940 143 m_cs_pin = m_SPI_cs_state;
whismanoid 0:777851395940 144
whismanoid 0:777851395940 145 // SPI CPOL = 1
whismanoid 0:777851395940 146 // SPI CPHA = 0
whismanoid 0:777851395940 147 // SPI MOSI and MISO Data are both stable on Falling edge of SCLK
whismanoid 0:777851395940 148 // SPI SCLK Idle High
whismanoid 0:777851395940 149 m_SPI_dataMode = 2; //SPI_MODE2; // CPOL=1,CPHA=0: Falling Edge stable; SCLK idle High
whismanoid 0:777851395940 150 m_spi.format(8,m_SPI_dataMode); // int bits_must_be_8, int mode=0_3 CPOL=0,CPHA=0
whismanoid 0:777851395940 151
whismanoid 0:777851395940 152 // SPI SCLKMaxMHz = 50
whismanoid 0:777851395940 153 // SPI SCLKMinMHz = 0
whismanoid 0:777851395940 154 //#define SPI_SCLK_Hz 48000000 // 48MHz
whismanoid 0:777851395940 155 //#define SPI_SCLK_Hz 24000000 // 24MHz
whismanoid 0:777851395940 156 //#define SPI_SCLK_Hz 12000000 // 12MHz
whismanoid 0:777851395940 157 //#define SPI_SCLK_Hz 4000000 // 4MHz
whismanoid 0:777851395940 158 //#define SPI_SCLK_Hz 2000000 // 2MHz
whismanoid 0:777851395940 159 //#define SPI_SCLK_Hz 1000000 // 1MHz
whismanoid 0:777851395940 160 m_SPI_SCLK_Hz = 12000000; // 12MHz; MAX5715 limit is 50MHz
whismanoid 0:777851395940 161 m_spi.frequency(m_SPI_SCLK_Hz);
whismanoid 0:777851395940 162
whismanoid 0:777851395940 163 // TODO1: CODE GENERATOR: class constructor definition gpio InputPin (Input to device) initialization
whismanoid 0:777851395940 164 //
whismanoid 0:777851395940 165 m_LDACb_pin = 1; // output logic high -- initial value in constructor
whismanoid 0:777851395940 166 m_CLRb_pin = 1; // output logic high -- initial value in constructor
whismanoid 0:777851395940 167 }
whismanoid 0:777851395940 168
whismanoid 0:777851395940 169 // CODE GENERATOR: class destructor definition
whismanoid 0:777851395940 170 MAX5715::~MAX5715()
whismanoid 0:777851395940 171 {
whismanoid 0:777851395940 172 // do nothing
whismanoid 0:777851395940 173 }
whismanoid 0:777851395940 174
whismanoid 0:777851395940 175 // CODE GENERATOR: spi_frequency setter definition
whismanoid 0:777851395940 176 // set SPI SCLK frequency
whismanoid 0:777851395940 177 void MAX5715::spi_frequency(int spi_sclk_Hz)
whismanoid 0:777851395940 178 {
whismanoid 0:777851395940 179 m_SPI_SCLK_Hz = spi_sclk_Hz;
whismanoid 0:777851395940 180 m_spi.frequency(m_SPI_SCLK_Hz);
whismanoid 0:777851395940 181 }
whismanoid 0:777851395940 182
whismanoid 0:777851395940 183 // CODE GENERATOR: omit global g_MAX5715_device
whismanoid 0:777851395940 184 // CODE GENERATOR: extern function declarations
whismanoid 0:777851395940 185 // CODE GENERATOR: extern function requirement MAX5715::SPIoutputCS
whismanoid 0:777851395940 186 // Assert SPI Chip Select
whismanoid 0:777851395940 187 // SPI chip-select for MAX5715
whismanoid 0:777851395940 188 //
whismanoid 0:777851395940 189 void MAX5715::SPIoutputCS(int isLogicHigh)
whismanoid 0:777851395940 190 {
whismanoid 0:777851395940 191 // CODE GENERATOR: extern function definition for function SPIoutputCS
whismanoid 0:777851395940 192 // CODE GENERATOR: extern function definition for standard SPI interface function SPIoutputCS(int isLogicHigh)
whismanoid 0:777851395940 193 m_SPI_cs_state = isLogicHigh;
whismanoid 0:777851395940 194 m_cs_pin = m_SPI_cs_state;
whismanoid 0:777851395940 195 }
whismanoid 0:777851395940 196
whismanoid 0:777851395940 197 // CODE GENERATOR: extern function requirement MAX5715::SPIwrite24bits
whismanoid 0:777851395940 198 // SPI write 24 bits
whismanoid 0:777851395940 199 // SPI interface to MAX5715 shift 24 bits mosiData into MAX5715 DIN
whismanoid 0:777851395940 200 //
whismanoid 0:777851395940 201 void MAX5715::SPIwrite24bits(int8_t mosiData8_FF0000, int16_t mosiData16_00FFFF)
whismanoid 0:777851395940 202 {
whismanoid 0:777851395940 203 // CODE GENERATOR: extern function definition for function SPIwrite24bits
whismanoid 0:777851395940 204 // TODO1: CODE GENERATOR: extern function definition for standard SPI interface function SPIwrite24bits(int8_t mosiData8_FF0000, int16_t mosiData16_00FFFF)
whismanoid 0:777851395940 205 size_t byteCount = 3;
whismanoid 0:777851395940 206 static char mosiData[3];
whismanoid 0:777851395940 207 static char misoData[3];
whismanoid 0:777851395940 208 mosiData[0] = mosiData8_FF0000;
whismanoid 0:777851395940 209 mosiData[1] = (char)((mosiData16_00FFFF >> 8) & 0xFF); // MSByte
whismanoid 0:777851395940 210 mosiData[2] = (char)((mosiData16_00FFFF >> 0) & 0xFF); // LSByte
whismanoid 0:777851395940 211 //
whismanoid 0:777851395940 212 // Arduino: begin critical section: noInterrupts() masks all interrupt sources; end critical section with interrupts()
whismanoid 0:777851395940 213 //~ noInterrupts();
whismanoid 0:777851395940 214 //
whismanoid 0:777851395940 215 //~ digitalWrite(Scope_Trigger_Pin, LOW); // diagnostic Scope_Trigger_Pin
whismanoid 0:777851395940 216 //
whismanoid 0:777851395940 217 unsigned int numBytesTransferred = m_spi.write(mosiData, byteCount, misoData, byteCount);
whismanoid 0:777851395940 218 //~ SPI.transfer(mosiData8_FF0000);
whismanoid 0:777851395940 219 //~ SPI.transfer(mosiData16_00FF00);
whismanoid 0:777851395940 220 //~ SPI.transfer(mosiData16_0000FF);
whismanoid 0:777851395940 221 //
whismanoid 0:777851395940 222 //~ digitalWrite(Scope_Trigger_Pin, HIGH); // diagnostic Scope_Trigger_Pin
whismanoid 0:777851395940 223 //
whismanoid 0:777851395940 224 // Arduino: begin critical section: noInterrupts() masks all interrupt sources; end critical section with interrupts()
whismanoid 0:777851395940 225 //~ interrupts();
whismanoid 0:777851395940 226 //
whismanoid 0:777851395940 227 // VERIFY: SPIwrite24bits print diagnostic information
whismanoid 0:777851395940 228 //cmdLine.serial().printf(" MOSI->"));
whismanoid 0:777851395940 229 //cmdLine.serial().printf(" 0x"));
whismanoid 0:777851395940 230 //Serial.print( (mosiData8_FF0000 & 0xFF), HEX);
whismanoid 0:777851395940 231 //cmdLine.serial().printf(" 0x"));
whismanoid 0:777851395940 232 //Serial.print( (mosiData16_00FF00 & 0xFF), HEX);
whismanoid 0:777851395940 233 //cmdLine.serial().printf(" 0x"));
whismanoid 0:777851395940 234 //Serial.print( (mosiData16_0000FF & 0xFF), HEX);
whismanoid 0:777851395940 235 // hex dump mosiData[0..byteCount-1]
whismanoid 0:777851395940 236 #if HAS_MICROUSBSERIAL
whismanoid 0:777851395940 237 cmdLine_microUSBserial.serial().printf("\r\nSPI");
whismanoid 0:777851395940 238 if (byteCount > 7) {
whismanoid 0:777851395940 239 cmdLine_microUSBserial.serial().printf(" byteCount:%d", byteCount);
whismanoid 0:777851395940 240 }
whismanoid 0:777851395940 241 cmdLine_microUSBserial.serial().printf(" MOSI->");
whismanoid 0:777851395940 242 for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++)
whismanoid 0:777851395940 243 {
whismanoid 0:777851395940 244 cmdLine_microUSBserial.serial().printf(" 0x%2.2X", mosiData[byteIndex]);
whismanoid 0:777851395940 245 }
whismanoid 0:777851395940 246 // hex dump misoData[0..byteCount-1]
whismanoid 0:777851395940 247 cmdLine_microUSBserial.serial().printf(" MISO<-");
whismanoid 0:777851395940 248 for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred; byteIndex++)
whismanoid 0:777851395940 249 {
whismanoid 0:777851395940 250 cmdLine_microUSBserial.serial().printf(" 0x%2.2X", misoData[byteIndex]);
whismanoid 0:777851395940 251 }
whismanoid 0:777851395940 252 cmdLine_microUSBserial.serial().printf(" ");
whismanoid 0:777851395940 253 #endif
whismanoid 0:777851395940 254 #if HAS_DAPLINK_SERIAL
whismanoid 0:777851395940 255 cmdLine_DAPLINKserial.serial().printf("\r\nSPI");
whismanoid 0:777851395940 256 if (byteCount > 7) {
whismanoid 0:777851395940 257 cmdLine_DAPLINKserial.serial().printf(" byteCount:%d", byteCount);
whismanoid 0:777851395940 258 }
whismanoid 0:777851395940 259 cmdLine_DAPLINKserial.serial().printf(" MOSI->");
whismanoid 0:777851395940 260 for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++)
whismanoid 0:777851395940 261 {
whismanoid 0:777851395940 262 cmdLine_DAPLINKserial.serial().printf(" 0x%2.2X", mosiData[byteIndex]);
whismanoid 0:777851395940 263 }
whismanoid 0:777851395940 264 // hex dump misoData[0..byteCount-1]
whismanoid 0:777851395940 265 cmdLine_DAPLINKserial.serial().printf(" MISO<-");
whismanoid 0:777851395940 266 for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred; byteIndex++)
whismanoid 0:777851395940 267 {
whismanoid 0:777851395940 268 cmdLine_DAPLINKserial.serial().printf(" 0x%2.2X", misoData[byteIndex]);
whismanoid 0:777851395940 269 }
whismanoid 0:777851395940 270 cmdLine_DAPLINKserial.serial().printf(" ");
whismanoid 0:777851395940 271 #endif
whismanoid 0:777851395940 272 // VERIFY: DIAGNOSTIC: print MAX5715 device register write
whismanoid 0:777851395940 273 // TODO: MAX5715_print_register_verbose(mosiData8_FF0000, mosiData16_00FFFF);
whismanoid 0:777851395940 274 //
whismanoid 0:777851395940 275 // int misoData16 = (misoData16_FF00 << 8) | misoData16_00FF;
whismanoid 0:777851395940 276 // return misoData16;
whismanoid 0:777851395940 277 }
whismanoid 0:777851395940 278
whismanoid 0:777851395940 279 // TODO1: CODE GENERATOR: extern function GPIOoutputLDACb alias LDACboutputValue
whismanoid 0:777851395940 280 // CODE GENERATOR: extern function requirement MAX5715::LDACboutputValue
whismanoid 0:777851395940 281 // Assert MAX5715 LDAC pin : High = inactive, Low = load DAC.
whismanoid 0:777851395940 282 //
whismanoid 0:777851395940 283 void MAX5715::LDACboutputValue(int isLogicHigh)
whismanoid 0:777851395940 284 {
whismanoid 0:777851395940 285 // CODE GENERATOR: extern function definition for function LDACboutputValue
whismanoid 0:777851395940 286 // TODO1: CODE GENERATOR: extern function definition for gpio interface function LDACboutputValue
whismanoid 0:777851395940 287 // TODO1: CODE GENERATOR: gpio pin LDACb assuming member function m_LDACb_pin
whismanoid 0:777851395940 288 // TODO1: CODE GENERATOR: gpio direction output
whismanoid 0:777851395940 289 // m_LDACb_pin.output(); // only applicable to DigitalInOut
whismanoid 0:777851395940 290 // TODO1: CODE GENERATOR: gpio function Value
whismanoid 0:777851395940 291 m_LDACb_pin = isLogicHigh;
whismanoid 0:777851395940 292 }
whismanoid 0:777851395940 293
whismanoid 0:777851395940 294 // TODO1: CODE GENERATOR: extern function GPIOoutputCLRb alias CLRboutputValue
whismanoid 0:777851395940 295 // CODE GENERATOR: extern function requirement MAX5715::CLRboutputValue
whismanoid 0:777851395940 296 // Assert MAX5715 CLR pin : High = inactive, Low = clear DAC.
whismanoid 0:777851395940 297 //
whismanoid 0:777851395940 298 void MAX5715::CLRboutputValue(int isLogicHigh)
whismanoid 0:777851395940 299 {
whismanoid 0:777851395940 300 // CODE GENERATOR: extern function definition for function CLRboutputValue
whismanoid 0:777851395940 301 // TODO1: CODE GENERATOR: extern function definition for gpio interface function CLRboutputValue
whismanoid 0:777851395940 302 // TODO1: CODE GENERATOR: gpio pin CLRb assuming member function m_CLRb_pin
whismanoid 0:777851395940 303 // TODO1: CODE GENERATOR: gpio direction output
whismanoid 0:777851395940 304 // m_CLRb_pin.output(); // only applicable to DigitalInOut
whismanoid 0:777851395940 305 // TODO1: CODE GENERATOR: gpio function Value
whismanoid 0:777851395940 306 m_CLRb_pin = isLogicHigh;
whismanoid 0:777851395940 307 }
whismanoid 0:777851395940 308
whismanoid 0:777851395940 309 // CODE GENERATOR: class member function definitions
whismanoid 0:777851395940 310 //----------------------------------------
whismanoid 0:777851395940 311 // Initialize device
whismanoid 0:777851395940 312 // @return 1 on success; 0 on failure
whismanoid 0:777851395940 313 uint8_t MAX5715::Init(void)
whismanoid 0:777851395940 314 {
whismanoid 0:777851395940 315
whismanoid 0:777851395940 316 //----------------------------------------
whismanoid 0:777851395940 317 // Initialize device
whismanoid 0:777851395940 318 //----------------------------------------
whismanoid 0:777851395940 319 // Perform Software Reset
whismanoid 0:777851395940 320 if (!SW_RESET()) {
whismanoid 0:777851395940 321 return 0; // failure
whismanoid 0:777851395940 322 }
whismanoid 0:777851395940 323 //----------------------------------------
whismanoid 0:777851395940 324 // Turn on the reference output pin
whismanoid 0:777851395940 325 REF(REF_AlwaysOn_2V500);
whismanoid 0:777851395940 326 //
whismanoid 0:777851395940 327 //~ Serial.println(F(" success"));
whismanoid 0:777851395940 328 //~ return;
whismanoid 0:777851395940 329 return 1; // success
whismanoid 0:777851395940 330 }
whismanoid 0:777851395940 331
whismanoid 0:777851395940 332 //----------------------------------------
whismanoid 0:777851395940 333 // Return the DAC register value corresponding to physical voltage.
whismanoid 0:777851395940 334 // Does not perform any offset or gain correction.
whismanoid 0:777851395940 335 //
whismanoid 0:777851395940 336 // @pre VRef = Voltage of REF input, in Volts
whismanoid 0:777851395940 337 // @param[in] voltage = physical voltage in Volts
whismanoid 0:777851395940 338 // @return raw 12-bit MAX5715 code (right justified).
whismanoid 0:777851395940 339 uint16_t MAX5715::DACCodeOfVoltage(double voltageV)
whismanoid 0:777851395940 340 {
whismanoid 0:777851395940 341
whismanoid 0:777851395940 342 //----------------------------------------
whismanoid 0:777851395940 343 // Linear map min and max endpoints
whismanoid 0:777851395940 344 const double MaxScaleVoltage = VRef; // voltage of maximum code 0x0fff
whismanoid 0:777851395940 345 const double MinScaleVoltage = 0.0; // voltage of minimum code 0x000
whismanoid 0:777851395940 346 const uint16_t FULL_SCALE_CODE_12BIT = 0x0fff;
whismanoid 0:777851395940 347 const uint16_t MaxCode = FULL_SCALE_CODE_12BIT;
whismanoid 0:777851395940 348 const uint16_t MinCode = 0x000;
whismanoid 0:777851395940 349 double codeFraction = (voltageV - MinScaleVoltage) / (MaxScaleVoltage - MinScaleVoltage);
whismanoid 0:777851395940 350 double dacRegValueIdeal = ((codeFraction * (double)(MaxCode - MinCode + 1)) + MinCode + 0.5);
whismanoid 0:777851395940 351 uint16_t dacRegValue = (uint16_t)dacRegValueIdeal;
whismanoid 0:777851395940 352 if (dacRegValueIdeal > MaxCode)
whismanoid 0:777851395940 353 {
whismanoid 0:777851395940 354 dacRegValue = MaxCode;
whismanoid 0:777851395940 355 } else if (dacRegValueIdeal < MinCode)
whismanoid 0:777851395940 356 {
whismanoid 0:777851395940 357 dacRegValue = MinCode;
whismanoid 0:777851395940 358 }
whismanoid 0:777851395940 359 return dacRegValue;
whismanoid 0:777851395940 360 }
whismanoid 0:777851395940 361
whismanoid 0:777851395940 362 //----------------------------------------
whismanoid 0:777851395940 363 // Return the physical voltage corresponding to DAC register.
whismanoid 0:777851395940 364 // Does not perform any offset or gain correction.
whismanoid 0:777851395940 365 //
whismanoid 0:777851395940 366 // @pre VRef = Voltage of REF input, in Volts
whismanoid 0:777851395940 367 // @param[in] value_u12: raw 12-bit MAX5715 code (right justified).
whismanoid 0:777851395940 368 // @return physical voltage corresponding to MAX5715 code.
whismanoid 0:777851395940 369 double MAX5715::VoltageOfCode(uint16_t value_u12)
whismanoid 0:777851395940 370 {
whismanoid 0:777851395940 371
whismanoid 0:777851395940 372 //----------------------------------------
whismanoid 0:777851395940 373 // Linear map min and max endpoints
whismanoid 0:777851395940 374 double MaxScaleVoltage = VRef; // voltage of maximum code 0x0fff
whismanoid 0:777851395940 375 double MinScaleVoltage = 0.0; // voltage of minimum code 0x000
whismanoid 0:777851395940 376 const uint16_t FULL_SCALE_CODE_12BIT = 0x0fff;
whismanoid 0:777851395940 377 const uint16_t MaxCode = FULL_SCALE_CODE_12BIT;
whismanoid 0:777851395940 378 const uint16_t MinCode = 0x000;
whismanoid 0:777851395940 379 double codeFraction = ((double)value_u12 - MinCode) / (MaxCode - MinCode + 1);
whismanoid 0:777851395940 380 return MinScaleVoltage + ((MaxScaleVoltage - MinScaleVoltage) * codeFraction);
whismanoid 0:777851395940 381 }
whismanoid 0:777851395940 382
whismanoid 0:777851395940 383 //----------------------------------------
whismanoid 0:777851395940 384 // CMD_1000_0000_dddd_dddd_dddd_0000_CODEall
whismanoid 0:777851395940 385 //
whismanoid 0:777851395940 386 // Writes data to all CODE registers
whismanoid 0:777851395940 387 // @post updates g_MAX5815_device.Shadow_0010_nnnn_CODE[0..3]
whismanoid 0:777851395940 388 // @post updates g_MAX5815_device.CODE[0..3]
whismanoid 0:777851395940 389 void MAX5715::CODEall(uint16_t dacCodeLsbs)
whismanoid 0:777851395940 390 {
whismanoid 0:777851395940 391
whismanoid 0:777851395940 392 //----------------------------------------
whismanoid 0:777851395940 393 // Define command code
whismanoid 0:777851395940 394 uint8_t command_regAddress = CMD_1000_0000_dddd_dddd_dddd_0000_CODEall;
whismanoid 0:777851395940 395 uint16_t regValue = (dacCodeLsbs << 4); // left-align dddd_dddd_dddd_0000
whismanoid 0:777851395940 396
whismanoid 0:777851395940 397 //----------------------------------------
whismanoid 0:777851395940 398 // SPI write 8-bit regAddress and 16-bit regValue
whismanoid 0:777851395940 399 // int16_t mosiData16 = ((command_regAddress << 8) & 0xFF00) | ((regValue >> 8) & 0xFF);
whismanoid 0:777851395940 400 // int8_t mosiData8_0000FF = (regValue & 0xFF);
whismanoid 0:777851395940 401 SPIoutputCS(0);
whismanoid 0:777851395940 402 SPIwrite24bits(command_regAddress, regValue);
whismanoid 0:777851395940 403 SPIoutputCS(1);
whismanoid 0:777851395940 404
whismanoid 0:777851395940 405 //----------------------------------------
whismanoid 0:777851395940 406 // shadow of write-only register CODE 0010_nnnn[channel_0_3]
whismanoid 0:777851395940 407 // Each bit of channels_bitmask_DCBA maps to an index of g_MAX5815_device.Shadow_0010_nnnn_CODE[0..3]
whismanoid 0:777851395940 408 if (channels_bitmask_DCBA & (1 << 0)) {
whismanoid 0:777851395940 409 CODE[0] = dacCodeLsbs;
whismanoid 0:777851395940 410 Shadow_0010_nnnn_CODE[0] = regValue;
whismanoid 0:777851395940 411 }
whismanoid 0:777851395940 412 if (channels_bitmask_DCBA & (1 << 1)) {
whismanoid 0:777851395940 413 CODE[1] = dacCodeLsbs;
whismanoid 0:777851395940 414 Shadow_0010_nnnn_CODE[1] = regValue;
whismanoid 0:777851395940 415 }
whismanoid 0:777851395940 416 if (channels_bitmask_DCBA & (1 << 2)) {
whismanoid 0:777851395940 417 CODE[2] = dacCodeLsbs;
whismanoid 0:777851395940 418 Shadow_0010_nnnn_CODE[2] = regValue;
whismanoid 0:777851395940 419 }
whismanoid 0:777851395940 420 if (channels_bitmask_DCBA & (1 << 3)) {
whismanoid 0:777851395940 421 CODE[3] = dacCodeLsbs;
whismanoid 0:777851395940 422 Shadow_0010_nnnn_CODE[3] = regValue;
whismanoid 0:777851395940 423 }
whismanoid 0:777851395940 424 }
whismanoid 0:777851395940 425
whismanoid 0:777851395940 426 //----------------------------------------
whismanoid 0:777851395940 427 // CMD_0000_nnnn_dddd_dddd_dddd_0000_CODEn
whismanoid 0:777851395940 428 //
whismanoid 0:777851395940 429 // Writes data to the selected CODE register(s)
whismanoid 0:777851395940 430 //
whismanoid 0:777851395940 431 // @param[in] channel_0_3 = DAC Selection: 0=OUTA, 1=OUTB, 2=OUTC, 3=OUTD, 4..15=ALL OUTA,OUTB,OUTC,OUTD
whismanoid 0:777851395940 432 // @post updates g_MAX5815_device.Shadow_0010_nnnn_CODE[0..3]
whismanoid 0:777851395940 433 // @post updates g_MAX5815_device.CODE[0..3]
whismanoid 0:777851395940 434 void MAX5715::CODEn(uint8_t channel_0_3, uint16_t dacCodeLsbs)
whismanoid 0:777851395940 435 {
whismanoid 0:777851395940 436
whismanoid 0:777851395940 437 //----------------------------------------
whismanoid 0:777851395940 438 // update channel selection from channel_0_3
whismanoid 0:777851395940 439 channelNumber_0_3 = channel_0_3;
whismanoid 0:777851395940 440 switch (channelNumber_0_3) {
whismanoid 0:777851395940 441 case 0:
whismanoid 0:777851395940 442 channels_bitmask_DCBA = 0x01; // OUTA only
whismanoid 0:777851395940 443 break;
whismanoid 0:777851395940 444 case 1:
whismanoid 0:777851395940 445 channels_bitmask_DCBA = 0x02; // OUTB only
whismanoid 0:777851395940 446 break;
whismanoid 0:777851395940 447 case 2:
whismanoid 0:777851395940 448 channels_bitmask_DCBA = 0x04; // OUTC only
whismanoid 0:777851395940 449 break;
whismanoid 0:777851395940 450 case 3:
whismanoid 0:777851395940 451 channels_bitmask_DCBA = 0x08; // OUTD only
whismanoid 0:777851395940 452 break;
whismanoid 0:777851395940 453 default:
whismanoid 0:777851395940 454 channels_bitmask_DCBA = 0x0F; // ALL OUTA,OUTB,OUTC,OUTD
whismanoid 0:777851395940 455 }
whismanoid 0:777851395940 456
whismanoid 0:777851395940 457 //----------------------------------------
whismanoid 0:777851395940 458 // Define command code
whismanoid 0:777851395940 459 uint8_t command_regAddress = CMD_0000_nnnn_dddd_dddd_dddd_0000_CODEn | (channel_0_3 & 0x0F);
whismanoid 0:777851395940 460 uint16_t regValue = (dacCodeLsbs << 4); // left-align dddd_dddd_dddd_0000
whismanoid 0:777851395940 461
whismanoid 0:777851395940 462 //----------------------------------------
whismanoid 0:777851395940 463 // SPI write 8-bit regAddress and 16-bit regValue
whismanoid 0:777851395940 464 // int16_t mosiData16 = ((command_regAddress << 8) & 0xFF00) | ((regValue >> 8) & 0xFF);
whismanoid 0:777851395940 465 // int8_t mosiData8_0000FF = (regValue & 0xFF);
whismanoid 0:777851395940 466 SPIoutputCS(0);
whismanoid 0:777851395940 467 SPIwrite24bits(command_regAddress, regValue);
whismanoid 0:777851395940 468 SPIoutputCS(1);
whismanoid 0:777851395940 469
whismanoid 0:777851395940 470 //----------------------------------------
whismanoid 0:777851395940 471 // shadow of write-only register CODE 0010_nnnn[channel_0_3]
whismanoid 0:777851395940 472 // Each bit of channels_bitmask_DCBA maps to an index of g_MAX5815_device.Shadow_0010_nnnn_CODE[0..3]
whismanoid 0:777851395940 473 if (channels_bitmask_DCBA & (1 << 0)) {
whismanoid 0:777851395940 474 CODE[0] = dacCodeLsbs;
whismanoid 0:777851395940 475 Shadow_0010_nnnn_CODE[0] = regValue;
whismanoid 0:777851395940 476 }
whismanoid 0:777851395940 477 if (channels_bitmask_DCBA & (1 << 1)) {
whismanoid 0:777851395940 478 CODE[1] = dacCodeLsbs;
whismanoid 0:777851395940 479 Shadow_0010_nnnn_CODE[1] = regValue;
whismanoid 0:777851395940 480 }
whismanoid 0:777851395940 481 if (channels_bitmask_DCBA & (1 << 2)) {
whismanoid 0:777851395940 482 CODE[2] = dacCodeLsbs;
whismanoid 0:777851395940 483 Shadow_0010_nnnn_CODE[2] = regValue;
whismanoid 0:777851395940 484 }
whismanoid 0:777851395940 485 if (channels_bitmask_DCBA & (1 << 3)) {
whismanoid 0:777851395940 486 CODE[3] = dacCodeLsbs;
whismanoid 0:777851395940 487 Shadow_0010_nnnn_CODE[3] = regValue;
whismanoid 0:777851395940 488 }
whismanoid 0:777851395940 489 }
whismanoid 0:777851395940 490
whismanoid 0:777851395940 491 //----------------------------------------
whismanoid 0:777851395940 492 // CMD_1000_0010_dddd_dddd_dddd_0000_CODEallLOADall
whismanoid 0:777851395940 493 //
whismanoid 0:777851395940 494 // Simultaneously writes data to all CODE registers while updating all DAC registers
whismanoid 0:777851395940 495 // @post updates g_MAX5815_device.Shadow_0010_nnnn_CODE[0..3]
whismanoid 0:777851395940 496 // @post updates g_MAX5815_device.CODE[0..3]
whismanoid 0:777851395940 497 void MAX5715::CODEallLOADall(uint16_t dacCodeLsbs)
whismanoid 0:777851395940 498 {
whismanoid 0:777851395940 499
whismanoid 0:777851395940 500 //----------------------------------------
whismanoid 0:777851395940 501 // Define command code
whismanoid 0:777851395940 502 uint8_t command_regAddress = CMD_1000_0010_dddd_dddd_dddd_0000_CODEallLOADall;
whismanoid 0:777851395940 503 uint16_t regValue = (dacCodeLsbs << 4); // left-align dddd_dddd_dddd_0000
whismanoid 0:777851395940 504
whismanoid 0:777851395940 505 //----------------------------------------
whismanoid 0:777851395940 506 // SPI write 8-bit regAddress and 16-bit regValue
whismanoid 0:777851395940 507 // int16_t mosiData16 = ((command_regAddress << 8) & 0xFF00) | ((regValue >> 8) & 0xFF);
whismanoid 0:777851395940 508 // int8_t mosiData8_0000FF = (regValue & 0xFF);
whismanoid 0:777851395940 509 SPIoutputCS(0);
whismanoid 0:777851395940 510 SPIwrite24bits(command_regAddress, regValue);
whismanoid 0:777851395940 511 SPIoutputCS(1);
whismanoid 0:777851395940 512
whismanoid 0:777851395940 513 //----------------------------------------
whismanoid 0:777851395940 514 // shadow of write-only register CODE 0010_nnnn[channel_0_3]
whismanoid 0:777851395940 515 // Each bit of channels_bitmask_DCBA maps to an index of g_MAX5815_device.Shadow_0010_nnnn_CODE[0..3]
whismanoid 0:777851395940 516 CODE[0] = dacCodeLsbs;
whismanoid 0:777851395940 517 Shadow_0010_nnnn_CODE[0] = regValue;
whismanoid 0:777851395940 518 CODE[1] = dacCodeLsbs;
whismanoid 0:777851395940 519 Shadow_0010_nnnn_CODE[1] = regValue;
whismanoid 0:777851395940 520 CODE[2] = dacCodeLsbs;
whismanoid 0:777851395940 521 Shadow_0010_nnnn_CODE[2] = regValue;
whismanoid 0:777851395940 522 CODE[3] = dacCodeLsbs;
whismanoid 0:777851395940 523 Shadow_0010_nnnn_CODE[3] = regValue;
whismanoid 0:777851395940 524 }
whismanoid 0:777851395940 525
whismanoid 0:777851395940 526 //----------------------------------------
whismanoid 0:777851395940 527 // CMD_0010_nnnn_dddd_dddd_dddd_0000_CODEnLOADall
whismanoid 0:777851395940 528 //
whismanoid 0:777851395940 529 // Simultaneously writes data to the selected CODE register(s) while updating all DAC registers.
whismanoid 0:777851395940 530 //
whismanoid 0:777851395940 531 // @param[in] channel_0_3 = DAC Selection: 0=OUTA, 1=OUTB, 2=OUTC, 3=OUTD, 4..15=ALL OUTA,OUTB,OUTC,OUTD
whismanoid 0:777851395940 532 // @post updates g_MAX5815_device.Shadow_0010_nnnn_CODE[0..3]
whismanoid 0:777851395940 533 // @post updates g_MAX5815_device.CODE[0..3]
whismanoid 0:777851395940 534 void MAX5715::CODEnLOADall(uint8_t channel_0_3, uint16_t dacCodeLsbs)
whismanoid 0:777851395940 535 {
whismanoid 0:777851395940 536
whismanoid 0:777851395940 537 //----------------------------------------
whismanoid 0:777851395940 538 // update channel selection from channel_0_3
whismanoid 0:777851395940 539 channelNumber_0_3 = channel_0_3;
whismanoid 0:777851395940 540 switch (channelNumber_0_3) {
whismanoid 0:777851395940 541 case 0:
whismanoid 0:777851395940 542 channels_bitmask_DCBA = 0x01; // OUTA only
whismanoid 0:777851395940 543 break;
whismanoid 0:777851395940 544 case 1:
whismanoid 0:777851395940 545 channels_bitmask_DCBA = 0x02; // OUTB only
whismanoid 0:777851395940 546 break;
whismanoid 0:777851395940 547 case 2:
whismanoid 0:777851395940 548 channels_bitmask_DCBA = 0x04; // OUTC only
whismanoid 0:777851395940 549 break;
whismanoid 0:777851395940 550 case 3:
whismanoid 0:777851395940 551 channels_bitmask_DCBA = 0x08; // OUTD only
whismanoid 0:777851395940 552 break;
whismanoid 0:777851395940 553 default:
whismanoid 0:777851395940 554 channels_bitmask_DCBA = 0x0F; // ALL OUTA,OUTB,OUTC,OUTD
whismanoid 0:777851395940 555 }
whismanoid 0:777851395940 556
whismanoid 0:777851395940 557 //----------------------------------------
whismanoid 0:777851395940 558 // Define command code
whismanoid 0:777851395940 559 uint8_t command_regAddress = CMD_0010_nnnn_dddd_dddd_dddd_0000_CODEnLOADall | (channel_0_3 & 0x0F);
whismanoid 0:777851395940 560 uint16_t regValue = (dacCodeLsbs << 4); // left-align dddd_dddd_dddd_0000
whismanoid 0:777851395940 561
whismanoid 0:777851395940 562 //----------------------------------------
whismanoid 0:777851395940 563 // SPI write 8-bit regAddress and 16-bit regValue
whismanoid 0:777851395940 564 // int16_t mosiData16 = ((command_regAddress << 8) & 0xFF00) | ((regValue >> 8) & 0xFF);
whismanoid 0:777851395940 565 // int8_t mosiData8_0000FF = (regValue & 0xFF);
whismanoid 0:777851395940 566 SPIoutputCS(0);
whismanoid 0:777851395940 567 SPIwrite24bits(command_regAddress, regValue);
whismanoid 0:777851395940 568 SPIoutputCS(1);
whismanoid 0:777851395940 569
whismanoid 0:777851395940 570 //----------------------------------------
whismanoid 0:777851395940 571 // shadow of write-only register CODE 0010_nnnn[channel_0_3]
whismanoid 0:777851395940 572 // Each bit of channels_bitmask_DCBA maps to an index of g_MAX5815_device.Shadow_0010_nnnn_CODE[0..3]
whismanoid 0:777851395940 573 if (channels_bitmask_DCBA & (1 << 0)) {
whismanoid 0:777851395940 574 CODE[0] = dacCodeLsbs;
whismanoid 0:777851395940 575 Shadow_0010_nnnn_CODE[0] = regValue;
whismanoid 0:777851395940 576 }
whismanoid 0:777851395940 577 if (channels_bitmask_DCBA & (1 << 1)) {
whismanoid 0:777851395940 578 CODE[1] = dacCodeLsbs;
whismanoid 0:777851395940 579 Shadow_0010_nnnn_CODE[1] = regValue;
whismanoid 0:777851395940 580 }
whismanoid 0:777851395940 581 if (channels_bitmask_DCBA & (1 << 2)) {
whismanoid 0:777851395940 582 CODE[2] = dacCodeLsbs;
whismanoid 0:777851395940 583 Shadow_0010_nnnn_CODE[2] = regValue;
whismanoid 0:777851395940 584 }
whismanoid 0:777851395940 585 if (channels_bitmask_DCBA & (1 << 3)) {
whismanoid 0:777851395940 586 CODE[3] = dacCodeLsbs;
whismanoid 0:777851395940 587 Shadow_0010_nnnn_CODE[3] = regValue;
whismanoid 0:777851395940 588 }
whismanoid 0:777851395940 589 }
whismanoid 0:777851395940 590
whismanoid 0:777851395940 591 //----------------------------------------
whismanoid 0:777851395940 592 // CMD_0011_nnnn_dddd_dddd_dddd_0000_CODEnLOADn
whismanoid 0:777851395940 593 //
whismanoid 0:777851395940 594 // Simultaneously writes data to the selected CODE register(s) while updating selected DAC register(s)
whismanoid 0:777851395940 595 //
whismanoid 0:777851395940 596 // @param[in] channel_0_3 = DAC Selection: 0=OUTA, 1=OUTB, 2=OUTC, 3=OUTD, 4..15=ALL OUTA,OUTB,OUTC,OUTD
whismanoid 0:777851395940 597 // @post updates g_MAX5815_device.Shadow_0010_nnnn_CODE[0..3]
whismanoid 0:777851395940 598 // @post updates g_MAX5815_device.CODE[0..3]
whismanoid 0:777851395940 599 void MAX5715::CODEnLOADn(uint8_t channel_0_3, uint16_t dacCodeLsbs)
whismanoid 0:777851395940 600 {
whismanoid 0:777851395940 601
whismanoid 0:777851395940 602 //----------------------------------------
whismanoid 0:777851395940 603 // update channel selection from channel_0_3
whismanoid 0:777851395940 604 channelNumber_0_3 = channel_0_3;
whismanoid 0:777851395940 605 switch (channelNumber_0_3) {
whismanoid 0:777851395940 606 case 0:
whismanoid 0:777851395940 607 channels_bitmask_DCBA = 0x01; // OUTA only
whismanoid 0:777851395940 608 break;
whismanoid 0:777851395940 609 case 1:
whismanoid 0:777851395940 610 channels_bitmask_DCBA = 0x02; // OUTB only
whismanoid 0:777851395940 611 break;
whismanoid 0:777851395940 612 case 2:
whismanoid 0:777851395940 613 channels_bitmask_DCBA = 0x04; // OUTC only
whismanoid 0:777851395940 614 break;
whismanoid 0:777851395940 615 case 3:
whismanoid 0:777851395940 616 channels_bitmask_DCBA = 0x08; // OUTD only
whismanoid 0:777851395940 617 break;
whismanoid 0:777851395940 618 default:
whismanoid 0:777851395940 619 channels_bitmask_DCBA = 0x0F; // ALL OUTA,OUTB,OUTC,OUTD
whismanoid 0:777851395940 620 }
whismanoid 0:777851395940 621
whismanoid 0:777851395940 622 //----------------------------------------
whismanoid 0:777851395940 623 // Define command code
whismanoid 0:777851395940 624 uint8_t command_regAddress = CMD_0011_nnnn_dddd_dddd_dddd_0000_CODEnLOADn | (channel_0_3 & 0x0F);
whismanoid 0:777851395940 625 uint16_t regValue = (dacCodeLsbs << 4); // left-align dddd_dddd_dddd_0000
whismanoid 0:777851395940 626
whismanoid 0:777851395940 627 //----------------------------------------
whismanoid 0:777851395940 628 // SPI write 8-bit regAddress and 16-bit regValue
whismanoid 0:777851395940 629 // int16_t mosiData16 = ((command_regAddress << 8) & 0xFF00) | ((regValue >> 8) & 0xFF);
whismanoid 0:777851395940 630 // int8_t mosiData8_0000FF = (regValue & 0xFF);
whismanoid 0:777851395940 631 SPIoutputCS(0);
whismanoid 0:777851395940 632 SPIwrite24bits(command_regAddress, regValue);
whismanoid 0:777851395940 633 SPIoutputCS(1);
whismanoid 0:777851395940 634
whismanoid 0:777851395940 635 //----------------------------------------
whismanoid 0:777851395940 636 // shadow of write-only register CODE 0010_nnnn[channel_0_3]
whismanoid 0:777851395940 637 // Each bit of channels_bitmask_DCBA maps to an index of g_MAX5815_device.Shadow_0010_nnnn_CODE[0..3]
whismanoid 0:777851395940 638 if (channels_bitmask_DCBA & (1 << 0)) {
whismanoid 0:777851395940 639 CODE[0] = dacCodeLsbs;
whismanoid 0:777851395940 640 Shadow_0010_nnnn_CODE[0] = regValue;
whismanoid 0:777851395940 641 }
whismanoid 0:777851395940 642 if (channels_bitmask_DCBA & (1 << 1)) {
whismanoid 0:777851395940 643 CODE[1] = dacCodeLsbs;
whismanoid 0:777851395940 644 Shadow_0010_nnnn_CODE[1] = regValue;
whismanoid 0:777851395940 645 }
whismanoid 0:777851395940 646 if (channels_bitmask_DCBA & (1 << 2)) {
whismanoid 0:777851395940 647 CODE[2] = dacCodeLsbs;
whismanoid 0:777851395940 648 Shadow_0010_nnnn_CODE[2] = regValue;
whismanoid 0:777851395940 649 }
whismanoid 0:777851395940 650 if (channels_bitmask_DCBA & (1 << 3)) {
whismanoid 0:777851395940 651 CODE[3] = dacCodeLsbs;
whismanoid 0:777851395940 652 Shadow_0010_nnnn_CODE[3] = regValue;
whismanoid 0:777851395940 653 }
whismanoid 0:777851395940 654 }
whismanoid 0:777851395940 655
whismanoid 0:777851395940 656 //----------------------------------------
whismanoid 0:777851395940 657 // CMD_0110_0000_0000_dcba_0000_0000_CONFIGn_LATCHED
whismanoid 0:777851395940 658 //
whismanoid 0:777851395940 659 // Sets the DAC Latch Mode of the selected DACs.
whismanoid 0:777851395940 660 // Only DACS with a 1 in the selection bit are updated by the command.
whismanoid 0:777851395940 661 // LD_EN = 0: DAC latch is operational (LOAD and LDAC controlled)
whismanoid 0:777851395940 662 //
whismanoid 0:777851395940 663 // @param[in] channels_bitmask_DCBA = channel select bitmap
whismanoid 0:777851395940 664 // bit 1000 = channel D
whismanoid 0:777851395940 665 // bit 0100 = channel C
whismanoid 0:777851395940 666 // bit 0010 = channel B
whismanoid 0:777851395940 667 // bit 0001 = channel A
whismanoid 0:777851395940 668 void MAX5715::CONFIGn_LATCHED(uint8_t channels_bitmask_DCBA)
whismanoid 0:777851395940 669 {
whismanoid 0:777851395940 670
whismanoid 0:777851395940 671 //----------------------------------------
whismanoid 0:777851395940 672 // update channel selection from channels_bitmask_DCBA
whismanoid 0:777851395940 673 channels_bitmask_DCBA = channels_bitmask_DCBA;
whismanoid 0:777851395940 674 if (channels_bitmask_DCBA == 0x0F) {
whismanoid 0:777851395940 675 channelNumber_0_3 = 0x0F; // ALL OUTA,OUTB,OUTC,OUTD
whismanoid 0:777851395940 676 }
whismanoid 0:777851395940 677 else if ((channels_bitmask_DCBA & 0x01) != 0) {
whismanoid 0:777851395940 678 channelNumber_0_3 = 0x00; // OUTA only
whismanoid 0:777851395940 679 }
whismanoid 0:777851395940 680 else if ((channels_bitmask_DCBA & 0x02) != 0) {
whismanoid 0:777851395940 681 channelNumber_0_3 = 0x01; // OUTB only
whismanoid 0:777851395940 682 }
whismanoid 0:777851395940 683 else if ((channels_bitmask_DCBA & 0x04) != 0) {
whismanoid 0:777851395940 684 channelNumber_0_3 = 0x02; // OUTC only
whismanoid 0:777851395940 685 }
whismanoid 0:777851395940 686 else {
whismanoid 0:777851395940 687 channelNumber_0_3 = 0x03; // OUTD only
whismanoid 0:777851395940 688 }
whismanoid 0:777851395940 689
whismanoid 0:777851395940 690 //----------------------------------------
whismanoid 0:777851395940 691 // Define command code
whismanoid 0:777851395940 692 uint8_t command_regAddress = CMD_0110_0000_0000_dcba_0000_0000_CONFIGn_LATCHED;
whismanoid 0:777851395940 693 uint16_t regValue = ((channels_bitmask_DCBA & 0x0F) << 8); // align field 0000_dcba_0000_0000
whismanoid 0:777851395940 694
whismanoid 0:777851395940 695 //----------------------------------------
whismanoid 0:777851395940 696 // SPI write 8-bit regAddress and 16-bit regValue
whismanoid 0:777851395940 697 // int16_t mosiData16 = ((command_regAddress << 8) & 0xFF00) | ((regValue >> 8) & 0xFF);
whismanoid 0:777851395940 698 // int8_t mosiData8_0000FF = (regValue & 0xFF);
whismanoid 0:777851395940 699 SPIoutputCS(0);
whismanoid 0:777851395940 700 SPIwrite24bits(command_regAddress, regValue);
whismanoid 0:777851395940 701 SPIoutputCS(1);
whismanoid 0:777851395940 702 }
whismanoid 0:777851395940 703
whismanoid 0:777851395940 704 //----------------------------------------
whismanoid 0:777851395940 705 // CMD_0110_0001_0000_dcba_0000_0000_CONFIGn_TRANSPARENT
whismanoid 0:777851395940 706 //
whismanoid 0:777851395940 707 // Sets the DAC Latch Mode of the selected DACs.
whismanoid 0:777851395940 708 // Only DACS with a 1 in the selection bit are updated by the command.
whismanoid 0:777851395940 709 // LD_EN = 1: DAC latch is transparent
whismanoid 0:777851395940 710 //
whismanoid 0:777851395940 711 // @param[in] channels_bitmask_DCBA = channel select bitmap
whismanoid 0:777851395940 712 // bit 1000 = channel D
whismanoid 0:777851395940 713 // bit 0100 = channel C
whismanoid 0:777851395940 714 // bit 0010 = channel B
whismanoid 0:777851395940 715 // bit 0001 = channel A
whismanoid 0:777851395940 716 void MAX5715::CONFIGn_TRANSPARENT(uint8_t channels_bitmask_DCBA)
whismanoid 0:777851395940 717 {
whismanoid 0:777851395940 718
whismanoid 0:777851395940 719 //----------------------------------------
whismanoid 0:777851395940 720 // update channel selection from channels_bitmask_DCBA
whismanoid 0:777851395940 721 channels_bitmask_DCBA = channels_bitmask_DCBA;
whismanoid 0:777851395940 722 if (channels_bitmask_DCBA == 0x0F) {
whismanoid 0:777851395940 723 channelNumber_0_3 = 0x0F; // ALL OUTA,OUTB,OUTC,OUTD
whismanoid 0:777851395940 724 }
whismanoid 0:777851395940 725 else if ((channels_bitmask_DCBA & 0x01) != 0) {
whismanoid 0:777851395940 726 channelNumber_0_3 = 0x00; // OUTA only
whismanoid 0:777851395940 727 }
whismanoid 0:777851395940 728 else if ((channels_bitmask_DCBA & 0x02) != 0) {
whismanoid 0:777851395940 729 channelNumber_0_3 = 0x01; // OUTB only
whismanoid 0:777851395940 730 }
whismanoid 0:777851395940 731 else if ((channels_bitmask_DCBA & 0x04) != 0) {
whismanoid 0:777851395940 732 channelNumber_0_3 = 0x02; // OUTC only
whismanoid 0:777851395940 733 }
whismanoid 0:777851395940 734 else {
whismanoid 0:777851395940 735 channelNumber_0_3 = 0x03; // OUTD only
whismanoid 0:777851395940 736 }
whismanoid 0:777851395940 737
whismanoid 0:777851395940 738 //----------------------------------------
whismanoid 0:777851395940 739 // Define command code
whismanoid 0:777851395940 740 uint8_t command_regAddress = CMD_0110_0001_0000_dcba_0000_0000_CONFIGn_TRANSPARENT;
whismanoid 0:777851395940 741 uint16_t regValue = ((channels_bitmask_DCBA & 0x0F) << 8); // align field 0000_dcba_0000_0000
whismanoid 0:777851395940 742
whismanoid 0:777851395940 743 //----------------------------------------
whismanoid 0:777851395940 744 // SPI write 8-bit regAddress and 16-bit regValue
whismanoid 0:777851395940 745 // int16_t mosiData16 = ((command_regAddress << 8) & 0xFF00) | ((regValue >> 8) & 0xFF);
whismanoid 0:777851395940 746 // int8_t mosiData8_0000FF = (regValue & 0xFF);
whismanoid 0:777851395940 747 SPIoutputCS(0);
whismanoid 0:777851395940 748 SPIwrite24bits(command_regAddress, regValue);
whismanoid 0:777851395940 749 SPIoutputCS(1);
whismanoid 0:777851395940 750 }
whismanoid 0:777851395940 751
whismanoid 0:777851395940 752 //----------------------------------------
whismanoid 0:777851395940 753 // CMD_0110_1000_0000_0000_0000_0000_CONFIGall_LATCHED
whismanoid 0:777851395940 754 //
whismanoid 0:777851395940 755 // Sets the DAC Latch Mode of all DACs.
whismanoid 0:777851395940 756 // LD_EN = 0: DAC latch is operational (LOAD and LDAC controlled)
whismanoid 0:777851395940 757 void MAX5715::CONFIGall_LATCHED(void)
whismanoid 0:777851395940 758 {
whismanoid 0:777851395940 759
whismanoid 0:777851395940 760 //----------------------------------------
whismanoid 0:777851395940 761 // Define command code
whismanoid 0:777851395940 762 uint8_t command_regAddress = CMD_0110_1000_0000_0000_0000_0000_CONFIGall_LATCHED;
whismanoid 0:777851395940 763 uint16_t regValue = 0; // 0000_0000_0000_0000
whismanoid 0:777851395940 764
whismanoid 0:777851395940 765 //----------------------------------------
whismanoid 0:777851395940 766 // SPI write 8-bit regAddress and 16-bit regValue
whismanoid 0:777851395940 767 // int16_t mosiData16 = ((command_regAddress << 8) & 0xFF00) | ((regValue >> 8) & 0xFF);
whismanoid 0:777851395940 768 // int8_t mosiData8_0000FF = (regValue & 0xFF);
whismanoid 0:777851395940 769 SPIoutputCS(0);
whismanoid 0:777851395940 770 SPIwrite24bits(command_regAddress, regValue);
whismanoid 0:777851395940 771 SPIoutputCS(1);
whismanoid 0:777851395940 772 }
whismanoid 0:777851395940 773
whismanoid 0:777851395940 774 //----------------------------------------
whismanoid 0:777851395940 775 // CMD_0110_1001_0000_0000_0000_0000_CONFIGall_TRANSPARENT
whismanoid 0:777851395940 776 //
whismanoid 0:777851395940 777 // Sets the DAC Latch Mode of all DACs.
whismanoid 0:777851395940 778 // LD_EN = 1: DAC latch is transparent
whismanoid 0:777851395940 779 void MAX5715::CONFIGall_TRANSPARENT(void)
whismanoid 0:777851395940 780 {
whismanoid 0:777851395940 781
whismanoid 0:777851395940 782 //----------------------------------------
whismanoid 0:777851395940 783 // Define command code
whismanoid 0:777851395940 784 uint8_t command_regAddress = CMD_0110_1001_0000_0000_0000_0000_CONFIGall_TRANSPARENT;
whismanoid 0:777851395940 785 uint16_t regValue = 0; // 0000_0000_0000_0000
whismanoid 0:777851395940 786
whismanoid 0:777851395940 787 //----------------------------------------
whismanoid 0:777851395940 788 // SPI write 8-bit regAddress and 16-bit regValue
whismanoid 0:777851395940 789 // int16_t mosiData16 = ((command_regAddress << 8) & 0xFF00) | ((regValue >> 8) & 0xFF);
whismanoid 0:777851395940 790 // int8_t mosiData8_0000FF = (regValue & 0xFF);
whismanoid 0:777851395940 791 SPIoutputCS(0);
whismanoid 0:777851395940 792 SPIwrite24bits(command_regAddress, regValue);
whismanoid 0:777851395940 793 SPIoutputCS(1);
whismanoid 0:777851395940 794 }
whismanoid 0:777851395940 795
whismanoid 0:777851395940 796 //----------------------------------------
whismanoid 0:777851395940 797 // CMD_1000_0001_0000_0000_0000_0000_LOADall
whismanoid 0:777851395940 798 //
whismanoid 0:777851395940 799 // Updates all DAC latches with current CODE register data
whismanoid 0:777851395940 800 void MAX5715::LOADall(void)
whismanoid 0:777851395940 801 {
whismanoid 0:777851395940 802
whismanoid 0:777851395940 803 //----------------------------------------
whismanoid 0:777851395940 804 // Define command code
whismanoid 0:777851395940 805 uint8_t command_regAddress = CMD_1000_0001_0000_0000_0000_0000_LOADall;
whismanoid 0:777851395940 806 uint16_t regValue = 0; // 0000_0000_0000_0000
whismanoid 0:777851395940 807
whismanoid 0:777851395940 808 //----------------------------------------
whismanoid 0:777851395940 809 // SPI write 8-bit regAddress and 16-bit regValue
whismanoid 0:777851395940 810 // int16_t mosiData16 = ((command_regAddress << 8) & 0xFF00) | ((regValue >> 8) & 0xFF);
whismanoid 0:777851395940 811 // int8_t mosiData8_0000FF = (regValue & 0xFF);
whismanoid 0:777851395940 812 SPIoutputCS(0);
whismanoid 0:777851395940 813 SPIwrite24bits(command_regAddress, regValue);
whismanoid 0:777851395940 814 SPIoutputCS(1);
whismanoid 0:777851395940 815 }
whismanoid 0:777851395940 816
whismanoid 0:777851395940 817 //----------------------------------------
whismanoid 0:777851395940 818 // CMD_0001_nnnn_0000_0000_0000_0000_LOADn
whismanoid 0:777851395940 819 //
whismanoid 0:777851395940 820 // Transfers data from the selected CODE register(s) to the selected DAC register(s).
whismanoid 0:777851395940 821 //
whismanoid 0:777851395940 822 // @param[in] channel_0_3 = DAC Selection: 0=OUTA, 1=OUTB, 2=OUTC, 3=OUTD, 4..15=ALL OUTA,OUTB,OUTC,OUTD
whismanoid 0:777851395940 823 void MAX5715::LOADn(uint8_t channel_0_3)
whismanoid 0:777851395940 824 {
whismanoid 0:777851395940 825
whismanoid 0:777851395940 826 //----------------------------------------
whismanoid 0:777851395940 827 // update channel selection from channel_0_3
whismanoid 0:777851395940 828 channelNumber_0_3 = channel_0_3;
whismanoid 0:777851395940 829 switch (channelNumber_0_3) {
whismanoid 0:777851395940 830 case 0:
whismanoid 0:777851395940 831 channels_bitmask_DCBA = 0x01; // OUTA only
whismanoid 0:777851395940 832 break;
whismanoid 0:777851395940 833 case 1:
whismanoid 0:777851395940 834 channels_bitmask_DCBA = 0x02; // OUTB only
whismanoid 0:777851395940 835 break;
whismanoid 0:777851395940 836 case 2:
whismanoid 0:777851395940 837 channels_bitmask_DCBA = 0x04; // OUTC only
whismanoid 0:777851395940 838 break;
whismanoid 0:777851395940 839 case 3:
whismanoid 0:777851395940 840 channels_bitmask_DCBA = 0x08; // OUTD only
whismanoid 0:777851395940 841 break;
whismanoid 0:777851395940 842 default:
whismanoid 0:777851395940 843 channels_bitmask_DCBA = 0x0F; // ALL OUTA,OUTB,OUTC,OUTD
whismanoid 0:777851395940 844 }
whismanoid 0:777851395940 845
whismanoid 0:777851395940 846 //----------------------------------------
whismanoid 0:777851395940 847 // Define command code
whismanoid 0:777851395940 848 uint8_t command_regAddress = CMD_0001_nnnn_0000_0000_0000_0000_LOADn | (channel_0_3 & 0x0F);
whismanoid 0:777851395940 849 uint16_t regValue = (0 << 4); // left-align dddd_dddd_dddd_0000
whismanoid 0:777851395940 850
whismanoid 0:777851395940 851 //----------------------------------------
whismanoid 0:777851395940 852 // SPI write 8-bit regAddress and 16-bit regValue
whismanoid 0:777851395940 853 // int16_t mosiData16 = ((command_regAddress << 8) & 0xFF00) | ((regValue >> 8) & 0xFF);
whismanoid 0:777851395940 854 // int8_t mosiData8_0000FF = (regValue & 0xFF);
whismanoid 0:777851395940 855 SPIoutputCS(0);
whismanoid 0:777851395940 856 SPIwrite24bits(command_regAddress, regValue);
whismanoid 0:777851395940 857 SPIoutputCS(1);
whismanoid 0:777851395940 858 }
whismanoid 0:777851395940 859
whismanoid 0:777851395940 860 //----------------------------------------
whismanoid 0:777851395940 861 // CMD_0100_0000_0000_dcba_0000_0000_POWERn_Normal
whismanoid 0:777851395940 862 //
whismanoid 0:777851395940 863 // Sets the power mode of the selected DACs
whismanoid 0:777851395940 864 // (DACs selected with a 1 in the corresponding DACn bit are updated,
whismanoid 0:777851395940 865 // DACs with a 0 in the corresponding DACn bit are not impacted)
whismanoid 0:777851395940 866 //
whismanoid 0:777851395940 867 // @param[in] channels_bitmask_DCBA = channel select bitmap
whismanoid 0:777851395940 868 // bit 1000 = channel D
whismanoid 0:777851395940 869 // bit 0100 = channel C
whismanoid 0:777851395940 870 // bit 0010 = channel B
whismanoid 0:777851395940 871 // bit 0001 = channel A
whismanoid 0:777851395940 872 // @param[in] powerValue = power configuration for selected channel
whismanoid 0:777851395940 873 void MAX5715::POWER(uint8_t channels_bitmask_DCBA, MAX5715_POWER_enum_t powerValue)
whismanoid 0:777851395940 874 {
whismanoid 0:777851395940 875
whismanoid 0:777851395940 876 //----------------------------------------
whismanoid 0:777851395940 877 // update channel selection from channels_bitmask_DCBA
whismanoid 0:777851395940 878 channels_bitmask_DCBA = channels_bitmask_DCBA;
whismanoid 0:777851395940 879 if (channels_bitmask_DCBA == 0x0F) {
whismanoid 0:777851395940 880 channelNumber_0_3 = 0x0F; // ALL OUTA,OUTB,OUTC,OUTD
whismanoid 0:777851395940 881 }
whismanoid 0:777851395940 882 else if ((channels_bitmask_DCBA & 0x01) != 0) {
whismanoid 0:777851395940 883 channelNumber_0_3 = 0x00; // OUTA only
whismanoid 0:777851395940 884 }
whismanoid 0:777851395940 885 else if ((channels_bitmask_DCBA & 0x02) != 0) {
whismanoid 0:777851395940 886 channelNumber_0_3 = 0x01; // OUTB only
whismanoid 0:777851395940 887 }
whismanoid 0:777851395940 888 else if ((channels_bitmask_DCBA & 0x04) != 0) {
whismanoid 0:777851395940 889 channelNumber_0_3 = 0x02; // OUTC only
whismanoid 0:777851395940 890 }
whismanoid 0:777851395940 891 else {
whismanoid 0:777851395940 892 channelNumber_0_3 = 0x03; // OUTD only
whismanoid 0:777851395940 893 }
whismanoid 0:777851395940 894
whismanoid 0:777851395940 895 //----------------------------------------
whismanoid 0:777851395940 896 // select command_regAddress based on condition
whismanoid 0:777851395940 897 uint8_t command_regAddress = CMD_0100_0000_0000_dcba_0000_0000_POWERn_Normal; // diagnostic
whismanoid 0:777851395940 898 uint16_t regValue = ((channels_bitmask_DCBA & 0x0F) << 8); // 0000_dcba_0000_0000
whismanoid 0:777851395940 899 // select command_regAddress from list of 4 values, based on condition
whismanoid 0:777851395940 900 if (powerValue == POWERn_PD100k) {
whismanoid 0:777851395940 901 command_regAddress = CMD_0100_0010_0000_dcba_0000_0000_POWERn_PD100k;
whismanoid 0:777851395940 902 }
whismanoid 0:777851395940 903 if (powerValue == POWERn_PD1k) {
whismanoid 0:777851395940 904 command_regAddress = CMD_0100_0001_0000_dcba_0000_0000_POWERn_PD1k;
whismanoid 0:777851395940 905 }
whismanoid 0:777851395940 906 if (powerValue == POWERn_Normal) {
whismanoid 0:777851395940 907 command_regAddress = CMD_0100_0000_0000_dcba_0000_0000_POWERn_Normal;
whismanoid 0:777851395940 908 }
whismanoid 0:777851395940 909 if (powerValue == POWERn_PDHiZ) {
whismanoid 0:777851395940 910 command_regAddress = CMD_0100_0011_0000_dcba_0000_0000_POWERn_PDHiZ;
whismanoid 0:777851395940 911 }
whismanoid 0:777851395940 912
whismanoid 0:777851395940 913 //----------------------------------------
whismanoid 0:777851395940 914 // SPI write 8-bit regAddress and 16-bit regValue
whismanoid 0:777851395940 915 // int16_t mosiData16 = ((command_regAddress << 8) & 0xFF00) | ((regValue >> 8) & 0xFF);
whismanoid 0:777851395940 916 // int8_t mosiData8_0000FF = (regValue & 0xFF);
whismanoid 0:777851395940 917 SPIoutputCS(0);
whismanoid 0:777851395940 918 SPIwrite24bits(command_regAddress, regValue);
whismanoid 0:777851395940 919 SPIoutputCS(1);
whismanoid 0:777851395940 920 }
whismanoid 0:777851395940 921
whismanoid 0:777851395940 922 //----------------------------------------
whismanoid 0:777851395940 923 // CMD_0111_0000_0000_0000_0000_0000_REF_EXT
whismanoid 0:777851395940 924 // CMD_0111_0001_0000_0000_0000_0000_REF_2V500
whismanoid 0:777851395940 925 // CMD_0111_0010_0000_0000_0000_0000_REF_2V048
whismanoid 0:777851395940 926 // CMD_0111_0011_0000_0000_0000_0000_REF_4V096
whismanoid 0:777851395940 927 // CMD_0111_0100_0000_0000_0000_0000_REF_AlwaysOn_EXT
whismanoid 0:777851395940 928 // CMD_0111_0101_0000_0000_0000_0000_REF_AlwaysOn_2V500
whismanoid 0:777851395940 929 // CMD_0111_0110_0000_0000_0000_0000_REF_AlwaysOn_2V048
whismanoid 0:777851395940 930 // CMD_0111_0111_0000_0000_0000_0000_REF_AlwaysOn_4V096
whismanoid 0:777851395940 931 //
whismanoid 0:777851395940 932 // Sets the reference operating mode.
whismanoid 0:777851395940 933 // REF Power (B18): 0 = Internal reference is only powered if at least one DAC is powered
whismanoid 0:777851395940 934 // 1 = Internal reference is always powered
whismanoid 0:777851395940 935 void MAX5715::REF(MAX5715_REF_enum_t value)
whismanoid 0:777851395940 936 {
whismanoid 0:777851395940 937
whismanoid 0:777851395940 938 //----------------------------------------
whismanoid 0:777851395940 939 // select command_regAddress based on condition
whismanoid 0:777851395940 940 uint8_t command_regAddress = CMD_0111_0110_0000_0000_0000_0000_REF_AlwaysOn_2V048; // diagnostic
whismanoid 0:777851395940 941 uint16_t regValue = 0; // 0000_0000_0000_0000
whismanoid 0:777851395940 942 // select command_regAddress from list of 8 values, based on condition
whismanoid 0:777851395940 943 if (value == REF_4V096) {
whismanoid 0:777851395940 944 command_regAddress = CMD_0111_0011_0000_0000_0000_0000_REF_4V096;
whismanoid 0:777851395940 945 VRef = 4.096;
whismanoid 0:777851395940 946 }
whismanoid 0:777851395940 947 if (value == REF_AlwaysOn_2V500) {
whismanoid 0:777851395940 948 command_regAddress = CMD_0111_0101_0000_0000_0000_0000_REF_AlwaysOn_2V500;
whismanoid 0:777851395940 949 VRef = 2.500;
whismanoid 0:777851395940 950 }
whismanoid 0:777851395940 951 if (value == REF_EXT) {
whismanoid 0:777851395940 952 command_regAddress = CMD_0111_0000_0000_0000_0000_0000_REF_EXT;
whismanoid 0:777851395940 953 }
whismanoid 0:777851395940 954 if (value == REF_AlwaysOn_EXT) {
whismanoid 0:777851395940 955 command_regAddress = CMD_0111_0100_0000_0000_0000_0000_REF_AlwaysOn_EXT;
whismanoid 0:777851395940 956 }
whismanoid 0:777851395940 957 if (value == REF_2V500) {
whismanoid 0:777851395940 958 command_regAddress = CMD_0111_0001_0000_0000_0000_0000_REF_2V500;
whismanoid 0:777851395940 959 VRef = 2.500;
whismanoid 0:777851395940 960 }
whismanoid 0:777851395940 961 if (value == REF_AlwaysOn_2V048) {
whismanoid 0:777851395940 962 command_regAddress = CMD_0111_0110_0000_0000_0000_0000_REF_AlwaysOn_2V048;
whismanoid 0:777851395940 963 VRef = 2.048;
whismanoid 0:777851395940 964 }
whismanoid 0:777851395940 965 if (value == REF_AlwaysOn_4V096) {
whismanoid 0:777851395940 966 command_regAddress = CMD_0111_0111_0000_0000_0000_0000_REF_AlwaysOn_4V096;
whismanoid 0:777851395940 967 VRef = 4.096;
whismanoid 0:777851395940 968 }
whismanoid 0:777851395940 969 if (value == REF_2V048) {
whismanoid 0:777851395940 970 command_regAddress = CMD_0111_0010_0000_0000_0000_0000_REF_2V048;
whismanoid 0:777851395940 971 VRef = 2.048;
whismanoid 0:777851395940 972 }
whismanoid 0:777851395940 973
whismanoid 0:777851395940 974 //----------------------------------------
whismanoid 0:777851395940 975 // SPI write 8-bit regAddress and 16-bit regValue
whismanoid 0:777851395940 976 // int16_t mosiData16 = ((command_regAddress << 8) & 0xFF00) | ((regValue >> 8) & 0xFF);
whismanoid 0:777851395940 977 // int8_t mosiData8_0000FF = (regValue & 0xFF);
whismanoid 0:777851395940 978 SPIoutputCS(0);
whismanoid 0:777851395940 979 SPIwrite24bits(command_regAddress, regValue);
whismanoid 0:777851395940 980 SPIoutputCS(1);
whismanoid 0:777851395940 981
whismanoid 0:777851395940 982 //----------------------------------------
whismanoid 0:777851395940 983 // shadow of write-only register REF CMD_0111_0rrr
whismanoid 0:777851395940 984 Shadow_0111_0rrr_REF = regValue;
whismanoid 0:777851395940 985 }
whismanoid 0:777851395940 986
whismanoid 0:777851395940 987 //----------------------------------------
whismanoid 0:777851395940 988 // CMD_0101_0000_0000_0000_0000_0000_SW_CLEAR
whismanoid 0:777851395940 989 //
whismanoid 0:777851395940 990 // Software Clear
whismanoid 0:777851395940 991 // All CODE and DAC registers cleared to their default values.
whismanoid 0:777851395940 992 //
whismanoid 0:777851395940 993 // @return 1 on success; 0 on failure
whismanoid 0:777851395940 994 uint8_t MAX5715::SW_CLEAR(void)
whismanoid 0:777851395940 995 {
whismanoid 0:777851395940 996
whismanoid 0:777851395940 997 //----------------------------------------
whismanoid 0:777851395940 998 // Define command code
whismanoid 0:777851395940 999 uint8_t command_regAddress = CMD_0101_0000_0000_0000_0000_0000_SW_CLEAR;
whismanoid 0:777851395940 1000 uint16_t regValue = 0; // 0000_0000_0000_0000
whismanoid 0:777851395940 1001
whismanoid 0:777851395940 1002 //----------------------------------------
whismanoid 0:777851395940 1003 // SPI write 8-bit regAddress and 16-bit regValue
whismanoid 0:777851395940 1004 // int16_t mosiData16 = ((command_regAddress << 8) & 0xFF00) | ((regValue >> 8) & 0xFF);
whismanoid 0:777851395940 1005 // int8_t mosiData8_0000FF = (regValue & 0xFF);
whismanoid 0:777851395940 1006 SPIoutputCS(0);
whismanoid 0:777851395940 1007 SPIwrite24bits(command_regAddress, regValue);
whismanoid 0:777851395940 1008 SPIoutputCS(1);
whismanoid 0:777851395940 1009
whismanoid 0:777851395940 1010 //----------------------------------------
whismanoid 0:777851395940 1011 // after successful SW_RESET, update shadow registers
whismanoid 0:777851395940 1012 // assume SPI write was successful
whismanoid 0:777851395940 1013 if (1)
whismanoid 0:777851395940 1014 {
whismanoid 0:777851395940 1015 // shadow of write-only register CODE[channel_0_3] CMD_0010_nnnn
whismanoid 0:777851395940 1016 Shadow_0010_nnnn_CODE[0] = 0x0000;
whismanoid 0:777851395940 1017 Shadow_0010_nnnn_CODE[1] = 0x0000;
whismanoid 0:777851395940 1018 Shadow_0010_nnnn_CODE[2] = 0x0000;
whismanoid 0:777851395940 1019 Shadow_0010_nnnn_CODE[3] = 0x0000;
whismanoid 0:777851395940 1020 //
whismanoid 0:777851395940 1021 // shadow of write-only register POWER[channel_0_3] CMD_0100_00pp
whismanoid 0:777851395940 1022 //Shadow_0100_00pp_POWER[0] = POWERn_Normal;
whismanoid 0:777851395940 1023 //Shadow_0100_00pp_POWER[1] = POWERn_Normal;
whismanoid 0:777851395940 1024 //Shadow_0100_00pp_POWER[2] = POWERn_Normal;
whismanoid 0:777851395940 1025 //Shadow_0100_00pp_POWER[3] = POWERn_Normal;
whismanoid 0:777851395940 1026 //
whismanoid 0:777851395940 1027 // shadow of write-only register CONFIG[channel_0_3] CMD_0110_a00t
whismanoid 0:777851395940 1028 //Shadow_0110_a00t_CONFIG[0] = 0; // normal (latched, not transparent)
whismanoid 0:777851395940 1029 //Shadow_0110_a00t_CONFIG[1] = 0; // normal (latched, not transparent)
whismanoid 0:777851395940 1030 //Shadow_0110_a00t_CONFIG[2] = 0; // normal (latched, not transparent)
whismanoid 0:777851395940 1031 //Shadow_0110_a00t_CONFIG[3] = 0; // normal (latched, not transparent)
whismanoid 0:777851395940 1032 //
whismanoid 0:777851395940 1033 // shadow of write-only register REF CMD_0111_0rrr
whismanoid 0:777851395940 1034 //Shadow_0111_0rrr_REF = REF_EXT;
whismanoid 0:777851395940 1035 //
whismanoid 0:777851395940 1036 // shadow of CODE field of write-only register CODE[channel_0_3] CMD_0010_nnnn
whismanoid 0:777851395940 1037 CODE[0] = 0x0000;
whismanoid 0:777851395940 1038 CODE[1] = 0x0000;
whismanoid 0:777851395940 1039 CODE[2] = 0x0000;
whismanoid 0:777851395940 1040 CODE[3] = 0x0000;
whismanoid 0:777851395940 1041 //
whismanoid 0:777851395940 1042 }
whismanoid 0:777851395940 1043
whismanoid 0:777851395940 1044 //----------------------------------------
whismanoid 0:777851395940 1045 // success
whismanoid 0:777851395940 1046 return 1;
whismanoid 0:777851395940 1047 }
whismanoid 0:777851395940 1048
whismanoid 0:777851395940 1049 //----------------------------------------
whismanoid 0:777851395940 1050 // CMD_0101_0001_0000_0000_0000_0000_SW_RESET
whismanoid 0:777851395940 1051 //
whismanoid 0:777851395940 1052 // Software Reset
whismanoid 0:777851395940 1053 // All CODE, DAC, and control registers returned to their default values,
whismanoid 0:777851395940 1054 // simulating a power cycle reset.
whismanoid 0:777851395940 1055 //
whismanoid 0:777851395940 1056 // @return 1 on success; 0 on failure
whismanoid 0:777851395940 1057 uint8_t MAX5715::SW_RESET(void)
whismanoid 0:777851395940 1058 {
whismanoid 0:777851395940 1059
whismanoid 0:777851395940 1060 //----------------------------------------
whismanoid 0:777851395940 1061 // Define command code
whismanoid 0:777851395940 1062 uint8_t command_regAddress = CMD_0101_0001_0000_0000_0000_0000_SW_RESET;
whismanoid 0:777851395940 1063 uint16_t regValue = 0; // 0000_0000_0000_0000
whismanoid 0:777851395940 1064
whismanoid 0:777851395940 1065 //----------------------------------------
whismanoid 0:777851395940 1066 // SPI write 8-bit regAddress and 16-bit regValue
whismanoid 0:777851395940 1067 // int16_t mosiData16 = ((command_regAddress << 8) & 0xFF00) | ((regValue >> 8) & 0xFF);
whismanoid 0:777851395940 1068 // int8_t mosiData8_0000FF = (regValue & 0xFF);
whismanoid 0:777851395940 1069 SPIoutputCS(0);
whismanoid 0:777851395940 1070 SPIwrite24bits(command_regAddress, regValue);
whismanoid 0:777851395940 1071 SPIoutputCS(1);
whismanoid 0:777851395940 1072
whismanoid 0:777851395940 1073 //----------------------------------------
whismanoid 0:777851395940 1074 // after successful SW_RESET, update shadow registers
whismanoid 0:777851395940 1075 // assume SPI write was successful
whismanoid 0:777851395940 1076 if (1)
whismanoid 0:777851395940 1077 {
whismanoid 0:777851395940 1078 // shadow of write-only register CODE[channel_0_3] CMD_0010_nnnn
whismanoid 0:777851395940 1079 Shadow_0010_nnnn_CODE[0] = 0x0000;
whismanoid 0:777851395940 1080 Shadow_0010_nnnn_CODE[1] = 0x0000;
whismanoid 0:777851395940 1081 Shadow_0010_nnnn_CODE[2] = 0x0000;
whismanoid 0:777851395940 1082 Shadow_0010_nnnn_CODE[3] = 0x0000;
whismanoid 0:777851395940 1083 //
whismanoid 0:777851395940 1084 // shadow of write-only register POWER[channel_0_3] CMD_0100_00pp
whismanoid 0:777851395940 1085 Shadow_0100_00pp_POWER[0] = POWERn_Normal;
whismanoid 0:777851395940 1086 Shadow_0100_00pp_POWER[1] = POWERn_Normal;
whismanoid 0:777851395940 1087 Shadow_0100_00pp_POWER[2] = POWERn_Normal;
whismanoid 0:777851395940 1088 Shadow_0100_00pp_POWER[3] = POWERn_Normal;
whismanoid 0:777851395940 1089 //
whismanoid 0:777851395940 1090 // shadow of write-only register CONFIG[channel_0_3] CMD_0110_a00t
whismanoid 0:777851395940 1091 Shadow_0110_a00t_CONFIG[0] = 0; // normal (latched, not transparent)
whismanoid 0:777851395940 1092 Shadow_0110_a00t_CONFIG[1] = 0; // normal (latched, not transparent)
whismanoid 0:777851395940 1093 Shadow_0110_a00t_CONFIG[2] = 0; // normal (latched, not transparent)
whismanoid 0:777851395940 1094 Shadow_0110_a00t_CONFIG[3] = 0; // normal (latched, not transparent)
whismanoid 0:777851395940 1095 //
whismanoid 0:777851395940 1096 // shadow of write-only register REF CMD_0111_0rrr
whismanoid 0:777851395940 1097 Shadow_0111_0rrr_REF = REF_EXT;
whismanoid 0:777851395940 1098 //
whismanoid 0:777851395940 1099 // shadow of CODE field of write-only register CODE[channel_0_3] CMD_0010_nnnn
whismanoid 0:777851395940 1100 CODE[0] = 0x0000;
whismanoid 0:777851395940 1101 CODE[1] = 0x0000;
whismanoid 0:777851395940 1102 CODE[2] = 0x0000;
whismanoid 0:777851395940 1103 CODE[3] = 0x0000;
whismanoid 0:777851395940 1104 //
whismanoid 0:777851395940 1105 }
whismanoid 0:777851395940 1106
whismanoid 0:777851395940 1107 //----------------------------------------
whismanoid 0:777851395940 1108 // success
whismanoid 0:777851395940 1109 return 1;
whismanoid 0:777851395940 1110 }
whismanoid 0:777851395940 1111
whismanoid 0:777851395940 1112
whismanoid 0:777851395940 1113 // End of file