Vitaliy Loginov / PGA280_ADS1259

Dependents:   Chromatograph_Mobile Chromatograph_Mobile

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ADS1259.cpp Source File

ADS1259.cpp

00001 #include "ADS1259.h"
00002 #include "PGA280.h"
00003 #include <math.h>
00004 
00005 
00006 void ads1259_resetDevice ( unsigned char adr )
00007 {
00008     RESET = 1;
00009 }
00010 
00011 void ads1259_powerDownDevice ( unsigned char adr )
00012 {
00013     pga280_setAdress ( adr );
00014     ADS1259_RESET = 0;
00015     //pga280_resetAdress ();
00016 }
00017 
00018 void ads1259_powerUpDevice ( unsigned char adr )
00019 {
00020     pga280_setAdress ( adr );
00021     ADS1259_RESET = 1;
00022     //pga280_resetAdress ();
00023 }
00024 
00025 void ads1259_conversionON ( unsigned char ch )
00026 {
00027     pga280_setGPIO ( 5, ch );
00028 }
00029 
00030 void ads1259_conversionOFF ( unsigned char ch )
00031 {
00032     pga280_resetGPIO ( 5, ch);
00033 }
00034 
00035 char ads1259_readyDevice ( unsigned char ch  )
00036 /*Плохая функция проверки готовности устройства.
00037 Необходимо сделать прерывание, которое будт выставлять
00038 флаг или в котором будет происходить считывание*/
00039 {
00040     char tmp;
00041 
00042     pga280_setAdress ( ch );
00043 
00044     if ( ADS1259_RDYA == 0 )
00045         tmp = true;
00046     else
00047         tmp = false;
00048 
00049     //pga280_resetAdress ();
00050 
00051     return tmp;
00052 }
00053 
00054 unsigned char ads1259_sendCommandDevice ( unsigned char command )
00055 {
00056     //ADS1259_CS = 0;
00057     SPI1MasterTransferByte ( command );
00058     //ADS1259_CS = 1;
00059     return true;
00060 }
00061 
00062 void ads1259_setCsAndReset ( void )
00063 {
00064     //ADS1259_CS = 0;
00065     wait_ms ( 100 );
00066     //ADS1259_CS = 1;
00067     wait_ms ( 100 );
00068 }
00069 
00070 unsigned long ads1259_readRegisterDevice ( unsigned char reg, unsigned char num_reg, unsigned char ch )
00071 /*Чтение количества регистров num_reg, начиная с текущего reg по адресу устройства ch*/
00072 {
00073     unsigned long out_value = 0;
00074 
00075     uint32_t tmp[num_reg];
00076     unsigned char i;
00077 
00078     if ( num_reg > 3 )
00079         num_reg = 3;
00080 
00081     pga280_setGPIO ( 5, ch );
00082     //ADS1259_CS = 0;
00083     SPI1MasterTransferByte ( RREG_ADS1259 | reg );
00084     SPI1MasterTransferByte ( num_reg - 1 );
00085 
00086     for ( i = 0; i < num_reg; i++ ) {
00087         tmp[i] = SPI1MasterTransferByte ( 0x00 );
00088     }
00089 
00090     //ADS1259_CS = 1;
00091     pga280_resetGPIO ( 5, ch );
00092 
00093     switch ( num_reg ) {
00094         case 1:
00095 
00096             out_value = tmp[0];
00097             break;
00098 
00099         case 2:
00100 
00101             out_value = (tmp[0] << 8) | tmp[1];
00102             break;
00103 
00104         case 3:
00105 
00106             out_value = ((tmp[0] << 16) | tmp[1] << 8) | tmp[2];
00107             break;
00108 
00109         default:
00110 
00111             out_value = 0xFFFFFFFF;
00112             break;
00113     }
00114 
00115     return out_value;
00116 }
00117 
00118 unsigned char ads1259_readOneRegisterDevice ( unsigned char reg )
00119 {
00120     unsigned char out_value = 0;
00121     //ADS1259_CS = 0;
00122 
00123     SPI1MasterTransferByte ( RREG_ADS1259 | reg );
00124     SPI1MasterTransferByte ( 0 );
00125     out_value = SPI1MasterReadByte ();
00126 
00127     //ADS1259_CS = 1;
00128 
00129     return out_value;
00130 }
00131 
00132 void ads1259_writeOneRegisterDevice ( unsigned char reg, unsigned char data )
00133 {
00134     //ADS1259_CS = 0;
00135 
00136     SPI1MasterTransferByte ( WREG_ADS1259 | reg );
00137     SPI1MasterTransferByte ( 0 );
00138     SPI1MasterTransferByte ( data );
00139 
00140     //ADS1259_CS = 1;
00141 }
00142 
00143 void ads1259_runReadDataContinuedModeDevice ( unsigned char ch )
00144 {
00145     ads1259_sendCommandDevice ( SDATAC_ADS1259 );               // ?????????? ????? ?????? ?????? ? ?????????? ??????
00146     ads1259_conversionON ( ch );                                // ???????? ???
00147     ads1259_sendCommandDevice ( RDATAC_ADS1259 );               // ?????????? ??????? ??????? ???????? ?????? ? ?????????? ??????
00148 }
00149 
00150 uint32_t ads1259_readDataDevice ( unsigned char ch )
00151 {
00152     uint32_t t_begin;                                           // ????? ??????
00153     uint32_t t_end;                                             // ????? ?????
00154     uint32_t t_current;                                         // ??????? ????????
00155     uint32_t data_out = 0;                                      // ???????? ??????
00156 
00157     unsigned char data_ok;                                      // ?????? ???????
00158 
00159     uint32_t data[4];
00160 
00161     ads1259_sendCommandDevice ( SDATAC_ADS1259 );               // ?????????? ????? ?????? ?????? ? ?????????? ??????
00162     ads1259_conversionON ( ch );                                // ???????? ???
00163     ads1259_sendCommandDevice ( RDATA_ADS1259 );                // ?????????? ??????? ??????? ???????? ?????? ? ?????????? ??????
00164 
00165     t_begin = 0;
00166 
00167     do {
00168         if ( ads1259_readyDevice ( ch ) == true ) {
00169 
00170             //ADS1259_CS = 0;
00171 
00172             data[0] = SPI1MasterReadByte ();
00173             data[1] = SPI1MasterReadByte ();
00174             data[2] = SPI1MasterReadByte ();
00175 
00176             //ADS1259_CS = 1;
00177 
00178             data_ok = true;
00179             break;
00180 
00181         } else {
00182             data_ok = false;
00183         }
00184 
00185         t_end++;
00186         t_current = t_end - t_begin;
00187 
00188     } while ( t_current < TIMEOUT );
00189 
00190     if ( data_ok ) {
00191         data_out += (data[0] & 0xFF) << 16;
00192         data_out += (data[1] & 0xFF) << 8;
00193         data_out += (data[2] & 0xFF);
00194     } else {
00195         data_out = 0xFFFFFF;
00196     }
00197 
00198     ads1259_conversionOFF ( ch );                                 // ????????? ???
00199 
00200     return data_out;
00201 }
00202 
00203 /* *****************************************************************************
00204  End of File
00205  */