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

📄 ca6004.c

📁 miceteck_MPC860_BSP源码,基于VXWORK
💻 C
📖 第 1 页 / 共 3 页
字号:
    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 + -