/home/daqweb/fgddaq/c8051/feb64.c File Reference

#include <stdio.h>
#include <math.h>
#include "mscbemb.h"
#include "feb64.h"
#include "Devices/pca_internal.h"
#include "Devices/adc_internal.h"

Functions

void publishCtlCsr (void)
void publishErr (bit errbit)
void publishAll ()
void PublishVariable (float xdata *pvarDest, float varSrce, bit errbit)
void updateAdc2Table (void)
unsigned int NodeAdd_get (void)
float read_voltage (unsigned char channel, unsigned int *rvalue, float coeff, float offset, unsigned char gain)
void switchonoff (unsigned char command)
void user_init (unsigned char init)
void user_write (unsigned char index) reentrant
unsigned char user_read (unsigned char index)
unsigned char user_func (unsigned char *data_in, unsigned char *data_out)
void user_loop (void)

Variables

char code node_name [] = "FEB64"
char idata svn_rev_code [] = "$Rev: 1185 $"
unsigned char idata _n_sub_addr = 1
int xdata k
int xdata calState = 0
int xdata calCount = 0
float xdata calNumber = 10.0
char xdata calQpumpSave = 0
char xdata calSwSave = 0
unsigned long xdata currentTime = 0
unsigned long xdata sstTime = 0
unsigned long xdata sstExtTime = 0
unsigned long xdata calTime = 0
unsigned char xdata status
unsigned char xdata channel
unsigned char xdata chipAdd
unsigned char xdata chipChan
unsigned char xdata BiasIndex
unsigned char xdata AsumIndex
unsigned char xdata NodeOK = 0
unsigned char bdata bChange
sbit bCPupdoitNOW = bChange ^ 0
sbit bDacdoitNOW = bChange ^ 1
sbit PCA_Flag = bChange ^ 2
sbit LTC2600_Flag = bChange ^ 3
sbit LTC1665_Flag = bChange ^ 4
sbit LTC1669_Flag = bChange ^ 5
sbit EEP_CTR_Flag = bChange ^ 6
sbit CAsum_Flag = bChange ^ 7
sbit DACRESETN = P1 ^ 0
sbit PCARESETN = P1 ^ 2
sbit ASUM_SYNC = P1 ^ 7
sbit ASUM_TESTN = P1 ^ 6
sbit ASUM_PWDN = P1 ^ 5
sbit REG_EN = P3 ^ 2
MSCB_INFO_VAR code vars []
MSCB_INFO_VARvariables = vars
SYS_INFO sys_info

Function Documentation

unsigned int NodeAdd_get ( void   ) 

00382 {
00383   unsigned int xdata crate_add=0;
00384   char xdata pca_add=0;
00385 
00386   PCA9539_Read(BACKPLANE_READ, &pca_add, 1);
00387   // C C C C C C 0 B B is the MSCB Addr[8..0], 9 bits
00388   // Modifying what the board reads from the PCA
00389   // Externally, the crate address are reversed
00390   crate_add= ((~pca_add)<<1)  & 0x01F8;
00391   // Internally, the board address are not reversed
00392 /*3 was in te laptop version but not in the SVN
00393   if (crate_add == 504) {
00394     // expect a SMB bus problem
00395     // Try to reset
00396     SFRPAGE = SMB0_PAGE;
00397     ENSMB = 0;      // Disable SMB
00398     delay_us(100);  // pause 
00399     SFRPAGE = CONFIG_PAGE;
00400     PCA9539_Init(); //PCA General I/O (Bias Enables and Backplane Addr) initialization
00401     delay_us(10);
00402     PCA9539_WriteByte(BIAS_OUTPUT_ENABLE);
00403 */
00404 //    P1MDOUT |= 0x04;  // PCARESETN in PP
00405 //    delay_us(100);
00406 //    PCARESETN = 0;
00407 //    delay_us(10);
00408 //    PCARESETN = 1;
00409 //  }
00410   return (crate_add | ((pca_add) & 0x0003));
00411 }

void publishAll (  ) 

00334                   {
00335   user_data.control = rCTL;
00336   user_data.status  = rCSR;
00337   user_data.error   = rESR;
00338   ENABLE_INTERRUPTS;
00339 }

void publishCtlCsr ( void   ) 

00316                          {
00317   DISABLE_INTERRUPTS;
00318   user_data.control = rCTL;
00319   user_data.status  = rCSR;
00320   ENABLE_INTERRUPTS;
00321 }

void publishErr ( bit  errbit  ) 

00325                             {
00326     DISABLE_INTERRUPTS;
00327     errbit = ON;
00328     user_data.error   = rESR;
00329     ENABLE_INTERRUPTS;
00330 }

void PublishVariable ( float xdata *  pvarDest,
float  varSrce,
bit  errbit 
)

00343                                                                         {
00344   DISABLE_INTERRUPTS;
00345   *pvarDest = varSrce;
00346   if (errbit) user_data.error = rESR;
00347   errbit = 0;
00348   ENABLE_INTERRUPTS;
00349 }

float read_voltage ( unsigned char  channel,
unsigned int *  rvalue,
float  coeff,
float  offset,
unsigned char  gain 
)

00416 {
00417   unsigned int  xdata i;
00418   float         xdata voltage;
00419   unsigned int  xdata rawbin;
00420   unsigned long xdata rawsum = 0;
00421 
00422   // Averaging on 10 measurements for now.
00423   for (i=0 ; i<10 ; i++) {
00424     rawbin = adc_read(channel, gain);
00425     rawsum += rawbin;
00426     yield();
00427   }
00428 
00429   /* convert to V */
00430   *rvalue =  rawsum/10;
00431   voltage = (float)  *rvalue;                  // averaging
00432   voltage = (float)  voltage / 1024.0 * INT_VREF;  // conversion
00433   if ( channel != TCHANNEL)
00434     voltage = voltage * coeff + offset;
00435 
00436   return voltage;
00437 }

void switchonoff ( unsigned char  command  ) 

