Plese use this class with my "i2cslave" class.
Dependents: 2016_mother_3 WRS2019_master WRS2020_mecanum_node WRS2021_mecanum_driver
Diff: i2cmaster.cpp
- Revision:
- 6:bc6d5a6e9fe1
- Parent:
- 2:890301330892
- Child:
- 7:446cf4690750
diff -r 890301330892 -r bc6d5a6e9fe1 i2cmaster.cpp --- a/i2cmaster.cpp Wed Apr 27 14:20:28 2016 +0000 +++ b/i2cmaster.cpp Thu Jul 12 10:16:10 2018 +0000 @@ -1,23 +1,58 @@ #include "i2cmaster.h" +/*example************************************************ + +#include "mbed.h" +#include "i2cmaster.h" + +int main() +{ + i2c master(p28, p27); + int addr = 0xa0; + int reg = 0; + int32_t data; + int size = 4; + while(1) + { + printf("%d\r\n", data); + master.writeSomeData(addr, reg, 2345, size); + master.getSlaveRegistarData(addr, 1, &data, size); + wait_ms(100); + } +} + + +*********************************************************/ + i2c::i2c(PinName p1,PinName p2) : I2C(p1,p2) { frequency(400000); } -bool i2c::WriteSomeData(char addr, char reg, char data ,int size) +bool i2c::writeSomeData(char addr, char reg, int32_t data ,int size) { - char Data[2] = {data,0}; + char tmp[size]; + for(int i = 0; i < size; i++) + { + tmp[i] = (data >> (i*8)) & 0xFF; + } char DATA[2] = {reg,size}; - bool N = I2C::write(addr,DATA,2); - N|= I2C::write(addr,Data,size); + bool N = I2C::write(addr, DATA, 2); + N|= I2C::write(addr, tmp, size); return N; } -bool i2c::getSlaveRegistarData(char addr, char reg, char *data ,int size) +bool i2c::getSlaveRegistarData(char addr, char reg, int32_t *data ,int size) { char DATA[2] = {reg,size}; bool N = I2C::write(addr,DATA,2); - N|= I2C::read(addr, data, size); + char _data[size]; + N|= I2C::read(addr, _data, size); + int32_t tmp = 0; + for(int i = 0; i < size; i++) + { + tmp |= _data[i] << (i*8); + } + *data = tmp; return N; }