Plese use this class with my "i2cslave" class.
Dependents: 2016_mother_3 WRS2019_master WRS2020_mecanum_node WRS2021_mecanum_driver
i2cmaster.cpp@6:bc6d5a6e9fe1, 2018-07-12 (annotated)
- 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?
User | Revision | Line number | New 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 |