Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
master_i2c.cpp@1:acf14b6dd1be, 2012-08-03 (annotated)
- Committer:
- liangzhen
- Date:
- Fri Aug 03 06:10:02 2012 +0000
- Revision:
- 1:acf14b6dd1be
- Child:
- 3:764ccaf29ce9
DDRO software for the testbed;
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| liangzhen | 1:acf14b6dd1be | 1 | //master |
| liangzhen | 1:acf14b6dd1be | 2 | #include "mbed.h" |
| liangzhen | 1:acf14b6dd1be | 3 | #include <stdlib.h> |
| liangzhen | 1:acf14b6dd1be | 4 | |
| liangzhen | 1:acf14b6dd1be | 5 | I2C master(p28, p27); // sda, scl |
| liangzhen | 1:acf14b6dd1be | 6 | Serial pc_master(USBTX, USBRX); // tx, rx |
| liangzhen | 1:acf14b6dd1be | 7 | DigitalOut success(LED1); |
| liangzhen | 1:acf14b6dd1be | 8 | DigitalOut fail(LED2); |
| liangzhen | 1:acf14b6dd1be | 9 | DigitalIn read(p29); |
| liangzhen | 1:acf14b6dd1be | 10 | |
| liangzhen | 1:acf14b6dd1be | 11 | const int SLAVEADDR = 0x88; // define the I2C Slave Address (mbed 2) |
| liangzhen | 1:acf14b6dd1be | 12 | char cmd[2]; |
| liangzhen | 1:acf14b6dd1be | 13 | char buf[50]; |
| liangzhen | 1:acf14b6dd1be | 14 | |
| liangzhen | 1:acf14b6dd1be | 15 | void i2c_write(char * data) { |
| liangzhen | 1:acf14b6dd1be | 16 | int ack = master.write(SLAVEADDR, cmd, 2); // Send command string |
| liangzhen | 1:acf14b6dd1be | 17 | if (ack) |
| liangzhen | 1:acf14b6dd1be | 18 | fail=!fail; |
| liangzhen | 1:acf14b6dd1be | 19 | else { |
| liangzhen | 1:acf14b6dd1be | 20 | pc_master.printf("Master is writing..\n"); |
| liangzhen | 1:acf14b6dd1be | 21 | success=!success; |
| liangzhen | 1:acf14b6dd1be | 22 | } |
| liangzhen | 1:acf14b6dd1be | 23 | } |
| liangzhen | 1:acf14b6dd1be | 24 | |
| liangzhen | 1:acf14b6dd1be | 25 | void i2c_read(char * buf) { |
| liangzhen | 1:acf14b6dd1be | 26 | /* |
| liangzhen | 1:acf14b6dd1be | 27 | int ack = master.read(SLAVEADDR, buf, 6); |
| liangzhen | 1:acf14b6dd1be | 28 | if (ack) |
| liangzhen | 1:acf14b6dd1be | 29 | fail=!fail; |
| liangzhen | 1:acf14b6dd1be | 30 | else { |
| liangzhen | 1:acf14b6dd1be | 31 | pc_master.printf("Slave sent: %s\n", buf); |
| liangzhen | 1:acf14b6dd1be | 32 | success=!success; |
| liangzhen | 1:acf14b6dd1be | 33 | } |
| liangzhen | 1:acf14b6dd1be | 34 | */ |
| liangzhen | 1:acf14b6dd1be | 35 | int ack, data, scan_counter; |
| liangzhen | 1:acf14b6dd1be | 36 | scan_counter = 0; |
| liangzhen | 1:acf14b6dd1be | 37 | while(1) |
| liangzhen | 1:acf14b6dd1be | 38 | { |
| liangzhen | 1:acf14b6dd1be | 39 | data=master.read(ack); |
| liangzhen | 1:acf14b6dd1be | 40 | if(data==0xFF) |
| liangzhen | 1:acf14b6dd1be | 41 | { |
| liangzhen | 1:acf14b6dd1be | 42 | pc_master.printf("Scan finish..\n"); |
| liangzhen | 1:acf14b6dd1be | 43 | break; |
| liangzhen | 1:acf14b6dd1be | 44 | } |
| liangzhen | 1:acf14b6dd1be | 45 | else |
| liangzhen | 1:acf14b6dd1be | 46 | { |
| liangzhen | 1:acf14b6dd1be | 47 | pc_master.printf("data %d reads %d\n",scan_counter++, data); |
| liangzhen | 1:acf14b6dd1be | 48 | } |
| liangzhen | 1:acf14b6dd1be | 49 | } |
| liangzhen | 1:acf14b6dd1be | 50 | } |
| liangzhen | 1:acf14b6dd1be | 51 | |
| liangzhen | 1:acf14b6dd1be | 52 | void i2c_test() { |
| liangzhen | 1:acf14b6dd1be | 53 | master.start(); |
| liangzhen | 1:acf14b6dd1be | 54 | cmd[0] = 'U'; |
| liangzhen | 1:acf14b6dd1be | 55 | cmd[1] = 'S'; |
| liangzhen | 1:acf14b6dd1be | 56 | while (1) { |
| liangzhen | 1:acf14b6dd1be | 57 | if (read) { |
| liangzhen | 1:acf14b6dd1be | 58 | i2c_read(buf); |
| liangzhen | 1:acf14b6dd1be | 59 | } else { |
| liangzhen | 1:acf14b6dd1be | 60 | i2c_write(cmd); |
| liangzhen | 1:acf14b6dd1be | 61 | } |
| liangzhen | 1:acf14b6dd1be | 62 | wait(0.07); |
| liangzhen | 1:acf14b6dd1be | 63 | } |
| liangzhen | 1:acf14b6dd1be | 64 | } |
| liangzhen | 1:acf14b6dd1be | 65 | |
| liangzhen | 1:acf14b6dd1be | 66 | void i2c_test2() { |
| liangzhen | 1:acf14b6dd1be | 67 | //send signal to mbed2 and wait for response |
| liangzhen | 1:acf14b6dd1be | 68 | master.start(); |
| liangzhen | 1:acf14b6dd1be | 69 | cmd[0] = 'C'; |
| liangzhen | 1:acf14b6dd1be | 70 | while (master.write(SLAVEADDR, cmd, 2)) { |
| liangzhen | 1:acf14b6dd1be | 71 | fail=!fail; |
| liangzhen | 1:acf14b6dd1be | 72 | } |
| liangzhen | 1:acf14b6dd1be | 73 | int ack = 1; |
| liangzhen | 1:acf14b6dd1be | 74 | while (1) { |
| liangzhen | 1:acf14b6dd1be | 75 | if (read) { |
| liangzhen | 1:acf14b6dd1be | 76 | while (ack) { |
| liangzhen | 1:acf14b6dd1be | 77 | ack = master.read(SLAVEADDR, buf, 2); |
| liangzhen | 1:acf14b6dd1be | 78 | } |
| liangzhen | 1:acf14b6dd1be | 79 | success = 1; |
| liangzhen | 1:acf14b6dd1be | 80 | //pc_master.printf("Slave sent: $s\n", buf); |
| liangzhen | 1:acf14b6dd1be | 81 | break; |
| liangzhen | 1:acf14b6dd1be | 82 | } |
| liangzhen | 1:acf14b6dd1be | 83 | } |
| liangzhen | 1:acf14b6dd1be | 84 | } |
| liangzhen | 1:acf14b6dd1be | 85 | |
| liangzhen | 1:acf14b6dd1be | 86 | void master_write() { |
| liangzhen | 1:acf14b6dd1be | 87 | char cmd[] = "scan"; |
| liangzhen | 1:acf14b6dd1be | 88 | while (master.write(SLAVEADDR, cmd, 4)) { |
| liangzhen | 1:acf14b6dd1be | 89 | fail=1; |
| liangzhen | 1:acf14b6dd1be | 90 | } |
| liangzhen | 1:acf14b6dd1be | 91 | fail = 0; |
| liangzhen | 1:acf14b6dd1be | 92 | } |
| liangzhen | 1:acf14b6dd1be | 93 | |
| liangzhen | 1:acf14b6dd1be | 94 | void master_read() { |
| liangzhen | 1:acf14b6dd1be | 95 | /* |
| liangzhen | 1:acf14b6dd1be | 96 | char * data[2]; |
| liangzhen | 1:acf14b6dd1be | 97 | for (int i=0; i<2; i++) { |
| liangzhen | 1:acf14b6dd1be | 98 | int ack = 1; |
| liangzhen | 1:acf14b6dd1be | 99 | while (ack) { |
| liangzhen | 1:acf14b6dd1be | 100 | ack = master.read(SLAVEADDR, data[i], 10); |
| liangzhen | 1:acf14b6dd1be | 101 | fail = 1; |
| liangzhen | 1:acf14b6dd1be | 102 | } |
| liangzhen | 1:acf14b6dd1be | 103 | fail = 0; |
| liangzhen | 1:acf14b6dd1be | 104 | } |
| liangzhen | 1:acf14b6dd1be | 105 | pc_master.printf("master gets: %s and %s", *(data[0]), *(data[1])); |
| liangzhen | 1:acf14b6dd1be | 106 | */ |
| liangzhen | 1:acf14b6dd1be | 107 | pc_master.printf("master starts reading\n"); |
| liangzhen | 1:acf14b6dd1be | 108 | char data_read[64*5+1]; |
| liangzhen | 1:acf14b6dd1be | 109 | for(int i=0;i<64*5;i++) |
| liangzhen | 1:acf14b6dd1be | 110 | { |
| liangzhen | 1:acf14b6dd1be | 111 | data_read[i]=(char)49; |
| liangzhen | 1:acf14b6dd1be | 112 | } |
| liangzhen | 1:acf14b6dd1be | 113 | master.read(SLAVEADDR|1, data_read, 64*5, true); |
| liangzhen | 1:acf14b6dd1be | 114 | for(int i=0;i<64;i++) |
| liangzhen | 1:acf14b6dd1be | 115 | { |
| liangzhen | 1:acf14b6dd1be | 116 | pc_master.printf("master gets: %c%c%c%c%c\n", data_read[5*i],data_read[5*i+1],data_read[5*i+2],data_read[5*i+3],data_read[5*i+4]); |
| liangzhen | 1:acf14b6dd1be | 117 | } |
| liangzhen | 1:acf14b6dd1be | 118 | pc_master.printf("master finishes reading\n"); |
| liangzhen | 1:acf14b6dd1be | 119 | } |
| liangzhen | 1:acf14b6dd1be | 120 | |
| liangzhen | 1:acf14b6dd1be | 121 | void m2s_scan() { |
| liangzhen | 1:acf14b6dd1be | 122 | pc_master.printf("master sends command..\n"); |
| liangzhen | 1:acf14b6dd1be | 123 | master_read(); |
| liangzhen | 1:acf14b6dd1be | 124 | master_write(); |
| liangzhen | 1:acf14b6dd1be | 125 | |
| liangzhen | 1:acf14b6dd1be | 126 | master_read(); |
| liangzhen | 1:acf14b6dd1be | 127 | master_read(); |
| liangzhen | 1:acf14b6dd1be | 128 | } |