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
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 }
Generated on Thu Jul 14 2022 07:20:57 by 1.7.2