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

Committer:
laserdad
Date:
Wed Jan 03 20:58:03 2018 +0000
Revision:
1:266f681fea17
Parent:
0:b90ccc530cb1
Child:
2:4784f0a3b76d
update;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
laserdad 0:b90ccc530cb1 1 #include "MAX11410.h"
laserdad 0:b90ccc530cb1 2 #include "mbed.h"
laserdad 0:b90ccc530cb1 3
laserdad 0:b90ccc530cb1 4 extern Serial pc;
laserdad 0:b90ccc530cb1 5
laserdad 0:b90ccc530cb1 6 //write functions
laserdad 0:b90ccc530cb1 7 MAX11410::MAX11410(SPI *spi_itf, DigitalOut *cs_pin)
laserdad 0:b90ccc530cb1 8 {
laserdad 0:b90ccc530cb1 9 spi = spi_itf;
laserdad 0:b90ccc530cb1 10 cs = cs_pin;
laserdad 0:b90ccc530cb1 11 *cs = 1; // Assert CS high
laserdad 0:b90ccc530cb1 12 wait_us(5);
laserdad 0:b90ccc530cb1 13 //POR, wake it up, turn on buffer, etc.
laserdad 0:b90ccc530cb1 14 };
laserdad 0:b90ccc530cb1 15
laserdad 0:b90ccc530cb1 16 void MAX11410::reset()
laserdad 1:266f681fea17 17 {93+
laserdad 0:b90ccc530cb1 18 write8bitReg(REG_PD, MODE_RESET);
laserdad 0:b90ccc530cb1 19 }
laserdad 0:b90ccc530cb1 20
laserdad 0:b90ccc530cb1 21 bool MAX11410::interrupt()
laserdad 0:b90ccc530cb1 22 {
laserdad 0:b90ccc530cb1 23 spi->format(8,0);
laserdad 0:b90ccc530cb1 24 *cs = 0;
laserdad 0:b90ccc530cb1 25 bool result = spi->write(_READ(0));
laserdad 0:b90ccc530cb1 26 *cs =1;
laserdad 0:b90ccc530cb1 27 return !result; //low = interrupt
laserdad 0:b90ccc530cb1 28 }
laserdad 0:b90ccc530cb1 29
laserdad 0:b90ccc530cb1 30
laserdad 0:b90ccc530cb1 31 void MAX11410::write8bitReg(char regAddr, char bits2write)
laserdad 0:b90ccc530cb1 32 {
laserdad 0:b90ccc530cb1 33 spi->format(8,0);
laserdad 0:b90ccc530cb1 34 *cs = 0;
laserdad 0:b90ccc530cb1 35 spi->write( _WRITE(regAddr) );
laserdad 0:b90ccc530cb1 36 spi->write( bits2write );
laserdad 0:b90ccc530cb1 37 *cs = 1;
laserdad 0:b90ccc530cb1 38 }
laserdad 0:b90ccc530cb1 39
laserdad 0:b90ccc530cb1 40
laserdad 0:b90ccc530cb1 41 void MAX11410::write24bitReg(char regAddr, uint32_t bits2write)
laserdad 0:b90ccc530cb1 42 {
laserdad 0:b90ccc530cb1 43 spi->format(16,0);
laserdad 0:b90ccc530cb1 44 uint16_t write_buffer[2];
laserdad 0:b90ccc530cb1 45 write_buffer[0] = (_WRITE(regAddr) << 8) | (bits2write>>16);
laserdad 0:b90ccc530cb1 46 write_buffer[1] = (uint16_t) bits2write;
laserdad 0:b90ccc530cb1 47 *cs = 0;
laserdad 0:b90ccc530cb1 48 spi->write(write_buffer[0]);
laserdad 0:b90ccc530cb1 49 spi->write(write_buffer[1]);
laserdad 0:b90ccc530cb1 50 *cs = 1;
laserdad 0:b90ccc530cb1 51 }
laserdad 0:b90ccc530cb1 52
laserdad 0:b90ccc530cb1 53
laserdad 0:b90ccc530cb1 54 char MAX11410::read8bits(char regAddr, bool *int_status)
laserdad 0:b90ccc530cb1 55 {
laserdad 0:b90ccc530cb1 56 //the interrupt status (INTB) is the MISO value during the register write, 0 = interrupt is assert
laserdad 0:b90ccc530cb1 57 spi->format(8,0);
laserdad 0:b90ccc530cb1 58 *int_status = spi->write(_READ(regAddr));
laserdad 0:b90ccc530cb1 59 return spi->write(0x00);
laserdad 0:b90ccc530cb1 60 }
laserdad 0:b90ccc530cb1 61
laserdad 0:b90ccc530cb1 62
laserdad 0:b90ccc530cb1 63 uint32_t MAX11410::read24bits(char regAddr, bool *int_status)
laserdad 0:b90ccc530cb1 64 {
laserdad 0:b90ccc530cb1 65 //the interrupt status is the MISO value during the register write
laserdad 0:b90ccc530cb1 66 uint16_t read_buffer[2];
laserdad 0:b90ccc530cb1 67 spi->format(16,0);
laserdad 0:b90ccc530cb1 68 *cs = 0;
laserdad 0:b90ccc530cb1 69 read_buffer[0] = spi->write( (uint16_t) (_READ(regAddr)<<8) );
laserdad 0:b90ccc530cb1 70 read_buffer[1] = spi->write( 0x0000);
laserdad 0:b90ccc530cb1 71 *cs = 1;
laserdad 0:b90ccc530cb1 72 *int_status = (bool) read_buffer[0]>>8;
laserdad 0:b90ccc530cb1 73 return (read_buffer[0]<<16) | read_buffer[1];
laserdad 0:b90ccc530cb1 74 }
laserdad 0:b90ccc530cb1 75
laserdad 0:b90ccc530cb1 76
laserdad 0:b90ccc530cb1 77 void MAX11410::calOffset()
laserdad 0:b90ccc530cb1 78 {
laserdad 0:b90ccc530cb1 79
laserdad 0:b90ccc530cb1 80 }
laserdad 0:b90ccc530cb1 81
laserdad 0:b90ccc530cb1 82
laserdad 0:b90ccc530cb1 83 void MAX11410::calGain()
laserdad 0:b90ccc530cb1 84 {
laserdad 0:b90ccc530cb1 85
laserdad 0:b90ccc530cb1 86 }
laserdad 0:b90ccc530cb1 87
laserdad 0:b90ccc530cb1 88
laserdad 0:b90ccc530cb1 89 uint32_t MAX11410::readStatus(bool *int_status)
laserdad 0:b90ccc530cb1 90 {
laserdad 0:b90ccc530cb1 91 return read24bits(REG_STATUS,int_status);
laserdad 0:b90ccc530cb1 92 }