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

#include <stdio.h>
#include <math.h>
#include "mscbemb.h"
#include "cmb.h"
#include "Devices/adc_internal.h"
#include "Protocols/CMB_SPI_handler.h"

Functions

void publishCtlCsr (void)
void publishErr (bit errbit)
void publishAll ()
void CMB_SPI_WriteByte (unsigned char cmbinst, unsigned char cmbdata)
unsigned char CMB_SPI_ReadByte (unsigned char cmbinst)
void PublishVariable (float xdata *pvarDest, float varSrce, bit errbit)
unsigned int NodeAdd_get (void)
void switchonoff (unsigned char command)
float read_voltage (unsigned char channel, unsigned int *rvalue, unsigned char gain)
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 [] = "cmb"
char idata svn_rev_code [] = "$Rev: 942 $"
sbit CFG_RECOVER = P2 ^ 0
sbit CMB_CSn = P2 ^ 1
sbit CLK_SEL = P0 ^ 7
sbit V4_ENn = P2 ^ 3
sbit V4_OCn = P2 ^ 4
unsigned char idata _n_sub_addr = 1
unsigned char xdata channel
unsigned long xdata tempTime = 0
unsigned long xdata sstTime = 0
unsigned char xdata status
unsigned char xdata channel
unsigned char xdata NodeOK = 0
unsigned int xdata crate_add = 0
unsigned int xdata pca_add = 0
unsigned char bdata bChange
sbit bCPupdoitNOW = bChange ^ 0
sbit EEP_CTR_Flag = bChange ^ 1
sbit bMeasuredOnce = bChange ^ 2
MSCB_INFO_VAR code vars []
MSCB_INFO_VARvariables = vars
SYS_INFO sys_info

Function Documentation

unsigned char CMB_SPI_ReadByte ( unsigned char  cmbinst  ) 

00146                                                       {
00147     unsigned char cdata;
00148     CMB_CSn = 0;
00149     CMBSPI_WriteByte(cmbinst);
00150     cdata = CMBSPI_ReadByteRising();
00151     CMB_CSn = 1;
00152     return cdata;
00153 }

void CMB_SPI_WriteByte ( unsigned char  cmbinst,
unsigned char  cmbdata 
)

00137                                                                      {
00138     CMB_CSn = 0;
00139     CMBSPI_WriteByte(cmbinst);
00140     CMBSPI_WriteByte(cmbdata);
00141     CMB_CSn = 1;
00142 }

unsigned int NodeAdd_get ( void   ) 

00167 {
00168   //
00169   //-----------------------------------------------------------------------------
00170   // Address retrieval
00171   // Configure and read the address
00172   // C C C C C C 1 0 0 is the MSCB Addr[8..0], 9 bits
00173   // Modifying what the board reads from the Pins 
00174   SFRPAGE = CONFIG_PAGE;
00175   // Change p3 to digital input
00176   P3MDOUT = 0x00;
00177   P3=0xFF;
00178   // Read crate address
00179   pca_add= P3;
00180   crate_add= ((~pca_add)<<3)  & 0x01F8;
00181   return ( (crate_add &  0x01FC) | 0x0004);
00182 }

void publishAll (  ) 

00128                   {
00129   user_data.control = rCTL;
00130   user_data.status  = rCSR;
00131   user_data.error   = rESR;
00132   ENABLE_INTERRUPTS;
00133 }

void publishCtlCsr ( void   ) 

00110                          {
00111     DISABLE_INTERRUPTS;
00112     user_data.control = rCTL;
00113     user_data.status  = rCSR;
00114     ENABLE_INTERRUPTS;
00115 }

void publishErr ( bit  errbit  ) 

00119                             {
00120     DISABLE_INTERRUPTS;
00121     errbit = SET;
00122     user_data.error   = rESR;
00123     ENABLE_INTERRUPTS;
00124 }

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

00157                                                                         {
00158     DISABLE_INTERRUPTS;
00159     *pvarDest = varSrce;
00160     if (errbit) user_data.error = rESR;
00161     ENABLE_INTERRUPTS;
00162 }

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

