初级会员
- 积分
- 175
- 金钱
- 175
- 注册时间
- 2018-8-3
- 在线时间
- 36 小时
|
楼主 |
发表于 2019-11-13 16:29:05
|
显示全部楼层
- 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)); /* 接收数据 */
-
- /* 如果只接收一个字节数据的话发送NACK信号 */
- if(size == 1)
- base->I2CR |= (1 << 3);
- dummy = base->I2DR; /* 假读 */
-
- while(size--)
- {
- while(!(base->I2SR & (1 << 1))); /* 等待传输完成 这里是I2SR的bit1注意!!!*/
- base->I2SR &= ~(1 << 1); /* 清除标志位 */
- if(size == 0) /*数据发送完成*/
- {
- i2c_master_stop(base); /* 发送停止信号 */
- }
- if(size == 1) /*倒数第二个数据*/
- {
- base->I2CR |= (1 << 3);
- }
- *buf++ = base->I2DR;
- }
- }
复制代码 |
|