i2cslave class without interrupt process

i2cslave.cpp

Committer:
sgrsn
Date:
2017-02-26
Revision:
0:2976149f5c28

File content as of revision 0:2976149f5c28:

#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;
    }
}