00237 {
00238   unsigned int  xdata i;
00239   float         xdata voltage;
00240   unsigned int  xdata rawbin;
00241   unsigned long xdata rawsum = 0;
00242 
00243   // Averaging on 10 measurements for now.
00244   for (i=0 ; i<10 ; i++) {
00245     rawbin = adc_read(channel, gain);
00246     rawsum += rawbin;
00247     yield();
00248   }
00249 
00250   /* convert to V */
00251   *rvalue =  rawsum / 10;
00252   voltage = (float)  *rvalue;                  // averaging
00253   voltage = (float)  voltage / 1024.0 * VREF;  // conversion
00254   if ( channel != TCHANNEL)
00255     voltage = voltage * coeff[channel] + offset[channel];
00256 
00257   return voltage;
00258 }

void switchonoff ( unsigned char  command  ) 

00187 {
00188   if(command==ON)
00189   {
00190     // Turn ON card
00191     SFRPAGE  = CONFIG_PAGE;
00192     P2MDOUT &= ~0x08;     // V4_ENn(P2.3) OD
00193     V4_ENn = 0;           // ON
00194 
00195     rESR = 0x0000;   // Reset error status at each Power UP
00196     rCSR = user_data.status;
00197     SPup = ON;  // Set Status
00198     SsS = OFF;  // Clear System Shutdown
00199     SmSd = OFF; // Clear Manual Shutdown
00200 
00201     // Publish Status and Error
00202     DISABLE_INTERRUPTS;
00203     user_data.status  = rCSR;
00204     user_data.error  = rESR;
00205     ENABLE_INTERRUPTS;
00206 
00207      // Setup CMB SPI ports   
00208     P2MDOUT |= 0x20;  // CMB_SPI_SCK  (P2.5) PP
00209     P2MDOUT |= 0x40;  // CMB_SPI_MOSI (P2.6) PP
00210     P2MDOUT &= ~0x80; // CMB_SPI_MISO (P2.7) OD
00211     P2MDOUT |= 0x02; //  CMB_CS       (P2.1) PP
00212     P2MDOUT |= 0x01; //  CFG_RECOVER  (P2.0) PP
00213     CMB_CSn = 1;
00214 
00215     CMBSPI_Init();
00216 
00217     delay_ms(1000);
00218     CMB_SPI_WriteByte(CMBSPI_WADDRESS, ~pca_add);
00219     delay_us(100);
00220     user_data.eepage = CMB_SPI_ReadByte(CMBSPI_RADDRESS);
00221     delay_us(100);
00222     CMB_SPI_WriteByte(CMBSPI_WADDRESS, ~pca_add);
00223     delay_us(100);
00224     user_data.spare = CMB_SPI_ReadByte(CMBSPI_RADDRESS);
00225 
00226  } else if(command==OFF) {
00227     // Switch all the ports to open drain except for...
00228     SFRPAGE  = CONFIG_PAGE;
00229     P2MDOUT = 0;
00230     V4_ENn = 1;
00231   }
00232 }

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

00407 {
00408   /* echo input data */
00409   data_out[0] = data_in[0];
00410   data_out[1] = data_in[1];
00411   return 2;
00412 }

void user_init ( unsigned char  init  ) 

