📄 ca6004.c
字号:
DATHI;
CLKHI;
I2Cnop(1);
DATLO;
I2Cnop(3);
CLKLO;
I2Cnop(1);
}
void I2Cstop(void)
{
CLKHI;
I2Cnop(1);
DATLO;
I2Cnop(1);
DATHI;
I2Cnop(1);
}
void I2Cack(void)
{
int i;
*PCDIR(immr) &= 0xff7f;
CLKHI;
I2Cnop();
for(i=0;i<0x100;i++)
{
ack = (*PCDAT(immr) & 0x0080);
if(ack==0) break;
}
I2Cnop(4);
CLKLO;
*PCDIR(immr) |= 0x0080;
}
void I2Cclock(void)
{
I2Cnop(1);
CLKHI;
I2Cnop(1);
CLKLO;
}
unsigned char I2CREAD(unsigned short addr)
{
int i;
unsigned char data,dbuf;
I2Cinit();
I2Cstart();
data = WRITEADD;
for(i=0;i<8;i++)
{
if(data&0x80)
DATHI;
else
DATLO;
I2Cclock();
data = data << 1;
}
DATHI;
I2Cack();
data = addr;
for(i=0;i<8;i++)
{
if(data&0x80)
DATHI;
else
DATLO;
I2Cclock();
data = data << 1;
}
DATHI;
I2Cack();
I2Cstart();
data = READADD;
for(i=0;i<8;i++)
{
if(data&0x80)
DATHI;
else
DATLO;
I2Cclock();
data = data << 1;
}
DATHI;
I2Cack();
I2Cnop(1);
*PCDIR(immr) &= 0xff7f;
dbuf = 0;
for(i=0;i<8;i++)
{
I2Cnop();
CLKHI;
if(*PCDAT(immr) & 0x0080)
dbuf = (dbuf << 1) + 1;
else
dbuf = (dbuf << 1);
I2Cnop();
CLKLO;
}
data = dbuf;
*PCDIR(immr) |= 0x0080;
printf("The data in addrss %d is: 0x%x\n",addr,data);
I2Cdisa();
return(data);
}
void I2CWRITE(unsigned short addr,unsigned char data)
{
int i;
unsigned char tdata,data_buf,addr_buf;
data_buf = data;
addr_buf = addr;
I2Cinit();
I2Cstart();
tdata = WRITEADD;
for(i=0;i<8;i++)
{
if(tdata&0x80)
DATHI;
else
DATLO;
I2Cclock();
tdata = tdata << 1;
}
DATHI;
I2Cack();
tdata = addr;
for(i=0;i<8;i++)
{
if(tdata&0x80)
DATHI;
else
DATLO;
I2Cclock();
tdata = tdata << 1;
}
DATHI;
I2Cack();
tdata = data;
for(i=0;i<8;i++)
{
if(tdata&0x80)
DATHI;
else
DATLO;
I2Cclock();
tdata = tdata << 1;
}
DATHI;
I2Cack();
I2Cstop();
/*
if(data_buf == I2CREAD(addr_buf))
printf("Write data 0x%x to address %d success!\n",data_buf,addr_buf);
else
printf("Write data 0x%x to address %d error!\n",data_buf,addr_buf);
*/
I2Cdisa();
}
/*
watchdog feed function:DogFeed()
Hardware connection:WDI -- PB22
*/
void DogFeed( void )
{
int i;
DOG_FEED_INI;
DOG_FEED_LOW;
DOG_FEED_NOP;
DOG_FEED_HIG;
}
/*
Ks8999 reset function:RST8999().
Hardware connection:RST8999 -- PC9.
*/
void RST8999( void )
{
int i,j;
immr = vxImmrGet();
*PCPAR(immr) &= 0xffbf;
*PCDIR(immr) |= 0x0040;
*PCSO(immr) &= 0xffbf;
*PCINT(immr) &= 0xffbf;
*PCDAT(immr) |= 0x0040;
for(j=0;j<1;j++)
{
for(i=0;i<5000;i++);
}
*PCDAT(immr) &= 0xffbf;
for(j=0;j<10;j++)
{
for(i=0;i<5000;i++);
}
*PCDAT(immr) |= 0x0040;
/*printf("Reset ks8999 over!\n"); */
}
/*
MAX705 watchdog reset control function:SetDogOutput().
*/
unsigned short SetDogOutput( unsigned short SetOne )
{
unsigned Buffer=0,Value=0;
if(SetOne==0)
{
*CA6004_POI_RST_CTL = 0x00000000;
Buffer = (*CA6004_POI_RST_CTL & 0x80000000);
/*if(Buffer == 0x00000000) return(TRUE);
else return(FALS);*/
return(TRUE);
}
else
{
*CA6004_POI_RST_CTL = 0x80000000;
Buffer = (*CA6004_POI_RST_CTL & 0x80000000);
/*if(Buffer == 0x80000000) return(TRUE);
else return(FALS);*/
return(TRUE);
}
}
/* config ks8999 vlan and mac address */
void ConfigEE(void)
{
int i=0;
I2CWRITE(0,0x55);
I2Cnop(100);
I2CWRITE(1,0x99);
I2Cnop(100);
I2CWRITE(2,0x01);
I2Cnop(100);
I2CWRITE(3,0xF0);
I2Cnop(100);
for(i=4;i<=12;i++)
{
I2CWRITE(i,0x00);
I2Cnop(100);
}
for(i=13;i<=16;i++)
{
I2CWRITE(i,0x1F);
I2Cnop(100);
}
I2CWRITE(17,0x0F);
I2Cnop(100);
I2CWRITE(18,0x0F);
I2Cnop(100);
for(i=19;i<=47;i++)
{
I2CWRITE(i,0x00);
I2Cnop(100);
}
I2CWRITE(48,0x00);
I2Cnop(100);
I2CWRITE(49,0x40);
I2Cnop(100);
I2CWRITE(50,0x05);
I2Cnop(100);
I2CWRITE(51,0x43);
I2Cnop(100);
I2CWRITE(52,0x5E);
I2Cnop(100);
I2CWRITE(53,0xFE);
I2Cnop(100);
printf("Config ks8999 eeprom over!\n");
}
/*
OpticPower read function:GetOptiPower().
Hardware connection:
AD_D[7..1] -- PA[13..7],AD_D0 -- PA5,AD_CS -- PA0,
AD_WR -- PA1,AD_RD -- PA2,HBEN -- PA3
*/
short int GetOptiPower( unsigned short PIN_NUM )
{
unsigned short Value=0,Buffer1=0,Buffer2=0,i;
short int logValue=0;
immr = vxImmrGet();
if((PIN_NUM >= 1)&(PIN_NUM <= 8))
{
*PAPAR(immr) &= 0x0A03;
*PAODR(immr) &= 0x0002;
/* THE FIRST READ */
ADWRSTART;
ADCSLO;
ADWRLO;
ADNOP;
switch(PIN_NUM)
{
case 1:PIN1START;break;
case 2:PIN2START;break;
case 3:PIN3START;break;
case 4:PIN4START;break;
case 5:PIN5START;break;
case 6:PIN6START;break;
case 7:PIN7START;break;
case 8:PIN8START;break;
}
ADNOP;
ADWRHI;
ADCSHI;
ADNOP;
ADNOP;
ADRDSTART;
HBENLO;
ADCSLO;
ADRDLO;
ADNOP;
Buffer1 = *PADAT(immr);
ADNOP;
Buffer1 &= 0x05FC;
/*
printf("%d\n",Buffer1);
*/
HBENHI;
ADNOP;
Buffer2 = *PADAT(immr);
ADNOP;
Buffer2 &= 0x05FC;
/*
printf("%d\n",Buffer2);
*/
ADRDHI;
ADCSHI;
ADNOP;
ADNOP;
ADNOP;
ADNOP;
/* THE SECOND READ */
ADWRSTART;
ADCSLO;
ADWRLO;
ADNOP;
switch(PIN_NUM)
{
case 1:PIN1START;break;
case 2:PIN2START;break;
case 3:PIN3START;break;
case 4:PIN4START;break;
case 5:PIN5START;break;
case 6:PIN6START;break;
case 7:PIN7START;break;
case 8:PIN8START;break;
}
ADNOP;
ADWRHI;
ADCSHI;
ADNOP;
ADNOP;
ADRDSTART;
HBENLO;
ADCSLO;
ADRDLO;
ADNOP;
Buffer1 = *PADAT(immr);
ADNOP;
Buffer1 &= 0x05FC;
/*
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -