📄 ca6004.c
字号:
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 + -