S3C6410 windows CE 6.0 IIC驱动的读操作的疑惑

dairyman000 2010-11-20 12:26:11
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;
}

实在费解啊
...全文
64 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
凉拌菜 2010-11-20
  • 打赏
  • 举报
回复
g_pIICReg->IICDS = pInData->SlaveAddress与pOutData->SlaveAddress效果是一样的,在读操作时当你设置 g_pIICReg->IICSTAT = 0xB0;后硬件会自动SlaveAddress|0x1;

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