普誠創智(成都)科技有限公司-论坛

 找回密码
 立即注册
搜索
热搜: PT32 BLDCM Motor USB
查看: 65331|回复: 1
打印 上一主题 下一主题

PT32C302中怎么使用I2C连续读取数据?

[复制链接]

2

主题

3

帖子

246

积分

內部人

Rank: 5Rank: 5

积分
246
跳转到指定楼层
楼主
发表于 2017-9-22 09:36:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
I2C连续读取在库中函数为://--------------------------------------------------------------------
void I2CMBulkRd(uCHAR i2cx,uSHORT cnt, uCHAR *rbuf)
{
        while (cnt--)
        {
                pI2CxCtrl[i2cx]->I2C_DATA_CMD=I2CRD;
                while (!(pI2CxCtrl[i2cx]->I2C_STATUS&I2CSTS_RFNE));        //rx fifo empty
                *rbuf++=pI2CxCtrl[i2cx]->I2C_DATA_CMD;
        }

}
//--------------------------------------------------------------------
但调用此程序连续读取从机数据时,每次读数据都会在产生一个Read,时序如下:
红字为从机产生,假设读取4数据。
Write | Reg_add+ACK  |  Read | Data+NAK | Read | Data+NAK |Read | Data+NAK |Read | Data+NAK
此读取数据在用于连续读取时,可能会产生数据错误。

将I2CMBulkRd()函数中内容修改为下:
//--------------------------------------------------------------------
void        I2CMBulkRd(uCHAR i2cx,uSHORT cnt, uCHAR *rbuf)
{        
        pI2CxCtrl[i2cx]->I2C_DATA_CMD=I2CRD;
        while (cnt--)
        {
                if(0 == cnt)
                {
                        while (!(pI2CxCtrl[i2cx]->I2C_STATUS&I2CSTS_RFNE)); //rx fifo empty
                        *rbuf++=pI2CxCtrl[i2cx]->I2C_DATA_CMD;
                }
                else
                {
                        pI2CxCtrl[i2cx]->I2C_DATA_CMD=I2CRD;
                        while (!(pI2CxCtrl[i2cx]->I2C_STATUS&I2CSTS_RFNE)); //rx fifo empty
                        *rbuf++=pI2CxCtrl[i2cx]->I2C_DATA_CMD;
                }        
        }
}

//--------------------------------------------------------------------
用此修改函数进行连续读取时,时序如下:
红字为从机产生,假设读取4数据。
Write | Reg_add+ACK  |  Read | Data+ACK | Data+ACK | Data+ACK | Data+NAK


可实现I2C的数据连续读取。






回复

使用道具 举报

174

主题

198

帖子

1622

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1622
沙发
发表于 2017-9-22 17:06:05 | 只看该作者
GOOD
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

蜀ICP备16008743号-1|普诚科技公司|小黑屋|普誠創智(成都)科技有限公司-论坛  

GMT+8, 2024-11-23 18:01 , Processed in 0.200120 second(s), 27 queries .

快速回复 返回顶部 返回列表