00265 {
00266   char xdata i;
00267 
00268  /* Format the SVN and store this code SVN revision into the system */
00269   for (i=0;i<4;i++) {
00270     if (svn_rev_code[6+i] < 48) {
00271       svn_rev_code[6+i] = '0';
00272     }
00273   }
00274   sys_info.svn_revision = (svn_rev_code[6]-'0')*1000+
00275     (svn_rev_code[7]-'0')*100+
00276     (svn_rev_code[8]-'0')*10+
00277     (svn_rev_code[9]-'0');
00278 
00279   i = cur_sub_addr();
00280 
00281   if (init){
00282     user_data.FPGATemp = 0;
00283     user_data.Vrg1Temp = 0;
00284     user_data.Vrg2Temp = 0;
00285     user_data.error = 0;
00286     user_data.SerialN = 0x0;
00287     sys_info.node_addr = cur_sub_addr();
00288   }
00289 
00290   user_data.control = 0;
00291   user_data.status = 0;
00292   user_data.error = 0;
00293   user_data.spare = 0;
00294   user_data.eepage = 0;
00295 
00296   // Update local registers
00297   rCTL = user_data.control;
00298   rCSR = user_data.status;
00299 
00300   //
00301   // Group setting
00302   sys_info.group_addr  = 400;
00303   
00304   bMeasuredOnce = 0;
00305 
00306   //-----------------------------------------------------------------------------
00307   // Initial setting for communication and overall ports (if needed).
00308   SFRPAGE  = CONFIG_PAGE;
00309   P0MDOUT |= 0x20;   // add RS485_ENABLE(P0.5) in push-pull
00310 
00311   //-----------------------------------------------------------------------------
00312   // uC Miscellaneous ADCs (V/I Monitoring)
00313   SFRPAGE  = CONFIG_PAGE;
00314   //  P3MDOUT |= 0x1C; //Setting the Regulators control pins to push pull (3 Vreg)
00315   adc_internal_init();
00316 
00317 #ifdef _ADT7486A_
00318   //-----------------------------------------------------------------------------
00319   // SST Temperatures
00320   SFRPAGE  = CONFIG_PAGE;
00321   P1MDOUT |= 0x01; // Setting the SST_DRV(P1.0) (SST) to push pull
00322   SFRPAGE  = CPT1_PAGE;
00323   CPT1CN  |= 0x80; // Enable the Comparator 1
00324   CPT1MD   = 0x03; //Comparator1 Mode Selection
00325   //Use default, adequate TYP (CP1 Response Time, no edge triggered interrupt)
00326 
00327   ADT7486A_Init(SST_LINE1);
00328 #endif
00329 
00330 #ifdef _ExtEEPROM_
00331   //
00332   //-----------------------------------------------------------------------------
00333   // EEPROM memory Initialization/Retrieval
00334   SFRPAGE  = CONFIG_PAGE;
00335   P1MDOUT |= 0x80;  // Setting the RAM_CSn(P1.7) to push pull
00336   P1MDOUT |= 0x06;  // Setting the SPI_MOSI(P1.1) and SPI_SCK(P1.2) to push pull
00337   P1MDOUT &= ~0x20; // Setting the RAM_WPn(P1.5) to OD
00338   ExtEEPROM_Init();
00339 
00340   // Read only the serial number from the protected page
00341   ExtEEPROM_Read(SERIALN_ADD,(unsigned char xdata *)&eepage.SerialN, SERIALN_LENGTH);
00342   user_data.SerialN = eepage.SerialN;
00343   //
00344   // Read all other settings from page 0(non-protected)
00345   ExtEEPROM_Read(PageAddr[0], (unsigned char xdata *)&eepage, PAGE_SIZE);
00346  #endif
00347 
00348   // Get Node Address from P3 port
00349   sys_info.node_addr   = NodeAdd_get();
00350 
00351   //-----------------------------------------------------------------------------
00352   // Clock Selection P0.7 default to External Clock (LVDS)
00353   SFRPAGE  = CONFIG_PAGE;
00354   P0MDOUT &= ~0x80;  // CLK_SEL (P0.7) OD
00355   CLK_SEL = SXclk = ON;
00356 
00357   //-----------------------------------------------------------------------------
00358   // Over Current Error bit
00359   SFRPAGE = CONFIG_PAGE;
00360   P2MDOUT &= ~0x10;  // V4_OC(P2.4) OD for read
00361 
00362   //-----------------------------------------------------------------------------
00363   // Configure Recovery
00364   P2MDOUT |= 0x01;  // CFG_RECOVER(P2.0) PP for write
00365 
00366   //-----------------------------------------------------------------------------
00367   // Power up the card for now
00368   switchonoff(OFF);
00369 
00370   SmSd = OFF;  // Set Manual Shutdown
00371   SPup = OFF;
00372   // Reset Action
00373   CmSd = CLEAR;  // rCTL not yet published
00374   Cdeb1 = CLEAR;
00375   
00376   // Publish Registers state
00377   DISABLE_INTERRUPTS;
00378   user_data.control = rCTL;
00379   user_data.status  = rCSR;
00380   ENABLE_INTERRUPTS;
00381 }

void user_loop ( void   ) 

