I2C master and slave testing example

Dependencies:   mbed-src

Committer:
Yunfeng
Date:
Fri Aug 14 15:00:28 2015 +0000
Revision:
0:0c4c8f8e3e04
initial commit for I2C master and slave test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Yunfeng 0:0c4c8f8e3e04 1 #include "fw_config.h"
Yunfeng 0:0c4c8f8e3e04 2 #if SEL_I2C_3200_TEST == 1
Yunfeng 0:0c4c8f8e3e04 3
Yunfeng 0:0c4c8f8e3e04 4 #include "mbed.h"
Yunfeng 0:0c4c8f8e3e04 5 #if SEL_I2C_SLAVE_MODE == 1
Yunfeng 0:0c4c8f8e3e04 6
Yunfeng 0:0c4c8f8e3e04 7 #else
Yunfeng 0:0c4c8f8e3e04 8
Yunfeng 0:0c4c8f8e3e04 9 #endif
Yunfeng 0:0c4c8f8e3e04 10
Yunfeng 0:0c4c8f8e3e04 11 DigitalOut pin07 (P0_20);
Yunfeng 0:0c4c8f8e3e04 12 DigitalOut pin12 (P0_21);
Yunfeng 0:0c4c8f8e3e04 13 DigitalOut pin21 (P0_11);
Yunfeng 0:0c4c8f8e3e04 14
Yunfeng 0:0c4c8f8e3e04 15 #if SEL_I2C_SLAVE_MODE == 1
Yunfeng 0:0c4c8f8e3e04 16 void i2c_3200 () {
Yunfeng 0:0c4c8f8e3e04 17
Yunfeng 0:0c4c8f8e3e04 18 I2CSlave slave(P0_5 , P0_4);
Yunfeng 0:0c4c8f8e3e04 19 // indicate enter
Yunfeng 0:0c4c8f8e3e04 20 volatile int d = 0;
Yunfeng 0:0c4c8f8e3e04 21 for (int i = 0; i < 5; i++) {
Yunfeng 0:0c4c8f8e3e04 22 d = d > 0? 0:1;
Yunfeng 0:0c4c8f8e3e04 23 pin07 = d;
Yunfeng 0:0c4c8f8e3e04 24 pin12 = d;
Yunfeng 0:0c4c8f8e3e04 25 pin21 = d;
Yunfeng 0:0c4c8f8e3e04 26 wait(1);
Yunfeng 0:0c4c8f8e3e04 27 }
Yunfeng 0:0c4c8f8e3e04 28 pin07 = 1;
Yunfeng 0:0c4c8f8e3e04 29 pin12 = 1;
Yunfeng 0:0c4c8f8e3e04 30 pin21 = 1;
Yunfeng 0:0c4c8f8e3e04 31 //while (1);
Yunfeng 0:0c4c8f8e3e04 32
Yunfeng 0:0c4c8f8e3e04 33
Yunfeng 0:0c4c8f8e3e04 34 slave.address(0x60);
Yunfeng 0:0c4c8f8e3e04 35 char buf[2];
Yunfeng 0:0c4c8f8e3e04 36
Yunfeng 0:0c4c8f8e3e04 37 while (1) {
Yunfeng 0:0c4c8f8e3e04 38 int i = slave.receive();
Yunfeng 0:0c4c8f8e3e04 39 switch (i) {
Yunfeng 0:0c4c8f8e3e04 40 case I2CSlave::ReadAddressed:
Yunfeng 0:0c4c8f8e3e04 41 buf[1] = 'Z';
Yunfeng 0:0c4c8f8e3e04 42 slave.write(buf, 1); // Includes null char
Yunfeng 0:0c4c8f8e3e04 43 pin07 = 0;
Yunfeng 0:0c4c8f8e3e04 44 pin12 = 1;
Yunfeng 0:0c4c8f8e3e04 45 pin21 = 1;
Yunfeng 0:0c4c8f8e3e04 46 break;
Yunfeng 0:0c4c8f8e3e04 47 case I2CSlave::WriteGeneral:
Yunfeng 0:0c4c8f8e3e04 48 slave.read(buf, 10);
Yunfeng 0:0c4c8f8e3e04 49 pin12 = 0;
Yunfeng 0:0c4c8f8e3e04 50 pin07 = 1;
Yunfeng 0:0c4c8f8e3e04 51 pin21 = 1;
Yunfeng 0:0c4c8f8e3e04 52 printf("Read G: \n");
Yunfeng 0:0c4c8f8e3e04 53 break;
Yunfeng 0:0c4c8f8e3e04 54 case I2CSlave::WriteAddressed:
Yunfeng 0:0c4c8f8e3e04 55 slave.read(buf, 1);
Yunfeng 0:0c4c8f8e3e04 56 pin21 = 0;
Yunfeng 0:0c4c8f8e3e04 57 pin07 = 1;
Yunfeng 0:0c4c8f8e3e04 58 pin12 = 1;
Yunfeng 0:0c4c8f8e3e04 59 if (buf[0] != 0xaa) {
Yunfeng 0:0c4c8f8e3e04 60 pin07 = 0;
Yunfeng 0:0c4c8f8e3e04 61 }
Yunfeng 0:0c4c8f8e3e04 62 wait(0.3);
Yunfeng 0:0c4c8f8e3e04 63 pin21 = 1;
Yunfeng 0:0c4c8f8e3e04 64 printf("Read A: %x, %x\n", buf[0], buf[1]);
Yunfeng 0:0c4c8f8e3e04 65 break;
Yunfeng 0:0c4c8f8e3e04 66 }
Yunfeng 0:0c4c8f8e3e04 67 //for(int i = 0; i < 10; i++) buf[i] = 0; // Clear buffer
Yunfeng 0:0c4c8f8e3e04 68 }
Yunfeng 0:0c4c8f8e3e04 69 }
Yunfeng 0:0c4c8f8e3e04 70 #else
Yunfeng 0:0c4c8f8e3e04 71 void i2c_3200_master () {
Yunfeng 0:0c4c8f8e3e04 72 volatile int d = 0;
Yunfeng 0:0c4c8f8e3e04 73 for (int i = 0; i < 10; i++) {
Yunfeng 0:0c4c8f8e3e04 74 d = d > 0? 0:1;
Yunfeng 0:0c4c8f8e3e04 75 pin07 = d;
Yunfeng 0:0c4c8f8e3e04 76 pin12 = d;
Yunfeng 0:0c4c8f8e3e04 77 pin21 = d;
Yunfeng 0:0c4c8f8e3e04 78 wait(1);
Yunfeng 0:0c4c8f8e3e04 79 }
Yunfeng 0:0c4c8f8e3e04 80 pin07 = 1;
Yunfeng 0:0c4c8f8e3e04 81 pin12 = 1;
Yunfeng 0:0c4c8f8e3e04 82 pin21 = 1;
Yunfeng 0:0c4c8f8e3e04 83 I2C master(P0_5 , P0_4);
Yunfeng 0:0c4c8f8e3e04 84 char cmd[2];
Yunfeng 0:0c4c8f8e3e04 85 int err;
Yunfeng 0:0c4c8f8e3e04 86 master.frequency(400000);
Yunfeng 0:0c4c8f8e3e04 87 while (1) {
Yunfeng 0:0c4c8f8e3e04 88 cmd[0] = 0xAA;
Yunfeng 0:0c4c8f8e3e04 89 //cmd[1] = 0x01;
Yunfeng 0:0c4c8f8e3e04 90 err = master.write(0x60, cmd, 1);
Yunfeng 0:0c4c8f8e3e04 91 if (err) pin07 = 0;
Yunfeng 0:0c4c8f8e3e04 92 wait(0.5);
Yunfeng 0:0c4c8f8e3e04 93
Yunfeng 0:0c4c8f8e3e04 94 cmd[0] = 0xAA;
Yunfeng 0:0c4c8f8e3e04 95 //cmd[1] = 0x80;
Yunfeng 0:0c4c8f8e3e04 96 err = master.write(0x60, cmd, 1);
Yunfeng 0:0c4c8f8e3e04 97 if (err) pin12 = 0;
Yunfeng 0:0c4c8f8e3e04 98 wait(0.5);
Yunfeng 0:0c4c8f8e3e04 99 //slave.read(addr, cmd, 2);
Yunfeng 0:0c4c8f8e3e04 100
Yunfeng 0:0c4c8f8e3e04 101 //float tmp = (float((cmd[0]<<8)|cmd[1]) / 256.0);
Yunfeng 0:0c4c8f8e3e04 102 //printf("Temp = %.2f\n", tmp);
Yunfeng 0:0c4c8f8e3e04 103 }
Yunfeng 0:0c4c8f8e3e04 104 }
Yunfeng 0:0c4c8f8e3e04 105 #endif
Yunfeng 0:0c4c8f8e3e04 106
Yunfeng 0:0c4c8f8e3e04 107 #endif