我有一个项目涉及通过 I2C 开关 (PCA9548) 与 OneWire 芯片 (DS2431) 通话。我想做的是正确配置开关(只需将一个字节写入其状态寄存器),然后使用 mbed SDA 引脚进行 OneWire 通信。该开关不关心 SDA 线(它甚至可以双向通过 DC),我已经成功地使用 OneWire 对其进行了测试。问题是在同一引脚上将软件从 I2C 切换到 OneWire。
我尝试了一种简单的方法:创建一个全局 I2C 实例,然后创建一个 OneWire 实例,但最后一个总是破坏前一个实例,这样我就可以让 I2C 工作或 OneWire。有没有办法破坏一个实例并再次创建它?
问问题
183 次
1 回答
0
您可以通过几种方式进行处理,但最简单的方法之一是在主函数中声明 I2C 和 OneWire 实例。
如果您需要在 main 之外访问 OneWire 实例,您可以将它分配给一个指针。
这是一些伪代码:
OneWire *oneWireGlobal;
void func1() {
oneWireGlobal->writeBit(0xFF);
}
void main() {
I2C i2c(I2C_SDA, I2C_SCL);
[I2C operations here...]
OneWire oneWire(I2C_SDA);
oneWireGlobal = &oneWire; // Be sure to do this before accessing "oneWireGlobal"
[oneWire operations here...]
func1();
}
于 2016-03-14T15:06:50.350 回答