i2cslave class without interrupt process
Embed:
(wiki syntax)
Show/hide line numbers
i2cslave.cpp
00001 #include "i2cslave.h" 00002 00003 i2cslave::i2cslave(PinName sda, PinName scl, char *Registar) : I2CSlave(sda, scl) 00004 { 00005 _Registar = Registar; 00006 frequency(400000); 00007 } 00008 00009 void i2cslave::communication() 00010 { 00011 switch(receive()) 00012 { 00013 case I2CSlave::NoData: //データなし 00014 break; 00015 case I2CSlave::ReadAddressed: //マスターからのデータ送信要求 00016 break; 00017 case I2CSlave::WriteAddressed: //マスターからデータを受信 00018 geti2c(); 00019 break; 00020 case I2CSlave::WriteGeneral: //マスターからデータを受信(全スレーブ宛) 00021 break; 00022 } 00023 } 00024 void i2cslave::geti2c() 00025 { 00026 char i2cData[3] = {}; 00027 read(i2cData, 3); 00028 wait_us(30); 00029 switch(i2cData[2]) 00030 { 00031 case SendData: 00032 read(_Registar + i2cData[1], i2cData[0]); 00033 break; 00034 case RequestData: 00035 write(_Registar + i2cData[1], i2cData[0]); 00036 break; 00037 } 00038 } 00039
Generated on Sat Jul 23 2022 22:24:51 by 1.7.2