您好!
我在 I2C 从模式下运行 MSP430fr2355。 由于重复启动以及我希望对同一寄存器进行读写操作、我需要知道发送或接收方向。 我测试了以下内容:
driverlib 函数、在16MHz 时钟下花费了大约500个时钟周期:
CheckStatus_UCBxCTLW0 = EUSCI_B_I2C_getMode (EUSCI_B0_BASE);
bitUCTR =((checkStatus_UCBxCTLW0 & UCTR)>> 4);
if (bitUCTR = 0x01){
MasterWriteMode = 0;
MasterReadMode = 1;
}
否则{
MasterWriteMode = 1;
MasterReadMode = 0;
}
我尝试的另一种方法是直接使用寄存器、该寄存器在 16MHz 时钟下也花费了大约300个时钟周期:
MasterReadMode =(((UCB0IFG & UCTXIFG0)>> 1);
MasterWriteMode = UCB0IFG & UCRXIFG0;
主器件读/写意味着主器件正在从 MSP430从器件读取或写入 MSP430从器件。
我尝试的另一种方法是直接监控 UCBxCTLW0中的 UCTR 位、此处未对此进行说明。
我遇到的问题是、当我在没有任何断点或 _delay_cycles (300)的情况下进行调试时、代码无法正常工作、因为它为我提供了检测到的主模式的错误状态。 例如、如果主器 件正在写入 MSP430从器件、则硬件会立即检测到该模式、但标志在另外300个时钟周期左右不会更新。
我可以在代码中保留延迟、但我真的不喜欢这样的延迟。 从设备无法知道主设备将在高级模式下发送什么内容。
数据表都指示 UCTR 位是要监控的位、但它无法正常工作或速度慢于我希望看到的速度。 当我处于 RX 模式接收寄存器地址时、我需要检测它。
谢谢
Sagi