00415                      {
00416 
00417   float xdata volt, temperature, *pfData;
00418   float* xdata eep_address;
00419   unsigned int xdata eeptemp_addr;
00420   unsigned char xdata *eeptemp_source;
00421   unsigned char xdata eep_request, fpgaStatus, AsumLock;
00422   static  unsigned char xdata eeprom_flag = CLEAR;
00423   unsigned int *xdata rpfData;
00424   unsigned int xdata i, rvolt;
00425 
00426   //-----------------------------------------------------------------------------
00427   // Get node Address after 1" of running time
00428   if (!NodeOK && uptime()) {
00429     sys_info.node_addr   = NodeAdd_get();
00430     NodeOK = 1;
00431   }
00432 
00433   //-----------------------------------------------------------------------------
00434   // Power Up based on CTL bit
00435   if (CPup) {
00436     switchonoff(ON);
00437     delay_ms(100);
00438     // Force Check on Voltage
00439     bCPupdoitNOW = ON;
00440     // Reset Action
00441     CPup = CLEAR;  // rCTL not updated yet, publish state after U/I check
00442     // Reset All error
00443     rESR = 0x0000;
00444 
00445   } // Power Up
00446 
00447   //-----------------------------------------------------------------------------
00448   // Set Manual Shutdown based on Index
00449   if (CmSd) {
00450     rCSR = user_data.status;
00451     SmSd = ON;  // Set Manual Shutdown
00452     switchonoff(OFF);
00453     SPup = OFF;
00454     // Reset Action
00455     CmSd = CLEAR;  // rCTL not yet published
00456     // Publish Registers state
00457     publishCtlCsr();
00458   } // Manual Shutdown
00459 
00460   //-----------------------------------------------------------------------------
00461   // Switch RJ45/Internal Clock source
00462   if (CXclk) {
00463     rCSR = user_data.status;
00464     if (SXclk) CLK_SEL = SXclk = 0;
00465     else       CLK_SEL = SXclk = 1;
00466     CXclk = 0;  // Reset command
00467     publishCtlCsr();  // Publish Clock selection
00468   } // Switch Clock
00469 
00470   //-----------------------------------------------------------------------------
00471   // Config Pulse, FPGA code requires 4 consecutive pulses
00472   if (Ccfg) {
00473     for (i=0;i<4;i++) {
00474      CFG_RECOVER = 1;
00475      delay_us(1);
00476      CFG_RECOVER = 0;
00477      delay_us(1);
00478     }
00479     delay_us(10);
00480     Ccfg = 0; 
00481   } // Configure_recovery
00482 
00483   //-----------------------------------------------------------------------------
00484   // Debug1 Write/Read Address
00485   if (Cdeb1) {
00486 
00487     // Write Crate address to the CMB register
00488     CMB_SPI_WriteByte(CMBSPI_WADDRESS, ~pca_add);
00489 
00490     delay_us(105);
00491 
00492     // Read Crate address from the CMB Register
00493     user_data.spare = CMB_SPI_ReadByte(CMBSPI_RADDRESS);
00494     Cdeb1 = 0; 
00495   } // 
00496 
00497 #ifdef _ExtEEPROM_
00498   //-----------------------------------------------------------------------------
00499   // Checking the eeprom control flag
00500   if (EEP_CTR_Flag) {
00501     //Checking for the special instruction
00502     if (user_data.eeCtrSet & EEP_CTRL_KEY) {
00503       // Valid index range
00504       if( (int)(user_data.eeCtrSet & 0x000000ff) >= EEP_RW_IDX) {
00505         // Float area from EEP_RW_IDX, count in Float size, No upper limit specified!
00506         eep_address = (float*)&eepage + (user_data.eeCtrSet & 0x000000ff);
00507         //Checking for the write request
00508         if (user_data.eeCtrSet & EEP_CTRL_WRITE){
00509           *eep_address = user_data.eepValue;
00510         //Checking for the read request
00511         } else if (user_data.eeCtrSet & EEP_CTRL_READ) {
00512           DISABLE_INTERRUPTS;
00513           user_data.eepValue = *eep_address;
00514           ENABLE_INTERRUPTS;
00515         } else {
00516           // Tell the user that inappropriate task has been requested
00517           DISABLE_INTERRUPTS;
00518           user_data.eeCtrSet = EEP_CTRL_INVAL_REQ;
00519           ENABLE_INTERRUPTS;
00520         }
00521       } else {
00522         DISABLE_INTERRUPTS;
00523         user_data.eeCtrSet = EEP_CTRL_OFF_RANGE;
00524         ENABLE_INTERRUPTS;
00525       }
00526    } else {
00527     // Tell the user that invalid key has been provided
00528     DISABLE_INTERRUPTS;
00529     user_data.eeCtrSet = EEP_CTRL_INVAL_KEY;
00530     ENABLE_INTERRUPTS;
00531    }
00532     EEP_CTR_Flag = CLEAR;
00533   }  // if eep
00534 
00535   //-----------------------------------------------------------------------------
00536   // EEPROM Save procedure based on CTL bit
00537   if (CeeS) {
00538     //Check if we are here for the first time
00539     if (!eeprom_flag) {  // first in
00540       rCSR = user_data.status;
00541 
00542       //Temporary store the first address of page
00543       eeptemp_addr = PageAddr[(unsigned char)(user_data.eepage & 0x07)];
00544       //Temporary store the first address of data which has to be written
00545       eeptemp_source = (unsigned char xdata *)&eepage;
00546     }
00547 
00548     // EEPROM Write/Clear request
00549     if (CeeClr) eep_request = CLEAR_EEPROM;
00550     else        eep_request = WRITE_EEPROM;
00551 
00552     status = ExtEEPROM_Write_Clear (eeptemp_addr
00553                                         , &eeptemp_source
00554                                         , PAGE_SIZE
00555                                         , eep_request
00556                                         , &eeprom_flag);
00557 
00558     if (status == DONE) {
00559       SeeS = DONE;
00560       eeprom_flag = CLEAR;
00561       //Set the active page
00562       user_data.eepage |= ((user_data.eepage & 0x07) << 5);
00563     } else {
00564       SeeS = FAILED;
00565     }
00566 
00567     CeeS = CLEAR;
00568     // Publish Registers state
00569     publishCtlCsr();
00570   }
00571 
00572   //-----------------------------------------------------------------------------
00573   // EEPROM Restore procedure based on CTL bit
00574   if (CeeR) {
00575     rCSR = user_data.status;
00576 
00577     //NW read to eepage(active page) instead of eepage2
00578     status = ExtEEPROM_Read (PageAddr[(unsigned char)(user_data.eepage & 0x07)]
00579                                      , (unsigned char xdata *)&eepage, PAGE_SIZE);
00580 
00581     if (status == DONE) SeeR = DONE;
00582     else  SeeR = FAILED;
00583 
00584     CeeR = CLEAR;
00585     publishCtlCsr();   // Publish Registers state
00586   }
00587 #endif
00588 
00589   //-----------------------------------------------------------------------------
00590   // Internal ADCs reading Voltages and Currents based on time
00591   if (bCPupdoitNOW || ((uptime() - tempTime) > TEMP_TIME)) {
00592     pfData = &(user_data.pDI4Mon);
00593     rpfData = &(user_data.rpDI4Mon);
00594     for (channel=0; channel<INTERNAL_N_CHN ; channel++) {
00595       volt = read_voltage(channel,&rvolt, IGAIN1);
00596       DISABLE_INTERRUPTS;
00597       pfData[channel] = volt;
00598       rpfData[channel]= rvolt;
00599       ENABLE_INTERRUPTS; 
00600     }
00601 
00602     //
00603     // Read uC temperature    
00604     volt = read_voltage(TCHANNEL,&rvolt, IGAIN1);
00605     /* convert to deg. C */
00606     temperature = 1000 * (volt - 0.776) / 2.86;   // Needs calibration
00607     /* strip to 0.1 digits */
00608     temperature = ((int) (temperature * 10 + 0.5)) / 10.0;
00609     if ((temperature < eepage.luCTlimit) || (temperature > eepage.uuCTlimit)) uCT = ON; // out of range
00610     PublishVariable(&(user_data.uCTemp), temperature, uCT); 
00611 
00612     // Update time
00613     tempTime = uptime();
00614     bMeasuredOnce = 1;
00615   }
00616 
00617   yield();
00618 
00619   //-----------------------------------------------------------------------------
00620   // SST temperature reading
00621 #ifdef _ADT7486A_
00622   if (bCPupdoitNOW || ((uptime() - sstTime) > SST_TIME)) {
00623     // Vreg1 Temperature form the SST device location
00624     if(!ADT7486A_Cmd(ADT7486A_address, GetIntTemp, SST_LINE1, &temperature)) {
00625       if ((temperature < eepage.lSSTlimit) || (temperature > eepage.uSSTlimit)) Vreg1ssTT = ON;
00626       PublishVariable(&user_data.Vrg1Temp, temperature, Vreg1ssTT); 
00627     } else publishErr(RdssT);
00628 
00629     //
00630     // Vreg2 Reading and Monitoring of Temperature from the remote diode of the SST device
00631     if(!ADT7486A_Cmd(ADT7486A_address, GetExt1Temp, SST_LINE1, &temperature)) {
00632       if ((temperature < eepage.lSSTlimit) || (temperature > eepage.uSSTlimit)) Vreg2ssTT = ON;
00633       PublishVariable(&user_data.Vrg2Temp, temperature, Vreg2ssTT); 
00634     } else publishErr(RdssT);
00635 
00636     //
00637     // FGPA Reading and Monitoring of Temperature from the internal diode of the FPGA
00638     if(!ADT7486A_Cmd(ADT7486A_address, GetExt2Temp, SST_LINE1, &temperature)) {
00639       if ((temperature < eepage.luCTlimit) || (temperature > eepage.uuCTlimit)) FPGAssTT = ON;
00640       PublishVariable(&user_data.FPGATemp, temperature, FPGAssTT); 
00641     } else publishErr(RdssT);
00642 
00643     // Update time
00644     sstTime = uptime();
00645   }
00646 #endif
00647 
00648   //-----------------------------------------------------------------------------
00649   // Main Current and Voltage Monitoring
00650   if (bMeasuredOnce) {
00651     pfData = &(user_data.pDI4Mon);
00652     for (channel=0; channel<INTERNAL_N_CHN ; channel++) {
00653       if ((pfData[channel] < eepage.lVIlimit[channel])
00654        || (pfData[channel] > eepage.uVIlimit[channel])) {
00655           rESR |= (1<<channel); // out of range
00656       }
00657     }
00658   }
00659 
00660   // Read FPGA Status
00661   fpgaStatus = CMB_SPI_ReadByte(CMBSPI_RSTATUS);
00662   // Set Signal Loss link Status
00663   SLinkOn = (fpgaStatus & 0x01) ? 0 : 1;       // Shows as 1 = Link ON
00664   // ASUM lock bits
00665   AsumLock = ((fpgaStatus>>4) == 0) ? 1 : 0;   // Set ASUMLostLock error (unlock!)
00666 
00667   // Read Over current switch
00668   V4_OC = (V4_OCn == 0) ? 1 : 0;
00669 
00670   // Publish U/I monitoring, ASUM lock, Over Current errors
00671   // No action taken on ASUM lock and Over Current YET! See below.
00672   DISABLE_INTERRUPTS;
00673   user_data.error   = rESR;
00674   ENABLE_INTERRUPTS;
00675 
00676   // Take action based on ERROR
00677   // Currently only the Temperature are considered
00678   if (SPup && (rESR & ( UFTEMPERATURE_MASK | BTEMPERATURE_MASK))) {
00679     switchonoff(OFF);
00680     SPup = OFF;
00681     SsS = ON;
00682   } else if (bCPupdoitNOW) {
00683     bCPupdoitNOW = OFF;   // Reset flag coming from PowerUp sequence
00684     SsS = SmSd = OFF;
00685     SPup = ON;
00686   }
00687 
00688   // Publish Control, Error and Status.
00689   publishAll();
00690 } 

