2016-03-14 63 views
1

我有一個項目,涉及通過I2C交換機(PCA9548)與OneWire芯片(DS2431)通信。我想要做的就是正確配置交換機(只需向其狀態寄存器寫入一個字節),然後使用mbed SDA引腳進行OneWire通信。交換機不關心SDA線(它甚至可以在兩個方向上傳遞DC),並且我已經使用OneWire成功進行了測試。問題是將軟件從I2C切換到同一引腳上的OneWire。我試過這個簡單的方法:製作一個全球性的I2C實例,然後是一個OneWire實例,但最後一個總是破壞前一個實例,以便我可以有I2C工作或OneWire。有沒有辦法破壞一個實例並重新創建它?如何在mbed上的同一引腳上從I2C切換到OneWire?

+0

實例化另一個I2C情況下,應在構造函數重新配置引腳。我不認爲需要銷燬(或者甚至實施以將事情設置爲以前的配置) – xvan

回答

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(); 
}