主题中讨论的其他器件:PCA9534
工具/软件:TI C/C++编译器
大家好、社区
我的 I2C 代码有问题。 在下图中、I2C SDA 线在两个字节之间变为高电平存在问题。 它仍然与 i2c 上的大多数芯片通信(下图)、但当我与 PCA9534通信时、总线挂起、如上图所示。
void I2CSend (uint8_t slave_addr、uint8_t * data、uint8_t num_of _elements_TO_SEND) { uint8_t i; //告诉主模块何时将在总线上放置什么地址 //与从设备通信。 I2CMasterSlaveAddrSet (I2C0_BASE、SLAVE_addr、false); //将要发送的数据放入 FIFO 中 I2CMasterDataPut (I2C0_BASE、DATA[0]); //如果只有一个参数,我们只需要使用 //单发送 I2C 函数 如果(num_of _elements_TO_SEND = 1) { //从 MCU 发起数据发送 I2CMasterControl (I2C0_BASE、I2C_MASTER_CMD_SINGLE_SEND); //等待 MCU 完成传输。 while (I2CMasterBusy (I2C0_BASE)); } //否则,我们开始在上传输多个字节 //I2C 总线 其他 { //从 MCU 发起数据发送 I2CMasterControl (I2C0_BASE、I2C_MASTER_CMD_BURST_SEND_START); //等待 MCU 完成传输。 while (I2CMasterBusy (I2C0_BASE)); //send num_of _args-2数据片段、使用 ///burse_send_contt 命令的 I2C 模块 对于(i = 1;i <(num_of _elements_TO_SEND - 1);i++) { //将下一段数据放入 I2C FIFO 中 I2CMasterDataPut (I2C0_BASE、DATA[i]); //发送刚刚放置到 FIFO 中的下一个数据 I2CMasterControl (I2C0_BASE、I2C_MASTER_CMD_BURST_SEND_CONT); //等待 MCU 完成传输。 while (I2CMasterBusy (I2C0_BASE)); } //将最后一段数据放入 I2C FIFO 中 I2CMasterDataPut (I2C0_BASE、DATA[i]); //发送刚刚放置到 FIFO 中的下一个数据 I2CMasterControl (I2C0_BASE、I2C_MASTER_CMD_BURST_SEND_FINISH); //等待 MCU 完成传输。 while (I2CMasterBusy (I2C0_BASE)); } }