00442 {
00443   char xdata i;
00444   char xdata swConversion;
00445   if(command==ON)
00446   {
00447     //-----------------------------------------------------------------------------
00448     // Enable the voltage regulator to power the card
00449     SFRPAGE  = CONFIG_PAGE;
00450     P3MDOUT |= 0x04;  // Set Vreg enable to PP
00451     REG_EN = ON;
00452 
00453     //-----------------------------------------------------------------------------
00454     // Setup the ASUM ports (P1.7, 6, 5)
00455     P1MDOUT |= 0xE0;  // Sync, Test, PowerDwnN Push-pull
00456 
00457     // Pulse the serializer (ASUM)
00458     ASUM_PWDN  = 1;    // Power UP
00459     delay_ms(1000);
00460     ASUM_SYNC = 1;     // Issue sync words.
00461     delay_us(100);     // Wait sometime.
00462     ASUM_TESTN = 1;    // Choose Non test mode. (TEST=neg true)
00463     ASUM_SYNC = 0;     // Negate the sync process.
00464 
00465     //-----------------------------------------------------------------------------
00466     // uC Charge Pump frequency setup
00467     pca_operation(Q_PUMP_INIT);  // Charge Pump initialization (crossbar settings)
00468     //Sept 09 default Qpump ON at Power up
00469     pca_operation(Q_PUMP_ON);
00470 
00471 //    sprintf(user_data.warning, "No Trip");
00472 
00473 #ifdef _LTC1665_
00474     //-----------------------------------------------------------------------------
00475     // SPI Dac (Bias voltages, 64 channels)
00476     // SST and PCARESETN is maintained ==1 and PP
00477     // P1.7:ASUMSync .6:ASUMTestn .5:ASUMPWDn .4:ASUMCSn | .3:SST_DRV2 .2:PCARESETN .1:SST_DRV1 .0:DACRESETN 
00478     SFRPAGE  = CONFIG_PAGE;
00479     P2MDOUT |= 0x18; // Set SPI_MOSI and SPI_SCK in PP
00480     P0MDOUT |= 0xC0; // Set BIAS_DAC_CSn1 and BIAS_DAC_CSn2 in PP
00481     P3MDOUT |= 0x63; // Set BIAS_DAC_CSn3,4,5,6 in PP
00482     P2MDOUT |= 0x60; // Set BIAS_DAC_CSn7,8 in PP
00483     P1MDOUT |= 0x01; // Set DACRESETN in PP
00484     DACRESETN  = 1;
00485     LTC1665_Init();
00486 #endif
00487 
00488 #ifdef _LTC2600_
00489     //-----------------------------------------------------------------------------
00490     // SPI ASUM DAC (8 channels)
00491     SFRPAGE  = CONFIG_PAGE;
00492     P2MDOUT |= 0x18;  // Set SPI_MOSI and SPI_SCK in PP
00493     P1MDOUT |= 0x10;  // Set SUM_DAC_CSn in PP
00494     LTC2600_Init();
00495 #endif
00496 
00497 #ifdef _ExtEEPROM_
00498     //-----------------------------------------------------------------------------
00499     //SPI ExtEEPROM
00500     SFRPAGE  = CONFIG_PAGE;
00501     P2MDOUT |= 0x18; // Set SPI_MOSI and SPI_SCK in PP
00502     P3MDOUT |= 0x80; // Set RAM_CSn in PP
00503     P2MDOUT &= ~0x01; // Set RAM_WPn in OD
00504     ExtEEPROM_Init();
00505 #endif
00506 
00507 #ifdef _LTC1669_
00508     //-----------------------------------------------------------------------------
00509     // SMB Charge Pump DAC
00510     LTC1669_Init(); //I2C DAC initialization
00511 #endif
00512 
00513 #ifdef _LTC2497_
00514     LTC2497_Init();
00515 #endif
00516 
00517 #ifdef _LTC2495_
00518     LTC2495_Init();
00519 #endif
00520 
00521 #ifdef _ADT7486A_
00522     //SST and PCARESETN is maintained ==1 and PP
00523     // P1.7:ASUMSync .6:ASUMTestn .5:ASUMPWDn .4:ASUMCSn | .3:SST_DRV2 .2:PCARESETN .1:SST_DRV1 .0:DACRESETN 
00524     SFRPAGE = CONFIG_PAGE;
00525     P1MDOUT |= 0x08; // Set SST_DRV2 in PP
00526 #endif
00527 
00528 #ifdef _PCA9539_
00529     //-----------------------------------------------------------------------------
00530     // SMB Bias Voltage switches
00531     SFRPAGE = CONFIG_PAGE;
00532     P1MDOUT |= 0x04;  // PCARESETN in PP
00533     PCA9539_Init(); //PCA General I/O (Bias Enables and Backplane Addr) initialization
00534     delay_us(10);
00535     PCA9539_WriteByte(BIAS_OUTPUT_ENABLE);
00536     delay_us(10);
00537     swConversion = user_data.swBias;
00538     PCA9539_Conversion(&swConversion);
00539     PCA9539_WriteByte(BIAS_WRITE, ~swConversion);
00540     delay_us(10);
00541     PCA9539_WriteByte(BACKPLANE_INPUT_ENABLE);
00542     delay_us(10);
00543 #endif
00544 
00545     // Activate charge pump dac settings
00546     LTC1669_Flag = ON;
00547 
00548     // Activate 64 bias dac settings
00549     // user_data contains correct values, force update 
00550     // by setting mirror to 0xff 
00551     for(i=0;i<64;i++) ltc1665mirror[i] = 0xFF;
00552 
00553     // Needs power for DAC update, by now it should be ON
00554     // Force DAC updates
00555     LTC1665_Flag = ON;
00556 
00557 
00558     // Activate the 8 Asum dac settings
00559     // user_data contains correct values, force update 
00560     // by setting mirror to 0x00 
00561     for(i=0;i<8;i++) ltc2600mirror[i] = 0xFFFF;
00562 
00563     // Needs power for DAC update, by now it should be ON
00564     // Force DAC updates
00565     LTC2600_Flag = ON;
00566   }
00567   else if(command==OFF) {
00568     pca_operation(Q_PUMP_OFF);   // Initially turn it off
00569 
00570     // Switch all the ports to open drain except for...
00571     SFRPAGE  = CONFIG_PAGE;
00572 
00573     //Ram_CSn maintained in PP set it to High
00574     // P3.7:RAMCSn   .6:CSn5      .5:CSn4     .4:SPARE5  | .3:SPARE4   .2:REG_EN    .1:CSn3     .0:CSn2 
00575     P3MDOUT = 0x80;
00576     P3 &= 0x80;
00577 
00578     // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
00579     // Needs to stay on for JTAG debug access!
00580     // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
00581     REG_EN  = OFF;   // Shutdown All Regulators 
00582 
00583     //SPI communication for EEPROM is maintained
00584     // P2.7:SPARE1   .6:CSn7      .5:CSn6     .4:SPIMOSI | .3:SPISCK   .2:RAMHLDn   .1:SPIMISO  .0:RAMWPn 
00585     P2MDOUT &= 0x1F; // Set OD
00586     P2 &= 0x0F;
00587 
00588     //SST and PCARESETN is maintained high and PP
00589     // P1.7:ASUMSync .6:ASUMTestn .5:ASUMPWDn .4:ASUMCSn | .3:SST_DRV2 .2:PCARESETN .1:SST_DRV1 .0:DACRESETN 
00590     P1MDOUT  &= ~0xF9;  // in OD
00591     PCARESETN = 1;
00592     P1 |= 0x06;  // SST2, PCARESETN set High
00593 
00594     // mscb communication
00595     // P0.7:CSn1     .6:CSn0      .5:485TXEN  .4:QPUMPCLK| .3:SMBCLK   .2:SMBDAT    .1:Rx       .0:Tx 
00596     P0MDOUT &= 0xE0;  // Set OD, Keep RS484_ENABLE uin PP
00597     P0 &= ~0xC0;  // Set CS1,0 to Low
00598   }
00599 }

