MAX14690 Library

Dependents:   MAX32630HSP3_IMU_HelloWorld MAX32630HSP3_IMU_HelloWorld max32630fthr max4146x_comp ... more

Fork of MAX14690 by Greg Steiert

Files at this revision

API Documentation at this revision

Comitter:
switches
Date:
Tue Oct 04 22:26:50 2016 +0000
Parent:
2:5bcfe7e294b6
Child:
4:2e4837c3b6e1
Commit message:
Updated Library for Demo

Changed in this revision

MAX14720.cpp Show annotated file Show diff for this revision Revisions of this file
MAX14720.h Show annotated file Show diff for this revision Revisions of this file
--- a/MAX14720.cpp	Wed Sep 28 19:52:29 2016 +0000
+++ b/MAX14720.cpp	Tue Oct 04 22:26:50 2016 +0000
@@ -35,87 +35,157 @@
 
 //******************************************************************************
 MAX14720::MAX14720(PinName sda, PinName scl, int slaveAddress) :
-	slaveAddress(slaveAddress)
+    slaveAddress(slaveAddress)
 {
-	i2c = new I2C(sda,scl);
-	isOwner = true;
+    i2c = new I2C(sda,scl);
+    isOwner = true;
+    clkDivEn = false;
+    clkDivSet = 0;
+    boostISet = BOOST_ISET_100mA;
+    boostMillivolts = 3300;
+    boostEn = BOOST_DISABLED;
+    boostEMI = false;
+    boostInd = false;
+    boostHysOff = false;
+    boostPasDsc = false;
+    boostActDsc = false;
+    buckMd = BUCK_BURST;
+    buckFst = false;
+    buckISet = BUCK_ISET_300mA;
+    buckCfg = false;
+    buckInd = false;
+    buckHysOff = true;
+    buckMinOT = true;
+    buckInteg = true;
+    buckPasDsc = false;
+    buckActDsc = false;
+    buckFScl = false;
 }
 //******************************************************************************
 MAX14720::MAX14720(I2C *i2c, int slaveAddress) :
-		slaveAddress(slaveAddress)
+    slaveAddress(slaveAddress)
 {
-	this->i2c = i2c;
-	isOwner = false;
+    this->i2c = i2c;
+    isOwner = false;
+    clkDivEn = false;
+    clkDivSet = 0;
+    boostISet = BOOST_ISET_100mA;
+    boostMillivolts = 3300;
+    boostEn = BOOST_DISABLED;
+    boostEMI = false;
+    boostInd = false;
+    boostHysOff = false;
+    boostPasDsc = false;
+    boostActDsc = false;
+    buckMd = BUCK_BURST;
+    buckFst = false;
+    buckISet = BUCK_ISET_300mA;
+    buckCfg = false;
+    buckInd = false;
+    buckHysOff = true;
+    buckMinOT = true;
+    buckInteg = true;
+    buckPasDsc = false;
+    buckActDsc = false;
+    buckFScl = false;
 }
 //******************************************************************************
 MAX14720::~MAX14720()
 {
-	if (isOwner == true) {
-		delete i2c;
-	}
+    if (isOwner == true) {
+        delete i2c;
+    }
+}
+
+//******************************************************************************
+int MAX14720::boostSetMode(boostEn_t mode)
+{
+    int result;
+    char data;
+    boostEn = mode;
+    data = (boostEn << 3) | (boostEMI << 1) | (boostInd);
+    result = writeReg(REG_BOOST_CFG, data);
+    if (result == MAX14720_ERROR) return result;
+    return 0;
 }
 
 //******************************************************************************
