⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ca6004.c

📁 miceteck_MPC860_BSP源码,基于VXWORK
💻 C
📖 第 1 页 / 共 3 页
字号:
      printf("%d\n",Buffer1);   
*/         
      HBENHI;
      ADNOP;
      Buffer2 = *PADAT(immr);
      ADNOP;
      Buffer2 &= 0x05FC;
/*
      printf("%d\n",Buffer2);
*/      
      ADRDHI;
      ADCSHI;
      ADNOP;
      ADNOP;
      ADNOP;
      ADNOP;

/* DATA PROCESSING */      
      if(Buffer1&0x0400) Value|=0x0001;else Value&=~0x0001;
      if(Buffer1&0x0100) Value|=0x0002;else Value&=~0x0002;
      if(Buffer1&0x0080) Value|=0x0004;else Value&=~0x0004;
      if(Buffer1&0x0040) Value|=0x0008;else Value&=~0x0008;
      if(Buffer1&0x0020) Value|=0x0010;else Value&=~0x0010;
      if(Buffer1&0x0010) Value|=0x0020;else Value&=~0x0020;
      if(Buffer1&0x0008) Value|=0x0040;else Value&=~0x0040;
      if(Buffer1&0x0004) Value|=0x0080;else Value&=~0x0080;
      if(Buffer2&0x0400) Value|=0x0100;else Value&=~0x0100;
      if(Buffer2&0x0100) Value|=0x0200;else Value&=~0x0200;
      if(Buffer2&0x0080) Value|=0x0400;else Value&=~0x0400;
      if(Buffer2&0x0040) Value|=0x0800;else Value&=~0x0800;
      
      Value = Value & 0x0FFF;
      logValue = (10*log10(Value)-54);
/*      
      if((logValue<=-32)&&(logValue>=-38)) logValue=logValue+1;
*/
      if(logValue<=-40) logValue=-40; 
      if(logValue>=-18) logValue=-18;  
      
/*      printf("The OpticPower is %ddBm.\n",logValue);*/

      /*logValue += 15;*/
      logValue += 13;
  }
  else
      logValue = 0x7FFF;
      
  if(*CA6004_POI_OT1_ALM&0x40000000) logValue = 0x7FFF;
  if(*CA6004_POI_OT2_ALM&0x40000000) logValue = 0x7FFF;
  if(*CA6004_POI_OT3_ALM&0x40000000) logValue = 0x7FFF;
  if(*CA6004_POI_OT4_ALM&0x40000000) logValue = 0x7FFF;
      
/*  printf("The OpticPower is %ddBm.\n",logValue);*/
  
  return( logValue ); /* 返回光功率dBm值,返回值范围-5~-27dBm */  
}



/*
 GBIC I2C channel controled by PCA9518.
 GBIC read function:GbicRead().
 Hardware connection:
 SCL0 -- PB15,SDA0 -- PB16,EN11 -- PB17,EN12 -- PB18,EN13 -- PB20,
 EN14 -- PB21,EN21 -- PC12,EN22 -- PC13,EN23 -- PC14 EN24 -- PC15. 
*/

int gbici2cack=1;

 void GBICI2Cinit(void)
{
    *PBPAR(immr) &= 0xfffe13ff;
    *PCPAR(immr) &= 0xfff0;
    *PBDIR(immr) |= 0x0001ec00;
    *PCDIR(immr) |= 0x000f;

    *PCSO(immr)  &= 0xfff0;
    *CIMR(immr)  &= 0x7a7fffff; 
}

void GBICI2Cnop(cycle)
int cycle;
{
    int i,j;
    for(j=0;j<cycle;j++)
    {
        for(i=0;i<0x100;i++);
    }	
}

void GBICI2Cstart(void)
{
    GBICDATHI;
    GBICCLKHI;
    GBICI2Cnop(1);
    GBICDATLO;
    GBICI2Cnop(3);
    GBICCLKLO;
    GBICI2Cnop(1);
}

void GBICI2Cstop(void)
{
    GBICCLKHI;
    GBICI2Cnop(1);
    GBICDATLO;
    GBICI2Cnop(1);
    GBICDATHI;
    GBICI2Cnop(1);
}

void GBICI2Cack(void)
{
    int i;
    GBICDATIN;
    GBICCLKHI;
    GBICI2Cnop(1);
    for(i=0;i<0x100;i++)
    {
    	gbici2cack = (*PBDAT(immr) & 0x00008000);
    	if(gbici2cack==0) break;
    }
    GBICI2Cnop(4);
    GBICCLKLO;
    GBICDATOU;  
    gbici2cack=1; 
}

void GBICI2Cclock(void)
{
    GBICI2Cnop(1);
    GBICCLKHI;
    GBICI2Cnop(1);
    GBICCLKLO;
}

