工具/软件:TI C/C++编译器
您好,
我遇到了一个问题,在重复的启动序列之后只接收一个字节。 最简单的解释方法是举例说明:
工作箱,带停止/启动序列
- Send start / W -在 UCBxCTLW0中设置UCTXSTT和UCTR
- 发送字节1
- 发送字节2
- send stop UCBxCTLW0|= UCTXSTP
- 将模式更改为读取-清除 UCBxCTLW0中的UCTR
- Send start / R -在UCBxCTLW0中设置UCTXSTT和UCTXSTP
- 仅接收一个字节,之后MCU发送nack和stop。
重复启动序列的非工作案例:
- Send start / W - 在 UCBxCTLW0中设置UCTXSTT和UCTR
- 发送字节1
- 发送字节2
- 将模式更改为读取-清除 UCBxCTLW0中的UCTR
- 发送START / R - UCTXSTT和UCTXSTP (UCBxCTLW0)
- 接收两个字节:第一个字节是ACKed,第二个字节正在等待我的移动
我找到了解决此问题的方法,我正在使用 UCASTPx模式10b,它允许在发送/接收n字节后自动生成停止。 如下所示:
- UCBxTBCNT = 0 (将计数器设置为零,什么阻止自动停止生成)
- Send start / W - 在 UCBxCTLW0中设置UCTXSTT和UCTR
- 发送字节1
- 发送字节2
- 将模式更改为读取-清除 UCBxCTLW0中的UCTR
- UCBxTBCNT = 0x01 (将计数器设置为1 字节)
- 发送start / R - UCBxCTLW0中的UCTXSTT
- 仅接收一个字节,之后MCU发送nack和stop。
我的问题:
1.为什么在 重复启动模式下设置UCTXSTT和UCTXSTP时I2C工作不正常?
2. 文档中包含一条规定, 只有 在UCSWRST等于1时,才可以修改UCTBCNTx。 我不能满足这一条件,因为它将禁用I2C并释放SCL线路,并且重复启动变得不可能。 我是否要担心这项规定呢?
此致,
Mateusz


