我正在尝试作为主设备读取一个字节的数据。 因此、I2C 总线应发送1)器件 I2C 地址、2)发送正在访问的寄存器编号、3)读取返回的值。 代码如下:
U8 RtcRead (U8寄存器){ //
//
while (I2CMasterBusy (I2C0_BASE){} //如果仍在运行、请等待。
I2CMasterSlaveAddrSet (I2C0_BASE、rtcAddr、I2CRead); //这会将 addr 向左移动1。
I2CMasterDataPut (I2C0_BASE、寄存器); //
I2CMasterControl (I2C0_BASE、I2C_MASTER_CMD_SINGLE_SEND); //发送寄存器。
while (! I2CMasterBusy (I2C0_BASE){} //等待主器件忙、
while (I2CMasterBusy (I2C0_BASE)){} //然后等待完成。
I2CMasterControl (I2C0_BASE、I2C_MASTER_CMD_SINGLE_RECEIVE); //获取数据。
while (! I2CMasterBusy (I2C0_BASE){} //等待主器件忙、
while (I2CMasterBusy (I2C0_BASE)){} //然后等待完成。
return (I2CMasterDataGet (I2C0_BASE); //
} //
这是在 I2C 总线上发生的情况、而不是第二个字节上的 NAK、因为0x40是无效的寄存器编号:
谢谢、Doug
P.S.我希望对 I2C 的使用有一个比 TivaWare 手册中更好的写法-而这些示例对我没有太大帮助。 是否有很多人使用 TM4C 器件和 I2C?