Liangzhen Lai / Mbed 2 deprecated DDRO_software

Dependencies:   mbed

Committer:
liangzhen
Date:
Thu Sep 20 23:45:05 2012 +0000
Revision:
3:764ccaf29ce9
Parent:
1:acf14b6dd1be
Child:
4:fc56fa8aa794
changes for speed binnning

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 3:764ccaf29ce9 15 void i2c_write(char * data)
liangzhen 3:764ccaf29ce9 16 {
liangzhen 1:acf14b6dd1be 17 int ack = master.write(SLAVEADDR, cmd, 2); // Send command string
liangzhen 1:acf14b6dd1be 18 if (ack)
liangzhen 1:acf14b6dd1be 19 fail=!fail;
liangzhen 1:acf14b6dd1be 20 else {
liangzhen 1:acf14b6dd1be 21 pc_master.printf("Master is writing..\n");
liangzhen 1:acf14b6dd1be 22 success=!success;
liangzhen 1:acf14b6dd1be 23 }
liangzhen 1:acf14b6dd1be 24 }
liangzhen 1:acf14b6dd1be 25
liangzhen 3:764ccaf29ce9 26 void i2c_read(char * buf)
liangzhen 3:764ccaf29ce9 27 {
liangzhen 1:acf14b6dd1be 28 /*
liangzhen 1:acf14b6dd1be 29 int ack = master.read(SLAVEADDR, buf, 6);
liangzhen 1:acf14b6dd1be 30 if (ack)
liangzhen 1:acf14b6dd1be 31 fail=!fail;
liangzhen 1:acf14b6dd1be 32 else {
liangzhen 1:acf14b6dd1be 33 pc_master.printf("Slave sent: %s\n", buf);
liangzhen 1:acf14b6dd1be 34 success=!success;
liangzhen 1:acf14b6dd1be 35 }
liangzhen 1:acf14b6dd1be 36 */
liangzhen 1:acf14b6dd1be 37 int ack, data, scan_counter;
liangzhen 1:acf14b6dd1be 38 scan_counter = 0;
liangzhen 3:764ccaf29ce9 39 while(1) {
liangzhen 1:acf14b6dd1be 40 data=master.read(ack);
liangzhen 3:764ccaf29ce9 41 if(data==0xFF) {
liangzhen 1:acf14b6dd1be 42 pc_master.printf("Scan finish..\n");
liangzhen 1:acf14b6dd1be 43 break;
liangzhen 3:764ccaf29ce9 44 } else {
liangzhen 1:acf14b6dd1be 45 pc_master.printf("data %d reads %d\n",scan_counter++, data);
liangzhen 1:acf14b6dd1be 46 }
liangzhen 1:acf14b6dd1be 47 }
liangzhen 1:acf14b6dd1be 48 }
liangzhen 1:acf14b6dd1be 49
liangzhen 3:764ccaf29ce9 50 void i2c_test()
liangzhen 3:764ccaf29ce9 51 {
liangzhen 1:acf14b6dd1be 52 master.start();
liangzhen 1:acf14b6dd1be 53 cmd[0] = 'U';
liangzhen 1:acf14b6dd1be 54 cmd[1] = 'S';
liangzhen 1:acf14b6dd1be 55 while (1) {
liangzhen 1:acf14b6dd1be 56 if (read) {
liangzhen 1:acf14b6dd1be 57 i2c_read(buf);
liangzhen 1:acf14b6dd1be 58 } else {
liangzhen 1:acf14b6dd1be 59 i2c_write(cmd);
liangzhen 1:acf14b6dd1be 60 }
liangzhen 1:acf14b6dd1be 61 wait(0.07);
liangzhen 1:acf14b6dd1be 62 }
liangzhen 1:acf14b6dd1be 63 }
liangzhen 1:acf14b6dd1be 64
liangzhen 3:764ccaf29ce9 65 void i2c_test2()
liangzhen 3:764ccaf29ce9 66 {
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 3:764ccaf29ce9 86 void master_write()
liangzhen 3:764ccaf29ce9 87 {
liangzhen 1:acf14b6dd1be 88 char cmd[] = "scan";
liangzhen 1:acf14b6dd1be 89 while (master.write(SLAVEADDR, cmd, 4)) {
liangzhen 1:acf14b6dd1be 90 fail=1;
liangzhen 1:acf14b6dd1be 91 }
liangzhen 1:acf14b6dd1be 92 fail = 0;
liangzhen 1:acf14b6dd1be 93 }
liangzhen 1:acf14b6dd1be 94
liangzhen 3:764ccaf29ce9 95 void master_read(int* ro_reading)
liangzhen 3:764ccaf29ce9 96 {
liangzhen 3:764ccaf29ce9 97 char* data_read;
liangzhen 3:764ccaf29ce9 98 data_read = new char [64*5+2];
liangzhen 3:764ccaf29ce9 99 for(int i=0; i<64*5+2; i++) {
liangzhen 3:764ccaf29ce9 100 data_read[i]=(char)47;
liangzhen 3:764ccaf29ce9 101 }
liangzhen 3:764ccaf29ce9 102 while(data_read[0]==47) {
liangzhen 3:764ccaf29ce9 103 wait(18);
liangzhen 3:764ccaf29ce9 104 master.read(SLAVEADDR|1, data_read, 64*5, true);
liangzhen 1:acf14b6dd1be 105 }
liangzhen 3:764ccaf29ce9 106 for(int i=0; i<64; i++) {
liangzhen 3:764ccaf29ce9 107 int out = 0;
liangzhen 3:764ccaf29ce9 108 out += data_read[i*5+4]-48;
liangzhen 3:764ccaf29ce9 109 out *= 10;
liangzhen 3:764ccaf29ce9 110 out += data_read[i*5+3]-48;
liangzhen 3:764ccaf29ce9 111 out *= 10;
liangzhen 3:764ccaf29ce9 112 out += data_read[i*5+2]-48;
liangzhen 3:764ccaf29ce9 113 out *= 10;
liangzhen 3:764ccaf29ce9 114 out += data_read[i*5+1]-48;
liangzhen 3:764ccaf29ce9 115 out *= 10;
liangzhen 3:764ccaf29ce9 116 out += data_read[i*5+0]-48;
liangzhen 3:764ccaf29ce9 117 ro_reading[i] = out;
liangzhen 1:acf14b6dd1be 118 }
liangzhen 1:acf14b6dd1be 119 }