#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_VAR * | variables = vars |
| SYS_INFO | sys_info |
| 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 | ( | ) |
| 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 | |||
| ) |
| 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 | ) |
| 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 }
| unsigned char idata _n_sub_addr = 1 |
| 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 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 |
| unsigned long xdata sstExtTime = 0 |
| unsigned long xdata sstTime = 0 |
| unsigned char xdata status |
| char idata svn_rev_code[] = "$Rev: 1185 $" |
| MSCB_INFO_VAR code vars[] |
1.4.7