-int MAX14720::boostEn(BoostEn_Values value) {
+int MAX14720::boostSetVoltage(int mV)
+{
     int result;
- 	max14720_BoostCfg val;
-
- 	// read modify write BoostEn to desired state
- 	result = readReg(BOOST_CFG, &val.all);
- 	val.bit.BoostEn = (char)value;
-    result = writeReg(BOOST_CFG, val.all);
+    char data;
+    if ((MAX14720_BOOST_MIN_MV <= mV)&&(mV <= MAX14720_BOOST_MAX_MV)) {
+        boostMillivolts = mV;
+        data = (mV - MAX14720_BOOST_MIN_MV) / MAX14720_BOOST_STEP_MV;
+    } else {
+        return MAX14720_ERROR;
+    }
+    if (boostEn == BOOST_ENABLED) {
+        result = writeReg(REG_BOOST_CFG, 0x00);
+    }
     if (result == MAX14720_ERROR) return result;
-	return 0;
-}
-
-//******************************************************************************
-int MAX14720::boostVSet(BoostVSet_Values value) {
-    int result;
-    max14720_BoostVSet val;
-
- 	// read modify write boostVSet to desired state
- 	result = readReg(BOOST_V_SET, &val.all);
- 	val.bit.BoostVSet = (char)value;
-    result = writeReg(BOOST_V_SET, val.all);
+    result = writeReg(REG_BOOST_VSET, data);
     if (result == MAX14720_ERROR) return result;
-	return 0;
+    if (boostEn == BOOST_ENABLED) {
+        data = (boostEn << 3) | (boostEMI << 1) | (boostInd);
+        result = writeReg(REG_BOOST_CFG, data);
+    }
+    if (result == MAX14720_ERROR) return result;
+    return 0;
 }
 
 //******************************************************************************
-int MAX14720::readBoostVSet(BoostVSet_Values *value) {
+int MAX14720::init()
+{
     int result;
-    char val;
-    
-    result = readReg(BOOST_V_SET,&val);
-    *value = (BoostVSet_Values)val;
-    return result;
+    char data;
+    data = (clkDivEn << 7) | (clkDivSet);
+    result = writeReg(REG_BOOST_CDIV, data);
+    if (result == MAX14720_ERROR) return result;
+    data = (boostISet);
+    result = writeReg(REG_BOOST_ISET, data);
+    if (result == MAX14720_ERROR) return result;
+    if ((MAX14720_BOOST_MIN_MV <= boostMillivolts)&&(boostMillivolts <= MAX14720_BOOST_MAX_MV)) {
+        data = (boostMillivolts - MAX14720_BOOST_MIN_MV) / MAX14720_BOOST_STEP_MV;
+    } else {
+        return MAX14720_ERROR;
+    }
+    result = writeReg(REG_BOOST_VSET, data);
+    if (result == MAX14720_ERROR) return result;
+    data = (buckMd << 1) | (buckFst);
+    result = writeReg(REG_BUCK_CFG, data);
+    if (result == MAX14720_ERROR) return result;
+    data = (boostHysOff << 7) | (boostPasDsc << 6) | (boostActDsc << 5) | (buckPasDsc << 2) | (buckActDsc << 1) | (buckFScl);
+    result = writeReg(REG_BBB_EXTRA, data);
+    if (result == MAX14720_ERROR) return result;
+    // Write Boost Enable Register Last
+    data = (boostEn << 3) | (boostEMI << 1) | (boostInd);
+    result = writeReg(REG_BOOST_CFG, data);
+    if (result == MAX14720_ERROR) return result;
+    return 0;
 }
 
 //******************************************************************************
-int MAX14720::readBoostISet(BoostISet_Values *value) {
+int MAX14720::monSet(monCfg_t monCfg)
+{
     int result;
-    char val;
-    
-    result = readReg(BOOST_V_SET,&val);
-    *value = (BoostISet_Values)val;
-    return result;
+    result = writeReg(REG_MON_CFG, monCfg);
+    if (result == MAX14720_ERROR) return result;
+    return 0;
 }
 
 //******************************************************************************
-int MAX14720::boostISet(BoostISet_Values value) {
+int MAX14720::shutdown()
+{
     int result;
-    max14720_BoostISet val;
-
- 	// read modify write boostVSet to desired state
- 	result = readReg(BOOST_I_SET, &val.all);
- 	val.bit.BoostISet = (char)value;
-    result = writeReg(BOOST_I_SET, val.all);
+    result = writeReg(REG_PWR_OFF, 0xB2);
     if (result == MAX14720_ERROR) return result;
-	return 0;
+    return 0;
 }
 
+
 //******************************************************************************
-int MAX14720::writeReg(MAX14720_REG_map_t reg,  char value)
+int MAX14720::writeReg(registers_t reg,  char value)
 {
     int result;
     char cmdData[2] = { (char)reg, value };
@@ -125,11 +195,11 @@
 }
 
 //******************************************************************************
-int MAX14720::readReg(MAX14720_REG_map_t reg, char *value)
+int MAX14720::readReg(registers_t reg, char *value)
 {
     int result;
     char cmdData[1] = { (char)reg };
-    
+
     result = i2c->write(slaveAddress, cmdData, 1);
     if (result != 0) return MAX14720_ERROR;
     result = i2c->read(slaveAddress, value, 1);
--- a/MAX14720.h	Wed Sep 28 19:52:29 2016 +0000
+++ b/MAX14720.h	Tue Oct 04 22:26:50 2016 +0000
@@ -31,8 +31,8 @@
  *******************************************************************************
  */
 
-#ifndef PMIC_H_
-#define PMIC_H_
+#ifndef _MAX14720_H_
+#define _MAX14720_H_
 
 #include "mbed.h"
 
@@ -71,334 +71,103 @@
 #define MAX14720_NO_ERROR   0
 #define MAX14720_ERROR      -1
 
+#define MAX14720_BOOST_MIN_MV 2500
+#define MAX14720_BOOST_MAX_MV 5000
+#define MAX14720_BOOST_STEP_MV 100
+
 class MAX14720
 {
 public:
     typedef enum {  // I2C Register Addresses
-        CHIP_ID = 0x00,
-        CHIP_REV = 0x01,
-        BOOST_C_DIV = 0x03,
-        BOOST_I_SET = 0x04,
-        BOOST_V_SET = 0x05,
-        BOOST_CFG = 0x06,
-        BUCK_V_SET = 0x07,
-        BUCK_CFG = 0x08,
-        BUCK_I_SET = 0x09,
-        LDOV_SET = 0x0A,
-        LDO_CFG = 0x0B,
-        SWITCH_CFG = 0x0C,
-        BAT_TIME = 0x0D,
-        BAT_CFG = 0x0E,
-        BAT_BCV = 0x0F,
-        BAT_OCV = 0x10,
-        BAT_LCV = 0x11,
-        MON_CFG = 0X19,
-        BOOT_CFG = 0x1A,
-        PIN_STAT = 0x1B,
-        BBB_EXTRA = 0x1C,
-        HAND_SHK = 0x1D,
-        UVLO_CFG = 0x1E,
-        PWR_OFF = 0x1F,
-        OTP_MAP_0 = 0x20,
-        OTP_MAP_1 = 0x21,
-        OTP_MAP_2 = 0x22,
-        OTP_MAP_3 = 0x23,
-        OTP_MAP_4 = 0x24,
-        OTP_MAP_5 = 0x25,
-        OTP_MAP_6 = 0x26,
-        OTP_MAP_7 = 0x27,
-        OTP_MAP_8 = 0x28,
-        OTP_MAP_9 = 0x29,
-        OTP_MAP_A = 0x2A,
-        OTP_MAP_b = 0x2B,
-    } MAX14720_REG_map_t;
-
-	/// @brief ChipId Register (0x00)
-	typedef union ChipId_ {
-	  char all;
-	} max14720_ChipId;
-
-	/// @brief ChipRev Register (0x01)
-	typedef union ChipRev_ {
-	  char all;
-	} max14720_ChipRev;
-
-	/// @brief BoostCDiv Register (0x03)
-	typedef union BoostCDiv_ {
-	  char all;
-	  struct {
-		char ClkDivSet : 7;
-		char ClkDivEn : 1;
-	  } bit;
-	} max14720_BoostCDiv;
-
-	/// @brief BoostISet Register (0x04)
-	typedef union BoostISet_ {
-	  char all;
-	  struct {
-		char BoostISet : 3;
-	  } bit;
-	} max14720_BoostISet;
-
-	/// @brief BoostVSet Register (0x05)
-	typedef union BoostVSet_ {
-	  char all;
-	  struct {
-		char BoostVSet : 5;
-	  } bit;
-	} max14720_BoostVSet;
-
-	/// @brief BoostCfg Register (0x06)
-	typedef union BoostCfg_ {
-	  char all;
-	  struct {
-		char BoostInd : 1;
-		char BoostEMI : 1;
-		char reserved : 1;
-		char BoostEn : 2;
-		char BoostSeq : 3;
-	  } bit;
-	} max14720_BoostCfg;
-
-	/// @brief BuckVSet Register (0x07)
-	typedef union BuckVSet_ {
-	  char all;
-	  struct {
-		char BuckVSet : 6;
-	  } bit;
-	} max14720_BuckVSet;
-
-	/// @brief BuckCfg Register (0x08)
-	typedef union BuckCfg_ {
-	  char all;
-	  struct {
-		char BuckFst : 1;
-		char BuckMd : 2;
-		char BoostEn : 2;
-		char BuckSeq : 3;
-	  } bit;
-	} max14720_BuckCfg;
-
-	/// @brief BuckISet Register (0x09)
-	typedef union BuckISet_ {
-	  char all;
-	  struct {
-		char BuckInteg : 1;
-		char BuckMinOT : 1;
-		char BuckHysOff : 1;
-		char BuckInd : 1;
-		char BuckCfg : 1;
-		char BuckISet : 3;
-	  } bit;
-	} max14720_BuckISet;
-
-	/// @brief LDOVSet Register (0x0A)
-	typedef union LDOVSet_ {
-	  char all;
-	  struct {
-		char LDOVSet : 5;
-	  } bit;
-	} max14720_LDOVSet;
-
-	/// @brief LDOCfg Register (0x0B)
-	typedef union LDOCfg_ {
-	  char all;
-	  struct {
-		char LDOMode : 1;
-		char LDOEn : 2;
-		char LDO_ActDSC : 1;
-		char LDO_PasDSC : 1;
-		char LDOSeq : 3;
-	  } bit;
-	} max14720_LDOCfg;
+        REG_CHIP_ID = 0x00,
+        REG_CHIP_REV = 0x01,
+        REG_BOOST_CDIV = 0x03,
+        REG_BOOST_ISET = 0x04,
+        REG_BOOST_VSET = 0x05,
+        REG_BOOST_CFG = 0x06,
+        REG_BUCK_VSET = 0x07,
+        REG_BUCK_CFG = 0x08,
+        REG_BUCK_ISET = 0x09,
+        REG_LDO_VSET = 0x0A,
+        REG_LDO_CFG = 0x0B,
+        REG_SWITCH_CFG = 0x0C,
+        REG_BAT_TIME = 0x0D,
+        REG_BAT_CFG = 0x0E,
+        REG_BAT_BCV = 0x0F,
+        REG_BAT_OCV = 0x10,
+        REG_BAT_LCV = 0x11,
+        REG_MON_CFG = 0x19,
+        REG_BOOT_CFG = 0x1A,
+        REG_PIN_STAT = 0x1B,
+        REG_BBB_EXTRA = 0x1C,
+        REG_HANDSHK = 0x1D,
+        REG_UVLO_CFG = 0x1E,
+        REG_PWR_OFF = 0x1F,
+        REG_OTP_MAP_0 = 0x20,
+        REG_OTP_MAP_1 = 0x21,
+        REG_OTP_MAP_2 = 0x22,
+        REG_OTP_MAP_3 = 0x23,
+        REG_OTP_MAP_4 = 0x24,
+        REG_OTP_MAP_5 = 0x25,
+        REG_OTP_MAP_6 = 0x26,
+        REG_OTP_MAP_7 = 0x27,
+        REG_OTP_MAP_8 = 0x28,
+        REG_OTP_MAP_9 = 0x29,
+        REG_OTP_MAP_A = 0x2A,
+        REG_OTP_MAP_B = 0x2B,
+    } registers_t;
 
-	/// @brief SwitchCfg Register (0x0C)
-	typedef union SwitchCfg_ {
-	  char all;
-	  struct {
-		char SWSoftStart : 1;
-		char SWEn : 2;
-		char reserved : 2;
-		char SWSeq : 3;
-	  } bit;
-	} max14720_SwitchCfg;
-
-	/// @brief BatTime Register (0x0D)
-	typedef union BatTime_ {
-	  char all;
-	  struct {
-		char LCVTm : 2;
-		char OCVTm : 2;
-		char BCVTm : 2;
-	  } bit;
-	} max14720_BatTime;
-
-	/// @brief BatCfg Register (0x0E)
-	typedef union BatCfg_ {
-	  char all;
-	  struct {
-		char BatImpCur : 3;
-		char LcvDly2Skip : 1;
-		char reserved : 2;
-		char BIMAbort : 1;
-		char BIA : 1;
-	  } bit;
-	} max14720_BatCfg;
-
-	/// @brief BatV Register (0x0F)
-	typedef union BatBCV_ {
-	  char all;
-	} max14720_BatBCV;
-
-	/// @brief BatOCV Register (0x10)
-	typedef union BatOCV_ {
-	  char all;
-	} max14720_BatOCV;
-
-	/// @brief BatLCV Register (0x11)
-	typedef union BatLCV_ {
-	  char all;
-	} max14720_BatLCV;
-
-	/// @brief MONCfg Register (0x19)
-	typedef union MONCfg_ {
-	  char all;
-	  struct {
-		char MONCtr : 3;
-		char MONHiZ : 1;
-		char reserved : 3;
-		char MONEn : 1;
-	  } bit;
-	} max14720_MONCfg;
-
-	/// @brief BootCfg Register (0x1A)
-	typedef union BootCfg_ {
-	  char all;
-	  struct {
-		char BootDly : 2;
-		char PFNPUDCfg : 1;
-		char SftRstCfg : 1;
-		char PwrRstCfg : 4;
-	  } bit;
-	} max14720_BootCfg;
-
-	/// @brief PinStat Register (0x1B)
-	typedef union PinStat_ {
-	  char all;
-	  struct {
-		char RST_LEN : 1;
-		char MPC_BEN : 1;
-		char KOUT_HVEN : 1;
-		char KIN_SWEN : 1;
-	  } bit;
-	} max14720_PinStat;
-
-	/// @brief BBBExtra Register (0x1C)
-	typedef union BBBExtra_ {
-	  char all;
-	  struct {
-		char BuckFScl : 1;
-		char BuckActDsc : 1;
-		char BuckPasDsc : 1;
-		char reserved : 2;
-		char Boost_ActDsc : 1;
-		char BoostPasDsc : 1;
-		char Boost_HysOff : 1;
-	  } bit;
-	} max14720_BBBExtra;
-
-	/// @brief HandShk Register (0x1D)
-	typedef union HandShk_ {
-	  char all;
-	  struct {
-		char StayOn : 1;
-		char reserved : 5;
-		char GlbPasDsc : 1;
-		char StartOff : 1;
-	  } bit;
-	} max14720_HandShk;
-
-	/// @brief UVLOCfg Register (0x1E)
-	typedef union UVLOCfg_ {
-	  char all;
-	  struct {
-		char LDO_UVLOsel : 1;
-		char BBBUVLOsel : 1;
-	  } bit;
-	} max14720_UVLOCfg;
-
-	/// @brief PWRCFG Register (0x1F)
-	typedef union PWROFF_ {
-	  char all;
-	} max14720_PWROFF;
-
-	/// All of the possible BoostVSet values
 	typedef enum  {
-		BoostVSet_25,
-		BoostVSet_26,
-		BoostVSet_27,
-		BoostVSet_28,
-		BoostVSet_29,
-		BoostVSet_30,
-		BoostVSet_31,
-		BoostVSet_32,
-		BoostVSet_33,
-		BoostVSet_34,
-		BoostVSet_35,
-		BoostVSet_36,
-		BoostVSet_37,
-		BoostVSet_38,
-		BoostVSet_39,
-		BoostVSet_40,
-		BoostVSet_41,
-		BoostVSet_42,
-		BoostVSet_43,
-		BoostVSet_44,
-		BoostVSet_45,
-		BoostVSet_46,
-		BoostVSet_47,
-		BoostVSet_48,
-		BoostVSet_49,
-		BoostVSet_50,
-	} BoostVSet_Values;
+		BOOST_ISET_MIN,
+		BOOST_ISET_50mA,
+		BOOST_ISET_100mA,
+		BOOST_ISET_150mA,
+		BOOST_ISET_200mA,
+		BOOST_ISET_250mA,
+		BOOST_ISET_300mA,
+		BOOST_ISET_350mA,
+	} boostISet_t;
 
 	typedef enum {
-		BoostEn_Disable,
-		BoostEn_Enable,
-		BoostEn_Enable_MPC_High,
-	} BoostEn_Values;
-
-	typedef enum  {
-		BoostISet_0,
-		BoostISet_50mA,
-		BoostISet_100mA,
-		BoostISet_150mA,
-		BoostISet_200mA,
-		BoostISet_250mA,
-		BoostISet_300mA,
-		BoostISet_350mA,
-	} BoostISet_Values;
+		BOOST_DISABLED,
+		BOOST_ENABLED,
+		BOOST_EN_MPC,
+	} boostEn_t;
+	
+	typedef enum {
+		BUCK_BURST,
+		BUCK_FPWM,
+		BUCK_MPC_FPWM,
+	} buckMd_t;
 
 	typedef enum  {
-		BoostSeq_Disabled,		
-		BoostSeq_Reserved,
-		BoostSeq_Enabled_0,
-		BoostSeq_Enabled_25,
-		BoostSeq_Enabled_50,
-		BoostSeq_Reserved2,
-		BoostSeq_Controlled_HVEN,
-		BoostSeq_Controlled_BoostEn,
-	} BoostSeq_Values;
+		BUCK_ISET_50mA,
+		BUCK_ISET_100mA,
+		BUCK_ISET_150mA,
+		BUCK_ISET_200mA,
+		BUCK_ISET_250mA,
+		BUCK_ISET_300mA,
+		BUCK_ISET_350mA,
+		BUCK_ISET_400mA,
+	} buckISet_t;
 
 	typedef enum {
-		BoostEMI_Active,
-		BoostEMI_Disabled,
-	} BoostEMI_Values;
+        MON_PULLDOWN = 0x00,		
+        MON_HI_Z = 0x08,
+        MON_SWIN = 0x80,
+        MON_SWOUT = 0x81,
+        MON_BIN = 0x82,
+        MON_BOUT = 0x83,
+        MON_HVIN = 0x84,
+        MON_HVOUT = 0x85,
+        MON_LIN = 0x86,
+        MON_LOUT = 0x87,        		
+	} monCfg_t;
 
 	typedef enum {
-		BoostInd_3_3,
-		BoostInd_4_7,
-	} BoostInd_Values;
+		LIN_UVLO,
+		BIN_UVLO,			
+	} uvloIn_t;
 
 	/**
 		* MAX14720 constructor.
@@ -423,34 +192,46 @@
 	~MAX14720();
 
 	/** 
-	* Enable or disable Boost
+	* Initialize MAX14720
 	*/