void updateAdc2Table ( void   ) 

00354 {
00355   int i, j;
00356   for(i=0;i<16;i++) {
00357     if (adc2mscb_table[i].current) {
00358       j = adc2mscb_table[i].mscbIdx;
00359       adc2mscb_table[i].Offst = (signed int) eepage.iBiasOffset[j];
00360     } else {
00361       j = adc2mscb_table[i].mscbIdx;
00362       adc2mscb_table[i].Offst = (signed int) eepage.vBiasOffset[j];
00363     }
00364   }
00365 }

unsigned char user_func ( unsigned char *  data_in,
unsigned char *  data_out 
)

00869 {
00870   /* echo input data */
00871   data_out[0] = data_in[0];
00872   data_out[1] = data_in[1];
00873   return 2;
00874 }

void user_init ( unsigned char  init  ) 

00607 {
00608   char xdata i;
00609   float xdata temperature;
00610   // Inititialize local variables
00611 
00612   /* Format the SVN and store this code SVN revision into the system */
00613   for (i=0;i<4;i++) {
00614     if (svn_rev_code[6+i] < 48) {
00615       svn_rev_code[6+i] = '0';
00616     }
00617   }
00618   sys_info.svn_revision = (svn_rev_code[6]-'0')*1000+
00619     (svn_rev_code[7]-'0')*100+
00620     (svn_rev_code[8]-'0')*10+
00621     (svn_rev_code[9]-'0');
00622 
00623   //-----------------------------------------------------------------------------
00624   // default settings, set only when uC-EEPROM is being erased and written
00625   if(init) {
00626     user_data.control    = 0x00;    // Turn off the charge pump
00627     user_data.status     = 0x80;    // Shutdown state
00628     user_data.swBias     = 0x00;    // Turn off all the switches
00629     user_data.rQpump     = 0x00;    // Set to the lowest scale
00630     for(i=0;i<8;i++) {
00631       user_data.rAsum[i] = 0x80;
00632       user_data.Temp[i]  = 0.0;
00633     }
00634     for(i=0;i<64;i++) {
00635       user_data.rBias[i] = 0xFF;    // Set the DAC to lowest value
00636       ltc1665mirror[i]      = 0xFF;
00637     }
00638   }
00639   sys_info.group_addr  = 100;
00640 //  sprintf(user_data.warning, "No Trip");
00641 
00642   //-----------------------------------------------------------------------------
00643   // Local Flags
00644   bChange = 0;
00645 
00646   //-----------------------------------------------------------------------------
00647   // Initial setting for communication and overall ports (if needed).
00648   SFRPAGE  = CONFIG_PAGE;
00649   P0MDOUT |= 0x20;   // add RS485_ENABLE in push-pull
00650 
00651   //-----------------------------------------------------------------------------
00652   // uC Miscellaneous ADCs (V/I Monitoring)
00653   adc_internal_init();
00654 
00655   //-----------------------------------------------------------------------------
00656   //SPI ExtEEPROM
00657 #ifdef _ExtEEPROM_
00658   SFRPAGE  = CONFIG_PAGE;
00659   P2MDOUT |= 0x18;  // Set SPI_MOSI and SPI_SCK in PP
00660   P2MDOUT &= ~0x01; // Set RAM_WPn in OD
00661   P3MDOUT |= 0x80;  // Set RAM_CSn in PP
00662   ExtEEPROM_Init();
00663 #endif
00664 
00665   //-----------------------------------------------------------------------------
00666   // Reset LTC1665 (DACx8), Reset PCA9539 (PIO)
00667   //SST and PCARESETN is maintained ==1 and PP
00668   // P1.7:ASUMSync .6:ASUMTestn .5:ASUMPWDn .4:ASUMCSn | .3:SST_DRV2 .2:PCARESETN .1:SST_DRV1 .0:DACRESETN 
00669   SFRPAGE  = CONFIG_PAGE;
00670   P1MDOUT |= 0x5;   // PIO/DACRESETN in PP
00671   DACRESETN = 1;    // No reset 
00672   PCARESETN = 1;    // No reset
00673 
00674   //-----------------------------------------------------------------------------
00675   // Initialize PCA for address reading and switch settings
00676 #ifdef _PCA9539_
00677   SFRPAGE = CONFIG_PAGE;
00678 //  P1MDOUT |= 0x08;
00679   PCA9539_Init(); //PCA General I/O (Bias Enables and Backplane Addr) initialization
00680   delay_us(10);
00681   //Write to the PCA register for setting 0.x to output
00682   PCA9539_WriteByte(BIAS_OUTPUT_ENABLE);
00683   delay_us(10);
00684   //Set the port pins to high
00685   PCA9539_WriteByte(BIAS_ENABLE);
00686   delay_us(10);
00687   //Write to the PCA register for setting 1.x to input
00688   PCA9539_WriteByte(BACKPLANE_INPUT_ENABLE);
00689   delay_us(10);
00690   
00691   // Get Node Address from PCA
00692 //  sys_info.node_addr   = NodeAdd_get();
00693 #endif
00694 
00695   //-----------------------------------------------------------------------------
00696   // EEPROM memory Initialization/Retrieval
00697 #ifdef _ExtEEPROM_
00698   //Read only the serial number from the protected page
00699   // (without the iBiasOffset)Protected page starts from 0x600, serial number is located in 0x690
00700   // (with the iBiasOffset) Protected page starts from 0x600, serial number is located in 0x6B0
00701   ExtEEPROM_Read(SERIALN_ADD,(unsigned char xdata *)&eepage.SerialN, SERIALN_LENGTH);
00702   user_data.SerialN = eepage.SerialN;
00703   sys_info.node_addr = 500 + (eepage.SerialN - 76300000);
00704 
00705   //Read all other settings from page 0(non-protected)
00706   ExtEEPROM_Read(PageAddr[0], (unsigned char xdata *)&eepage, PAGE_SIZE);
00707   DISABLE_INTERRUPTS;
00708   for(i=0;i<8;i++) {
00709     user_data.rAsum[i] = eepage.rasum[i];
00710     ltc2600mirror[i] = eepage.rasum[i];
00711   }
00712   for(i=0;i<64;i++) {
00713     user_data.rBias[i] = eepage.rbias[i];
00714     ltc1665mirror[i] = eepage.rbias[i];
00715   }
00716   user_data.rQpump = (unsigned int) (eepage.rqpump & 0x3FF);
00717   user_data.swBias = eepage.SWbias;
00718   ENABLE_INTERRUPTS;
00719 
00720   // Update adc2mscb_table[adcChannel].Offst values for current ONLY
00721   updateAdc2Table();
00722 #endif
00723 
00724   //-----------------------------------------------------------------------------
00725   // SST Temperatures, setting temperature offsets
00726 #ifdef _ADT7486A_
00727   SFRPAGE  = CONFIG_PAGE;
00728   P1MDOUT |= 0x0A; // Set SST_DRV1/2 in PP
00729   // External 4 SST devices
00730   SFRPAGE  = CPT1_PAGE;
00731   CPT1CN  |= 0x80; // Enable the Comparator 1
00732   CPT1MD   = 0x03; //Comparator1 Mode Selection
00733   // Local 1 SST device
00734   SFRPAGE  = CPT0_PAGE;
00735   CPT0CN  |= 0x80; // Enable the Comparator 0
00736   CPT0MD   = 0x03; //Comparator0 Mode Selection
00737  //Use default, adequate TYP (CP1 Response Time, no edge triggered interrupt)
00738 
00739   ADT7486A_Init(SST_LINE1); //  external devices
00740   ADT7486A_Init(SST_LINE2); //  local devices
00741 
00742   for (channel=0;channel < NCHANNEL_ADT7486A; channel++){
00743     ADT7486A_Cmd(ADT7486A_addrArray[channel]
00744     , SetExt1Offset
00745       , ((int)eepage.ext1offset[channel]>>8)
00746       , (int)eepage.ext1offset[channel]
00747     , SST_LINE1
00748       , &temperature); //NW
00749     delay_us(100);
00750 
00751   }
00752   for (channel=0;channel < NCHANNEL_ADT7486A; channel++){
00753     ADT7486A_Cmd(ADT7486A_addrArray[channel]
00754     , SetExt2Offset
00755       , ((int)eepage.ext2offset[channel]>>8)
00756       , (int)eepage.ext2offset[channel]
00757     , SST_LINE1
00758       , &temperature); //NW
00759     delay_us(100);
00760   }
00761 
00762   // Missing offset loading for local SST devices.
00763 #endif
00764 
00765   //-----------------------------------------------------------------------------
00766   // Turn off the card before the timer expires
00767   switchonoff(OFF);
00768 
00769   //-----------------------------------------------------------------------------
00770   // Final steps
00771   rESR = 0x0000;              // No error!
00772   rEER = 0x00;                    // Active page 0, To be written or read page 0
00773   rCTL = 0;                       // Reset control
00774   rCSR = 0x00;                    // Initial CSR
00775   user_data.error      = rESR;    // Default Error register //NW
00776   user_data.eepage     = rEER;    // Default EE page
00777   user_data.status     = rCSR;    // Shutdown state
00778   user_data.control    = 0x80;    // Manual Shutdown
00779   user_data.watchdog   = 0;       // Watchdog counter for debugging purpose
00780   for(i=0;i<8;i++){
00781     user_data.VBMon[i] = 0;
00782     user_data.IBMon[i] = 0;
00783     user_data.rVBMon[i] = 0;
00784     user_data.rIBMon[i] = 0;
00785     user_data.Temp[i]  = -128.0;
00786     user_data.eepValue = 0.0;
00787     user_data.eeCtrSet = 0;
00788   }
00789 
00790   // Debug pin on SPARE1
00791   P2MDOUT |= 0x80;  P2 |= 0x80;  // Timing port in PP = 0
00792 }

