Code for Interfacing with Texas Instruments' AFE4404 IC for photoplethysmography applications
AFE_4404.h@0:e9068fdddb58, 2017-05-04 (annotated)
- Committer:
- dotunhunter
- Date:
- Thu May 04 11:56:07 2017 +0000
- Revision:
- 0:e9068fdddb58
Initial commit; Code for interfacing with Texas Instruments' AFE4404 photoplethysmography IC.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dotunhunter | 0:e9068fdddb58 | 1 | #ifndef AFE_4404_H |
dotunhunter | 0:e9068fdddb58 | 2 | #define AFE_4404_H |
dotunhunter | 0:e9068fdddb58 | 3 | |
dotunhunter | 0:e9068fdddb58 | 4 | #include "mbed.h" |
dotunhunter | 0:e9068fdddb58 | 5 | |
dotunhunter | 0:e9068fdddb58 | 6 | #define LOWER_BYTE_MASK 0x000000FF |
dotunhunter | 0:e9068fdddb58 | 7 | #define SIGN_EXT 0xFF000000 |
dotunhunter | 0:e9068fdddb58 | 8 | #define SIGN_MASK 0x00800000 |
dotunhunter | 0:e9068fdddb58 | 9 | #define BITS_PER_BYTE 8 |
dotunhunter | 0:e9068fdddb58 | 10 | #define NUM_REGISTERS 38 |
dotunhunter | 0:e9068fdddb58 | 11 | |
dotunhunter | 0:e9068fdddb58 | 12 | class AFE_4404 { |
dotunhunter | 0:e9068fdddb58 | 13 | |
dotunhunter | 0:e9068fdddb58 | 14 | public: |
dotunhunter | 0:e9068fdddb58 | 15 | |
dotunhunter | 0:e9068fdddb58 | 16 | AFE_4404(PinName rxSupplyEn, PinName txSupplyEn, PinName resetz, |
dotunhunter | 0:e9068fdddb58 | 17 | PinName powerEn, PinName drdy, PinName clk, PinName sda, PinName scl); |
dotunhunter | 0:e9068fdddb58 | 18 | |
dotunhunter | 0:e9068fdddb58 | 19 | void initPorts(void); |
dotunhunter | 0:e9068fdddb58 | 20 | void initPowerSupply(void); |
dotunhunter | 0:e9068fdddb58 | 21 | void initRegisters(void); |
dotunhunter | 0:e9068fdddb58 | 22 | void initClock(void); |
dotunhunter | 0:e9068fdddb58 | 23 | void powerUpSequence(void); |
dotunhunter | 0:e9068fdddb58 | 24 | |
dotunhunter | 0:e9068fdddb58 | 25 | void inline enableWriteMode(void) { |
dotunhunter | 0:e9068fdddb58 | 26 | _writeBuffer[0] = 0x00; // AFE register address 0x00 |
dotunhunter | 0:e9068fdddb58 | 27 | // write 0 to REG_READ bit in register 0x00 to enable readout |
dotunhunter | 0:e9068fdddb58 | 28 | // of write registers |
dotunhunter | 0:e9068fdddb58 | 29 | _writeBuffer[1] = 0x00; |
dotunhunter | 0:e9068fdddb58 | 30 | _writeBuffer[2] = 0x00; |
dotunhunter | 0:e9068fdddb58 | 31 | _writeBuffer[3] = 0x00; |
dotunhunter | 0:e9068fdddb58 | 32 | _i2c.write(_address, _writeBuffer, 4); |
dotunhunter | 0:e9068fdddb58 | 33 | } |
dotunhunter | 0:e9068fdddb58 | 34 | |
dotunhunter | 0:e9068fdddb58 | 35 | void inline enableReadMode(void) { |
dotunhunter | 0:e9068fdddb58 | 36 | _writeBuffer[0] = 0x00; // AFE register address 0x00 |
dotunhunter | 0:e9068fdddb58 | 37 | // write 1 to REG_READ bit in register 0x00 to enable writes to |
dotunhunter | 0:e9068fdddb58 | 38 | // write registers |
dotunhunter | 0:e9068fdddb58 | 39 | _writeBuffer[1] = 0x00; |
dotunhunter | 0:e9068fdddb58 | 40 | _writeBuffer[2] = 0x00; |
dotunhunter | 0:e9068fdddb58 | 41 | _writeBuffer[3] = 0x01; |
dotunhunter | 0:e9068fdddb58 | 42 | _i2c.write(_address, _writeBuffer, 4); |
dotunhunter | 0:e9068fdddb58 | 43 | } |
dotunhunter | 0:e9068fdddb58 | 44 | |
dotunhunter | 0:e9068fdddb58 | 45 | void inline disableIRQ(void) { |
dotunhunter | 0:e9068fdddb58 | 46 | _drdy.disable_irq(); |
dotunhunter | 0:e9068fdddb58 | 47 | } |
dotunhunter | 0:e9068fdddb58 | 48 | |
dotunhunter | 0:e9068fdddb58 | 49 | void inline enableIRQ(void) { |
dotunhunter | 0:e9068fdddb58 | 50 | _drdy.enable_irq(); |
dotunhunter | 0:e9068fdddb58 | 51 | } |
dotunhunter | 0:e9068fdddb58 | 52 | |
dotunhunter | 0:e9068fdddb58 | 53 | void getData(void); |
dotunhunter | 0:e9068fdddb58 | 54 | void writeData(uint8_t reg, uint32_t data); |
dotunhunter | 0:e9068fdddb58 | 55 | uint32_t readData(uint8_t reg, bool adc); |
dotunhunter | 0:e9068fdddb58 | 56 | |
dotunhunter | 0:e9068fdddb58 | 57 | |
dotunhunter | 0:e9068fdddb58 | 58 | private: |
dotunhunter | 0:e9068fdddb58 | 59 | DigitalOut _rxSupplyEn; |
dotunhunter | 0:e9068fdddb58 | 60 | DigitalOut _txSupplyEn; |
dotunhunter | 0:e9068fdddb58 | 61 | DigitalOut _resetz; |
dotunhunter | 0:e9068fdddb58 | 62 | DigitalOut _powerEn; |
dotunhunter | 0:e9068fdddb58 | 63 | |
dotunhunter | 0:e9068fdddb58 | 64 | InterruptIn _drdy; |
dotunhunter | 0:e9068fdddb58 | 65 | PwmOut _clk; |
dotunhunter | 0:e9068fdddb58 | 66 | I2C _i2c; |
dotunhunter | 0:e9068fdddb58 | 67 | |
dotunhunter | 0:e9068fdddb58 | 68 | int _address; |
dotunhunter | 0:e9068fdddb58 | 69 | char _writeBuffer[5]; |
dotunhunter | 0:e9068fdddb58 | 70 | char _readBuffer[5]; |
dotunhunter | 0:e9068fdddb58 | 71 | // temporary variable to prevent multiple allocations |
dotunhunter | 0:e9068fdddb58 | 72 | uint32_t _tempData; |
dotunhunter | 0:e9068fdddb58 | 73 | }; |
dotunhunter | 0:e9068fdddb58 | 74 | |
dotunhunter | 0:e9068fdddb58 | 75 | #endif |