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:
- 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); +}