S3C6410 windows CE 6.0 IIC驱动的读操作的疑惑
IIC驱动中的读操作如下:
BOOL HW_Read (PHW_OPEN_INFO pOpenContext, PIIC_IO_DESC pInData ,PIIC_IO_DESC pOutData)
{
BOOL retVal = TRUE; // Initialize to success
RETAILMSG (MSG_FUNCTION,
(TEXT("+HW_Read(0x%X)\r\n"),
pOpenContext));
HW_SetRegister(pOpenContext);
HW_Write(pOpenContext, pInData);
ResetEvent(g_hTransferDone);
// Wait until IIC bus is free.
if(!WaitForReg((PVOID)&(g_pIICReg->IICSTAT), (1<<5), 0x0, TIMEOUT_MS_RX))
{
RETAILMSG(MSG_ERROR,(TEXT("[IIC ERROR]IIS BUS is busy.\r\n")));
return FALSE;
}
g_pcIIC_BUFFER = pOutData->Data;
g_uIIC_PT = 0;
g_uIIC_DATALEN = pOutData->Count;
g_pIICReg->IICCON |= (1<<7); // Ack generation Enable
//为什么是pInData->SlaveAddress 而不是pOutData->SlaveAddress.
//pOutData->SlaveAddress.才是读地址,即最后一位是 ‘1’ 而不是 ‘0’
g_pIICReg->IICDS = pInData->SlaveAddress;
g_pIICReg->IICSTAT = 0xB0;
if(WaitForSingleObject(g_hTransferDone, TIMEOUT_MS_RX) == WAIT_TIMEOUT)
{
RETAILMSG(MSG_ERROR,(TEXT("[IIC ERROR]RX Time out.\r\n")));
// TODO: Stop all transmit. ?? set register to stop
retVal = FALSE;
}
RETAILMSG (MSG_FUNCTION,
(TEXT("-HW_Read(0x%X)\r\n"),
pOpenContext));
return retVal;
}
实在费解啊