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


Data Structures

struct  ADC2MSCB_TABLE
struct  IADC_TABLE
struct  EEPAGE
struct  user_data_type

Defines

#define ADT7486A_ADDR0   0x49
#define ADT7486A_ADDR1   0x48
#define ADT7486A_ADDR2   0x4B
#define ADT7486A_ADDR3   0x4A
#define ADT7486A_ADDR4   0x48
#define SST_LINE1   1
#define SST_LINE2   2
#define SST_TIME   2
#define BIAS_OUTPUT_ENABLE   ADDR_PCA9539, PCA9539_CONFIG0, PCA9539_ALL_OUTPUT
#define BIAS_DISABLE   ADDR_PCA9539, PCA9539_OUTPUT0, 0xFF
#define BIAS_ENABLE   ADDR_PCA9539, PCA9539_OUTPUT0, 0x00
#define BIAS_READ   ADDR_PCA9539, PCA9539_INPUT0
#define BIAS_WRITE   ADDR_PCA9539, PCA9539_OUTPUT0
#define BACKPLANE_INPUT_ENABLE   ADDR_PCA9539, PCA9539_CONFIG1, PCA9539_ALL_INPUT
#define BACKPLANE_READ   ADDR_PCA9539, PCA9539_INPUT1
#define N_RB_CHANNEL   16
#define EXT_VREF   1.25f
#define CURR_MEASURE   0x04
#define V_A2MTABLE   0
#define I_A2MTABLE   1
#define VOLT_MEASURE   0x04
#define GAIN1   0
#define GAIN4   1
#define GAIN8   2
#define GAIN16   3
#define GAIN32   4
#define GAIN64   5
#define CONVER_FAC2   65536.0f
#define CONVER_FAC1   0xFFFFFFFF
#define Q_PUMP_INIT   1
#define Q_PUMP_OFF   2
#define Q_PUMP_ON   3
#define INT_VREF   2.44f
#define IntGAIN1   0
#define IntGAIN2   1
#define IntGAIN4   2
#define IntGAIN8   3
#define IntGAIN16   4
#define EEP_CTRL_KEY   0x3C000000
#define EEP_CTRL_READ   0x00110000
#define EEP_CTRL_WRITE   0x00220000
#define EEP_CTRL_INVAL_REQ   0xff000000
#define EEP_CTRL_INVAL_KEY   0x00ff0000
#define EEP_CTRL_OFF_RANGE   0x0000ff00
#define PAGE_SIZE   sizeof(eepage)
#define EEP_RW_IDX   0x06
#define EEP_RW_LAST_IDX   PAGE_SIZE/4
#define NCHANNEL_BIAS   64
#define NCHANNEL_ASUM   8
#define NCHANNEL_SST   8
#define NCHANNEL_ADT7486A   4
#define IDXEER   1
#define IDXCTL   2
#define IDXQVOLT   6
#define IDXBSWITCH   5
#define IDXASUM   47
#define IDXSST   19
#define IDXBIAS   55
#define IDXEEP_CTL   144
#define IDXASUM_CTL   145
#define SERIALN_LENGTH   (unsigned int) 4
#define SERIALN_ADD   (unsigned int) (0x600)
#define FIRST_BIAS   IDXBIAS
#define LAST_BIAS   FIRST_BIAS + NCHANNEL_BIAS
#define FIRST_ASUM   IDXASUM
#define LAST_ASUM   FIRST_ASUM + NCHANNEL_ASUM
#define ADDR_LTC1669   0x20
#define ADDR_PCA9539   0x74
#define ADDR_LTC2497   0x14
#define ADDR_LTC2495   0x14
#define ON   1
#define DONE   1
#define OFF   0
#define FAILED   0
#define CLEAR   0
#define UCTEMPERATURE_MASK   0x0100
#define BTEMPERATURE_MASK   0x1000
#define FGDTEMPERATURE_MASK   0x0400
#define VOLTAGE_MASK   0x001C
#define CURRENT_MASK   0x0040

Functions

void user_init (unsigned char init)
void user_loop (void)
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)
float read_voltage (unsigned char channel, unsigned int *rvalue, float coeff, float offset, unsigned char gain)
void switchonoff (unsigned char command)
int eepageAddrConvert (unsigned int index)

Variables

