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
Diff: MAX11410.cpp
- 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; }