主题中讨论的其他器件:MSPWARE
大家好、我正在尝试处理一个情况、即 I2C 写入一个可能不在总线上的地址。 我目前遇到两个问题:
- NACK 检测不起作用(UCB0IFG 中的 UCNACKIFG 始终为0)
- 停止条件永远不会被发送、从而使总线 SCL 保持在低电平。 我已经验证这是主器件提供的
我当前尝试使用 i2c 写入方法的方法如下所示:
bool i2c_write (uint8_t addr、uint8_t *数据、int len) { UCB0I2CSA = addr; UCB0CTL1 |= UCTXSTT | UCTR; UCB0TXBUF =*数据; while ((UCB0IFG & UCTXIFG)=0); while (UCB0CTL1 & UCTXSTT);//等待开始条件+ addr 完成(Nack/ack) IF (UCB0IFG 和 UCNACKIFG) { /*注1 */ UCB0CTL1 |= UCTXSTP; while (UCB0CTL1 & UCTXSTP); 返回 false; } for (int i = 1;i < len;i++) { UCB0TXBUF =*(DATA + I); while (!(UCB0IFG & UCTXIFG)); IF (UCB0IFG 和 UCNACKIFG) { UCB0CTL1 |= UCTXSTP; while (UCB0CTL1 & UCTXSTP); 返回 false; } } UCB0CTL1 |= UCTXSTP; while (UCB0CTL1 & UCTXSTP); /*注2 */ 返回 true; }
如果我放置一个断点、或者、例如在注释1中设置一个 LED、则它永远不会命中。
在注释2中、如果我放置一个断点或单步执行它、则会通过导线发送一个停止条件。 如果我正常运行、则永远不会发送停止条件、因此似乎是计时问题、但我不清楚我还能做什么。
最后一点、尝试使用 mspware driverlib 会出现相同的问题。
感谢您的澄清
