Code for Interfacing with Texas Instruments' AFE4404 IC for photoplethysmography applications

Dependents:   ece4180_project

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?

UserRevisionLine numberNew 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