普诚科技论坛

 找回密码
 立即注册
搜索
热搜: PT32 RF MCU Motor USB PLC
查看: 1708|回复: 1

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

[复制链接]

2

主题

3

帖子

180

积分

內部人

Rank: 5Rank: 5

积分
180
发表于 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的数据连续读取。






回复

使用道具 举报

101

主题

112

帖子

1033

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1033
发表于 2017-9-22 17:06:05 | 显示全部楼层
GOOD
回复

使用道具 举报

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

本版积分规则

普诚科技公司|小黑屋|普誠創智(成都)科技有限公司-论坛  

GMT+8, 2018-12-16 17:30 , Processed in 0.186092 second(s), 23 queries .

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