void GBICsel(boardnum,gbicnum)
unsigned short boardnum,gbicnum;
{   
    switch( boardnum )
    {
      case 1:
         if( gbicnum == 1 )
         {
           GBICDIS12;
           GBICDIS13;
           GBICDIS14;
           GBICDIS21;
           GBICDIS22;
           GBICDIS23;
           GBICDIS24;
           GBICENA11;
         }
         if( gbicnum == 2 ) 
         {
           GBICDIS11;
           GBICDIS12;
           GBICDIS13;
           GBICDIS14;
           GBICDIS22;
           GBICDIS23;
           GBICDIS24;
           GBICENA21;
         }
         break;
      case 2:
         if( gbicnum == 1 )
         {
           GBICDIS11;
           GBICDIS13;
           GBICDIS14;
           GBICDIS21;
           GBICDIS22;
           GBICDIS23;
           GBICDIS24;
           GBICENA12;
         }
         if( gbicnum == 2 ) 
         {
           GBICDIS11;
           GBICDIS12;
           GBICDIS13;
           GBICDIS14;
           GBICDIS21;
           GBICDIS23;
           GBICDIS24;
           GBICENA22;
         }
         break;      
      case 3:
         if( gbicnum == 1 )
         {
           GBICDIS11;
           GBICDIS12;
           GBICDIS14;
           GBICDIS21;
           GBICDIS22;
           GBICDIS23;
           GBICDIS24;
           GBICENA13;
         }
         if( gbicnum == 2 ) 
         {
           GBICDIS11;
           GBICDIS12;
           GBICDIS13;
           GBICDIS14;
           GBICDIS21;
           GBICDIS22;
           GBICDIS24;
           GBICENA23;
         }
         break;      
      case 4:
         if( gbicnum == 1 )
         {
           GBICDIS11;
           GBICDIS12;
           GBICDIS13;
           GBICDIS21;
           GBICDIS22;
           GBICDIS23;
           GBICDIS24;
           GBICENA14;
         }
         if( gbicnum == 2 ) 
         {
           GBICDIS11;
           GBICDIS12;
           GBICDIS13;
           GBICDIS14;
           GBICDIS21;
           GBICDIS22;
           GBICDIS23;
           GBICENA24;
         }
         break;      
    } 
}

int GbicRead(unsigned short board,unsigned short gbic,unsigned short addr)
{
    int i;
    int data,dataL,dbuf;
    immr = vxImmrGet();  
      
    GBICI2Cinit(); 
   
    GBICsel(board,gbic);
        
    GBICI2Cstart();
    
    data = GBICWRITADD;
    for(i=0;i<8;i++)
    {
        if(data&0x80)
           GBICDATHI;
        else 
           GBICDATLO;
        GBICI2Cclock();
        data = data << 1;
    }
    GBICDATHI;
    GBICI2Cack();  
    
    data = addr; 
    for(i=0;i<8;i++)
    {
        if(data&0x80)
           GBICDATHI;
        else 
           GBICDATLO;
        GBICI2Cclock();
        data = data << 1;
    }
    GBICDATHI;
    GBICI2Cack(); 
    
    GBICI2Cstart();

    data = GBICREADADD;
    for(i=0;i<8;i++)
    {
        if(data&0x80)
           GBICDATHI;
        else 
           GBICDATLO;
        GBICI2Cclock();
        data = data << 1;
    }
    GBICDATHI;
    GBICI2Cack();      
    
    GBICI2Cnop(1);
    GBICDATIN;
    dbuf = 0;
    for(i=0;i<8;i++)
    {
        GBICI2Cnop(1);
        GBICCLKHI;
        if(*PBDAT(immr) & 0x00008000)
           dbuf = (dbuf << 1) + 1;
        else
           dbuf = (dbuf << 1);
        GBICI2Cnop(1);
        GBICCLKLO;
    }
    data = dbuf;
    
    if((addr<=154)&(addr>=140))
    {
        GBICI2Cnop(1);
        GBICI2Cack();
        GBICDATIN;
        
        dbuf = 0;
        for(i=0;i<8;i++)
        {
            GBICI2Cnop(1);
            GBICCLKHI;
            if(*PBDAT(immr) & 0x00008000)
               dbuf = (dbuf << 1) + 1;
            else
               dbuf = (dbuf << 1);
            GBICI2Cnop(1);
            GBICCLKLO;            
        }
        dataL = dbuf;
        
        data = (data<<8)|dataL;
    }
    GBICDATOU;
    
    printf("The data in addrss %d is: 0x%x\n",addr,data);
    
    return(data);
}

/*
 GBIC read functions for temperature,current and opticPower:
 Temperature read function:GetGbicTemp();
 Current read function:GetGbicCurrent();
 TxPower read function:GetGbicTxPower();
 RxPower read function:GetGbicRxPower();
*/
#include <temprature.c>

double GetGbicTemp(unsigned short board,unsigned short gbic)
{
    int temp,ad2,ad3,ad1,cal1_H,cal1_L,cal2_H,cal2_L,temp1_H,temp1_L,temp2_H,temp2_L;
    double tempbuf;
    
    if((board<1)|(board>4)|(gbic<1)|(gbic>2)) return(FALS);
    
   
    temp = GbicRead(board,gbic,GET_TEMP);
    ad2 = GbicRead(board,gbic,GET_AD2);
    ad3 = GbicRead(board,gbic,GET_AD3);
    ad1 = GbicRead(board,gbic,GET_AD1);
    cal1_H = GbicRead(board,gbic,GET_CAL1_HI);
    cal1_L = GbicRead(board,gbic,GET_CAL1_LO);
    cal2_H = GbicRead(board,gbic,GET_CAL2_HI);
    cal2_L = GbicRead(board,gbic,GET_CAL2_LO);    
    temp1_H = GbicRead(board,gbic,GET_TEMP1_HI);
    temp1_L = GbicRead(board,gbic,GET_TEMP1_LO);
    temp2_H = GbicRead(board,gbic,GET_TEMP2_HI);
    temp2_L = GbicRead(board,gbic,GET_TEMP2_LO);   
/*    
    tempbuf = temprature(temp,ad2,ad3,ad1,cal1_H,cal1_L,cal2_H,cal2_L,temp1_H,temp1_L,temp2_H,temp2_L);
*/
    tempbuf = temprature(184,189,25,191,49372,124,58335,6527,47925,3455,29198,29814);
    
    printf("The laser temprature is %f~C.\n",tempbuf);
    
    return(tempbuf);     
}

double GetGbicCurrent(unsigned short board,unsigned short gbic)
{

}

double GetGbicTxPower(unsigned short board,unsigned short gbic)
{

}

double GetGbicRxPower(unsigned short board,unsigned short gbic)
{

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -