vakaeric
驱动牛犊
驱动牛犊
  • 注册日期2007-01-11
  • 最后登录2007-04-18
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1447回复:0

cypress 68013 问题~~急

楼主#
更多 发布于:2007-04-17 18:43
  请教各位大大,目前我使用68013这颗ic在作电视卡,可是一直无法正确的把transportstrem传送给driver,不知是哪边出了问题,麻烦请各位大大解惑~"~,我跟driver沟通得command是用EP0,
而存放transportstrem 资料我是使用EP6,GPIF使用得是auto mode
以下是我的程式~~请各位大大帮帮忙~~~
void TD_Poll(void)            // Called repeatedly while the device is idle
{
    BYTE    address;
    BYTE    txcnt, rxcnt;
    BYTE    xdata i2cTxBuffer[16];
    BYTE    xdata i2cRxBuffer[16];
    int        i, i2c_ret;

    if (GotISR1OUT)
      {
         switch (EP1OUTBUF[0])
        {
              case k_REQUEST_I2C_READ:
    TMoutcnt=0;
                   if (bDemodInReset)
             {
        
            IOA |= bmBIT2 | bmBIT4;
            bDemodInReset = FALSE;
             }
            if(EP1OUTBUF[1]==0xA1 && EP1OUTBUF[2]==0xFF && EP1OUTBUF[3]==0x5C )
            {
               EP1INBUF[0] = 0xB1; EP1INBUF[1] = IOA;
              rxcnt=2;
            }
            else
            {
          
           address = (EP1OUTBUF[1] & 0xFE) >> 1;
               txcnt = EP1OUTBC - 4;
           rxcnt = EP1OUTBUF[EP1OUTBC - 1];
                   for (i=0; i<txcnt; i++)
                i2cTxBuffer = EP1OUTBUF[i + 2];
                   EZUSB_WriteI2C(address, txcnt, i2cTxBuffer);
           EZUSB_ReadI2C(address, rxcnt, i2cRxBuffer);
               while (EP1INCS & bmEPBUSY);
           for (i=0; i<rxcnt; i++)
                EP1INBUF = i2cRxBuffer;
            }
           EP1INBC = rxcnt;
                   break;
              case k_REQUEST_I2C_WRITE:
    TMoutcnt=0;
        
           address = (EP1OUTBUF[1] & 0xFE) >> 1;
           txcnt = EP1OUTBC - 2;
                   for (i=0; i<txcnt; i++)
               i2cTxBuffer = EP1OUTBUF[i+2];
                   i2c_ret = EZUSB_WriteI2C(address, txcnt, i2cTxBuffer);
           if ( i2c_ret == I2C_OK) EZUSB_WaitForEEPROMWrite(address);
           break;
            
                               case k_ACTIVATE_TRANSFERS:
                bHandleGpif = 1;
                            break;
                       case k_DESACTIVATE_TRANSFERS:
                          
                GPIFABORT = 0xFF;
                            bHandleGpif = 0 ;
                            SYNCDELAY;
                FIFORESET = 0x80;  
                SYNCDELAY;
                FIFORESET = 0x02;  
                SYNCDELAY;
                FIFORESET = 0x04;  
                SYNCDELAY;
                FIFORESET = 0x06;  
                SYNCDELAY;
                FIFORESET = 0x08;
                SYNCDELAY;
                FIFORESET = 0x00;  
                            break;
               default:
                            break;
             }
                   break;
              default:
           break;
        }
      
         EP1OUTBC = 0;
         GotISR1OUT = FALSE;
      }

    
    if ( bHandleGpif )
      {
     if ( GPIFTRIG & 0x80 )
       {
              
            SYNCDELAY;
          GPIFTCB1 = 15;
          SYNCDELAY;
          GPIFTCB0 = 108;
              SYNCDELAY;
              GPIFTRIG = GPIFTRIGRD | GPIF_EP6;
       }
      }

}
游客

返回顶部