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

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers MAX11410.cpp Source File

MAX11410.cpp

00001 #include "MAX11410.h"
00002 #include "mbed.h"
00003 
00004 extern Serial pc;
00005 
00006 //write functions
00007 MAX11410::MAX11410(SPI *spi_itf, DigitalOut *cs_pin)
00008 {
00009     spi = spi_itf;
00010     cs = cs_pin;
00011     *cs = 1;        // Assert CS high
00012     wait_us(5);
00013     //POR, wake it up, turn on buffer, etc.
00014 };
00015 
00016 
00017 void MAX11410::reset()
00018 {
00019     write8bitReg(REG_PD, MODE_RESET);    
00020 }
00021 
00022 
00023 bool MAX11410::interrupt()
00024 {
00025 
00026     *cs = 0;
00027     bool result = spi->write(_READ(0));
00028     *cs =1;
00029     return !result; //low = interrupt
00030 }
00031 
00032 
00033 void MAX11410::write8bitReg(char regAddr, char bits2write)
00034 {
00035 
00036     *cs = 0;
00037     spi->write( _WRITE(regAddr) );
00038     spi->write( bits2write );
00039     *cs = 1;
00040 }
00041 
00042 
00043 void MAX11410::write24bitReg(char regAddr, uint32_t bits2write)
00044 {
00045 
00046     char write_buffer[8];
00047     write_buffer[0] = _WRITE(regAddr) ;
00048     write_buffer[1] = (bits2write & 0x00FF0000) >> 16;
00049     write_buffer[2] = (bits2write & 0x00FF0000) >> 8;
00050     write_buffer[3] = (bits2write & 0x000000FF);
00051     *cs = 0;
00052     for (int n=0;n<4;n++)
00053     {
00054         spi->write(write_buffer[n]);
00055     }
00056     *cs = 1;
00057 }
00058 
00059 char MAX11410::read8bits(char regAddr, bool *int_status)
00060 {
00061     //the interrupt status (INTB) is the MISO value during the register write, 0 = interrupt is assert
00062     *cs=0;
00063     *int_status = spi->write(_READ(regAddr));
00064     char data = spi->write(0x00);
00065     *cs=1;
00066     return data;
00067 }
00068 
00069 
00070 uint32_t MAX11410::read24bits(char regAddr, bool *int_status)
00071 {
00072     //the interrupt status is the MISO value during the register write
00073     char read_buffer[3];
00074     *cs = 0;
00075     *int_status = spi->write(_READ(regAddr));
00076     for (int n=0;n<3;n++)
00077     {
00078         read_buffer[n]=spi->write(0x00);
00079     }
00080     *cs = 1;
00081     return (read_buffer[0]<<16) | (read_buffer[1] <<8) | read_buffer[2];
00082 }
00083 
00084 int32_t MAX11410::read24bitsSigned(char regAddr, bool *int_status)
00085 {
00086     //the interrupt status is the MISO value during the register write
00087     char read_buffer[3];
00088     *cs = 0;
00089     *int_status = spi->write(_READ(regAddr));
00090     for (int n=0;n<3;n++)
00091     {
00092         read_buffer[n]=spi->write(0x00);
00093     }
00094     *cs = 1;
00095     int32_t signal = (read_buffer[0]<<16) | (read_buffer[1] <<8) | read_buffer[2];
00096     
00097     if( signal & 0x00800000 ) //is the MSB set-->then negative
00098     {
00099         signal |= 0xFF000000; //fill in the other MSBs
00100     }
00101     return signal;
00102 }
00103 
00104 
00105 void MAX11410::calOffset()
00106 {
00107     
00108 }
00109 
00110 
00111 void MAX11410::calGain()
00112 {
00113     
00114 }
00115 
00116 
00117 uint32_t MAX11410::readStatus(bool *int_status)
00118 {
00119     return read24bits(REG_STATUS,int_status);
00120 }