i2cslave class without interrupt process
Diff: i2cslave.cpp
- Revision:
- 0:2976149f5c28
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/i2cslave.cpp Sun Feb 26 07:04:56 2017 +0000 @@ -0,0 +1,39 @@ +#include "i2cslave.h" + +i2cslave::i2cslave(PinName sda, PinName scl, char *Registar) : I2CSlave(sda, scl) +{ + _Registar = Registar; + frequency(400000); +} + +void i2cslave::communication() +{ + switch(receive()) + { + case I2CSlave::NoData: //データなし + break; + case I2CSlave::ReadAddressed: //マスターからのデータ送信要求 + break; + case I2CSlave::WriteAddressed: //マスターからデータを受信 + geti2c(); + break; + case I2CSlave::WriteGeneral: //マスターからデータを受信(全スレーブ宛) + break; + } +} +void i2cslave::geti2c() +{ + char i2cData[3] = {}; + read(i2cData, 3); + wait_us(30); + switch(i2cData[2]) + { + case SendData: + read(_Registar + i2cData[1], i2cData[0]); + break; + case RequestData: + write(_Registar + i2cData[1], i2cData[0]); + break; + } +} +