Code for Interfacing with Texas Instruments' AFE4404 IC for photoplethysmography applications
AFE_4404.h
- Committer:
- dotunhunter
- Date:
- 2017-05-04
- Revision:
- 0:e9068fdddb58
File content as of revision 0:e9068fdddb58:
#ifndef AFE_4404_H #define AFE_4404_H #include "mbed.h" #define LOWER_BYTE_MASK 0x000000FF #define SIGN_EXT 0xFF000000 #define SIGN_MASK 0x00800000 #define BITS_PER_BYTE 8 #define NUM_REGISTERS 38 class AFE_4404 { public: AFE_4404(PinName rxSupplyEn, PinName txSupplyEn, PinName resetz, PinName powerEn, PinName drdy, PinName clk, PinName sda, PinName scl); void initPorts(void); void initPowerSupply(void); void initRegisters(void); void initClock(void); void powerUpSequence(void); void inline enableWriteMode(void) { _writeBuffer[0] = 0x00; // AFE register address 0x00 // write 0 to REG_READ bit in register 0x00 to enable readout // of write registers _writeBuffer[1] = 0x00; _writeBuffer[2] = 0x00; _writeBuffer[3] = 0x00; _i2c.write(_address, _writeBuffer, 4); } void inline enableReadMode(void) { _writeBuffer[0] = 0x00; // AFE register address 0x00 // write 1 to REG_READ bit in register 0x00 to enable writes to // write registers _writeBuffer[1] = 0x00; _writeBuffer[2] = 0x00; _writeBuffer[3] = 0x01; _i2c.write(_address, _writeBuffer, 4); } void inline disableIRQ(void) { _drdy.disable_irq(); } void inline enableIRQ(void) { _drdy.enable_irq(); } void getData(void); void writeData(uint8_t reg, uint32_t data); uint32_t readData(uint8_t reg, bool adc); private: DigitalOut _rxSupplyEn; DigitalOut _txSupplyEn; DigitalOut _resetz; DigitalOut _powerEn; InterruptIn _drdy; PwmOut _clk; I2C _i2c; int _address; char _writeBuffer[5]; char _readBuffer[5]; // temporary variable to prevent multiple allocations uint32_t _tempData; }; #endif