阅读:1448回复:0
cypress 68013 问题~~急
请教各位大大,目前我使用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; } } } |
|