void user_loop ( void   ) 

00906                      {
00907   static unsigned char xdata eeprom_flag = CLEAR;
00908   static char xdata adcChannel = 0;
00909   float xdata volt, temperature, adc_value, ftemp;
00910   float* xdata pfData;
00911   float* xdata eep_address;
00912   unsigned long xdata mask;
00913   signed long xdata result;
00914   unsigned int xdata eeptemp_addr, *rpfData, rvolt, i;
00915   unsigned char xdata * eeptemp_source;
00916   unsigned char xdata swConversion, eep_request;
00917   char xdata ltc1665_index, ltc1665_chipChan, ltc1665_chipAdd;
00918   char xdata ltc2600_index;
00919   char xdata str[32];
00920 
00921   timing=1;
00922 
00923 //  if (!NodeOK && uptime()) {
00924     // Get Node Address from PCA
00925 //    sys_info.node_addr   = NodeAdd_get();
00926     user_data.geoadd = NodeAdd_get();
00927 //    NodeOK = 1;
00928 //  }
00929 
00930   //External ADC for REV0 cards
00931   //-----------------------------------------------------------------------------
00932 #ifdef _LTC2497_
00933   LTC2497_StartConversion(ADDR_LTC2497, adcChannel);
00934   // Make sure the result is valid!
00935   if(!LTC2497_ReadConversion(ADDR_LTC2497, adcChannel, &result)) {
00936     result = CONVER_FAC1;
00937   }
00938   adc_value = ((float)((result) + CONVER_FAC1) * (float)(EXT_VREF / CONVER_FAC2));
00939   adc_value = (adc_value * adc2mscb_table[adcChannel].Coef + adc2mscb_table[adcChannel].Offst);
00940 
00941   DISABLE_INTERRUPTS;
00942   if(adc2mscb_table[adcChannel].current) {
00943     user_data.IBMon[adc2mscb_table[adcChannel].mscbIdx] = adc_value;
00944     user_data.rIBMon[adc2mscb_table[adcChannel].mscbIdx] = result;
00945   } else {
00946     user_data.VBMon[adc2mscb_table[adcChannel].mscbIdx] = adc_value;
00947     user_data.rVBMon[adc2mscb_table[adcChannel].mscbIdx] = result;
00948   }
00949   ENABLE_INTERRUPTS;
00950 
00951   adcChannel++;
00952   adcChannel %= N_RB_CHANNEL;
00953 
00954 #endif
00955 
00956   //-----------------------------------------------------------------------------
00957   // External ADC for REV1 cards
00958   // Increment channel per user_loop
00959 #ifdef _LTC2495_
00960 
00961   LTC2495_StartConversion(ADDR_LTC2495, adcChannel, adc2mscb_table[adcChannel].gain);
00962 
00963   if(!LTC2495_ReadConversion(ADDR_LTC2495, adcChannel, &result, adc2mscb_table[adcChannel].gain)) {
00964     result = -CONVER_FAC1;
00965   }
00966 
00967   adc_value = ((float)((result - adc2mscb_table[adcChannel].Offst)) * (float)(EXT_VREF / CONVER_FAC2));
00968   adc_value = (adc_value * adc2mscb_table[adcChannel].Coef) ;
00969   //dividing by the gain
00970   adc_value /= pow(2, (adc2mscb_table[adcChannel].gain + adc2mscb_table[adcChannel].current));
00971   DISABLE_INTERRUPTS;
00972   if(adc2mscb_table[adcChannel].current) {
00973     user_data.IBMon[adc2mscb_table[adcChannel].mscbIdx] = adc_value;
00974     user_data.rIBMon[adc2mscb_table[adcChannel].mscbIdx] = result;
00975   } else {
00976     user_data.VBMon[adc2mscb_table[adcChannel].mscbIdx] = adc_value;
00977     user_data.rVBMon[adc2mscb_table[adcChannel].mscbIdx] = result;
00978   }
00979   ENABLE_INTERRUPTS;
00980 
00981   adcChannel++;                 // increment channel
00982   adcChannel %= N_RB_CHANNEL;   // modulus 16
00983 
00984 #endif
00985 
00986   //-----------------------------------------------------------------------------
00987   // Checking switches flag for toggling the switches
00988 #ifdef _PCA9539_
00989   if(PCA_Flag) {
00990     swConversion = user_data.swBias;
00991     PCA9539_Conversion(&swConversion);
00992     PCA9539_WriteByte(BIAS_WRITE, ~swConversion);
00993     PCA_Flag = CLEAR;
00994   }
00995 #endif
00996 
00997   //-----------------------------------------------------------------------------
00998   // Checking DAC charge pump flag for adjusting the charge pump voltage
00999 #ifdef _LTC1669_
01000   if(LTC1669_Flag) {
01001     LTC1669_SetDAC(ADDR_LTC1669, LTC1669_INT_BG_REF, user_data.rQpump);
01002     LTC1669_Flag = CLEAR;
01003   }
01004 #endif
01005 
01006   //-----------------------------------------------------------------------------
01007   // Power Up based on CTL bit
01008   if (CPup) {
01009     rCSR = user_data.status;
01010     rESR = 0x0000;   // Reset error status at each Power UP
01011     // Clear Status
01012     SsS = OFF;
01013     DISABLE_INTERRUPTS;
01014     user_data.status  = rCSR;
01015     user_data.error   = rESR;
01016     ENABLE_INTERRUPTS;
01017     // Power up Card
01018     switchonoff(ON);
01019     delay_ms(100);
01020     // Force Check on Voltage during loop
01021     bCPupdoitNOW = ON;
01022     // Wait for Check before setting SPup
01023     // Reset Action
01024     CPup = CLEAR;  // rCTL not updated yet, publish state after U/I check
01025   } // Power Up
01026 
01027 #ifdef _ADT7486A_
01028   //-----------------------------------------------------------------------------
01029   // Temperature reading/monitoring based on time for internal temperature
01030   // Board Temperature
01031   if ( bCPupdoitNOW || ((uptime() - sstTime) > SST_TIME)) {
01032 
01033     for (channel=0;channel < NCHANNEL_ADT7486A; channel++) {
01034       if(!ADT7486A_Cmd(ADT7486A_addrArray[channel], GetIntTemp, SST_LINE1, &temperature)) {
01035          RdssT = CLEAR;
01036         if (temperature > eepage.uuCTlimit) IntssTT = ON;
01037         PublishVariable(&(user_data.ssTemp[channel]), temperature, IntssTT);
01038       } else publishErr(RdssT);
01039     }  // For loop
01040     sstTime = uptime();
01041   }  // Internal temperature
01042 
01043   yield();
01044 
01045   //-----------------------------------------------------------------------------
01046   // Temperature reading/monitoring based on time for external temperature
01047   // FGD Temperature
01048   if (bCPupdoitNOW || ((uptime() - sstExtTime) > SST_TIME)) {
01049 
01050     for (channel=0;channel < NCHANNEL_ADT7486A; channel++) {
01051       if(!ADT7486A_Cmd(ADT7486A_addrArray[channel], GetExt1Temp, SST_LINE1, &temperature)) {
01052         RdssT = CLEAR;
01053         if (temperature > eepage.uSSTlimit) ExtssTT = ON;
01054         PublishVariable(&(user_data.Temp[(channel*2)]), temperature, ExtssTT);
01055       } else publishErr(RdssT);
01056     } // For loop 1
01057 
01058     for (channel=0;channel < NCHANNEL_ADT7486A; channel++) {
01059       if(!ADT7486A_Cmd(ADT7486A_addrArray[channel], GetExt2Temp, SST_LINE1, &temperature)) {
01060         RdssT = CLEAR;
01061         if (temperature > eepage.uSSTlimit) ExtssTT = ON;
01062         PublishVariable(&(user_data.Temp[(channel*2)+1]), temperature, ExtssTT);
01063       } else publishErr(RdssT);
01064     }  // For loop 2
01065 
01066    yield();
01067  
01068   //-----------------------------------------------------------------------------
01069   // Local board temperature reading (top board, ADC
01070   rCSR = user_data.status;
01071   if (SPup) {
01072     pcbssTT = OFF;
01073     if(!ADT7486A_Cmd(ADT7486A_ADDR4, GetExt1Temp, SST_LINE2, &temperature)) {
01074       RdssT = CLEAR;
01075       if (temperature > eepage.uuCTlimit) pcbssTT = ON;
01076 //      if (pcbssTT) sprintf (user_data.warning, "Last Trip ASIC Temp: %6.3f [%6.3f]", temperature, eepage.uuCTlimit);
01077       PublishVariable(&(user_data.afterTemp), temperature, pcbssTT);
01078     } else publishErr(RdssT);
01079 
01080     if(!ADT7486A_Cmd(ADT7486A_ADDR4, GetExt2Temp, SST_LINE2, &temperature)) {
01081       RdssT = CLEAR;
01082       if (temperature > eepage.uuCTlimit) pcbssTT = ON;
01083 //      if (pcbssTT) sprintf (user_data.warning, "Last Trip ADC Temp: %6.3f [%6.3f]", temperature, eepage.uuCTlimit);
01084       PublishVariable(&(user_data.adcTemp), temperature, pcbssTT);
01085     } else publishErr(RdssT);
01086 
01087     if(!ADT7486A_Cmd(ADT7486A_ADDR4, GetIntTemp, SST_LINE2, &temperature)) {
01088       RdssT = CLEAR;
01089       if (temperature > eepage.uuCTlimit) pcbssTT = ON;
01090 //      if (pcbssTT) sprintf (user_data.warning, "Last Trip Vreg Temp: %6.3f [%6.3f]", temperature, eepage.uuCTlimit);
01091       PublishVariable(&(user_data.regTemp), temperature, pcbssTT);
01092     } else publishErr(RdssT);
01093   }  // SPup
01094 //-PAA remove code to prevent overwriting the temp in case the power is off due to over limit.
01095 //  else {
01096 //    PublishVariable(&(user_data.adcTemp), -128.0, pcbssTT);
01097 //    PublishVariable(&(user_data.afterTemp), -128.0, pcbssTT);
01098 //    PublishVariable(&(user_data.regTemp), -128.0, pcbssTT);
01099 //  }  // Not SPup
01100 
01101   // ext Temp error not yet published...
01102   sstExtTime = uptime();
01103 } // External Temperature
01104 #endif
01105 
01106   //-----------------------------------------------------------------------------
01107   // Periodic check and After power up
01108   // uCtemperature, Voltage and Current readout
01109   if ( bCPupdoitNOW || ((uptime() - currentTime) > 1)) {
01110     //-----------------------------------------------------------------------------
01111     // uC Temperature reading/monitoring based on time
01112     // Read uC temperature, set error if temp out of range
01113     volt = read_voltage(TCHANNEL, &rvolt, 0, 0, IntGAIN1 );
01114     /* convert to deg. C */
01115     temperature = 1000 * (volt - 0.776) / 2.86;   // Needs calibration
01116     /* strip to 0.1 digits */
01117     temperature = ((int) (temperature * 10 + 0.5)) / 10.0;
01118     if ((temperature < eepage.luCTlimit) || (temperature > eepage.uuCTlimit)) uCT = ON; // out of range
01119     PublishVariable(&(user_data.uCTemp), temperature, uCT);
01120 
01121     //-----------------------------------------------------------------------------
01122     // Internal ADCs monitoring Voltages and Currents based on time
01123     // All U/I except Qpump, set error if value out of range
01124     pfData  = &(user_data.VBias);
01125     rpfData = &(user_data.rVBias);
01126     // Skip Current limit check if Ccurrent has been set (rCTL:0x4)
01127     for (channel=0 ; channel<INTERNAL_N_CHN ; channel++) {
01128       volt = read_voltage(channel, &rvolt, iadc_table[channel].coeff
01129                                          , iadc_table[channel].offset
01130                                          , iadc_table[channel].gain );
01131       DISABLE_INTERRUPTS;
01132       pfData[channel] = volt;
01133       rpfData[channel] = rvolt;
01134       ENABLE_INTERRUPTS;
01135       mask = (1<<channel); 
01136 
01137       // Check for Qpump Voltage ON (> 40V), set error if value out of range
01138       if (channel == 0)
01139         if ((volt < eepage.lVIlimit[channel])) SqPump = OFF;
01140         else SqPump = ON;
01141 
01142       // Skip the first two channels(charge pump)
01143       if ((channel > 1)) {  // Skip vQ, I
01144         if ((volt < eepage.lVIlimit[channel]) || (volt > eepage.uVIlimit[channel])) {
01145            rESR |= mask; // out of range
01146            sprintf (str, "Last Trip: %6.3f [%6.3f /", volt, eepage.lVIlimit[channel]);
01147 //           sprintf(user_data.warning, "%s%6.3f] (min/max)", str, eepage.uVIlimit[channel]);
01148         }
01149       } // skip v/iQ channel
01150     }  // for loop
01151 
01152     // U/I error not yet published ...
01153 
01154     // update time for next loop
01155     currentTime = uptime();
01156   }  // Voltage, Current & Temperature test
01157 
01158   //-----------------------------------------------------------------------------
01159   // Finally take action based on ERROR register
01160   if (rESR & (VOLTAGE_MASK | BTEMPERATURE_MASK | CURRENT_MASK)) {   // 
01161     SPup = SqPump = OFF;
01162     switchonoff(OFF);
01163     SsS = ON;
01164   } else if (bCPupdoitNOW) {
01165     bCPupdoitNOW = OFF;   // Reset flag coming from PowerUp sequence
01166     SsS = SmSd = OFF;
01167     LTC2600_Flag = LTC1665_Flag = bDacdoitNOW = ON; // Allow & force DACs reload
01168     SPup = ON; // Set status ON
01169   }
01170 
01171   // Publish Control, Error and Status for all the bdoitNOW actions.
01172   publishAll();
01173 
01174   //-----------------------------------------------------------------------------
01175   // Checking ASUM flag for updating the asum values
01176 #ifdef _LTC2600_
01177   rCSR = user_data.status;    
01178   if(SPup && LTC2600_Flag) {
01179     for(ltc2600_index=0; ltc2600_index < 8; ltc2600_index++) {
01180       if(bDacdoitNOW || (ltc2600mirror[ltc2600_index] != user_data.rAsum[ltc2600_index])) {
01181         LTC2600_Cmd(WriteTo_Update, LTC2600_LOAD[ltc2600_index], user_data.rAsum[ltc2600_index]);
01182         ltc2600mirror[ltc2600_index] = user_data.rBias[ltc2600_index];
01183       }
01184     }
01185     LTC2600_Flag = CLEAR;
01186   }
01187 #endif
01188 
01189   //-----------------------------------------------------------------------------
01190   // Checking APD flag for updating the APD dacs
01191 #ifdef _LTC1665_
01192   // Get current status of the Card, don't update DAC in case of no Power, keep flag up
01193   rCSR = user_data.status;    
01194   if(SPup && LTC1665_Flag) {
01195     for(ltc1665_index=0; ltc1665_index<64; ltc1665_index++) {
01196       if(bDacdoitNOW || (ltc1665mirror[ltc1665_index] != user_data.rBias[ltc1665_index])) {
01197         ltc1665_chipChan = (ltc1665_index / 8) + 1;
01198         ltc1665_chipAdd  = (ltc1665_index % 8) + 1;
01199         LTC1665_Cmd(ltc1665_chipAdd, user_data.rBias[ltc1665_index] , ltc1665_chipChan);
01200         ltc1665mirror[ltc1665_index] = user_data.rBias[ltc1665_index];
01201       }
01202     }
01203     //LTC1665_Cmd(chipAdd,user_data.rBias[BiasIndex] ,chipChan);
01204     LTC1665_Flag = CLEAR;
01205   }
01206 #endif
01207 
01208   //
01209   // Reset the force DAC setting when coming from CPup or Restore 
01210   bDacdoitNOW = OFF;
01211 
01212   //-----------------------------------------------------------------------------
01213   // Set Manual Shutdown based on Index
01214   if (CmSd) {
01215     rCSR = user_data.status;
01216     SmSd = ON;  // Set Manual Shutdown
01217     pca_operation(Q_PUMP_OFF);
01218     switchonoff(OFF);
01219     SPup = SqPump = OFF;   // Clear Qpump and card status
01220     CmSd = CLEAR;          // Reset action
01221     publishCtlCsr();       // Publish Registers state
01222   } // Manual Shutdown
01223 
01224   //-----------------------------------------------------------------------------
01225   // Toggle  Asum counter ON/OFF based on Index
01226   if (CAsum) {
01227     if (ASUM_TESTN) ASUM_TESTN = OFF;
01228     else            ASUM_TESTN = ON;
01229     SAsum = ASUM_TESTN;   // Set status based on port pin state
01230     CAsum = CLEAR;        // Reset Action
01231     publishCtlCsr();      // Publish Registers state
01232   } // Asum
01233 
01234   //-----------------------------------------------------------------------------
01235   // Checking the eeprom control flag
01236   if (EEP_CTR_Flag) {
01237     //Checking for the special instruction
01238     if (user_data.eeCtrSet & EEP_CTRL_KEY) {
01239       // Valid index range
01240       if( (int)(user_data.eeCtrSet & 0x000000ff) >= EEP_RW_IDX) {
01241         // Float area from EEP_RW_IDX, count in Float size, No upper limit specified!
01242         eep_address = (float*)&eepage + (user_data.eeCtrSet & 0x000000ff);
01243         //Checking for the write request
01244         if (user_data.eeCtrSet & EEP_CTRL_WRITE){
01245           *eep_address = user_data.eepValue;  // Copy user_data into eepage structure
01246           //Checking for the read request
01247         } else if (user_data.eeCtrSet & EEP_CTRL_READ) {
01248           DISABLE_INTERRUPTS;
01249           user_data.eepValue = *eep_address;  // Publish eep value in user_data
01250           ENABLE_INTERRUPTS;
01251         } else {
01252           // Tell the user that inappropriate task has been requested
01253           DISABLE_INTERRUPTS;
01254           user_data.eeCtrSet = EEP_CTRL_INVAL_REQ;
01255           ENABLE_INTERRUPTS;
01256         }
01257       } else {
01258         DISABLE_INTERRUPTS;
01259         user_data.eeCtrSet = EEP_CTRL_OFF_RANGE;
01260         ENABLE_INTERRUPTS;
01261       }
01262     } else {
01263       // Tell the user that invalid key has been provided
01264       DISABLE_INTERRUPTS;
01265       user_data.eeCtrSet = EEP_CTRL_INVAL_KEY;
01266       ENABLE_INTERRUPTS;
01267     }
01268     EEP_CTR_Flag = CLEAR;
01269   }  // if eep
01270 
01271   //-----------------------------------------------------------------------------
01272   // EEPROM Save procedure based on CTL bit
01273 #ifdef _ExtEEPROM_
01274   if (CeeS) {
01275     // Check if we are here for the first time
01276     if (!eeprom_flag) {  // first in
01277       rCSR = user_data.status;
01278 
01279       // Update eepage with the current user_data variables
01280       for(i=0;i<8;i++)  eepage.rasum[i] = user_data.rAsum[i];
01281       for(i=0;i<64;i++) eepage.rbias[i] = user_data.rBias[i];
01282       eepage.rqpump = ((unsigned int) user_data.rQpump & 0x3FF);
01283       eepage.SWbias = user_data.swBias;
01284 
01285       //Temporary store the first address of page
01286       eeptemp_addr = PageAddr[(unsigned char)(user_data.eepage & 0x07)];
01287       //Temporary store the first address of data which has to be written
01288       eeptemp_source = (unsigned char xdata *)&eepage;
01289     }
01290 
01291     // EEPROM clear request
01292     if (CeeClr)  eep_request = WRITE_EEPROM;   //---PAA--- WAS CLEAR BUT WILL ERASE EEPROM!
01293     else         eep_request = WRITE_EEPROM;
01294 
01295     status = ExtEEPROM_Write_Clear (eeptemp_addr
01296                                          , &eeptemp_source
01297                                          , PAGE_SIZE
01298                                          , eep_request
01299                                          , &eeprom_flag);
01300 
01301     if (status == DONE) {
01302       SeeS = DONE;
01303       eeprom_flag = CLEAR;
01304       CeeS = CLEAR;
01305       //Set the active page
01306       user_data.eepage |= ((user_data.eepage & 0x07) << 5);
01307     } else  SeeS = FAILED;
01308 
01309     publishCtlCsr();      // Publish Registers state
01310   } // eep Save
01311 
01312   //-----------------------------------------------------------------------------
01313   // EEPROM Restore procedure based on CTL bit
01314   if (CeeR) {
01315     rCSR = user_data.status;
01316     // Read the active page
01317     status = ExtEEPROM_Read (PageAddr[(unsigned char)(user_data.eepage & 0x07)]
01318                           , (unsigned char xdata *) &eepage, PAGE_SIZE);
01319     if (status == DONE) {
01320       SeeR = DONE;
01321  
01322       // Publish user_data new settings
01323       DISABLE_INTERRUPTS;
01324       for(i=0;i<8;i++)  user_data.rAsum[i] = ltc2600mirror[i] = eepage.rasum[i];
01325       for(i=0;i<64;i++) user_data.rBias[i] = ltc1665mirror[i] = eepage.rbias[i];
01326       user_data.rQpump = (unsigned int) (eepage.rqpump & 0x3FF);
01327       user_data.swBias = eepage.SWbias;
01328       ENABLE_INTERRUPTS;
01329 
01330       LTC2600_Flag = LTC1665_Flag = bDacdoitNOW = ON; // Allow & force DACs reload
01331 
01332       // Update adc2mscb_table[adcChannel].Offst values for current and offset
01333       updateAdc2Table();
01334     } else  SeeR = FAILED;
01335 
01336     CeeR = CLEAR;       // Reset action
01337     publishCtlCsr();    // Publish Registers state
01338   }  // eep Restore
01339 #endif
01340 
01341   //-----------------------------------------------------------------------------
01342   // Auto calibration for the iBiasOffset
01343   if (Ccal) {
01344     switch (calState) {
01345     case 10:
01346       // Check Card ON Qpump ON to start with:
01347       rCSR = user_data.status;
01348       if (SPup && SqPump && (user_data.swBias == 0xff)) {
01349         Scal = ON;
01350         // Publish Registers state
01351         DISABLE_INTERRUPTS;
01352         user_data.status  = rCSR;
01353         ENABLE_INTERRUPTS;
01354         calState = 15;
01355       } else { 
01356         SeeS = CLEAR;
01357         Ccal = CLEAR;
01358         Scal = OFF;
01359         calState = 0;   // unknown state
01360         // Publish Registers state
01361         publishCtlCsr();
01362       }
01363       break;
01364     case 15:
01365       // Remember previous rQpump & Switch and set Cal value
01366       calQpumpSave = user_data.rQpump;
01367       calSwSave    = user_data.swBias;
01368 #ifdef _LTC1669_
01369       LTC1669_SetDAC(ADDR_LTC1669, LTC1669_INT_BG_REF, eepage.calQpump);
01370 #endif
01371       // Reset eePage Offset array
01372       for (k=0;k<8;k++) eepage.iBiasOffset[k] = 0.0;
01373       calState = 30;
01374       // Reset calTime to current time
01375       calTime = uptime();
01376       break;
01377     case 30:
01378       // Wait 10 seconds
01379       if ((uptime() - calTime) > 10) {
01380         calCount = 0;
01381         calState = 40;
01382       }
01383       break;
01384     case 40:
01385       // Read Offset N times
01386       if (calCount < calNumber) {
01387         if (adcChannel == 0) {
01388           calCount++;
01389           for (k=0;k<8;k++) eepage.iBiasOffset[k] += (float) user_data.rIBMon[k];
01390         }
01391       } else calState = 50;
01392       break;
01393     case 50:
01394       // Compute average
01395       for (k=0;k<8;k++) {
01396         ftemp = eepage.iBiasOffset[k] / calNumber;
01397         eepage.iBiasOffset[k] = ftemp;
01398       }
01399       // Update ADC Table
01400       updateAdc2Table();
01401       calState = 60;
01402       break;
01403     case 60:
01404       // Restore Qpump value
01405 #ifdef _LTC1669_
01406       LTC1669_SetDAC(ADDR_LTC1669, LTC1669_INT_BG_REF, calQpumpSave);
01407 #endif
01408       // Clear the Calibration command
01409       Ccal = CLEAR;
01410       calState = 0;   // unknown state
01411       Scal = OFF;
01412       // eepage written to EEprom
01413       CeeS = ON;
01414       // Publish Registers state
01415       publishCtlCsr();
01416       break;
01417     default:
01418       break;
01419     }
01420     DISABLE_INTERRUPTS;
01421     SFRPAGE = SMB0_PAGE;
01422     user_data.debugsmb = SMB0STA;
01423     ENABLE_INTERRUPTS;
01424   }  // Calibration
01425 
01426   //-----------------------------------------------------------------------------
01427   // General loop delay
01428   DISABLE_INTERRUPTS;
01429   user_data.debugsmb = smbdebug;
01430   ENABLE_INTERRUPTS;
01431   timing=0;
01432   delay_ms(10);
01433 
01434 }  // End of User loop

