Library for MAX30101, read/write functions for registers implemented.
Dependents: test_MAX30101 testSensor
MAX30101.cpp@0:4ad9373787e8, 2015-12-29 (annotated)
- Committer:
- Rhyme
- Date:
- Tue Dec 29 06:25:58 2015 +0000
- Revision:
- 0:4ad9373787e8
- Child:
- 1:fc677d82d0f1
First commit, register definitions, read ID and Rev implemented
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Rhyme | 0:4ad9373787e8 | 1 | /** |
Rhyme | 0:4ad9373787e8 | 2 | * MAX30101 |
Rhyme | 0:4ad9373787e8 | 3 | * High-Sensitivity Pulse Oximeter and |
Rhyme | 0:4ad9373787e8 | 4 | * Heart-Rate Sensor for Wearable Health |
Rhyme | 0:4ad9373787e8 | 5 | */ |
Rhyme | 0:4ad9373787e8 | 6 | #include "mbed.h" |
Rhyme | 0:4ad9373787e8 | 7 | #include "MAX30101.h" |
Rhyme | 0:4ad9373787e8 | 8 | |
Rhyme | 0:4ad9373787e8 | 9 | /* Status */ |
Rhyme | 0:4ad9373787e8 | 10 | #define REG_INT_MSB 0x00 /* Interrupt Status 1 */ |
Rhyme | 0:4ad9373787e8 | 11 | #define REG_INT_LSB 0x01 /* Interrupt Status 2 */ |
Rhyme | 0:4ad9373787e8 | 12 | #define REG_INT_ENB_MSB 0x02 /* Interrupt Enable 1 */ |
Rhyme | 0:4ad9373787e8 | 13 | #define REG_INT_ENB_LSB 0x03 /* Interrupt Enable 2 */ |
Rhyme | 0:4ad9373787e8 | 14 | /* FIFO */ |
Rhyme | 0:4ad9373787e8 | 15 | #define REG_FIFO_WR_PTR 0x04 /* FIFO Write Pointer */ |
Rhyme | 0:4ad9373787e8 | 16 | #define REG_OVF_COUNTER 0x05 /* Overflow Counter */ |
Rhyme | 0:4ad9373787e8 | 17 | #define REG_FIFO_RD_PTR 0x06 /* FIFO Read Pointer */ |
Rhyme | 0:4ad9373787e8 | 18 | #define REG_FIFO_DATA 0x07 /* FIFO Data Register */ |
Rhyme | 0:4ad9373787e8 | 19 | /* Configuration */ |
Rhyme | 0:4ad9373787e8 | 20 | #define REG_FIFO_CONFIG 0x08 /* FIFO Configuration */ |
Rhyme | 0:4ad9373787e8 | 21 | #define REG_MODE_CONFIG 0x09 /* Mode Configuration */ |
Rhyme | 0:4ad9373787e8 | 22 | #define REG_SPO2_CONFIG 0x0A /* SpO2 Configuration */ |
Rhyme | 0:4ad9373787e8 | 23 | /* reserved 0x0B */ |
Rhyme | 0:4ad9373787e8 | 24 | #define REG_LED1_PA 0x0C /* LED Pulse Amplitude 1 */ |
Rhyme | 0:4ad9373787e8 | 25 | #define REG_LED2_PA 0x0D /* LED Pulse Amplitude 2 */ |
Rhyme | 0:4ad9373787e8 | 26 | #define REG_LED3_PA 0x0E /* LED Pulse Amplitude 3 */ |
Rhyme | 0:4ad9373787e8 | 27 | /* reserved 0x0F */ |
Rhyme | 0:4ad9373787e8 | 28 | #define REG_PILOT_PA 0x10 /* Proximity LED Pulse Amplitude */ |
Rhyme | 0:4ad9373787e8 | 29 | #define REG_SLOT_MSB 0x11 /* Multi-LED Mode Control Registers 2, 1 */ |
Rhyme | 0:4ad9373787e8 | 30 | #define REG_SLOT_LSB 0x12 /* Multi-LED Mode Control Registers 4, 3 */ |
Rhyme | 0:4ad9373787e8 | 31 | /* DIE Temperature */ |
Rhyme | 0:4ad9373787e8 | 32 | #define REG_TEMP_INT 0x1F /* Die Temperature Integer */ |
Rhyme | 0:4ad9373787e8 | 33 | #define REG_TEMP_FRAC 0x20 /* Die Temperature Fraction */ |
Rhyme | 0:4ad9373787e8 | 34 | #define REG_TEMP_EN 0x21 /* Die Temperature Config */ |
Rhyme | 0:4ad9373787e8 | 35 | /* Proximity Function */ |
Rhyme | 0:4ad9373787e8 | 36 | #define REG_PROX_INT_THS 0x30 /* Proximity Interrupt Threshold */ |
Rhyme | 0:4ad9373787e8 | 37 | /* Part ID */ |
Rhyme | 0:4ad9373787e8 | 38 | #define REG_REV_ID 0xFE /* Revision ID */ |
Rhyme | 0:4ad9373787e8 | 39 | #define REG_PART_ID 0xFF /* Part ID: 0x15 */ |
Rhyme | 0:4ad9373787e8 | 40 | |
Rhyme | 0:4ad9373787e8 | 41 | MAX30101::MAX30101(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr<<1) { |
Rhyme | 0:4ad9373787e8 | 42 | // activate the peripheral |
Rhyme | 0:4ad9373787e8 | 43 | } |
Rhyme | 0:4ad9373787e8 | 44 | |
Rhyme | 0:4ad9373787e8 | 45 | MAX30101::~MAX30101() { } |
Rhyme | 0:4ad9373787e8 | 46 | |
Rhyme | 0:4ad9373787e8 | 47 | void MAX30101::readRegs(int addr, uint8_t * data, int len) { |
Rhyme | 0:4ad9373787e8 | 48 | char t[1] = {addr} ; |
Rhyme | 0:4ad9373787e8 | 49 | m_i2c.write(m_addr, t, 1, true) ; |
Rhyme | 0:4ad9373787e8 | 50 | m_i2c.read(m_addr, (char*)data, len) ; |
Rhyme | 0:4ad9373787e8 | 51 | } |
Rhyme | 0:4ad9373787e8 | 52 | |
Rhyme | 0:4ad9373787e8 | 53 | void MAX30101::writeRegs(uint8_t * data, int len) { |
Rhyme | 0:4ad9373787e8 | 54 | m_i2c.write(m_addr, (char *)data, len) ; |
Rhyme | 0:4ad9373787e8 | 55 | } |
Rhyme | 0:4ad9373787e8 | 56 | |
Rhyme | 0:4ad9373787e8 | 57 | uint8_t MAX30101::getID(void) |
Rhyme | 0:4ad9373787e8 | 58 | { |
Rhyme | 0:4ad9373787e8 | 59 | uint8_t id ; |
Rhyme | 0:4ad9373787e8 | 60 | readRegs(REG_PART_ID, &id, 1) ; |
Rhyme | 0:4ad9373787e8 | 61 | return( id ) ; |
Rhyme | 0:4ad9373787e8 | 62 | } |
Rhyme | 0:4ad9373787e8 | 63 | |
Rhyme | 0:4ad9373787e8 | 64 | uint8_t MAX30101::getRev(void) |
Rhyme | 0:4ad9373787e8 | 65 | { |
Rhyme | 0:4ad9373787e8 | 66 | uint8_t rev ; |
Rhyme | 0:4ad9373787e8 | 67 | readRegs(REG_REV_ID, &rev, 1) ; |
Rhyme | 0:4ad9373787e8 | 68 | return( rev ) ; |
Rhyme | 0:4ad9373787e8 | 69 | } |