unsigned char user_read ( unsigned char  index  ) 

00400 {
00401   if (index);
00402   return 0;
00403 }

void user_write ( unsigned char  index  ) 

00387 {
00388   rCSR = user_data.status;
00389   if (index == IDXCTL) {
00390     rCTL = user_data.control;
00391   } // IDXCTL
00392 
00393   //
00394   //-- EE Page function
00395   if (index == IDXEEP_CTL) EEP_CTR_Flag = 1;
00396 }


Variable Documentation

unsigned char idata _n_sub_addr = 1

unsigned char bdata bChange

sbit bCPupdoitNOW = bChange ^ 0

sbit bMeasuredOnce = bChange ^ 2

sbit CFG_RECOVER = P2 ^ 0

unsigned char xdata channel

unsigned char xdata channel

sbit CLK_SEL = P0 ^ 7

sbit CMB_CSn = P2 ^ 1

unsigned int xdata crate_add = 0

sbit EEP_CTR_Flag = bChange ^ 1

char code node_name[] = "cmb"

unsigned char xdata NodeOK = 0

unsigned int xdata pca_add = 0

unsigned long xdata sstTime = 0

unsigned char xdata status

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

SYS_INFO sys_info

unsigned long xdata tempTime = 0

sbit V4_ENn = P2 ^ 3

sbit V4_OCn = P2 ^ 4

MSCB_INFO_VAR* variables = vars

MSCB_INFO_VAR code vars[]


Generated on 10 Jun 2013 for FGDC8051 by  doxygen 1.4.7