i2cmaster class without interrupt process
i2cmaster.cpp@0:a7ab96dc6a35, 2017-02-26 (annotated)
- Committer:
- sgrsn
- Date:
- Sun Feb 26 07:02:27 2017 +0000
- Revision:
- 0:a7ab96dc6a35
i2cmaster class without interrut process
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sgrsn | 0:a7ab96dc6a35 | 1 | #include "i2cmaster.h" |
sgrsn | 0:a7ab96dc6a35 | 2 | |
sgrsn | 0:a7ab96dc6a35 | 3 | i2c::i2c(PinName sda, PinName scl) : I2C(sda, scl) |
sgrsn | 0:a7ab96dc6a35 | 4 | { |
sgrsn | 0:a7ab96dc6a35 | 5 | frequency(400000); |
sgrsn | 0:a7ab96dc6a35 | 6 | } |
sgrsn | 0:a7ab96dc6a35 | 7 | |
sgrsn | 0:a7ab96dc6a35 | 8 | void i2c::sendi2c(char addr, char registar, int data, int size) |
sgrsn | 0:a7ab96dc6a35 | 9 | { |
sgrsn | 0:a7ab96dc6a35 | 10 | if(size > 0) size = size; |
sgrsn | 0:a7ab96dc6a35 | 11 | else if(data > 0xFFFFFF) size = 4; |
sgrsn | 0:a7ab96dc6a35 | 12 | else if(data > 0xFFFF) size = 3; |
sgrsn | 0:a7ab96dc6a35 | 13 | else if(data > 0xFF) size = 2; |
sgrsn | 0:a7ab96dc6a35 | 14 | else size = 1; |
sgrsn | 0:a7ab96dc6a35 | 15 | char DATA[4] = {data & 0xFF, (data>>8) & 0xFF, (data>>16) & 0xFF, (data>>24) & 0xFF}; |
sgrsn | 0:a7ab96dc6a35 | 16 | char i2cData[3] = {size, registar, SendData}; |
sgrsn | 0:a7ab96dc6a35 | 17 | write(addr, i2cData, 3); |
sgrsn | 0:a7ab96dc6a35 | 18 | write(addr, DATA, size); |
sgrsn | 0:a7ab96dc6a35 | 19 | } |
sgrsn | 0:a7ab96dc6a35 | 20 | |
sgrsn | 0:a7ab96dc6a35 | 21 | int i2c::getSlaveData(char addr, char registar, int size) |
sgrsn | 0:a7ab96dc6a35 | 22 | { |
sgrsn | 0:a7ab96dc6a35 | 23 | char i2cData[3] = {size, registar, RequestData}; |
sgrsn | 0:a7ab96dc6a35 | 24 | char getData[12] = {}; |
sgrsn | 0:a7ab96dc6a35 | 25 | write(addr, i2cData, 3); |
sgrsn | 0:a7ab96dc6a35 | 26 | read(addr, getData, size); |
sgrsn | 0:a7ab96dc6a35 | 27 | return getData[0] | (getData[1] << 8) | (getData[2] << 16) | (getData[3] << 24); |
sgrsn | 0:a7ab96dc6a35 | 28 | } |