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

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "mscbemb.h"

Defines

#define FIRST_DAQ   18
#define LAST_DAQ   FIRST_DAQ + 8
#define N_CHANNEL   4
#define VREF   2.4986f
#define CONVER_FAC1   65536.0f
#define CONVER_FAC2   131072.0f
#define CLEAR   0
#define PCA_OUT   0x00
#define PCA_INDEX   1
#define SST_LINE   1
#define P1_DATA   P1

Functions

void user_write (unsigned char index) reentrant
void user_init (unsigned char init)
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 [] = "GENERIC310_REV1"
char idata svn_rev_code [] = "$Rev: 57 $"
unsigned char idata _n_sub_addr = 1
SYS_INFO sys_info
unsigned char xdata ADT7486A_addrArray [] = {0x48, 0x4A}
unsigned char xdata ADDR_LTC2489 [] = {0x24, 0x17}
unsigned char xdata DAQ_ADDRESS = 0x42
unsigned char xdata PCA9536_ADD = 0x41
unsigned char xdata FCS_Mismatch
unsigned char xdata BiasIndex
unsigned char bdata bChange
sbit LTC2605_Flag = bChange ^ 0
sbit PCA9536_Flag = bChange ^ 1
unsigned char bdata rErr
sbit adc = rErr ^ 0
sbit INTtemp = rErr ^ 1
sbit EXTtemp = rErr ^ 2
struct {
   unsigned char   error
   unsigned char   pca9536
   float   volt [8]
   signed long   adc [8]
   unsigned int   daq [8]
   float   intemp [2]
   float   temp [4]
user_data
MSCB_INFO_VAR code vars []
MSCB_INFO_VARvariables = vars
char xdata flag = 0
sbit LED_GREEN = LED_1
sbit LED_RED = LED_0
sbit SST = MSCB_SST1
sbit P1_0 = P1 ^ 0
sbit P1_1 = P1 ^ 1
sbit P1_2 = P1 ^ 2
sbit P1_3 = P1 ^ 3
sbit P1_4 = P1 ^ 4
sbit P1_5 = P1 ^ 5
sbit P1_6 = P1 ^ 6
sbit P1_7 = P1 ^ 7
sbit P2_0 = P2 ^ 0
sbit P2_1 = P2 ^ 1
sbit P2_2 = P2 ^ 2
sbit P2_3 = P2 ^ 3
sbit P2_4 = P2 ^ 4
sbit P2_5 = P2 ^ 5
sbit P0_1 = P0 ^ 1
sbit P0_2 = P0 ^ 2

Define Documentation

#define CLEAR   0

#define CONVER_FAC1   65536.0f

#define CONVER_FAC2   131072.0f

#define FIRST_DAQ   18

#define LAST_DAQ   FIRST_DAQ + 8

#define N_CHANNEL   4

#define P1_DATA   P1

#define PCA_INDEX   1

#define PCA_OUT   0x00

#define SST_LINE   1

#define VREF   2.4986f


Function Documentation

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

00282 {
00283    /* echo input data */
00284    data_out[0] = data_in[0];
00285    data_out[1] = data_in[1];
00286    return 2;
00287 }

void user_init ( unsigned char  init  ) 

00168 {
00169   idata char i;
00170 
00171   /* Format the SVN and store this code SVN revision into the system */
00172   for (i=0;i<4;i++) {
00173          if (svn_rev_code[6+i] < 48) {
00174             svn_rev_code[6+i] = '0';
00175     }
00176   }
00177 
00178    sys_info.svn_revision = (svn_rev_code[6]-'0')*1000+
00179                            (svn_rev_code[7]-'0')*100+
00180                            (svn_rev_code[8]-'0')*10+
00181                            (svn_rev_code[9]-'0');
00182 
00183   // Reference Voltage on P0.0 Enable
00184   REF0CN = 0x00;  // Int Bias off, Int Temp off, VREF input on
00185 
00186   //BS I am not sure
00187   // 0:analog 1:digital
00188   P0MDIN = 0xFF; // P0 all digital pins
00189   P1MDIN = 0xFF; // P1 all digital pins
00190   P2MDIN = 0x3F; // P2 all digital pins ( Ain: .6.7 for SST)
00191   P3MDIN = 0xFF; // P3 all digital pins
00192 
00193   //BS I am not sure
00194   // 0: open-drain, 1: push-pull
00195   P0MDOUT = 0x10; // P0 .4/Tx
00196   P1MDOUT = 0xFF; // P1 Push-Pull
00197   P2MDOUT = 0x3F; // P2 Push-Pull (OC:.6.7 for SST_IO, SST_REF)
00198   P3MDOUT = 0x10; // P3.4 (SST_DRV) 
00199         
00200   // Setting the cross bar      
00201   XBR0 |=0x04;  // Enable SMBus pins
00202   XBR1 |=0x40; // Enable XBAR
00203   P0SKIP = 0x0f; //Skipping P0.0 (VREF), P0.1 P0.2, P0.3  (TX_EN)
00204    
00205   // Comparator 1 Settings as P2.6, P2.7 are using in this case
00206   CPT1CN = 0x80; //Enable Comparator1 (functional, the one above is only for CrossBar)
00207   CPT1MX = 0x33; //Comparator1 MUX selection
00208 
00209  
00210   // Negative input is set to P2 ^ 7, and Positive input is set to P2 ^ 6
00211   // (P2 ^ 6 is the SST1_IO, so we want to compare SST1 with the threshold voltage
00212   // of !~0.8V on SST_REF (P2 ^ 7)
00213   CPT1MD = 0x02; //Comparator1 Mode Selection
00214   //Use default, adequate TYP (CP1 Response Time, no edge triggered interrupt)
00215 
00216   // Set SST_REF & SST_IO P2 ^ 6/7 to Open-Drain and Analog Input 
00217   // so that it accepts the ~650mV set by voltage divider.
00218   P2MDOUT &= 0x3F;
00219   P2MDIN  &= 0x3F;
00220 
00221   /* set-up / initialize circuit components (order is important) */
00222   //NW modified SST to support more than one line
00223   ADT7486A_Init(SST_LINE); //Temperature measurements related initialization
00224   
00225   #ifdef _LTC2489_
00226         LTC2489_Init();
00227   #endif 
00228     
00229   #ifdef _LTC2605_
00230                 LTC2605_Init();
00231   #endif
00232 
00233   #ifdef _PCA9536_
00234         PCA9536_Init();
00235         PCA9536_WriteByte (PCA9536_ADD,CMD_CONFIG_REG,PCA_OUT);
00236   #endif 
00237 
00238 
00239   if (init) {
00240    }
00241 
00242   for (i=0;i<8;i++)
00243                 user_data.adc [i] = 0.0;
00244   rErr = 0x00;
00245   user_data.error = rErr;  
00246   user_data.pca9536 = 0;
00247   // Temperature initialization   
00248    user_data.intemp[0] = 0;
00249    user_data.intemp[1] = 0;
00250    memset (&user_data.temp[0], 0, sizeof(user_data.temp));
00251 }

void user_loop ( void   ) 

00297 {
00298   unsigned char xdata i,channel;
00299   float xdata volt1, volt2;
00300   signed long xdata result1, result2;
00301   static unsigned char xdata adcChannel = N_CHANNEL;
00302   
00303   if(adcChannel == N_CHANNEL) {
00304       adcChannel = CLEAR;
00305       LTC2489_StartConversion(ADDR_LTC2489[0], adcChannel);
00306       LTC2489_StartConversion(ADDR_LTC2489[1], adcChannel);
00307     } else {
00308       adcChannel++;
00309       adcChannel %= N_CHANNEL;
00310       if (!LTC2489_ReadConversion(ADDR_LTC2489[0], adcChannel, &result1)){
00311           result1 = -CONVER_FAC1;
00312           adc = 1;
00313       }
00314       if (!LTC2489_ReadConversion(ADDR_LTC2489[1], adcChannel, &result2)){
00315             result2 = -CONVER_FAC1;
00316             adc = 1;
00317       }
00318       volt1 = ((float)(result1 + CONVER_FAC1) * (float)(VREF /CONVER_FAC2));
00319       volt2 = ((float)(result2 + CONVER_FAC1) * (float)(VREF /CONVER_FAC2));
00320       channel = (adcChannel + (N_CHANNEL-1)) % N_CHANNEL;    
00321       DISABLE_INTERRUPTS;
00322         user_data.volt[channel]  = volt1;
00323         user_data.volt[channel+4]= volt2;
00324         user_data.adc[channel]   = result1;
00325         user_data.adc[channel+4] = result2;
00326       ENABLE_INTERRUPTS;
00327     }
00328 
00329   for (i=0;i<2;i++) {
00330       if (ADT7486A_Cmd(ADT7486A_addrArray[i], GetIntTemp, SST_LINE, &user_data.intemp[i])!= SUCCESS) //NW
00331             INTtemp = 1;
00332     }
00333   if (ADT7486A_Cmd(ADT7486A_addrArray[0], GetExt1Temp, SST_LINE, &user_data.temp[0])!= SUCCESS)  //NW
00334                 EXTtemp = 1;
00335   if(ADT7486A_Cmd(ADT7486A_addrArray[0], GetExt2Temp, SST_LINE, &user_data.temp[1])!= SUCCESS)  //NW
00336                 EXTtemp = 1;
00337   if(ADT7486A_Cmd(ADT7486A_addrArray[1], GetExt1Temp, SST_LINE, &user_data.temp[2])!= SUCCESS)  //NW
00338            EXTtemp = 1;
00339   if(ADT7486A_Cmd(ADT7486A_addrArray[1], GetExt2Temp, SST_LINE, &user_data.temp[3]) != SUCCESS)  //NW
00340       EXTtemp = 1;      
00341  
00342 #ifdef _LTC2605_
00343  if (LTC2605_Flag){
00344          LTC2605_WriteByte(DAQ_ADDRESS,((WREG_n_UPDATE_n << 4) | BiasIndex),user_data.daq[BiasIndex]);
00345          LTC2605_Flag = 0;
00346  }
00347 #endif
00348 
00349  #ifdef _PCA9536_
00350  if (PCA9536_Flag){
00351      PCA9536_WriteByte (PCA9536_ADD,CMD_OUTPUT_REG,user_data.pca9536);
00352      PCA9536_Flag = 0;
00353  }
00354 #endif
00355 
00356  led_blink(1, 1, 250);
00357 
00358 }

unsigned char user_read ( unsigned char  index  ) 

00273 {
00274   if(index);
00275 
00276    return 0;
00277 }

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

signed long adc[8] = rErr ^ 0

unsigned char xdata ADDR_LTC2489[] = {0x24, 0x17}

unsigned char xdata ADT7486A_addrArray[] = {0x48, 0x4A}

unsigned char bdata bChange

unsigned char xdata BiasIndex

unsigned int daq[8]

unsigned char xdata DAQ_ADDRESS = 0x42

unsigned char error

sbit EXTtemp = rErr ^ 2

unsigned char xdata FCS_Mismatch

char xdata flag = 0

float intemp[2]

sbit INTtemp = rErr ^ 1

sbit LED_GREEN = LED_1

sbit LED_RED = LED_0

sbit LTC2605_Flag = bChange ^ 0

char code node_name[] = "GENERIC310_REV1"

sbit P0_1 = P0 ^ 1

sbit P0_2 = P0 ^ 2

sbit P1_0 = P1 ^ 0

sbit P1_1 = P1 ^ 1

sbit P1_2 = P1 ^ 2

sbit P1_3 = P1 ^ 3

sbit P1_4 = P1 ^ 4

sbit P1_5 = P1 ^ 5

sbit P1_6 = P1 ^ 6

sbit P1_7 = P1 ^ 7

sbit P2_0 = P2 ^ 0

sbit P2_1 = P2 ^ 1

sbit P2_2 = P2 ^ 2

sbit P2_3 = P2 ^ 3

sbit P2_4 = P2 ^ 4

sbit P2_5 = P2 ^ 5

unsigned char pca9536

unsigned char xdata PCA9536_ADD = 0x41

sbit PCA9536_Flag = bChange ^ 1

unsigned char bdata rErr

sbit SST = MSCB_SST1

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

SYS_INFO sys_info

float temp[4]

struct { ... } user_data

MSCB_INFO_VAR* variables = vars

MSCB_INFO_VAR code vars[]

float volt[8]


Generated on 10 Jun 2013 for FGDC8051 by  doxygen 1.4.7