i2cslave class without interrupt process

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers i2cslave.cpp Source File

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