新手上路
- 积分
- 25
- 金钱
- 25
- 注册时间
- 2021-8-13
- 在线时间
- 4 小时
|
1金钱
方式1:通过IIC通信协议,实现主机从从机读取2个字节,当主机读取完第1个字节的时候,主机发送非应答信号;当主机读取完最后一个字节的时候,主机发送停止信号。
方式2:通过IIC通信协议,实现主机从从机读取2个字节,当主机读取完第1个字节的时候,主机发送应答信号;当主机读取完最后一个字节的时候,主机发送非应答信号,并产生停止信号。
通过IIC通信协议,实现主机从从机读取2个字节,是通过哪种方式啊?学习STM32的时候,书籍上说的是方式2。而在学习IMXULL时候,通过参考正点原子官方给的裸机例程中的i2c程序,发现是通过方式1,有点搞不懂。。。。。。
void i2c_master_read(I2C_Type *base, unsigned char *buf, unsigned int size)
{
volatile uint8_t dummy = 0;
dummy++;
while(!(base->I2SR & (1 << 7)));
base->I2SR &= ~(1 << 1);
base->I2CR &= ~((1 << 4) | (1 << 3));
if(size == 1)
base->I2CR |= (1 << 3);
dummy = base->I2DR;
while(size--)
{
while(!(base->I2SR & (1 << 1)));
base->I2SR &= ~(1 << 1);
if(size == 0)
{
i2c_master_stop(base);
}
if(size == 1)
{
base->I2CR |= (1 << 3);//倒数第二个数据,主机发送非应答信号
}
*buf++ = base->I2DR;
}
}
|
|