我正在尝试使用带有 I2C 接口的TC74(或 DS1621)温度传感器。到目前为止,我的 I2C ISR 能够将命令和配置字节写入芯片。但是我不知道如何指示 ISR 跳转到状态0x10
(重复启动)以进行读取操作。读取过程如下:
- 由微控制器启动位(在我的情况下为 ATTINY48)
- 发送从机地址+w(状态 0x8),来自从机的 ACK
- 向从机发送命令字节(状态 0x18),来自从机的 ACK
- 此时(状态 0x28) ISR 必须发送重复启动并跳转到状态 0x10
- 然后从从机发送从机地址+R,ACK
- 然后在状态 0x40 数据将从从机读取,NACK 到从机
- 在状态 0x58 数据准备好并复制到适当的变量中,将传输停止位。
我可以在每次调用 TC74read
函数时设置一个标志,并在 ISR 中检查该标志,因此在将数据字节写入 TC74 后,它不会发送停止位,而是发出一个重复的起始位。但是我不确定这是否是正确和标准的方法。通常,在 I2C 外设的许多状态中,必须决定下一个状态。
我应该如何指示每个状态的 ISR 跳转到所需的下一个状态?