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@1:266f681fea17, 2018-01-03 (annotated)
- 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?
User | Revision | Line number | New 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 | } |