主题中讨论的其他器件:TM4C1294NCPDT
尊敬的社区:
我使用 TM4C1294NCPDT、以便(除其他外)使用 I2C 从磁力计传感器读取数据。
在繁忙等待中读出传感器效果很好、我还可以在示波器上看到 I2C 时钟和数据线、因此我确信 MCU、传感器和印刷电路板都可以正常工作。
当我使用 MCU 通过以太网发送数据时、我希望将 FIFO 和 UDMA 与 I2C 一起使用以更快。 对于启动器、我只使用 FIFO (不带 DMA)。
我的问题是、为什么以下代码在线路上为我提供两个字节的信号(即"写入从器件0x0E"后跟数据字节0x01)
//设置写入 I2CMasterSlaveAddrSet 的从器件地址(I2C2_base、0x0E、0); //发送一个字节(将其放置在 I2C 数据寄存器中) I2CMasterDataPut (I2C2_base、0x01); I2CMasterControl (I2C2_base、I2C_MASTER_CMD_SINGLE_SEND);
但使用以下代码
//设置写入 I2CMasterSlaveAddrSet 的从器件地址(I2C2_base、0x0E、0); //使用 FIFO 发送0x37 = 55 I2CFIFODataPutNonBlocking (I2C2_base、55); I2CMasterControl (I2C2_base、I2C_MASTER_CMD_FIFO_SINGLE_SEND);
仅在行上为我提供0x37 (但不提供显示"发送到 slave0x0E"的字节)。
我已经查看了 I2CMSA、I2CMCS 和 I2CMDR 寄存器说明中的所有位。 事实证明、单次发送命令之间的唯一区别是 FIFO 的 BURST 位被置位、而不使用 FIFO 的 RUN 位被置位。 这符合数据表。 不过、这不应影响将从器件地址放在线路上、是否应该这样做? 我在数据表中找不到此信息。
如何确保即使使用 FIFO、从器件地址也被放置在线路上? 毕竟、我需要它来与特定的从器件通信。
谢谢!