ADC2MSCB_TABLE xdata adc2mscb_table [16]
IADC_TABLE xdata iadc_table [8]
unsigned char rEER
EEPAGE xdata eepage
EEPAGE xdata eepage2
unsigned int xdata PageAddr [] = {0x000, 0x200, 0x400, 0x600}
unsigned char xdata ltc1665mirror [64]
unsigned int xdata ltc2600mirror [8]
unsigned char bdata rCTL
sbit CPup = rCTL ^ 0
sbit CAsum = rCTL ^ 2
sbit Ccal = rCTL ^ 3
sbit CeeS = rCTL ^ 4
sbit CeeR = rCTL ^ 5
sbit CeeClr = rCTL ^ 6
sbit CmSd = rCTL ^ 7
unsigned char bdata rCSR
sbit SPup = rCSR ^ 0
sbit SqPump = rCSR ^ 1
sbit SAsum = rCSR ^ 2
sbit Scal = rCSR ^ 3
sbit SeeS = rCSR ^ 4
sbit SeeR = rCSR ^ 5
sbit SsS = rCSR ^ 6
sbit SmSd = rCSR ^ 7
unsigned int bdata rESR
sbit vQpump = rESR ^ 8
sbit iQpump = rESR ^ 9
sbit vReg1 = rESR ^ 10
sbit vReg2 = rESR ^ 11
sbit vReg3 = rESR ^ 12
sbit iReg1 = rESR ^ 13
sbit iReg2 = rESR ^ 14
sbit iReg3 = rESR ^ 15
sbit uCT = rESR ^ 0
sbit IntssTT = rESR ^ 1
sbit ExtssTT = rESR ^ 2
sbit EEPROM = rESR ^ 3
sbit pcbssTT = rESR ^ 4
sbit RdssT = rESR ^ 5
user_data_type xdata user_data
sbit timing = P2 ^ 7
unsigned long xdata smbdebug

Define Documentation

#define ADDR_LTC1669   0x20

#define ADDR_LTC2495   0x14

#define ADDR_LTC2497   0x14

#define ADDR_PCA9539   0x74

#define ADT7486A_ADDR0   0x49

#define ADT7486A_ADDR1   0x48

#define ADT7486A_ADDR2   0x4B

#define ADT7486A_ADDR3   0x4A

#define ADT7486A_ADDR4   0x48

#define BACKPLANE_INPUT_ENABLE   ADDR_PCA9539, PCA9539_CONFIG1, PCA9539_ALL_INPUT

#define BACKPLANE_READ   ADDR_PCA9539, PCA9539_INPUT1

#define BIAS_DISABLE   ADDR_PCA9539, PCA9539_OUTPUT0, 0xFF

#define BIAS_ENABLE   ADDR_PCA9539, PCA9539_OUTPUT0, 0x00

#define BIAS_OUTPUT_ENABLE   ADDR_PCA9539, PCA9539_CONFIG0, PCA9539_ALL_OUTPUT

#define BIAS_READ   ADDR_PCA9539, PCA9539_INPUT0

#define BIAS_WRITE   ADDR_PCA9539, PCA9539_OUTPUT0

#define BTEMPERATURE_MASK   0x1000

#define CLEAR   0

#define CONVER_FAC1   0xFFFFFFFF

#define CONVER_FAC2   65536.0f

#define CURR_MEASURE   0x04

#define CURRENT_MASK   0x0040

#define DONE   1

#define EEP_CTRL_INVAL_KEY   0x00ff0000

#define EEP_CTRL_INVAL_REQ   0xff000000

#define EEP_CTRL_KEY   0x3C000000

#define EEP_CTRL_OFF_RANGE   0x0000ff00

#define EEP_CTRL_READ   0x00110000

#define EEP_CTRL_WRITE   0x00220000

#define EEP_RW_IDX   0x06

#define EEP_RW_LAST_IDX   PAGE_SIZE/4

#define EXT_VREF   1.25f

#define FAILED   0

#define FGDTEMPERATURE_MASK   0x0400

#define FIRST_ASUM   IDXASUM

#define FIRST_BIAS   IDXBIAS

#define GAIN1   0

#define GAIN16   3

#define GAIN32   4

#define GAIN4   1

#define GAIN64   5

#define GAIN8   2

#define I_A2MTABLE   1

#define IDXASUM   47

#define IDXASUM_CTL   145

#define IDXBIAS   55

#define IDXBSWITCH   5

#define IDXCTL   2

#define IDXEEP_CTL   144

#define IDXEER   1

#define IDXQVOLT   6

#define IDXSST   19

#define INT_VREF   2.44f

#define IntGAIN1   0

#define IntGAIN16   4

#define IntGAIN2   1

#define IntGAIN4   2

#define IntGAIN8   3

#define LAST_ASUM   FIRST_ASUM + NCHANNEL_ASUM

#define LAST_BIAS   FIRST_BIAS + NCHANNEL_BIAS

#define N_RB_CHANNEL   16

#define NCHANNEL_ADT7486A   4

#define NCHANNEL_ASUM   8

#define NCHANNEL_BIAS   64

#define NCHANNEL_SST   8

#define OFF   0

#define ON   1

#define PAGE_SIZE   sizeof(eepage)

#define Q_PUMP_INIT   1

#define Q_PUMP_OFF   2

#define Q_PUMP_ON   3