unsigned char user_read ( unsigned char  index  ) 

00861 {
00862   if (index == 0) {
00863   }
00864   return 0;
00865 }

void user_write ( unsigned char  index  ) 

00804 {
00805 
00806   // In case of you changing common control bit (ex. EXT/IN switch bit)
00807   // the change should be distributed to other channels.
00808   rCSR = user_data.status;
00809   if (index == IDXCTL) {
00810     rCTL = user_data.control;
00811     if (Ccal) calState = 10;
00812   } // IDXCTL
00813 
00814   //
00815   // -- Index Bias Dac
00816   if (index == IDXBSWITCH) {
00817 #ifdef _PCA9539_
00818     if (!SsS) PCA_Flag = 1;  // !Shutdown
00819 #endif
00820   }
00821 
00822   //
00823   //-- EE Page function
00824   if (index == IDXEEP_CTL) EEP_CTR_Flag = 1;
00825 
00826   // -- ASUM Threshold DACs
00827   if ((index >= FIRST_ASUM) && (index < LAST_ASUM)) {
00828 #ifdef _LTC2600_
00829     // Update Bias Dac voltages as requested by bit5 of control register
00830     if (!SsS) LTC2600_Flag = 1;  // !Shutdown
00831 #endif
00832   }
00833   //
00834   // -- Index Bias Dac
00835   if ((index >= FIRST_BIAS) && (index < LAST_BIAS)) {
00836 #ifdef _LTC1665_
00837     if (!SsS) LTC1665_Flag = 1;  // Shutdown
00838 #endif
00839   }
00840   //
00841   // --- Index Qpump DAC
00842 #ifdef _LTC1669_  //SqPump && 
00843   if((index == IDXQVOLT) && !SsS) LTC1669_Flag = 1;   // Qpump on and !Shutdown
00844 #endif
00845 
00846   //
00847   // --- ASum Hidden Register
00848   if (index == IDXASUM_CTL) {
00849     //-PAA- At boot the Sync is high for 1sec while power is up
00850     // to shutdown sync w 145 0x4
00851     // to restart       w 145 0x5 (Sync + pwd)
00852     //                  w 145 0x4 (sync = 0)
00853     ASUM_SYNC   =  user_data.asumCtl & 0x1;
00854     ASUM_TESTN  = (user_data.asumCtl & 0x2) >> 1;
00855     ASUM_PWDN   = (user_data.asumCtl & 0x4) >> 2;
00856   }
00857 }