-	int boostEn(BoostEn_Values value);
+	int init();
 	/**
 	* Set the Boost Output Voltage from 2.5V to 5V with 100mV increments
 	*/
-	int boostVSet(BoostVSet_Values value);
-	/**
-	* Read the Boost Output Voltage
+	int boostSetVoltage(int mV);
+	/** 
+	* Enable or disable Boost
 	*/
-	int readBoostVSet(BoostVSet_Values *value);
-	/**
-	* Set the Buck-Boost Peak Current-Limit
+	int boostSetMode(boostEn_t mode);
+	/** 
+	* Configure Monitor Multiplexer
 	*/
-	int boostISet(BoostISet_Values value);
-	/**
-	* Read the Buck-Boost Peak Current-Limit
+	int monSet(monCfg_t monCfg);
+	/** 
+	* Turn off all supplies and go to shelf mode
 	*/
-	int readBoostISet(BoostISet_Values *value);
+	int shutdown();
 
 	/**
 	* Write a device register
 	*/
-	int writeReg(MAX14720_REG_map_t reg, char value);
+	int writeReg(registers_t reg, char value);
 	/**
 	* Read a device register
 	*/
-	int readReg(MAX14720_REG_map_t reg, char *value);
+	int readReg(registers_t reg, char *value);
+
+	bool clkDivEn;
+	int clkDivSet;
+	boostISet_t boostISet;
+	int boostMillivolts;
+	boostEn_t boostEn;
+	bool boostEMI, boostInd, boostHysOff, boostPasDsc, boostActDsc;
+	buckMd_t buckMd;
+	bool buckFst;
+	buckISet_t buckISet;
+	bool buckCfg, buckInd, buckHysOff, buckMinOT, buckInteg, buckPasDsc, buckActDsc, buckFScl;
+
 private:
 	/// I2C pointer
 	I2C *i2c;