#define SERIALN_ADD   (unsigned int) (0x600)

#define SERIALN_LENGTH   (unsigned int) 4

#define SST_LINE1   1

#define SST_LINE2   2

#define SST_TIME   2

#define UCTEMPERATURE_MASK   0x0100

#define V_A2MTABLE   0

#define VOLT_MEASURE   0x04

#define VOLTAGE_MASK   0x001C


Function Documentation

int eepageAddrConvert ( unsigned int  index  ) 

00250 {
00251   int add;
00252   //if index is even
00253   if(!(index%2))
00254     add = index/2 + 18 + EEP_RW_IDX; // offset from the eepage struct
00255     //if index is odd
00256   else
00257     add = index/2 + EEP_RW_IDX;  // offset from the eepage struct
00258   return add;
00259 }

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  ) 

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 
)

00319 {
00320    /* echo input data */
00321    data_out[0] = data_in[0];
00322    data_out[1] = data_in[1];
00323    return 2;
00324 }

void user_init ( unsigned char  init  ) 

00183 {
00184   char xdata i;
00185   /* Format the SVN and store this code SVN revision into the system */
00186   for (i = 0; i < 4; i++) {
00187     if (svn_rev_code[6 + i] < 48) {
00188       svn_rev_code[6 + i] = '0';
00189     }
00190   }
00191   sys_info.svn_revision = (svn_rev_code[6] - '0') * 1000 +
00192     (svn_rev_code[7] - '0') * 100 +
00193     (svn_rev_code[8] - '0') * 10 +
00194     (svn_rev_code[9] - '0');
00195 
00196 //      P0MDIN = 0xFF;                                          // default 0xFF all digital pins
00197 //      P1MDIN = 0xFF;
00198 //      P2MDIN = 0xFF;
00199 
00200   P0MDOUT = 0x18;                                       // Default OD 485TX, TXD
00201   P1MDOUT = 0x00;                                       // OD
00202   P2MDOUT = 0xFF;                                       // OD
00203 
00204   P0 = 0x03;    // default 0xFF
00205   P1 = 0xFF;
00206   P2 = 0xFF;
00207 
00208   /* set initial state of lines */
00209   GPIB_DATA = 0xFF;
00210   GPIB_EOI = 1;
00211   GPIB_DAV = 1;
00212   GPIB_NRFD = 1;
00213   GPIB_NDAC = 1;
00214   GPIB_IFC = 1;
00215   GPIB_SRQ = 1;
00216   GPIB_ATN = 1;
00217   GPIB_REN = 1;
00218 
00219   BUF_CLE = 0;                  // Enable buffers
00220   BUF_DATAE = 0;
00221 
00222   /* initialize GPIB */
00223   GPIB_IFC = 0;
00224   delay_ms (1);
00225   GPIB_IFC = 1;
00226 
00227   GPIB_ATN = 0;
00228   send_byte (0x14);             // DCL
00229   GPIB_ATN = 1;
00230   
00231   user_data.gpib_adr = GPIB_ADDR_0;
00232   
00233   sprintf (str, "OE2");                         // prohibit overvoltage setting
00234   send (user_data.gpib_adr, str);
00235   sprintf (str, "OC0");                         // hv supply will *not* shutdown if current overload
00236   send (user_data.gpib_adr, str);
00237   sprintf (str, "SE0");                         // enables SRQ in response to overvoltage detection
00238   send (user_data.gpib_adr, str);
00239   sprintf (str, "SC0");                         // enables SRQ in response to overcurrent detection
00240   send (user_data.gpib_adr, str);
00241 
00242   user_data.status = 0;
00243   if (init) {
00244    user_data.ramp_up = 10;
00245    user_data.ramp_down = 10;
00246    user_data.u_limit = MAX_VOLTAGE;
00247    user_data.i_limit = MAX_CURRENT;
00248   }
00249   sprintf (user_data.warning, "current OK");
00250 
00251   set_voltage_limit(user_data.u_limit);
00252   set_current_limit(user_data.i_limit);
00253 
00254   read_hvi();                                // check to see if hv is already on
00255 
00256   if ( user_data.u_meas < 10 )               // bertan hv must be off
00257   {
00258       user_data.u_demand = 0;
00259       u_actual = 0;
00260       set_hv(0);
00261   }
00262   else                                       // bertan hv must already be on
00263   {
00264       user_data.u_demand = user_data.u_meas; // restore to status quo
00265       u_actual = user_data.u_meas;
00266   }
00267 
00268 #ifdef RTC_410
00269 // Init RTC on 410
00270    SmaRTCInit();
00271 #endif
00272 }

void user_loop ( void   ) 

