Liangzhen Lai / Mbed 2 deprecated DDRO_software

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 }