Priliminary

Dependencies:   DS1307 MAX17048 MODSERIAL SSD1308_128x64_I2C WatchDog mbed-rpc mbed

Fork of ECGAFE_copy by Zainul Charbiwala

ADS1298.h

Committer:
zainulcharbiwala
Date:
2015-09-30
Revision:
0:ee0649a9025a

File content as of revision 0:ee0649a9025a:

// Copyright 2013, Zainul Charbiwala

#ifndef _ADS1298_h_
#define _ADS1298_h_

#include "mbed.h"

#define TCSSC   1 // 6 ns
#define TSCCS   2 // 4 TCLKs
#define TPOR    32768 // 2^16 TCLKs
#define TRST    1 // 2 TCLKs 
#define TRST2   9 // 18 TCLKs
#define TINTREF 150000 // 150ms
#define TCMD    2 // 4 TCLKs
#define TCSH    1 // 2 TCLKs

#define RDATA   0x12
#define RDATAC  0x10
#define SDATAC  0x11
#define WREG    0x40
#define RREG    0x20

#define ID      0x00
#define CONFIG1 0x01
#define CONFIG2 0x02
#define CONFIG3 0x03
#define LOFF    0x04
#define CH1SET  0x05
#define CH2SET  0x06
#define CH3SET  0x07
#define CH4SET  0x08
#define CH5SET  0x09
#define CH6SET  0x0A
#define CH7SET  0x0B
#define CH8SET  0x0C
#define RLD_SENSP 0x0D
#define RLD_SENSN 0x0E
#define LOFF_SENSP 0x0F
#define LOFF_SENSN 0x10
#define LOFF_FLIP 0x11
#define LOFF_STATP 0x12
#define LOFF_STATN 0x13
#define GPIO    0x14
#define PACE    0x15
#define RESP    0x16
#define CONFIG4 0x17
#define WCT1    0x18
#define WCT2    0x19


#define CONFIG1_HR          0x80
#define CONFIG1_DAISYEN     0x40
#define CONFIG1_CLKEN       0x20
#define CONFIG1_DR2         0x04
#define CONFIG1_DR1         0x02
#define CONFIG1_DR0         0x01

#define CONFIG2_WCTCHOP     0x20
#define CONFIG2_INTTEST     0x10
#define CONFIG2_TESTAMP     0x04
#define CONFIG2_TESTFREQ1   0x02
#define CONFIG2_TESTFREQ0   0x01
#define CONFIG2_DEFAULT     0x00

#define CONFIG3_PD_REFBUF   0x80
#define CONFIG3_VREF_4V     0x20
#define CONFIG3_RLD_MEAS    0x10
#define CONFIG3_RLDREF_INT  0x08
#define CONFIG3_PD_RLD      0x04
#define CONFIG3_RLD_LOFF_SENS 0x02
#define CONFIG3_RLD_STAT    0x01
#define CONFIG3_DEFAULT     0x40

#define LOFF_COMP_TH2       0x80      
#define LOFF_COMP_TH1       0x40
#define LOFF_COMP_TH0       0x20
#define LOFF_VLEAD_OFF_EN   0x10
#define LOFF_ILEAD_OFF1     0x08
#define LOFF_ILEAD_OFF0     0x04
#define LOFF_FLEAD_OFF1     0x02
#define LOFF_FLEAD_OFF0     0x01

#define CHNSET_PD           0x80
#define CHNSET_GAIN2        0x40
#define CHNSET_GAIN1        0x20
#define CHNSET_GAIN0        0x10
#define CHNSET_MUXN2        0x04
#define CHNSET_MUXN1        0x02
#define CHNSET_MUXN0        0x01
#define CHNSET_DEFAULT      0x00

#define GPIO_GPIOD4         0x80
#define GPIO_GPIOD3         0x40
#define GPIO_GPIOD2         0x20
#define GPIO_GPIOD1         0x10
#define GPIO_GPIOC4         0x08
#define GPIO_GPIOC3         0x04
#define GPIO_GPIOC2         0x02
#define GPIO_GPIOC1         0x01

#define PACE_PACEE1         0x10
#define PACE_PACEE0         0x08
#define PACE_PACEO1         0x04
#define PACE_PACEO0         0x02
#define PACE_PD_PACE        0x01

#define RESP_DEMOD_EN1      0x80
#define RESP_MOD_EN1        0x40
#define RESP_DEFAULT        0x20
#define RESP_PH2            0x10
#define RESP_PH1            0x08
#define RESP_PH0            0x04
#define RESP_CTRL1          0x02
#define RESP_CTRL0          0x01

#define CONFIG4_RESP_FREQ2  0x80
#define CONFIG4_RESP_FREQ1  0x40
#define CONFIG4_RESP_FREQ0  0x20
#define CONFIG4_SINGLE_SHOT 0x08
#define CONFIG4_WCT_TO_RLD  0x04
#define CONFIG4_PD_LOFF_COMP 0x02

#define WCT1_AVF_CH6        0x80
#define WCT1_AVL_CH5        0x40
#define WCT1_AVR_CH7        0x20
#define WCT1_AVR_CH4        0x10
#define WCT1_PD_WCTA        0x08
#define WCT1_WCTA2          0x04
#define WCT1_WCTA1          0x02
#define WCT1_WCTA0          0x01

#define WCT2_PD_WCTC        0x80
#define WCT2_PD_WCTB        0x40
#define WCT2_WCTB2          0x20
#define WCT2_WCTB1          0x10
#define WCT2_WCTB0          0x08
#define WCT2_WCTC2          0x04
#define WCT2_WCTC1          0x02
#define WCT2_WCTC0          0x01

// Bit positions of the lead off status bits
#define LOFFRA 15
#define LOFFLA 14
#define LOFFLL 13
#define LOFFRL 12
#define LOFFV1 11
#define LOFFV2 10
#define LOFFV3 9
#define LOFFV4 8
#define LOFFV5 7
#define LOFFV6 6

/** Class to control an ADS1298 AFE
 *
 * Example:
 * @code
 *
 * @endcode
 */
class ADS1298 {
  public:
    
 /**
  * @brief Constructor
  * @param mosi mbed pin to use for MOSI line of SPI interface.
  * @param miso mbed pin to use for MISO line of SPI interface.
  * @param sck mbed pin to use for SCK line of SPI interface.
  * @param csn mbed pin to use for not chip select line of SPI interface.
  * @param reset mbed pin to use for the reset line.
  * @param drdy mbed pin to use for the data ready line.
  * @param start mbed pin to use for the start conversion line.
  */    
    ADS1298(PinName mosi, PinName miso, PinName sck, PinName csn, PinName reset, PinName drdy, PinName start);
    

// High Level methods

 /** 
  * @brief High level Init, most settings remain at Power-On reset value
  */
    void initialize(void (*dataready)(void));

 /** 
  * @brief Start capturing data
  */
    void startCapture();

 /** 
  * @brief Stop capturing data
  */
    void stopCapture();

 /** 
  * @brief Read data from the ADS1298
  */
    void readData(uint8_t *buf);

 /** 
  * @brief Update the lead off status
  */
    int updateLeadOff(uint8_t *buf);

  private:

    SPI spi_; // mosi, miso, sclk
    DigitalOut cs_;
    DigitalOut reset_;
    InterruptIn drdy_;
    DigitalOut start_;
    uint16_t lOff_;

// Low Level methods
    void sendCommand(uint8_t cmd);
    void writeRegister(uint8_t reg, uint8_t val);
    uint8_t readRegister(uint8_t reg);

};



#endif