summaryrefslogtreecommitdiff
path: root/tmk_core/tool/mbed/mbed-sdk/libraries/tests/mbed/i2c_master_slave/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tmk_core/tool/mbed/mbed-sdk/libraries/tests/mbed/i2c_master_slave/main.cpp')
-rw-r--r--tmk_core/tool/mbed/mbed-sdk/libraries/tests/mbed/i2c_master_slave/main.cpp60
1 files changed, 60 insertions, 0 deletions
diff --git a/tmk_core/tool/mbed/mbed-sdk/libraries/tests/mbed/i2c_master_slave/main.cpp b/tmk_core/tool/mbed/mbed-sdk/libraries/tests/mbed/i2c_master_slave/main.cpp
new file mode 100644
index 0000000000..f94b59f3db
--- /dev/null
+++ b/tmk_core/tool/mbed/mbed-sdk/libraries/tests/mbed/i2c_master_slave/main.cpp
@@ -0,0 +1,60 @@
+#include "mbed.h"
+#include "test_env.h"
+#include <stdio.h>
+
+#define ADDR (0xA0)
+#define FREQ 100000
+
+// ********************************************************
+// This tests data transfer between two I2C interfaces on
+// the same chip, one configured as master, the other as
+// slave. Works on the LPC1768 mbed.
+//
+// Wiring:
+// p28 <-> p9
+// p27 <-> p10
+// pull-up resistors on both lines
+// ********************************************************
+
+I2CSlave slave(p9, p10);
+I2C master(p28, p27);
+
+int main()
+{
+ char sent = 'T', received;
+
+ master.frequency(FREQ);
+ slave.frequency(FREQ);
+ slave.address(ADDR);
+
+ // First transfer: master to slave
+ master.start();
+ master.write(ADDR);
+ master.write(sent);
+ if(slave.receive() != I2CSlave::WriteAddressed)
+ {
+ notify_completion(false);
+ return 1;
+ }
+ slave.read(&received, 1);
+ if(sent != received)
+ {
+ notify_completion(false);
+ return 1;
+ }
+ master.stop();
+
+ // Second transfer: slave to master
+ master.start();
+ master.write(ADDR | 1);
+ if(slave.receive() != I2CSlave::ReadAddressed)
+ {
+ notify_completion(false);
+ return 1;
+ }
+ slave.write(received);
+ received = master.read(0);
+ slave.stop();
+ notify_completion(received == sent);
+}
+