Fork of MAX32630FTHR utilities library

Dependencies:   MAX14690

Dependents:   MAX32630FTHR_BALANCE_BOT MAX32630FTHR_iButton_uSD_Logger MAX32630FTHR_DS18B20_uSD_Logger MAX32630FTHR_BALANCE_BOT

Fork of max32630fthr by Greg Steiert

Revision:
6:92b485e70885
Parent:
1:15e34492fbf1
Child:
8:69740ee6903a
diff -r 3f87baa11ee4 -r 92b485e70885 max32630fthr.cpp
--- a/max32630fthr.cpp	Thu Dec 08 00:36:05 2016 +0000
+++ b/max32630fthr.cpp	Thu Dec 08 03:33:50 2016 +0000
@@ -31,77 +31,84 @@
  *******************************************************************************
  */
 
+
 #include "mbed.h"
+#include "PinNames.h"
+#include "max32630fthr.h"
 #include "max3263x.h"
 #include "ioman_regs.h"
-#include "PinNames.h"
-#include "max32630fthr.h"
+#include "adc.h"
+#include "mxc_errors.h"
+
 
 //******************************************************************************
-MAX32630FTHR::MAX32630FTHR(vio_t vio) : i2c(P5_7, P6_0), max14690(&i2c)
-{
-    hdrVio = vio;
-}
-
-//******************************************************************************
-MAX32630FTHR::~MAX32630FTHR()
+MAX32630FTHR::MAX32630FTHR(IoVoltage vio) 
+: m_i2c(P5_7, P6_0), m_max14690(&m_i2c), m_hdrVio(vio)
 {
 }
 
+
 //******************************************************************************
