]> git.donarmstrong.com Git - qmk_firmware.git/blob - tool/mbed/mbed-sdk/libraries/tests/mbed/i2c_master_slave/main.cpp
Squashed 'tmk_core/' changes from 7967731..b9e0ea0
[qmk_firmware.git] / tool / mbed / mbed-sdk / libraries / tests / mbed / i2c_master_slave / main.cpp
1 #include "mbed.h"
2 #include "test_env.h"
3 #include <stdio.h>
4
5 #define ADDR (0xA0)
6 #define FREQ 100000
7
8 // ********************************************************
9 // This tests data transfer between two I2C interfaces on
10 // the same chip, one configured as master, the other as
11 // slave. Works on the LPC1768 mbed.
12 //
13 // Wiring:
14 //   p28 <-> p9
15 //   p27 <-> p10
16 //   pull-up resistors on both lines
17 // ********************************************************
18
19 I2CSlave slave(p9, p10);
20 I2C master(p28, p27);
21
22 int main()
23 {
24     char sent = 'T', received;
25
26     master.frequency(FREQ);
27     slave.frequency(FREQ);
28     slave.address(ADDR);
29
30     // First transfer: master to slave
31     master.start();
32     master.write(ADDR);
33     master.write(sent);
34     if(slave.receive() != I2CSlave::WriteAddressed)
35     {
36         notify_completion(false);
37         return 1;
38     }
39     slave.read(&received, 1);
40     if(sent != received)
41     {
42         notify_completion(false);
43         return 1;
44     }
45     master.stop();
46
47     // Second transfer: slave to master
48     master.start();
49     master.write(ADDR | 1);
50     if(slave.receive() != I2CSlave::ReadAddressed)
51     {
52         notify_completion(false);
53         return 1;
54     }
55     slave.write(received);
56     received = master.read(0);
57     slave.stop();
58     notify_completion(received == sent);
59 }
60