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:
2:4784f0a3b76d
Parent:
1:266f681fea17
Child:
3:5864c56ac8c5
--- a/MAX11410.cpp	Wed Jan 03 20:58:03 2018 +0000
+++ b/MAX11410.cpp	Fri Jan 05 22:36:05 2018 +0000
@@ -14,13 +14,13 @@
 };
 
 void MAX11410::reset()
-{93+
+{
     write8bitReg(REG_PD, MODE_RESET);    
 }
 
 bool MAX11410::interrupt()
 {
-    spi->format(8,0);
+
     *cs = 0;
     bool result = spi->write(_READ(0));
     *cs =1;
@@ -30,7 +30,7 @@
 
 void MAX11410::write8bitReg(char regAddr, char bits2write)
 {
-    spi->format(8,0);
+
     *cs = 0;
     spi->write( _WRITE(regAddr) );
     spi->write( bits2write );
@@ -40,37 +40,63 @@
 
 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;
+
+    char write_buffer[8];
+    write_buffer[0] = _WRITE(regAddr) ;
+    write_buffer[1] = (bits2write & 0x00FF0000) >> 16;
+    write_buffer[2] = (bits2write & 0x00FF0000) >> 8;
+    write_buffer[3] = (bits2write & 0x000000FF);
     *cs = 0;
-    spi->write(write_buffer[0]);
-    spi->write(write_buffer[1]);
+    for (int n=0;n<4;n++)
+    {
+        spi->write(write_buffer[n]);
+    }
     *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);
+    *cs=0;
     *int_status = spi->write(_READ(regAddr));
-    return spi->write(0x00);
+    char data = spi->write(0x00);
+    *cs=1;
+    return data;
 }
 
 
 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);
+    char read_buffer[3];
     *cs = 0;
-    read_buffer[0] = spi->write( (uint16_t) (_READ(regAddr)<<8) );
-    read_buffer[1] = spi->write( 0x0000);
+    *int_status = spi->write(_READ(regAddr));
+    for (int n=0;n<3;n++)
+    {
+        read_buffer[n]=spi->write(0x00);
+    }
     *cs = 1;
-    *int_status = (bool) read_buffer[0]>>8;
-    return (read_buffer[0]<<16) | read_buffer[1];
+    return (read_buffer[0]<<16) | (read_buffer[1] <<8) | read_buffer[2];
+}
+
+int32_t MAX11410::read24bitsSigned(char regAddr, bool *int_status)
+{
+    //the interrupt status is the MISO value during the register write
+    char read_buffer[3];
+    *cs = 0;
+    *int_status = spi->write(_READ(regAddr));
+    for (int n=0;n<3;n++)
+    {
+        read_buffer[n]=spi->write(0x00);
+    }
+    *cs = 1;
+    int32_t signal = (read_buffer[0]<<16) | (read_buffer[1] <<8) | read_buffer[2];
+    
+    if( signal & 0x00800000 ) //is the MSB set-->then negative
+    {
+        signal |= 0xFF000000; //fill in the other MSBs
+    }
+    return signal;
 }