Plese use this class with my "i2cslave" class.

Dependents:   2016_mother_3 WRS2019_master WRS2020_mecanum_node WRS2021_mecanum_driver

Committer:
sgrsn
Date:
Thu Jul 12 10:16:10 2018 +0000
Revision:
6:bc6d5a6e9fe1
Parent:
2:890301330892
Child:
7:446cf4690750
perfect

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sgrsn 0:8c3f6ccf349c 1 #include "i2cmaster.h"
sgrsn 0:8c3f6ccf349c 2
sgrsn 6:bc6d5a6e9fe1 3 /*example************************************************
sgrsn 6:bc6d5a6e9fe1 4
sgrsn 6:bc6d5a6e9fe1 5 #include "mbed.h"
sgrsn 6:bc6d5a6e9fe1 6 #include "i2cmaster.h"
sgrsn 6:bc6d5a6e9fe1 7
sgrsn 6:bc6d5a6e9fe1 8 int main()
sgrsn 6:bc6d5a6e9fe1 9 {
sgrsn 6:bc6d5a6e9fe1 10 i2c master(p28, p27);
sgrsn 6:bc6d5a6e9fe1 11 int addr = 0xa0;
sgrsn 6:bc6d5a6e9fe1 12 int reg = 0;
sgrsn 6:bc6d5a6e9fe1 13 int32_t data;
sgrsn 6:bc6d5a6e9fe1 14 int size = 4;
sgrsn 6:bc6d5a6e9fe1 15 while(1)
sgrsn 6:bc6d5a6e9fe1 16 {
sgrsn 6:bc6d5a6e9fe1 17 printf("%d\r\n", data);
sgrsn 6:bc6d5a6e9fe1 18 master.writeSomeData(addr, reg, 2345, size);
sgrsn 6:bc6d5a6e9fe1 19 master.getSlaveRegistarData(addr, 1, &data, size);
sgrsn 6:bc6d5a6e9fe1 20 wait_ms(100);
sgrsn 6:bc6d5a6e9fe1 21 }
sgrsn 6:bc6d5a6e9fe1 22 }
sgrsn 6:bc6d5a6e9fe1 23
sgrsn 6:bc6d5a6e9fe1 24
sgrsn 6:bc6d5a6e9fe1 25 *********************************************************/
sgrsn 6:bc6d5a6e9fe1 26
sgrsn 0:8c3f6ccf349c 27
sgrsn 0:8c3f6ccf349c 28 i2c::i2c(PinName p1,PinName p2) : I2C(p1,p2)
sgrsn 0:8c3f6ccf349c 29 {
sgrsn 0:8c3f6ccf349c 30 frequency(400000);
sgrsn 0:8c3f6ccf349c 31 }
sgrsn 6:bc6d5a6e9fe1 32 bool i2c::writeSomeData(char addr, char reg, int32_t data ,int size)
sgrsn 0:8c3f6ccf349c 33 {
sgrsn 6:bc6d5a6e9fe1 34 char tmp[size];
sgrsn 6:bc6d5a6e9fe1 35 for(int i = 0; i < size; i++)
sgrsn 6:bc6d5a6e9fe1 36 {
sgrsn 6:bc6d5a6e9fe1 37 tmp[i] = (data >> (i*8)) & 0xFF;
sgrsn 6:bc6d5a6e9fe1 38 }
sgrsn 0:8c3f6ccf349c 39 char DATA[2] = {reg,size};
sgrsn 6:bc6d5a6e9fe1 40 bool N = I2C::write(addr, DATA, 2);
sgrsn 6:bc6d5a6e9fe1 41 N|= I2C::write(addr, tmp, size);
sgrsn 0:8c3f6ccf349c 42 return N;
sgrsn 0:8c3f6ccf349c 43 }
sgrsn 6:bc6d5a6e9fe1 44 bool i2c::getSlaveRegistarData(char addr, char reg, int32_t *data ,int size)
sgrsn 2:890301330892 45 {
sgrsn 2:890301330892 46 char DATA[2] = {reg,size};
sgrsn 2:890301330892 47 bool N = I2C::write(addr,DATA,2);
sgrsn 6:bc6d5a6e9fe1 48 char _data[size];
sgrsn 6:bc6d5a6e9fe1 49 N|= I2C::read(addr, _data, size);
sgrsn 6:bc6d5a6e9fe1 50 int32_t tmp = 0;
sgrsn 6:bc6d5a6e9fe1 51 for(int i = 0; i < size; i++)
sgrsn 6:bc6d5a6e9fe1 52 {
sgrsn 6:bc6d5a6e9fe1 53 tmp |= _data[i] << (i*8);
sgrsn 6:bc6d5a6e9fe1 54 }
sgrsn 6:bc6d5a6e9fe1 55 *data = tmp;
sgrsn 2:890301330892 56 return N;
sgrsn 2:890301330892 57 }
sgrsn 2:890301330892 58