This version has been verified for basic register R/W. No calibration has been added yet. See example main code at https://os.mbed.com/users/laserdad/code/MAX11410_testing/

Dependents:   MAX11410_testing MAX11410_test MAX11410-test

Revision:
0:b90ccc530cb1
Child:
1:266f681fea17
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MAX11410.cpp	Wed Jan 03 20:24:06 2018 +0000
@@ -0,0 +1,92 @@
+#include "MAX11410.h"
+#include "mbed.h"
+
+extern Serial pc;
+
+//write functions
+MAX11410::MAX11410(SPI *spi_itf, DigitalOut *cs_pin)
+{
+    spi = spi_itf;
+    cs = cs_pin;
+    *cs = 1;        // Assert CS high
+    wait_us(5);
+    //POR, wake it up, turn on buffer, etc.
+};
+
+void MAX11410::reset()
+{
+    write8bitReg(REG_PD, MODE_RESET);    
+}
+
+bool MAX11410::interrupt()
+{
+    spi->format(8,0);
+    *cs = 0;
+    bool result = spi->write(_READ(0));
+    *cs =1;
+    return !result; //low = interrupt
+}
+
+
+void MAX11410::write8bitReg(char regAddr, char bits2write)
+{
+    spi->format(8,0);
+    *cs = 0;
+    spi->write( _WRITE(regAddr) );
+    spi->write( bits2write );
+    *cs = 1;
+}
+
+
+void MAX11410::write24bitReg(char regAddr, uint32_t bits2write)
+{
+    spi->format(16,0);
+    uint16_t write_buffer[2];
+    write_buffer[0] = (_WRITE(regAddr) << 8) | (bits2write>>16);
+    write_buffer[1] = (uint16_t) bits2write;
+    *cs = 0;
+    spi->write(write_buffer[0]);
+    spi->write(write_buffer[1]);
+    *cs = 1;
+}
+
+
+char MAX11410::read8bits(char regAddr, bool *int_status)
+{
+    //the interrupt status (INTB) is the MISO value during the register write, 0 = interrupt is assert
+    spi->format(8,0);
+    *int_status = spi->write(_READ(regAddr));
+    return spi->write(0x00);
+}
+
+
+uint32_t MAX11410::read24bits(char regAddr, bool *int_status)
+{
+    //the interrupt status is the MISO value during the register write
+    uint16_t read_buffer[2];
+    spi->format(16,0);
+    *cs = 0;
+    read_buffer[0] = spi->write( (uint16_t) (_READ(regAddr)<<8) );
+    read_buffer[1] = spi->write( 0x0000);
+    *cs = 1;
+    *int_status = (bool) read_buffer[0]>>8;
+    return (read_buffer[0]<<16) | read_buffer[1];
+}
+
+
+void MAX11410::calOffset()
+{
+    
+}
+
+
+void MAX11410::calGain()
+{
+    
+}
+
+
+uint32_t MAX11410::readStatus(bool *int_status)
+{
+    return read24bits(REG_STATUS,int_status);
+}