Lucas Lim / Mbed 2 deprecated HSP_Temperature_Barometer_CS3237

Dependencies:   mbed

Committer:
lucaslwl
Date:
Mon Aug 26 08:11:41 2019 +0000
Revision:
22:5c07298d3383
add library folder

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lucaslwl 22:5c07298d3383 1 /*******************************************************************************
lucaslwl 22:5c07298d3383 2 * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
lucaslwl 22:5c07298d3383 3 *
lucaslwl 22:5c07298d3383 4 * Permission is hereby granted, free of charge, to any person obtaining a
lucaslwl 22:5c07298d3383 5 * copy of this software and associated documentation files (the "Software"),
lucaslwl 22:5c07298d3383 6 * to deal in the Software without restriction, including without limitation
lucaslwl 22:5c07298d3383 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
lucaslwl 22:5c07298d3383 8 * and/or sell copies of the Software, and to permit persons to whom the
lucaslwl 22:5c07298d3383 9 * Software is furnished to do so, subject to the following conditions:
lucaslwl 22:5c07298d3383 10 *
lucaslwl 22:5c07298d3383 11 * The above copyright notice and this permission notice shall be included
lucaslwl 22:5c07298d3383 12 * in all copies or substantial portions of the Software.
lucaslwl 22:5c07298d3383 13 *
lucaslwl 22:5c07298d3383 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
lucaslwl 22:5c07298d3383 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
lucaslwl 22:5c07298d3383 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
lucaslwl 22:5c07298d3383 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
lucaslwl 22:5c07298d3383 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
lucaslwl 22:5c07298d3383 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
lucaslwl 22:5c07298d3383 20 * OTHER DEALINGS IN THE SOFTWARE.
lucaslwl 22:5c07298d3383 21 *
lucaslwl 22:5c07298d3383 22 * Except as contained in this notice, the name of Maxim Integrated
lucaslwl 22:5c07298d3383 23 * Products, Inc. shall not be used except as stated in the Maxim Integrated
lucaslwl 22:5c07298d3383 24 * Products, Inc. Branding Policy.
lucaslwl 22:5c07298d3383 25 *
lucaslwl 22:5c07298d3383 26 * The mere transfer of this software does not imply any licenses
lucaslwl 22:5c07298d3383 27 * of trade secrets, proprietary technology, copyrights, patents,
lucaslwl 22:5c07298d3383 28 * trademarks, maskwork rights, or any other form of intellectual
lucaslwl 22:5c07298d3383 29 * property whatsoever. Maxim Integrated Products, Inc. retains all
lucaslwl 22:5c07298d3383 30 * ownership rights.
lucaslwl 22:5c07298d3383 31 *******************************************************************************
lucaslwl 22:5c07298d3383 32 */
lucaslwl 22:5c07298d3383 33
lucaslwl 22:5c07298d3383 34 #include "MAX14720.h"
lucaslwl 22:5c07298d3383 35
lucaslwl 22:5c07298d3383 36 //******************************************************************************
lucaslwl 22:5c07298d3383 37 MAX14720::MAX14720(PinName sda, PinName scl, int slaveAddress) :
lucaslwl 22:5c07298d3383 38 slaveAddress(slaveAddress)
lucaslwl 22:5c07298d3383 39 {
lucaslwl 22:5c07298d3383 40 i2c = new I2C(sda,scl);
lucaslwl 22:5c07298d3383 41 isOwner = true;
lucaslwl 22:5c07298d3383 42 clkDivEn = false;
lucaslwl 22:5c07298d3383 43 clkDivSet = 0;
lucaslwl 22:5c07298d3383 44 boostISet = BOOST_ISET_100mA;
lucaslwl 22:5c07298d3383 45 boostMillivolts = 3300;
lucaslwl 22:5c07298d3383 46 boostEn = BOOST_DISABLED;
lucaslwl 22:5c07298d3383 47 boostEMI = false;
lucaslwl 22:5c07298d3383 48 boostInd = false;
lucaslwl 22:5c07298d3383 49 boostHysOff = false;
lucaslwl 22:5c07298d3383 50 boostPasDsc = false;
lucaslwl 22:5c07298d3383 51 boostActDsc = false;
lucaslwl 22:5c07298d3383 52 buckMd = BUCK_BURST;
lucaslwl 22:5c07298d3383 53 buckFst = false;
lucaslwl 22:5c07298d3383 54 buckISet = BUCK_ISET_300mA;
lucaslwl 22:5c07298d3383 55 buckCfg = false;
lucaslwl 22:5c07298d3383 56 buckInd = false;
lucaslwl 22:5c07298d3383 57 buckHysOff = true;
lucaslwl 22:5c07298d3383 58 buckMinOT = true;
lucaslwl 22:5c07298d3383 59 buckInteg = true;
lucaslwl 22:5c07298d3383 60 buckPasDsc = false;
lucaslwl 22:5c07298d3383 61 buckActDsc = false;
lucaslwl 22:5c07298d3383 62 buckFScl = false;
lucaslwl 22:5c07298d3383 63 }
lucaslwl 22:5c07298d3383 64 //******************************************************************************
lucaslwl 22:5c07298d3383 65 MAX14720::MAX14720(I2C *i2c, int slaveAddress) :
lucaslwl 22:5c07298d3383 66 slaveAddress(slaveAddress)
lucaslwl 22:5c07298d3383 67 {
lucaslwl 22:5c07298d3383 68 this->i2c = i2c;
lucaslwl 22:5c07298d3383 69 isOwner = false;
lucaslwl 22:5c07298d3383 70 clkDivEn = false;
lucaslwl 22:5c07298d3383 71 clkDivSet = 0;
lucaslwl 22:5c07298d3383 72 boostISet = BOOST_ISET_100mA;
lucaslwl 22:5c07298d3383 73 boostMillivolts = 3300;
lucaslwl 22:5c07298d3383 74 boostEn = BOOST_DISABLED;
lucaslwl 22:5c07298d3383 75 boostEMI = false;
lucaslwl 22:5c07298d3383 76 boostInd = false;
lucaslwl 22:5c07298d3383 77 boostHysOff = false;
lucaslwl 22:5c07298d3383 78 boostPasDsc = false;
lucaslwl 22:5c07298d3383 79 boostActDsc = false;
lucaslwl 22:5c07298d3383 80 buckMd = BUCK_BURST;
lucaslwl 22:5c07298d3383 81 buckFst = false;
lucaslwl 22:5c07298d3383 82 buckISet = BUCK_ISET_300mA;
lucaslwl 22:5c07298d3383 83 buckCfg = false;
lucaslwl 22:5c07298d3383 84 buckInd = false;
lucaslwl 22:5c07298d3383 85 buckHysOff = true;
lucaslwl 22:5c07298d3383 86 buckMinOT = true;
lucaslwl 22:5c07298d3383 87 buckInteg = true;
lucaslwl 22:5c07298d3383 88 buckPasDsc = false;
lucaslwl 22:5c07298d3383 89 buckActDsc = false;
lucaslwl 22:5c07298d3383 90 buckFScl = false;
lucaslwl 22:5c07298d3383 91 }
lucaslwl 22:5c07298d3383 92
lucaslwl 22:5c07298d3383 93 //******************************************************************************
lucaslwl 22:5c07298d3383 94 MAX14720::~MAX14720()
lucaslwl 22:5c07298d3383 95 {
lucaslwl 22:5c07298d3383 96 if (isOwner == true) {
lucaslwl 22:5c07298d3383 97 delete i2c;
lucaslwl 22:5c07298d3383 98 }
lucaslwl 22:5c07298d3383 99 }
lucaslwl 22:5c07298d3383 100
lucaslwl 22:5c07298d3383 101 //******************************************************************************
lucaslwl 22:5c07298d3383 102 int MAX14720::boostSetMode(boostEn_t mode)
lucaslwl 22:5c07298d3383 103 {
lucaslwl 22:5c07298d3383 104 char data;
lucaslwl 22:5c07298d3383 105
lucaslwl 22:5c07298d3383 106 boostEn = mode;
lucaslwl 22:5c07298d3383 107 data = (boostEn << 3) | (boostEMI << 1) | (boostInd);
lucaslwl 22:5c07298d3383 108 return writeReg(REG_BOOST_CFG, data);
lucaslwl 22:5c07298d3383 109 }
lucaslwl 22:5c07298d3383 110
lucaslwl 22:5c07298d3383 111 //******************************************************************************
lucaslwl 22:5c07298d3383 112 int MAX14720::boostSetVoltage(int mV)
lucaslwl 22:5c07298d3383 113 {
lucaslwl 22:5c07298d3383 114 char data;
lucaslwl 22:5c07298d3383 115
lucaslwl 22:5c07298d3383 116 if ((MAX14720_BOOST_MIN_MV <= mV) && (mV <= MAX14720_BOOST_MAX_MV)) {
lucaslwl 22:5c07298d3383 117 boostMillivolts = mV;
lucaslwl 22:5c07298d3383 118 data = (mV - MAX14720_BOOST_MIN_MV) / MAX14720_BOOST_STEP_MV;
lucaslwl 22:5c07298d3383 119 } else {
lucaslwl 22:5c07298d3383 120 return MAX14720_ERROR;
lucaslwl 22:5c07298d3383 121 }
lucaslwl 22:5c07298d3383 122
lucaslwl 22:5c07298d3383 123 if (boostEn == BOOST_ENABLED) {
lucaslwl 22:5c07298d3383 124 if (writeReg(REG_BOOST_CFG, 0x00) != MAX14720_NO_ERROR) {
lucaslwl 22:5c07298d3383 125 return MAX14720_ERROR;
lucaslwl 22:5c07298d3383 126 }
lucaslwl 22:5c07298d3383 127 }
lucaslwl 22:5c07298d3383 128
lucaslwl 22:5c07298d3383 129 if (writeReg(REG_BOOST_VSET, data) != MAX14720_NO_ERROR) {
lucaslwl 22:5c07298d3383 130 return MAX14720_ERROR;
lucaslwl 22:5c07298d3383 131 }
lucaslwl 22:5c07298d3383 132
lucaslwl 22:5c07298d3383 133 if (boostEn == BOOST_ENABLED) {
lucaslwl 22:5c07298d3383 134 data = (boostEn << 3) | (boostEMI << 1) | (boostInd);
lucaslwl 22:5c07298d3383 135 if (writeReg(REG_BOOST_CFG, data) != MAX14720_NO_ERROR) {
lucaslwl 22:5c07298d3383 136 return MAX14720_ERROR;
lucaslwl 22:5c07298d3383 137 }
lucaslwl 22:5c07298d3383 138 }
lucaslwl 22:5c07298d3383 139
lucaslwl 22:5c07298d3383 140 return MAX14720_NO_ERROR;
lucaslwl 22:5c07298d3383 141 }
lucaslwl 22:5c07298d3383 142
lucaslwl 22:5c07298d3383 143 //******************************************************************************
lucaslwl 22:5c07298d3383 144 int MAX14720::init()
lucaslwl 22:5c07298d3383 145 {
lucaslwl 22:5c07298d3383 146 char data;
lucaslwl 22:5c07298d3383 147
lucaslwl 22:5c07298d3383 148 data = (clkDivEn << 7) | (clkDivSet);
lucaslwl 22:5c07298d3383 149 if (writeReg(REG_BOOST_CDIV, data) != MAX14720_NO_ERROR) {
lucaslwl 22:5c07298d3383 150 return MAX14720_ERROR;
lucaslwl 22:5c07298d3383 151 }
lucaslwl 22:5c07298d3383 152
lucaslwl 22:5c07298d3383 153 data = (boostISet);
lucaslwl 22:5c07298d3383 154 if (writeReg(REG_BOOST_ISET, data) != MAX14720_NO_ERROR) {
lucaslwl 22:5c07298d3383 155 return MAX14720_ERROR;
lucaslwl 22:5c07298d3383 156 }
lucaslwl 22:5c07298d3383 157
lucaslwl 22:5c07298d3383 158 if ((MAX14720_BOOST_MIN_MV <= boostMillivolts) &&
lucaslwl 22:5c07298d3383 159 (boostMillivolts <= MAX14720_BOOST_MAX_MV)) {
lucaslwl 22:5c07298d3383 160 data = (boostMillivolts - MAX14720_BOOST_MIN_MV) / MAX14720_BOOST_STEP_MV;
lucaslwl 22:5c07298d3383 161 if (writeReg(REG_BOOST_VSET, data) != MAX14720_NO_ERROR) {
lucaslwl 22:5c07298d3383 162 return MAX14720_ERROR;
lucaslwl 22:5c07298d3383 163 }
lucaslwl 22:5c07298d3383 164 } else {
lucaslwl 22:5c07298d3383 165 return MAX14720_ERROR;
lucaslwl 22:5c07298d3383 166 }
lucaslwl 22:5c07298d3383 167
lucaslwl 22:5c07298d3383 168 data = (buckMd << 1) | (buckFst);
lucaslwl 22:5c07298d3383 169 if (writeReg(REG_BUCK_CFG, data) != MAX14720_NO_ERROR) {
lucaslwl 22:5c07298d3383 170 return MAX14720_ERROR;
lucaslwl 22:5c07298d3383 171 }
lucaslwl 22:5c07298d3383 172
lucaslwl 22:5c07298d3383 173 data = (boostHysOff << 7) | (boostPasDsc << 6) | (boostActDsc << 5) |
lucaslwl 22:5c07298d3383 174 (buckPasDsc << 2) | (buckActDsc << 1) | (buckFScl);
lucaslwl 22:5c07298d3383 175 if (writeReg(REG_BBB_EXTRA, data) != MAX14720_NO_ERROR) {
lucaslwl 22:5c07298d3383 176 return MAX14720_ERROR;
lucaslwl 22:5c07298d3383 177 }
lucaslwl 22:5c07298d3383 178
lucaslwl 22:5c07298d3383 179 // Write Boost Enable Register Last
lucaslwl 22:5c07298d3383 180 data = (boostEn << 3) | (boostEMI << 1) | (boostInd);
lucaslwl 22:5c07298d3383 181 if (writeReg(REG_BOOST_CFG, data) != MAX14720_NO_ERROR) {
lucaslwl 22:5c07298d3383 182 return MAX14720_ERROR;
lucaslwl 22:5c07298d3383 183 }
lucaslwl 22:5c07298d3383 184
lucaslwl 22:5c07298d3383 185 return MAX14720_NO_ERROR;
lucaslwl 22:5c07298d3383 186 }
lucaslwl 22:5c07298d3383 187
lucaslwl 22:5c07298d3383 188 //******************************************************************************
lucaslwl 22:5c07298d3383 189 int MAX14720::monSet(monCfg_t monCfg)
lucaslwl 22:5c07298d3383 190 {
lucaslwl 22:5c07298d3383 191 return writeReg(REG_MON_CFG, monCfg);
lucaslwl 22:5c07298d3383 192 }
lucaslwl 22:5c07298d3383 193
lucaslwl 22:5c07298d3383 194 //******************************************************************************
lucaslwl 22:5c07298d3383 195 int MAX14720::shutdown()
lucaslwl 22:5c07298d3383 196 {
lucaslwl 22:5c07298d3383 197 return writeReg(REG_PWR_OFF, 0xB2);
lucaslwl 22:5c07298d3383 198 }
lucaslwl 22:5c07298d3383 199
lucaslwl 22:5c07298d3383 200
lucaslwl 22:5c07298d3383 201 //******************************************************************************
lucaslwl 22:5c07298d3383 202 int MAX14720::writeReg(registers_t reg, char value)
lucaslwl 22:5c07298d3383 203 {
lucaslwl 22:5c07298d3383 204 char cmdData[2] = { (char)reg, value };
lucaslwl 22:5c07298d3383 205
lucaslwl 22:5c07298d3383 206 if (i2c->write(slaveAddress, cmdData, sizeof(cmdData)) != 0) {
lucaslwl 22:5c07298d3383 207 return MAX14720_ERROR;
lucaslwl 22:5c07298d3383 208 }
lucaslwl 22:5c07298d3383 209
lucaslwl 22:5c07298d3383 210 return MAX14720_NO_ERROR;
lucaslwl 22:5c07298d3383 211 }
lucaslwl 22:5c07298d3383 212
lucaslwl 22:5c07298d3383 213 //******************************************************************************
lucaslwl 22:5c07298d3383 214 int MAX14720::readReg(registers_t reg, char *value)
lucaslwl 22:5c07298d3383 215 {
lucaslwl 22:5c07298d3383 216 char cmdData[1] = { (char)reg };
lucaslwl 22:5c07298d3383 217
lucaslwl 22:5c07298d3383 218 if (i2c->write(slaveAddress, cmdData, sizeof(cmdData)) != 0) {
lucaslwl 22:5c07298d3383 219 return MAX14720_ERROR;
lucaslwl 22:5c07298d3383 220 }
lucaslwl 22:5c07298d3383 221
lucaslwl 22:5c07298d3383 222 if (i2c->read(slaveAddress, value, 1) != 0) {
lucaslwl 22:5c07298d3383 223 return MAX14720_ERROR;
lucaslwl 22:5c07298d3383 224 }
lucaslwl 22:5c07298d3383 225
lucaslwl 22:5c07298d3383 226 return MAX14720_NO_ERROR;
lucaslwl 22:5c07298d3383 227 }