Library for the MAX11300
Diff: MAX113XX_Pixi.h
- Revision:
- 7:8669a53acd0d
- Child:
- 8:4291f7e54863
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MAX113XX_Pixi.h Fri May 05 19:13:28 2017 +0000 @@ -0,0 +1,258 @@ +/********************************************************************** +* Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved. +* +* Permission is hereby granted, free of charge, to any person obtaining a +* copy of this software and associated documentation files (the "Software"), +* to deal in the Software without restriction, including without limitation +* the rights to use, copy, modify, merge, publish, distribute, sublicense, +* and/or sell copies of the Software, and to permit persons to whom the +* Software is furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included +* in all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES +* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +* OTHER DEALINGS IN THE SOFTWARE. +* +* Except as contained in this notice, the name of Maxim Integrated +* Products, Inc. shall not be used except as stated in the Maxim Integrated +* Products, Inc. Branding Policy. +* +* The mere transfer of this software does not imply any licenses +* of trade secrets, proprietary technology, copyrights, patents, +* trademarks, maskwork rights, or any other form of intellectual +* property whatsoever. Maxim Integrated Products, Inc. retains all +* ownership rights. +**********************************************************************/ + + +#ifndef _MAX113XX_PIXI_H_ +#define _MAX113XX_PIXI_H_ + +#include "mbed.h" +#include "MAX113XX_Pixi_Config.h" + +/** +@brief MAX11300 - PIXI, 20-Port Programmable Mixed-Signal I/O with +12-Bit ADC, 12-Bit DAC, Analog Switches, and GPIO + +The MAX11300 integrates a PIXI™, 12-bit, multichannel, analog-to-digital +converter (ADC) and a 12-bit, multichannel, buffered digital-to-analog +converter (DAC) in a single integrated circuit (IC). This device offers +20 mixed-signal high-voltage, bipolar ports, which are configurable as an +ADC analog input, a DAC analog output, a general-purpose input port (GPI), +a general-purpose output port (GPO), or an analog switch terminal. +One internal and two external temperature sensors track junction and +environmental temperature, respectively. Adjacent pairs of ports are +configurable as a logic-level translator for open-drain devices or an +analog switch. + +Use configuration software found at +https://www.maximintegrated.com/en/products/analog/data-converters/analog-to-digital-converters/MAX11300.html/tb_tab2 +to generate MAX11300hex.h file +*/ +class MAX113XX_Pixi +{ + public: + + ///MAX11300 Ports + enum MAX113XX_Ports_e + { + PORT0, + PORT1, + PORT2, + PORT3, + PORT4, + PORT5, + PORT6, + PORT7, + PORT8, + PORT9, + PORT10, + PORT11, + PORT12, + PORT13, + PORT14, + PORT15, + PORT16, + PORT17, + PORT18, + PORT19 + }; + + ///MAX11300 Port Modes + enum MAX113XX_PortModes_e + { + ///HIGH_Z + MODE_0, + ///Digital input with programmable threshold, GPI + MODE_1, + ///Bidirectional level translator terminal + MODE_2, + ///Register-driven digital output with DAC-controlled level, GPO + MODE_3, + ///Unidirectional path output with DAC-controlled level, GPO + MODE_4, + ///Analog output for DAC + MODE_5, + ///Analog output for DAC with ADC monitoring + MODE_6, + ///Positive analog input to single-ended ADC + MODE_7, + ///Positive analog input to differential ADC + MODE_8, + ///Negative analog input to differential ADC + MODE_9, + ///Analog output for DAC and negative analog input to differential ADC + MODE_10, + ///Terminal to GPI-controlled analog switch + MODE_11, + ///Terminal to register-controlled analog switch + MODE_12 + }; + + enum CmdResult_e + { + ///Failed operation + OpFailure, + ///Successful operation + Success + }; + + MAX113XX_Pixi(PinName cnvt); + + ///@brief Writes gpo configured port with lsb of state + ///@param[in] port - gpo congigured port to be written + ///@param[in] state - lsb of state is written to port + ///@return Result of operation + CmdResult_e gpioWrite(MAX113XX_Ports_e port, const uint8_t state); + + ///@brief Reads gpi configured port + ///@param[in] port - gpi congigured port to be read + ///@param[out] state - lsb of state matches port state + ///@return Result of operation + CmdResult_e gpioRead(MAX113XX_Ports_e port, uint8_t &state); + + ///@brief Read single ended ADC configured port + ///@param[in] port - single ended ADC configured port + ///@param[out] data - contents of ADC data register + ///@return Result of operation + CmdResult_e singleEndedADCRead(MAX113XX_Ports_e port, uint16_t &data); + + ///@brief Write single ended DAC configured port + ///@param[in] port - single ended DAC configured port + ///@param[in] data - value to be written to DAC data register + ///@return Result of operation + CmdResult_e singleEndedDACWrite(MAX113XX_Ports_e port, + const uint16_t data); + + void dumpPixiMemory(Serial &ser, MAX113XX_Pixi &pixi); + +protected: + + DigitalOut m_cnvt; + + ///@brief Writes given register with data + ///@param[in] reg - register to be written + ///@param[in] data - data to write + ///@return none + virtual void writeRegister(MAX11300RegAddress_t reg, + const uint16_t data) = 0; + + ///@brief Reads given register + ///@param[in] reg - register to read + ///@return contents of register + virtual uint16_t readRegister(MAX11300RegAddress_t reg) = 0; + + ///@brief Writes a block of data starting at given register + ///@param[in] reg - register to start writing at + ///@param[in] data - pointer to data buffer + ///@param[in] num_reg - number of registers to be written + ///@return none + virtual void blockWrite(MAX11300RegAddress_t reg, const uint16_t *data, + const uint8_t num_reg) = 0; + + ///@brief Reads a block of data starting at given register + ///@param[in] reg - register to start reading at + ///@param[in] data - pointer to data buffer + ///@param[in] num_reg - number of registers to be read + ///@return none + virtual void blockRead(MAX11300RegAddress_t reg, uint16_t *data, + const uint8_t num_reg) = 0; +}; + + +/** +@brief SPI Declaration for MAX113XX parts +*/ +class MAX113XX_SPI: public MAX113XX_Pixi +{ + +public: + + ///@brief MAX113XX_SPI Constructor + ///@param[in] spiBus - reference to SPI bus for this device + ///@param[in] cs - pin to be used for chip select + ///@param[in] cnvrt - pin to be used for convert + MAX113XX_SPI(SPI & spiBus, PinName cs, PinName cnvt); + + ///@brief MAX113XX_SPI Destructor + ~MAX113XX_SPI(); + +private: + + SPI & m_spiBus; + DigitalOut m_cs; + + virtual void writeRegister(MAX11300RegAddress_t reg, + const uint16_t data); + + virtual uint16_t readRegister(MAX11300RegAddress_t reg); + + virtual void blockWrite(MAX11300RegAddress_t reg, const uint16_t *data, + const uint8_t num_reg); + + virtual void blockRead(MAX11300RegAddress_t reg, uint16_t *data, + const uint8_t num_reg); +}; + + +/** +@brief I2C Declaration for MAX113XX parts +*/ +class MAX113XX_I2C: public MAX113XX_Pixi +{ + +public: + + ///@brief MAX113XX_I2C Constructor + ///@param[in] i2cBus - reference to I2C bus for this device + ///@param[in] cnvrt - pin to be used for convert + MAX113XX_I2C(I2C &i2cBus, PinName cnvt); + + ///@brief MAX113XX_I2C Destructor + ~MAX113XX_I2C(); + +private: + + I2C &m_i2cBus; + + virtual void writeRegister(MAX11300RegAddress_t reg, + const uint16_t data); + + virtual uint16_t readRegister(MAX11300RegAddress_t reg); + + virtual void blockWrite(MAX11300RegAddress_t reg, const uint16_t *data, + const uint8_t num_reg); + + virtual void blockRead(MAX11300RegAddress_t reg, uint16_t *data, + const uint8_t num_reg); +}; + + +#endif /* _MAX113XX_PIXI_H_ */ \ No newline at end of file