-int MAX32630FTHR::init()
+int32_t MAX32630FTHR::init()
 {
+    int32_t rtnVal = -1;
+    
     // Override the default values
-    max14690.ldo2Millivolts = 3300;
-    max14690.ldo3Millivolts = 3300;
-    max14690.ldo2Mode = MAX14690::LDO_ENABLED;
-    max14690.ldo3Mode = MAX14690::LDO_ENABLED;
-    max14690.monCfg = MAX14690::MON_HI_Z;
+    m_max14690.ldo2Millivolts = 3300;
+    m_max14690.ldo3Millivolts = 3300;
+    m_max14690.ldo2Mode = MAX14690::LDO_ENABLED;
+    m_max14690.ldo3Mode = MAX14690::LDO_ENABLED;
+    m_max14690.monCfg = MAX14690::MON_HI_Z;
     // Note that writing the local value does directly affect the part
     // The buck-boost regulator will remain off until init is called
 
     // Call init to apply all settings to the PMIC
-    if (max14690.init() == MAX14690_ERROR) {
-        printf("Error initializing MAX14690");
+    if (m_max14690.init() != MAX14690_ERROR) 
+    {
+        // Set micro SD card pins to 3.3V
+        vddioh(P0_4, VIO_3V3);
+        vddioh(P0_5, VIO_3V3);
+        vddioh(P0_6, VIO_3V3);
+        vddioh(P0_7, VIO_3V3);
+        // Set LED pins to 3.3V
+        vddioh(P2_4, VIO_3V3);
+        vddioh(P2_5, VIO_3V3);
+        vddioh(P2_6, VIO_3V3);
+        // Set header pins to hdrVio
+        vddioh(P3_0, m_hdrVio);
+        vddioh(P3_1, m_hdrVio);
+        vddioh(P3_2, m_hdrVio);
+        vddioh(P3_3, m_hdrVio);
+        vddioh(P3_4, m_hdrVio);
+        vddioh(P3_5, m_hdrVio);
+        vddioh(P4_0, m_hdrVio);
+        vddioh(P4_1, m_hdrVio);
+        vddioh(P4_2, m_hdrVio);
+        vddioh(P4_3, m_hdrVio);
+        vddioh(P4_4, m_hdrVio);
+        vddioh(P4_5, m_hdrVio);
+        vddioh(P4_6, m_hdrVio);
+        vddioh(P4_7, m_hdrVio);
+        vddioh(P5_0, m_hdrVio);
+        vddioh(P5_1, m_hdrVio);
+        vddioh(P5_2, m_hdrVio);
+        vddioh(P5_3, m_hdrVio);
+        vddioh(P5_4, m_hdrVio);
+        vddioh(P5_5, m_hdrVio);
+        vddioh(P5_6, m_hdrVio);
+        
+        if(ADC_Init() == E_NO_ERROR)
+        {
+            rtnVal = 0;
+        }
     }
-
-    // Set micro SD card pins to 3.3V
-    vddioh(P0_4, VIO_3V3);
-    vddioh(P0_5, VIO_3V3);
-    vddioh(P0_6, VIO_3V3);
-    vddioh(P0_7, VIO_3V3);
-    // Set LED pins to 3.3V
-    vddioh(P2_4, VIO_3V3);
-    vddioh(P2_5, VIO_3V3);
-    vddioh(P2_6, VIO_3V3);
-    // Set header pins to hdrVio
-    vddioh(P3_0, hdrVio);
-    vddioh(P3_1, hdrVio);
-    vddioh(P3_2, hdrVio);
-    vddioh(P3_3, hdrVio);
-    vddioh(P3_4, hdrVio);
-    vddioh(P3_5, hdrVio);
-    vddioh(P4_0, hdrVio);
-    vddioh(P4_1, hdrVio);
-    vddioh(P4_2, hdrVio);
-    vddioh(P4_3, hdrVio);
-    vddioh(P4_4, hdrVio);
-    vddioh(P4_5, hdrVio);
-    vddioh(P4_6, hdrVio);
-    vddioh(P4_7, hdrVio);
-    vddioh(P5_0, hdrVio);
-    vddioh(P5_1, hdrVio);
-    vddioh(P5_2, hdrVio);
-    vddioh(P5_3, hdrVio);
-    vddioh(P5_4, hdrVio);
-    vddioh(P5_5, hdrVio);
-    vddioh(P5_6, hdrVio);
-
-    return 0;
+    
+    return rtnVal;
 }
 
+
 //******************************************************************************
-int MAX32630FTHR::vddioh(PinName pin, vio_t vio)
+int32_t MAX32630FTHR::vddioh(PinName pin, IoVoltage vio)
 {
     __IO uint32_t *use_vddioh = &((mxc_ioman_regs_t *)MXC_IOMAN)->use_vddioh_0;
 
@@ -118,3 +125,73 @@
 
     return 0;
 }
+
+
+//******************************************************************************
+int32_t MAX32630FTHR::getBatteryVoltage(float *battVolts)
+{
+    return readMonVoltage(MAX14690::MON_BAT, battVolts);
+}
+
+
+//******************************************************************************    
+int32_t MAX32630FTHR::getSysVoltage(float *sysVolts)
+{
+    return readMonVoltage(MAX14690::MON_SYS, sysVolts);
+}
+
+
+//******************************************************************************
+int32_t MAX32630FTHR::getBuck1Voltage(float *buckVolts)
+{
+    return readMonVoltage(MAX14690::MON_BUCK1, buckVolts);
+}
+
+
+//******************************************************************************
+int32_t MAX32630FTHR::getBuck2Voltage(float *buckVolts)
+{
+    return readMonVoltage(MAX14690::MON_BUCK2, buckVolts);
+}
+
+
+//******************************************************************************
+int32_t MAX32630FTHR::getLDO1Voltage(float *ldoVolts)
+{
+    return readMonVoltage(MAX14690::MON_LDO1, ldoVolts);
+}
+
+
+//******************************************************************************
+int32_t MAX32630FTHR::getLDO2Voltage(float *ldoVolts)
+{
+    return readMonVoltage(MAX14690::MON_LDO2, ldoVolts);
+}
+
+
+//******************************************************************************
+int32_t MAX32630FTHR::getLDO3Voltage(float *ldoVolts)
+{
+    return readMonVoltage(MAX14690::MON_LDO3, ldoVolts);
+}
+
+
+//******************************************************************************
+int32_t MAX32630FTHR::readMonVoltage(MAX14690::monCfg_t monCfg, float *volts)
+{
+    int32_t rtnVal = -1;
+    uint16_t data;
+    
+    if(m_max14690.monSet(monCfg, MAX14690::MON_DIV4) == 0)
+    {
+        wait_ms(1);
+        ADC_StartConvert(ADC_CH_0, 1, 0);
+        if(ADC_GetData(&data) == E_NO_ERROR)
+        {
+            *volts = ((((0x03FF & data) * 4.8F)/1023.0F));
+            rtnVal = m_max14690.monSet(MAX14690::MON_HI_Z, MAX14690::MON_DIV1);
+        }
+    } 
+    
+    return rtnVal;
+}