Variable Documentation

unsigned char idata _n_sub_addr = 1

sbit ASUM_PWDN = P1 ^ 5

sbit ASUM_SYNC = P1 ^ 7

sbit ASUM_TESTN = P1 ^ 6

unsigned char xdata AsumIndex

unsigned char bdata bChange

sbit bCPupdoitNOW = bChange ^ 0

sbit bDacdoitNOW = bChange ^ 1

unsigned char xdata BiasIndex

int xdata calCount = 0

float xdata calNumber = 10.0

char xdata calQpumpSave = 0

int xdata calState = 0

char xdata calSwSave = 0

unsigned long xdata calTime = 0

sbit CAsum_Flag = bChange ^ 7

unsigned char xdata channel

unsigned char xdata chipAdd

unsigned char xdata chipChan

unsigned long xdata currentTime = 0

sbit DACRESETN = P1 ^ 0

sbit EEP_CTR_Flag = bChange ^ 6

int xdata k

sbit LTC1665_Flag = bChange ^ 4

sbit LTC1669_Flag = bChange ^ 5

sbit LTC2600_Flag = bChange ^ 3

char code node_name[] = "FEB64"

unsigned char xdata NodeOK = 0

sbit PCA_Flag = bChange ^ 2

sbit PCARESETN = P1 ^ 2

sbit REG_EN = P3 ^ 2

unsigned long xdata sstExtTime = 0

unsigned long xdata sstTime = 0

unsigned char xdata status

char idata svn_rev_code[] = "$Rev: 1185 $"

SYS_INFO sys_info

MSCB_INFO_VAR* variables = vars

MSCB_INFO_VAR code vars[]


Generated on 10 Jun 2013 for FGDC8051 by  doxygen 1.4.7