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

Committer:
laserdad
Date:
2018-01-03
Revision:
1:266f681fea17
Parent:
0:b90ccc530cb1
Child:
2:4784f0a3b76d

File content as of revision 1:266f681fea17:

#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()
{93+
    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);
}