00683 {
00684   /* set voltage limit if changed */
00685   if (chn_bits & HV_LIMIT_CHANGED) {
00686     set_voltage_limit(user_data.u_limit);
00687     chn_bits &= ~HV_LIMIT_CHANGED;
00688   }
00689 
00690   /* set current limit if changed */
00691   if (chn_bits & CUR_LIMIT_CHANGED) {
00692     set_current_limit(user_data.i_limit);
00693     chn_bits &= ~CUR_LIMIT_CHANGED;
00694   }
00695 
00696   // Read Voltage and Current
00697   read_hvi();
00698 
00699   // Yield to other activities (MSCB)
00700 //  yield();
00701 
00702   // Do ramping if necessary
00703   ramp_hv();
00704 
00705 #ifdef RTC_410
00706   // RTC stuff
00707   ltime = SmaRTCRead();
00708   user_data.mytime = ltime;
00709   ascTime(mydate, ltime);
00710   sprintf(user_data.date, "%s", mydate);
00711 #endif
00712 
00713   // Slow it down
00714   delay_ms (MINDEL);
00715 
00716   // Loop timing
00717   led_blink(0, 1, 50);
00718 }

unsigned char user_read ( unsigned char  index  ) 

00311 {
00312    if (index);
00313    return 0;
00314 }

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

struct ADC2MSCB_TABLE xdata adc2mscb_table[16]

Initial value:

 {
  {GAIN32, 1, I_A2MTABLE, 1000, 22},    {GAIN32, 3, I_A2MTABLE, 1000, 127}
, {GAIN32, 5, I_A2MTABLE, 1000, 7176},  {GAIN32, 7, I_A2MTABLE, 1000, 1840}
, {GAIN1 , 7, V_A2MTABLE,   101.1, 230}, {GAIN1 , 5, V_A2MTABLE, 101.1, 230}
, {GAIN1 , 3, V_A2MTABLE,   101.1, 230}, {GAIN1 , 1, V_A2MTABLE, 101.1, 230}
, {GAIN32, 0, I_A2MTABLE, 1000, 3178},  {GAIN32, 2, I_A2MTABLE, 1000, 1800}
, {GAIN32, 4, I_A2MTABLE, 1000, 925},   {GAIN32, 6, I_A2MTABLE, 1000, 4895}
, {GAIN1 , 6, V_A2MTABLE,   101.1, 24},  {GAIN1 , 4, V_A2MTABLE, 101.1, 230}
, {GAIN1 , 2, V_A2MTABLE,   101.1, 225}, {GAIN1 , 0, V_A2MTABLE, 101.1, 230}
}

sbit CAsum = rCTL ^ 2

sbit Ccal = rCTL ^ 3

sbit CeeClr = rCTL ^ 6

sbit CeeR = rCTL ^ 5

sbit CeeS = rCTL ^ 4

sbit CmSd = rCTL ^ 7

sbit CPup = rCTL ^ 0

struct EEPAGE xdata eepage

struct EEPAGE xdata eepage2

sbit EEPROM = rESR ^ 3

sbit ExtssTT = rESR ^ 2

struct IADC_TABLE xdata iadc_table[8]

Initial value:

 {
  {IntGAIN2, 50.5,       0.0}, {IntGAIN8, 10000.0/8.0, 0.0}
, {IntGAIN1, 3.980132,     0}, {IntGAIN1, 3.980132, 0}
, {IntGAIN1, 8.5,    -18.751}, {IntGAIN1, 0.1, 0}
, {IntGAIN1, 0.4,          0}, {IntGAIN1, 0.1, 0}
}

sbit IntssTT = rESR ^ 1

sbit iQpump = rESR ^ 9

sbit iReg1 = rESR ^ 13

sbit iReg2 = rESR ^ 14

sbit iReg3 = rESR ^ 15

unsigned char xdata ltc1665mirror[64]

unsigned int xdata ltc2600mirror[8]

unsigned int xdata PageAddr[] = {0x000, 0x200, 0x400, 0x600}

sbit pcbssTT = rESR ^ 4

unsigned char bdata rCSR

unsigned char bdata rCTL

sbit RdssT = rESR ^ 5

unsigned char rEER

unsigned int bdata rESR

sbit SAsum = rCSR ^ 2

sbit Scal = rCSR ^ 3

sbit SeeR = rCSR ^ 5

sbit SeeS = rCSR ^ 4

unsigned long xdata smbdebug

sbit SmSd = rCSR ^ 7

sbit SPup = rCSR ^ 0

sbit SqPump = rCSR ^ 1

sbit SsS = rCSR ^ 6

sbit timing = P2 ^ 7

sbit uCT = rESR ^ 0

struct user_data_type xdata user_data

sbit vQpump = rESR ^ 8

sbit vReg1 = rESR ^ 10

sbit vReg2 = rESR ^ 11

sbit vReg3 = rESR ^ 12


Generated on 10 Jun 2013 for FGDC8051 by  doxygen 1.4.7