rashmi v / Mbed 2 deprecated SS_SensePOC2P0_12Dec2017_USERPID

Dependencies:   SDFileSystem ds3231 eeprom_Nikita mbed testUniGraphic_150217

Fork of SS_SensePOC2P0_11Dec2017_USERPID by rashmi v

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ec_bp.cpp Source File

ec_bp.cpp

00001 #include "mbed.h"
00002 #include "ec_bp.h"
00003 //#include "ecg_dec.h"
00004 
00005 //PIN DECLARATIONS
00006 //Serial pc(USBTX,USBRX);
00007 SPI mySpi(PIN_MOSI, PIN_MISO, PIN_SCLK) ;
00008 DigitalIn DRDY_BAR(PTC8);
00009  
00010 DigitalOut CHIPSEL_BAR(PTD0);
00011 DigitalOut ADS_START(PTC16);
00012 DigitalOut RESET_BAR(PTC17);
00013 DigitalOut myled(LED1);
00014 PwmOut led(PTB18);
00015  float value = 0;
00016  unsigned int value1;
00017  unsigned int value2;
00018  unsigned int value3;
00019  unsigned int value4;
00020  unsigned int value5;
00021  unsigned int value6;
00022  uint8_t data1;
00023  unsigned int count;
00024 
00025 //unsigned char chk2= 0;
00026 //float value = 0;
00027 /*unsigned int value1 = 0;
00028 unsigned int value2 = 0;
00029 unsigned int value3 = 0;
00030 unsigned int value4 = 0;
00031 unsigned int value5 = 0;
00032 unsigned int value6 = 0;
00033 unsigned int data1 = 0;
00034 unsigned int count = 0;*/
00035 
00036 //static int32_t ecg_x[500];
00037  /* SPI is the spi function written in mbed and mySpi is the instance name*/
00038 
00039 typedef void (*func_ptr)(void) ; /*creates typedef to function pointer, does not take any arguement and returns void*/
00040 
00041 
00042 void lpf_coef(void);
00043 float lpf( float coeff[5], float);
00044 void drdy_int(void);
00045 /*FILE *sd_openfile(char *buf);
00046 void sd_write (FILE *n,int value);
00047 void sd_close(FILE *n);
00048 time_t rtc_read();*/
00049 
00050 typedef struct _cmd_func {
00051     char *name ;
00052     func_ptr func ;
00053 } cmd_func_type ;
00054 
00055 cmd_func_type cmd_list[] = {   /*"cmd_func_type cmd_list[]" is same as "struct cmd_list[]"*/
00056     {"help", doHelp},
00057     {"status", doStatus},
00058     {"freq", doFreq},
00059     {"mode", doMode},
00060     {"bit",  doBit},
00061     {"write", doWrite},
00062     {"read",  doRead},
00063     {"loop", doLoop},
00064     { 0, 0 }
00065 } ;
00066 
00067 func_ptr getFunc(char *cmd)  /*here "func_ptr is same as void*/
00068 {
00069     int i = 0 ;
00070     while(cmd_list[i].name != 0) {
00071         if (strcmp(cmd, cmd_list[i].name) == 0) {
00072             return(cmd_list[i].func) ; ;
00073         }
00074         i++ ;
00075     }
00076     return(0) ;
00077 }
00078 
00079 void doHello()
00080 {
00081     printf("=== spi test program ===\n\r") ;
00082     printf("please set your terminal program\n\r") ;
00083     printf("local echo on\n\r") ;
00084     printf("\n\r") ; 
00085 }
00086 
00087 
00088 void setup()
00089 {
00090    //initially make all inputs low until power is up and stabilized
00091     CHIPSEL_BAR = 0;
00092     ADS_START = 0;
00093     RESET_BAR = 0;
00094     //wait for oscillator to wake up
00095     wait(1);     
00096     
00097     CHIPSEL_BAR = 1;
00098     RESET_BAR = 1; //wait for tpor time
00099     //wait for power on reset
00100     wait(1);
00101     RESET_BAR = 0; // send a reset pulse and wait for t_reset amount of time
00102     wait(1);
00103     RESET_BAR = 1;//release the reset
00104     //Wait for 18 tclks = 36 us
00105     wait_us(36);
00106     
00107     //Device wakes up in RDATAC mode so send SDATAC command to write to registers
00108     cmdWrite(CMD_SDATAC) ;
00109 //    printf("Device is in SDATAC mode\n");
00110     
00111     regRead(REG_ID);
00112     printf("DEVICE ID register read from ADS is= 0x%X\n",data1);  
00113     wait(1);
00114     
00115     //Since we are using internal 2.42V reference and enable clock on the CLK PIN
00116     //Write 0xA8 to CONFIG2 register
00117     regWrite(REG_CONFIG2,no_mode);
00118        
00119     //Set continuous sampling mode, 500 SPS
00120     regWrite(REG_CONFIG1,sps500);
00121         
00122     //PGA Gain = 6, inputs shorted for noise measurements
00123     regWrite(REG_CH1SET, offset_meas);
00124     
00125     //read data from CONFIG2 register
00126     regRead(REG_CONFIG2);
00127 //    printf("REG_CONFIG2 register read from ADS for initial setup is= 0x%X\n",data1);
00128     
00129     //read data from CONFIG1 register
00130     regRead(REG_CONFIG1);
00131 //    printf("REG_CONFIG1 register read from ADS for initial setup is= 0x%X\n",data1);
00132     
00133     //read data from CONFIG1 register
00134     regRead(REG_CH1SET);
00135 //    printf("REG_CH1SET register read from ADS for initial setup is= 0x%X\n",data1);
00136 }   
00137 
00138 void testsetup()
00139 {
00140  //Send SDATAC command to write to registers to set test signals 
00141     cmdWrite(CMD_SDATAC) ;
00142     printf("Device is in SDATAC mode\n");
00143             
00144     //Since we are using internal 2.42V reference and enable clock on the CLK PIN
00145     //Write 0xA3 to CONFIG2 register to set test signal and its freq = 1Hz
00146     regWrite(REG_CONFIG2,test_mode);
00147        
00148     //PGA Gain = 6, test signal selected
00149     regWrite(REG_CH1SET, test_inp);
00150     
00151     //read data from CONFIG2 register
00152     regRead(REG_CONFIG2);
00153    printf("REG_CONFIG2 register read from ADS for test signal setup is= 0x%X\n",data1);
00154     
00155     //read data from CONFIG1 register
00156     regRead(REG_CH1SET);
00157    printf("REG_CH1SET register read from ADS for test signal setup is= 0x%X\n",data1);  
00158 }
00159 
00160 void ecgsetup()
00161 {
00162 cmdWrite(CMD_SDATAC) ; //Set to SDATAC mode to set CH1SET register
00163 
00164 regWrite(REG_CONFIG1,sps500);
00165 regWrite(REG_CONFIG2, default_mode);//put INT_TEST and TEST_FREQ bits to default mode(set those bits to '0')
00166 regWrite(REG_LOFF, loff_conf);
00167 regWrite(REG_CH1SET, elec_inp);// Set to read normal electrode input
00168 regWrite(REG_RLD_SENS, rld_sens_sig);//Set RLD_SENS
00169 regWrite(REG_LOFF_SENS, loff_sens_sig);//Set LOFF_SENS
00170 regWrite(REG_MISC1, misc1_inp );//Set RESP1
00171 regWrite(REG_MISC2, misc2_inp );//Set RESP2
00172 //printf("connect ECG leads\n");
00173 wait(0.5);
00174 regRead(REG_LOFF_STAT);//Read LOFF_STAT register
00175 printf("REG_LOFF_STAT register read from ADS for ecg setup is= 0x%X\n",data1); 
00176 
00177 }
00178 
00179 void doHelp(void) 
00180 {
00181     printf("=== spi test ===\n\r") ;
00182     printf("commands available\n\r") ;
00183     printf("help\n\r") ;
00184     printf("status\n\r") ;
00185     printf("freq freq_in_hz\n\r") ;
00186     printf("mode (0 | 1 | 2 | 3)\n\r") ;
00187     printf("bit (4 - 16)\n\r") ;
00188     printf("write value\n\r") ;
00189     printf("read\n\r") ;
00190     printf("loop number (set repeat number for read/write)\n\r") ;
00191 }
00192 
00193 void doStatus(void)
00194 {
00195     printf("=== Status Report ===\n\r") ;
00196     printf("bits: %d\n\r", bits) ;
00197     printf("mode: %d\n\r", mode) ;
00198     printf("freq: %d Hz\n\r", freq) ;
00199     printf("loop: %d\n\r", loop) ;
00200 }
00201 
00202 void doFreq(void)
00203 {
00204   //  int freq = 0 ;
00205    // scanf("%d", &freq) ;
00206     printf("setting frequency to %d\n\r", freq) ;
00207     mySpi.frequency(freq) ;
00208 }
00209 
00210 void doMode(void)
00211 {
00212     //scanf("%d", &mode) ;
00213     printf("setting format(%d, %d)\n\r",bits, mode) ;
00214     mySpi.format(bits, mode) ;       
00215 }
00216 
00217 void doBit(void) 
00218 {
00219    // scanf("%d", &bits) ;
00220     printf("setting format(%d, %d)\n\r",bits, mode) ;
00221     mySpi.format(bits, mode) ;
00222 }
00223 
00224 void doWrite(void) 
00225 {    
00226        
00227      //DRDY_BAR1.disable_irq();
00228       
00229         CHIPSEL_BAR = 0;
00230        // int freq1 = 50000;
00231        // mySpi.frequency(freq1) ;
00232         value1 =  mySpi.write(0x00);
00233         value2 =  mySpi.write(0x00);
00234         value3 =  mySpi.write(0x00);
00235         value4 =  mySpi.write(0x00);
00236         value5 =  mySpi.write(0x00);
00237         value6 =  mySpi.write(0x00);
00238       
00239         CHIPSEL_BAR = 0;    
00240         //DRDY_BAR1.enable_irq();
00241 }
00242 
00243 void doRead(void) 
00244 {
00245     int dummy = 0 ;
00246    
00247     while(!DRDY_BAR)
00248     ADS_START = 0;
00249     
00250         value = mySpi.write(dummy) ;
00251          
00252 }
00253 
00254 void doLoop(void)
00255 {
00256    // scanf("%d", &loop) ;
00257     printf("repeat number has been set to %d\n\r", loop) ;
00258 }
00259 
00260 void cmdWrite(int data) 
00261 {
00262          CHIPSEL_BAR = 0;
00263          mySpi.write(data) ;
00264          wait_ms(1);
00265          CHIPSEL_BAR = 1;  
00266 }
00267 
00268 void regWrite(int address, int data) 
00269 {
00270     int data_to_send = CMD_WREG << 5;
00271     data_to_send = data_to_send | address;
00272          CHIPSEL_BAR = 0;
00273          mySpi.write(data_to_send);
00274          wait_ms(1);
00275          mySpi.write(0x00) ;
00276          wait_ms(1);
00277          mySpi.write(data) ;
00278          wait_ms(1);
00279          CHIPSEL_BAR = 1;  
00280 }
00281 
00282 void regRead(int address)
00283 {
00284     int data_to_receive = CMD_RREG << 5;
00285     data_to_receive = data_to_receive | address;
00286          CHIPSEL_BAR = 0;
00287          mySpi.write(data_to_receive);
00288          wait_ms(1);
00289          mySpi.write(0x00) ;
00290          wait_ms(1);
00291          data1 = mySpi.write(0x00) ;
00292                   
00293          //printf("DEVICE ID register read from ADS is= 0x%X\n",data1);
00294          
00295          //wait_ms(1);
00296          CHIPSEL_BAR = 1;       
00297 }
00298 
00299 
00300 
00301 void freqset()
00302 {
00303 mySpi.frequency(freq) ;
00304     mySpi.format(bits, mode) ; 
00305     }
00306     
00307     
00308     
00309  void setupfunc()
00310  {   
00311     setup() ;  
00312     cmdWrite(CMD_RDATAC) ;
00313     ADS_START = 1;
00314   } 
00315   
00316 uint8_t ecgsetupfunc()
00317 { 
00318   // uint8_t lead=0;
00319    ecgsetup();   // To set the ADS1291 registers for ECG signal generation
00320    cmdWrite(CMD_RDATAC) ;
00321    ADS_START = 1; 
00322    return data1;            // returns lead off reg value // 14/06
00323   }
00324   
00325     void ecgtestsetupfunc()
00326 { 
00327    testsetup();   // To set the ADS1291 registers for ECG signal generation
00328    cmdWrite(CMD_RDATAC) ;
00329    ADS_START = 1; 
00330   
00331   } 
00332 uint32_t readvalue()
00333   {
00334       uint32_t concatenate_value;
00335       while(DRDY_BAR);
00336     doWrite() ;
00337     concatenate_value = ((value4<< 16)|(value5 <<8) |(value6));
00338     
00339   return  concatenate_value;
00340   }
00341   
00342   
00343   
00344   
00345