您好!
我在 driverlib 之上构建了两个 i2c_write 和 i2c_read 轮询函数。
我需要执行一个包含重复起始条件的 I2C 读取。
由于我的器件响应错误、我在 I2C 总线上插入了逻辑分析仪、我注意到在重复启动之前会发生停止、而我使用的 driverlib 函数应该'NT 触发停止条件。
我的目标器件在两条命令之间执行停止操作以及在总线上连接的其他器件时工作良好、但我无法从容地处理重复启动。
逻辑分析仪输出:
bool i2c_read (uint8_t device_address、uint8_t register_address、uint8_t *数据、uint8_t len) { bool 结果= false; USCI_B_I2C_initMaster (USCI_B2_base、device_address); USCI_B_I2C_setMode (USCI_b2_base、USCI_B2_transmit);USCI_b2_b2_mode USCI_B_I2C_ENABLE (USCI_B2_base); _disable_interrupts (); // if (!USCI_B_I2C_masterSendMultiByteStartWithTimeout (USCI_B2_base、register_address、400) )转到末尾; /*读取结果*/ USCI_B_I2C_setMode (USCI_B2_base、USCI_B_I2C_Receive_mode); USCI_B_I2C_ENABLE (USCI_B2_base); 如果( B = 1){if (!USCI_B_I2C_masterReceiveSingleStartWithTimeout (USCI_B2_base、timeout))转至结束;*数据= USCI_B_I2C_masterReceiveSingle (USCI_B2_base);}否则{USCI_B2_masterReceiveMultitleStart (UCI_ble+);}+(UI2C_ble_ble_end);(UI2C_while = 1 +)+(UI2C_ble_ble_end);(while +)+(+)+)++(UI2C_Receive+)+(while (+)+)++++++++(UI2C_Receive+)(while (+)+)+(UI2C_Byte+)(while (+)+)+++++(while ++)(+)++++++++++(1
为什么我观察到这种停止条件 ?
我出了什么问题?
