Liangzhen Lai / Mbed 2 deprecated DDRO_software_slave

Dependencies:   mbed

Committer:
liangzhen
Date:
Tue Oct 02 01:21:39 2012 +0000
Revision:
1:90a2068dd130
Parent:
0:2a52ec2fb0e0
Child:
2:152e0a3ec192
N.A.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
liangzhen 0:2a52ec2fb0e0 1 //slave
liangzhen 0:2a52ec2fb0e0 2 //note: main() function is at the bottom
liangzhen 0:2a52ec2fb0e0 3 #include <mbed.h>
liangzhen 0:2a52ec2fb0e0 4 #include <sstream>
liangzhen 0:2a52ec2fb0e0 5 using namespace std;
liangzhen 0:2a52ec2fb0e0 6
liangzhen 0:2a52ec2fb0e0 7 I2CSlave slave(p9, p10);
liangzhen 0:2a52ec2fb0e0 8 DigitalOut led1(LED1);
liangzhen 0:2a52ec2fb0e0 9 DigitalOut led2(LED2);
liangzhen 0:2a52ec2fb0e0 10 DigitalOut led3(LED3);
liangzhen 0:2a52ec2fb0e0 11 DigitalOut led4(LED4);
liangzhen 0:2a52ec2fb0e0 12 Serial pc(USBTX, USBRX);
liangzhen 0:2a52ec2fb0e0 13
liangzhen 0:2a52ec2fb0e0 14 Ticker CLK;
liangzhen 0:2a52ec2fb0e0 15
liangzhen 0:2a52ec2fb0e0 16 DigitalOut leakage_enable(p15);
liangzhen 0:2a52ec2fb0e0 17 AnalogIn leakage1(p17);
liangzhen 0:2a52ec2fb0e0 18 AnalogIn leakage2(p18);
liangzhen 0:2a52ec2fb0e0 19
liangzhen 0:2a52ec2fb0e0 20 DigitalOut ref_clk(p5);
liangzhen 0:2a52ec2fb0e0 21 DigitalOut count(p6);
liangzhen 0:2a52ec2fb0e0 22 DigitalOut read(p7);
liangzhen 0:2a52ec2fb0e0 23 DigitalOut enable(p8);
liangzhen 0:2a52ec2fb0e0 24 DigitalOut S0(p11);
liangzhen 0:2a52ec2fb0e0 25 DigitalOut S1(p12);
liangzhen 0:2a52ec2fb0e0 26 DigitalOut S2(p13);
liangzhen 0:2a52ec2fb0e0 27 DigitalOut S3(p14);
liangzhen 0:2a52ec2fb0e0 28 DigitalOut S4(p22);
liangzhen 0:2a52ec2fb0e0 29 DigitalOut S5(p21);
liangzhen 0:2a52ec2fb0e0 30 DigitalOut OS(p16);
liangzhen 0:2a52ec2fb0e0 31 DigitalIn O0(p23);
liangzhen 0:2a52ec2fb0e0 32 DigitalIn O1(p24);
liangzhen 0:2a52ec2fb0e0 33 DigitalIn O2(p25);
liangzhen 0:2a52ec2fb0e0 34 DigitalIn O3(p29);
liangzhen 0:2a52ec2fb0e0 35 DigitalIn O4(p28);
liangzhen 0:2a52ec2fb0e0 36 DigitalIn O5(p27);
liangzhen 0:2a52ec2fb0e0 37 DigitalIn O6(p26);
liangzhen 0:2a52ec2fb0e0 38 DigitalIn O7(p30);
liangzhen 0:2a52ec2fb0e0 39 AnalogIn core(p19);
liangzhen 0:2a52ec2fb0e0 40 AnalogIn sram(p20);
liangzhen 0:2a52ec2fb0e0 41
liangzhen 0:2a52ec2fb0e0 42 char buf[50] = {};
liangzhen 0:2a52ec2fb0e0 43 char msg[] = "Slave!";
liangzhen 0:2a52ec2fb0e0 44 const int SLAVEADDR = 0x88; // define the I2C Slave Address (mbed 2)
liangzhen 0:2a52ec2fb0e0 45
liangzhen 0:2a52ec2fb0e0 46 void clk_gen()
liangzhen 0:2a52ec2fb0e0 47 {
liangzhen 0:2a52ec2fb0e0 48 ref_clk = !ref_clk;
liangzhen 0:2a52ec2fb0e0 49 }
liangzhen 0:2a52ec2fb0e0 50
liangzhen 0:2a52ec2fb0e0 51 void assign_s(int selection)
liangzhen 0:2a52ec2fb0e0 52 {
liangzhen 0:2a52ec2fb0e0 53 int remainder = selection;
liangzhen 0:2a52ec2fb0e0 54 S0 = selection % 2;
liangzhen 0:2a52ec2fb0e0 55 selection = selection / 2;
liangzhen 0:2a52ec2fb0e0 56 S1 = selection % 2;
liangzhen 0:2a52ec2fb0e0 57 selection = selection / 2;
liangzhen 0:2a52ec2fb0e0 58 S2 = selection % 2;
liangzhen 0:2a52ec2fb0e0 59 selection = selection / 2;
liangzhen 0:2a52ec2fb0e0 60 S3 = selection % 2;
liangzhen 0:2a52ec2fb0e0 61 selection = selection / 2;
liangzhen 0:2a52ec2fb0e0 62 S4 = selection % 2;
liangzhen 0:2a52ec2fb0e0 63 selection = selection / 2;
liangzhen 0:2a52ec2fb0e0 64 S5 = selection % 2;
liangzhen 0:2a52ec2fb0e0 65 }
liangzhen 0:2a52ec2fb0e0 66
liangzhen 0:2a52ec2fb0e0 67 unsigned int read_out()
liangzhen 0:2a52ec2fb0e0 68 {
liangzhen 0:2a52ec2fb0e0 69 unsigned int out;
liangzhen 0:2a52ec2fb0e0 70 out = 0;
liangzhen 0:2a52ec2fb0e0 71 OS = 1;
liangzhen 0:2a52ec2fb0e0 72 wait(0.001);
liangzhen 0:2a52ec2fb0e0 73 out += O7.read();
liangzhen 0:2a52ec2fb0e0 74 out *= 2;
liangzhen 0:2a52ec2fb0e0 75 out += O6.read();
liangzhen 0:2a52ec2fb0e0 76 out *= 2;
liangzhen 0:2a52ec2fb0e0 77 out += O5.read();
liangzhen 0:2a52ec2fb0e0 78 out *= 2;
liangzhen 0:2a52ec2fb0e0 79 out += O4.read();
liangzhen 0:2a52ec2fb0e0 80 out *= 2;
liangzhen 0:2a52ec2fb0e0 81 out += O3.read();
liangzhen 0:2a52ec2fb0e0 82 out *= 2;
liangzhen 0:2a52ec2fb0e0 83 out += O2.read();
liangzhen 0:2a52ec2fb0e0 84 out *= 2;
liangzhen 0:2a52ec2fb0e0 85 out += O1.read();
liangzhen 0:2a52ec2fb0e0 86 out *= 2;
liangzhen 0:2a52ec2fb0e0 87 out += O0.read();
liangzhen 0:2a52ec2fb0e0 88 out *= 2;
liangzhen 0:2a52ec2fb0e0 89 OS = 0;
liangzhen 0:2a52ec2fb0e0 90 wait(0.001);
liangzhen 0:2a52ec2fb0e0 91 out += O7.read();
liangzhen 0:2a52ec2fb0e0 92 out *= 2;
liangzhen 0:2a52ec2fb0e0 93 out += O6.read();
liangzhen 0:2a52ec2fb0e0 94 out *= 2;
liangzhen 0:2a52ec2fb0e0 95 out += O5.read();
liangzhen 0:2a52ec2fb0e0 96 out *= 2;
liangzhen 0:2a52ec2fb0e0 97 out += O4.read();
liangzhen 0:2a52ec2fb0e0 98 out *= 2;
liangzhen 0:2a52ec2fb0e0 99 out += O3.read();
liangzhen 0:2a52ec2fb0e0 100 out *= 2;
liangzhen 0:2a52ec2fb0e0 101 out += O2.read();
liangzhen 0:2a52ec2fb0e0 102 out *= 2;
liangzhen 0:2a52ec2fb0e0 103 out += O1.read();
liangzhen 0:2a52ec2fb0e0 104 out *= 2;
liangzhen 0:2a52ec2fb0e0 105 out += O0.read();
liangzhen 0:2a52ec2fb0e0 106 return out;
liangzhen 0:2a52ec2fb0e0 107 }
liangzhen 0:2a52ec2fb0e0 108
liangzhen 0:2a52ec2fb0e0 109 void scan_slave(char* ro_data)
liangzhen 0:2a52ec2fb0e0 110 {
liangzhen 0:2a52ec2fb0e0 111 pc.printf("Testing Starts here\n");
liangzhen 0:2a52ec2fb0e0 112 O0.mode(PullUp);
liangzhen 0:2a52ec2fb0e0 113 O1.mode(PullUp);
liangzhen 0:2a52ec2fb0e0 114 O2.mode(PullUp);
liangzhen 0:2a52ec2fb0e0 115 O3.mode(PullUp);
liangzhen 0:2a52ec2fb0e0 116 O4.mode(PullUp);
liangzhen 0:2a52ec2fb0e0 117 O5.mode(PullUp);
liangzhen 0:2a52ec2fb0e0 118 O6.mode(PullUp);
liangzhen 0:2a52ec2fb0e0 119 O7.mode(PullUp);
liangzhen 0:2a52ec2fb0e0 120
liangzhen 0:2a52ec2fb0e0 121 count = 0;
liangzhen 0:2a52ec2fb0e0 122 read = 0;
liangzhen 0:2a52ec2fb0e0 123 enable = 0;
liangzhen 0:2a52ec2fb0e0 124 int i;
liangzhen 0:2a52ec2fb0e0 125
liangzhen 0:2a52ec2fb0e0 126 for (i=0; i<64; i++) {
liangzhen 0:2a52ec2fb0e0 127 //measure using 0.01
liangzhen 0:2a52ec2fb0e0 128 CLK.detach();
liangzhen 0:2a52ec2fb0e0 129 CLK.attach(&clk_gen, 0.01);
liangzhen 0:2a52ec2fb0e0 130 int select = i;
liangzhen 0:2a52ec2fb0e0 131 enable = 0;
liangzhen 0:2a52ec2fb0e0 132 count = 0;
liangzhen 0:2a52ec2fb0e0 133 read = 0;
liangzhen 0:2a52ec2fb0e0 134 assign_s(select);
liangzhen 0:2a52ec2fb0e0 135 wait_us(100);
liangzhen 0:2a52ec2fb0e0 136 enable = 1;
liangzhen 0:2a52ec2fb0e0 137 wait_us(100);
liangzhen 0:2a52ec2fb0e0 138 count = 1;
liangzhen 0:2a52ec2fb0e0 139 wait_us(100);
liangzhen 0:2a52ec2fb0e0 140 count = 0;
liangzhen 0:2a52ec2fb0e0 141 wait(0.2);
liangzhen 0:2a52ec2fb0e0 142 read = 0;
liangzhen 0:2a52ec2fb0e0 143 wait_us(100);
liangzhen 0:2a52ec2fb0e0 144 read = 1;
liangzhen 0:2a52ec2fb0e0 145 wait_us(100);
liangzhen 0:2a52ec2fb0e0 146 read = 0;
liangzhen 0:2a52ec2fb0e0 147 enable = 0;
liangzhen 0:2a52ec2fb0e0 148 unsigned int out;
liangzhen 0:2a52ec2fb0e0 149 out = read_out();
liangzhen 0:2a52ec2fb0e0 150 ro_data[5*i] = (char)(out%10+48);
liangzhen 0:2a52ec2fb0e0 151 out = out / 10;
liangzhen 0:2a52ec2fb0e0 152 ro_data[5*i+1] = (char)(out%10+48);
liangzhen 0:2a52ec2fb0e0 153 out = out / 10;
liangzhen 0:2a52ec2fb0e0 154 ro_data[5*i+2] = (char)(out%10+48);
liangzhen 0:2a52ec2fb0e0 155 out = out / 10;
liangzhen 0:2a52ec2fb0e0 156 ro_data[5*i+3] = (char)(out%10+48);
liangzhen 0:2a52ec2fb0e0 157 out = out / 10;
liangzhen 0:2a52ec2fb0e0 158 ro_data[5*i+4] = (char)(out%10+48);
liangzhen 0:2a52ec2fb0e0 159 CLK.detach();
liangzhen 0:2a52ec2fb0e0 160 }
liangzhen 0:2a52ec2fb0e0 161 }
liangzhen 0:2a52ec2fb0e0 162
liangzhen 0:2a52ec2fb0e0 163 void read_power(char* ro_data)
liangzhen 0:2a52ec2fb0e0 164 {
liangzhen 0:2a52ec2fb0e0 165 unsigned short core_reading = core.read_u16();
liangzhen 0:2a52ec2fb0e0 166 unsigned short sram_reading = sram.read_u16();
liangzhen 0:2a52ec2fb0e0 167 ro_data[64*5] = (core_reading%0x100);
liangzhen 0:2a52ec2fb0e0 168 ro_data[64*5+1] = (core_reading/0x100);
liangzhen 0:2a52ec2fb0e0 169 ro_data[64*5+2] = (sram_reading%0x100);
liangzhen 0:2a52ec2fb0e0 170 ro_data[64*5+3] = (sram_reading/0x100);
liangzhen 0:2a52ec2fb0e0 171 }
liangzhen 0:2a52ec2fb0e0 172
liangzhen 0:2a52ec2fb0e0 173 void read_leakage(char* ro_data)
liangzhen 0:2a52ec2fb0e0 174 {
liangzhen 1:90a2068dd130 175 double reading1, reading2;
liangzhen 0:2a52ec2fb0e0 176 CLK.detach();
liangzhen 0:2a52ec2fb0e0 177 leakage_enable = 1;
liangzhen 1:90a2068dd130 178 /*
liangzhen 1:90a2068dd130 179 S4 = 1;
liangzhen 1:90a2068dd130 180 S5 = 0;
liangzhen 1:90a2068dd130 181 ref_clk=0;
liangzhen 1:90a2068dd130 182 wait(0.1);
liangzhen 1:90a2068dd130 183 for(int i=0; i<100; i++) {
liangzhen 1:90a2068dd130 184 ref_clk=0;
liangzhen 1:90a2068dd130 185 wait(0.1);
liangzhen 1:90a2068dd130 186 ref_clk=1;
liangzhen 1:90a2068dd130 187 wait(0.002*i);
liangzhen 1:90a2068dd130 188 ref_clk=0;
liangzhen 1:90a2068dd130 189 reading1 = leakage1.read();
liangzhen 1:90a2068dd130 190 reading1 *= 3.3;
liangzhen 1:90a2068dd130 191 reading2 = leakage2.read();
liangzhen 1:90a2068dd130 192 reading2 *= 3.3;
liangzhen 1:90a2068dd130 193 pc.printf("00%d: %f %f\n",i, reading1, reading2);
liangzhen 1:90a2068dd130 194 }
liangzhen 1:90a2068dd130 195
liangzhen 1:90a2068dd130 196 S4 = 1;
liangzhen 1:90a2068dd130 197 S5 = 1;
liangzhen 1:90a2068dd130 198 ref_clk=0;
liangzhen 1:90a2068dd130 199 wait(0.1);
liangzhen 1:90a2068dd130 200 for(int i=0; i<100; i++) {
liangzhen 1:90a2068dd130 201 ref_clk=0;
liangzhen 1:90a2068dd130 202 wait(0.1);
liangzhen 1:90a2068dd130 203 ref_clk=1;
liangzhen 1:90a2068dd130 204 wait(0.002*i);
liangzhen 1:90a2068dd130 205 ref_clk=0;
liangzhen 1:90a2068dd130 206 reading1 = leakage1.read();
liangzhen 1:90a2068dd130 207 reading1 *= 3.3;
liangzhen 1:90a2068dd130 208 reading2 = leakage2.read();
liangzhen 1:90a2068dd130 209 reading2 *= 3.3;
liangzhen 1:90a2068dd130 210 pc.printf("10%d: %f %f\n",i, reading1, reading2);
liangzhen 1:90a2068dd130 211 }
liangzhen 1:90a2068dd130 212 */
liangzhen 1:90a2068dd130 213
liangzhen 1:90a2068dd130 214 //
liangzhen 0:2a52ec2fb0e0 215 S4 = 0;
liangzhen 0:2a52ec2fb0e0 216 S5 = 0;
liangzhen 0:2a52ec2fb0e0 217 ref_clk=0;
liangzhen 1:90a2068dd130 218 wait(0.1);
liangzhen 1:90a2068dd130 219
liangzhen 0:2a52ec2fb0e0 220 ref_clk=1;
liangzhen 1:90a2068dd130 221 wait_us(2000);
liangzhen 1:90a2068dd130 222
liangzhen 0:2a52ec2fb0e0 223 ref_clk=0;
liangzhen 1:90a2068dd130 224 wait_us(100);
liangzhen 1:90a2068dd130 225
liangzhen 0:2a52ec2fb0e0 226 unsigned short RVTP=leakage1.read_u16();
liangzhen 1:90a2068dd130 227 reading1 = leakage1.read();
liangzhen 1:90a2068dd130 228 reading2 = leakage2.read();
liangzhen 1:90a2068dd130 229 reading1 *= 3.3;
liangzhen 1:90a2068dd130 230 reading2 *= 3.3;
liangzhen 1:90a2068dd130 231
liangzhen 1:90a2068dd130 232 pc.printf("RVTP: %f \t %f\n", reading1, reading2);
liangzhen 1:90a2068dd130 233 ref_clk=1;
liangzhen 1:90a2068dd130 234 wait_us(10);
liangzhen 1:90a2068dd130 235
liangzhen 1:90a2068dd130 236 ref_clk=0;
liangzhen 1:90a2068dd130 237 wait_us(100);
liangzhen 1:90a2068dd130 238
liangzhen 1:90a2068dd130 239 reading1 = leakage1.read();
liangzhen 1:90a2068dd130 240 reading2 = leakage2.read();
liangzhen 1:90a2068dd130 241 reading1 *= 3.3;
liangzhen 1:90a2068dd130 242 reading2 *= 3.3;
liangzhen 1:90a2068dd130 243 pc.printf("RVTP: %f \t %f\n", reading1, reading2);
liangzhen 1:90a2068dd130 244
liangzhen 1:90a2068dd130 245 //
liangzhen 0:2a52ec2fb0e0 246 S4 = 0;
liangzhen 0:2a52ec2fb0e0 247 S5 = 1;
liangzhen 0:2a52ec2fb0e0 248 ref_clk=0;
liangzhen 1:90a2068dd130 249 wait(0.1);
liangzhen 1:90a2068dd130 250
liangzhen 0:2a52ec2fb0e0 251 ref_clk=1;
liangzhen 1:90a2068dd130 252 wait_us(2000);
liangzhen 1:90a2068dd130 253
liangzhen 0:2a52ec2fb0e0 254 ref_clk=0;
liangzhen 1:90a2068dd130 255 wait_us(100);
liangzhen 1:90a2068dd130 256
liangzhen 0:2a52ec2fb0e0 257 unsigned short HVTP=leakage1.read_u16();
liangzhen 1:90a2068dd130 258
liangzhen 1:90a2068dd130 259 reading1 = leakage1.read();
liangzhen 1:90a2068dd130 260 reading2 = leakage2.read();
liangzhen 1:90a2068dd130 261 reading1 *= 3.3;
liangzhen 1:90a2068dd130 262 reading2 *= 3.3;
liangzhen 1:90a2068dd130 263 pc.printf("HVTP: %f \t %f\n", reading1, reading2);
liangzhen 1:90a2068dd130 264 ref_clk=1;
liangzhen 1:90a2068dd130 265 wait_us(10);
liangzhen 1:90a2068dd130 266
liangzhen 1:90a2068dd130 267 ref_clk=0;
liangzhen 1:90a2068dd130 268 wait_us(100);
liangzhen 1:90a2068dd130 269 reading1 = leakage1.read();
liangzhen 1:90a2068dd130 270 reading2 = leakage2.read();
liangzhen 1:90a2068dd130 271 reading1 *= 3.3;
liangzhen 1:90a2068dd130 272 reading2 *= 3.3;
liangzhen 1:90a2068dd130 273 pc.printf("HVTP: %f \t %f\n", reading1, reading2);
liangzhen 1:90a2068dd130 274
liangzhen 1:90a2068dd130 275 //
liangzhen 0:2a52ec2fb0e0 276 S4 = 1;
liangzhen 0:2a52ec2fb0e0 277 S5 = 0;
liangzhen 0:2a52ec2fb0e0 278 ref_clk=0;
liangzhen 1:90a2068dd130 279 wait(0.1);
liangzhen 1:90a2068dd130 280
liangzhen 0:2a52ec2fb0e0 281 ref_clk=1;
liangzhen 1:90a2068dd130 282 wait_us(2000);
liangzhen 1:90a2068dd130 283
liangzhen 0:2a52ec2fb0e0 284 ref_clk=0;
liangzhen 1:90a2068dd130 285 wait_us(100);
liangzhen 1:90a2068dd130 286
liangzhen 0:2a52ec2fb0e0 287 unsigned short RVTN=leakage2.read_u16();
liangzhen 1:90a2068dd130 288 reading1 = leakage1.read();
liangzhen 1:90a2068dd130 289 reading2 = leakage2.read();
liangzhen 1:90a2068dd130 290 reading1 *= 3.3;
liangzhen 1:90a2068dd130 291 reading2 *= 3.3;
liangzhen 1:90a2068dd130 292 pc.printf("RVTN: %f \t %f\n", reading1, reading2);
liangzhen 1:90a2068dd130 293 ref_clk=1;
liangzhen 1:90a2068dd130 294 wait_us(10);
liangzhen 1:90a2068dd130 295
liangzhen 1:90a2068dd130 296 ref_clk=0;
liangzhen 1:90a2068dd130 297 wait_us(100);
liangzhen 1:90a2068dd130 298 reading1 = leakage1.read();
liangzhen 1:90a2068dd130 299 reading2 = leakage2.read();
liangzhen 1:90a2068dd130 300 reading1 *= 3.3;
liangzhen 1:90a2068dd130 301 reading2 *= 3.3;
liangzhen 1:90a2068dd130 302 pc.printf("RVTN: %f \t %f\n", reading1, reading2);
liangzhen 1:90a2068dd130 303
liangzhen 1:90a2068dd130 304 //
liangzhen 0:2a52ec2fb0e0 305 S4 = 1;
liangzhen 0:2a52ec2fb0e0 306 S5 = 1;
liangzhen 0:2a52ec2fb0e0 307 ref_clk=0;
liangzhen 1:90a2068dd130 308 wait(0.1);
liangzhen 1:90a2068dd130 309
liangzhen 0:2a52ec2fb0e0 310 ref_clk=1;
liangzhen 1:90a2068dd130 311 wait_us(2000);
liangzhen 1:90a2068dd130 312
liangzhen 0:2a52ec2fb0e0 313 ref_clk=0;
liangzhen 1:90a2068dd130 314 wait_us(100);
liangzhen 1:90a2068dd130 315
liangzhen 0:2a52ec2fb0e0 316 unsigned short HVTN=leakage2.read_u16();
liangzhen 1:90a2068dd130 317 reading1 = leakage1.read();
liangzhen 1:90a2068dd130 318 reading2 = leakage2.read();
liangzhen 1:90a2068dd130 319 reading1 *= 3.3;
liangzhen 1:90a2068dd130 320 reading2 *= 3.3;
liangzhen 1:90a2068dd130 321 pc.printf("HVTN: %f \t %f\n", reading1, reading2);
liangzhen 1:90a2068dd130 322 ref_clk=1;
liangzhen 1:90a2068dd130 323 wait_us(10);
liangzhen 1:90a2068dd130 324
liangzhen 1:90a2068dd130 325 ref_clk=0;
liangzhen 1:90a2068dd130 326 wait_us(100);
liangzhen 1:90a2068dd130 327 reading1 = leakage1.read();
liangzhen 1:90a2068dd130 328 reading2 = leakage2.read();
liangzhen 1:90a2068dd130 329 reading1 *= 3.3;
liangzhen 1:90a2068dd130 330 reading2 *= 3.3;
liangzhen 1:90a2068dd130 331 pc.printf("HVTN: %f \t %f\n", reading1, reading2);
liangzhen 0:2a52ec2fb0e0 332 leakage_enable = 0;
liangzhen 1:90a2068dd130 333
liangzhen 0:2a52ec2fb0e0 334 ro_data[64*5+4] = (RVTP%0x100);
liangzhen 0:2a52ec2fb0e0 335 ro_data[64*5+5] = (RVTP/0x100);
liangzhen 0:2a52ec2fb0e0 336 ro_data[64*5+6] = (HVTP%0x100);
liangzhen 0:2a52ec2fb0e0 337 ro_data[64*5+7] = (HVTP/0x100);
liangzhen 0:2a52ec2fb0e0 338 ro_data[64*5+8] = (RVTN%0x100);
liangzhen 0:2a52ec2fb0e0 339 ro_data[64*5+9] = (RVTN/0x100);
liangzhen 0:2a52ec2fb0e0 340 ro_data[64*5+10] = (HVTN%0x100);
liangzhen 0:2a52ec2fb0e0 341 ro_data[64*5+11] = (HVTN/0x100);
liangzhen 0:2a52ec2fb0e0 342 }
liangzhen 0:2a52ec2fb0e0 343
liangzhen 0:2a52ec2fb0e0 344 void scan_test()
liangzhen 0:2a52ec2fb0e0 345 {
liangzhen 0:2a52ec2fb0e0 346 slave.address(SLAVEADDR);
liangzhen 0:2a52ec2fb0e0 347 char* ro_data;
liangzhen 0:2a52ec2fb0e0 348 ro_data = new char[64*5+12];
liangzhen 0:2a52ec2fb0e0 349 bool if_ready = false;
liangzhen 0:2a52ec2fb0e0 350 while (1) {
liangzhen 0:2a52ec2fb0e0 351 int i = slave.receive();
liangzhen 0:2a52ec2fb0e0 352 //pc.printf("receive = %i\r\n", i);
liangzhen 0:2a52ec2fb0e0 353 switch (i) {
liangzhen 0:2a52ec2fb0e0 354 case I2CSlave::ReadAddressed:
liangzhen 0:2a52ec2fb0e0 355 if (!if_ready) {
liangzhen 0:2a52ec2fb0e0 356 pc.printf("Slave is not ready...\n");
liangzhen 0:2a52ec2fb0e0 357 break;
liangzhen 0:2a52ec2fb0e0 358 }
liangzhen 0:2a52ec2fb0e0 359 slave.write(ro_data, 64*5+12);
liangzhen 0:2a52ec2fb0e0 360 pc.printf("Slave is writing..\n");
liangzhen 0:2a52ec2fb0e0 361 break;
liangzhen 0:2a52ec2fb0e0 362 case I2CSlave::WriteGeneral:
liangzhen 0:2a52ec2fb0e0 363 led2 = !led2;
liangzhen 0:2a52ec2fb0e0 364 break;
liangzhen 0:2a52ec2fb0e0 365 case I2CSlave::WriteAddressed:
liangzhen 0:2a52ec2fb0e0 366 slave.read(buf, 4);
liangzhen 0:2a52ec2fb0e0 367 pc.printf("Slave gets: %s\n", buf);
liangzhen 0:2a52ec2fb0e0 368 led3 = !led3;
liangzhen 0:2a52ec2fb0e0 369 char cmd1[] = "scan";
liangzhen 0:2a52ec2fb0e0 370 char cmd2[] = "getp";
liangzhen 0:2a52ec2fb0e0 371 char cmd3[] = "getl";
liangzhen 0:2a52ec2fb0e0 372 if (!strcmp(cmd1, buf)) {
liangzhen 0:2a52ec2fb0e0 373 pc.printf("Scanning....\n");
liangzhen 0:2a52ec2fb0e0 374 scan_slave(ro_data);
liangzhen 0:2a52ec2fb0e0 375 read_power(ro_data);
liangzhen 0:2a52ec2fb0e0 376 read_leakage(ro_data);
liangzhen 0:2a52ec2fb0e0 377 if_ready = true;
liangzhen 0:2a52ec2fb0e0 378 } else if (!strcmp(cmd2, buf)) {
liangzhen 0:2a52ec2fb0e0 379 pc.printf("Measuring power....\n");
liangzhen 0:2a52ec2fb0e0 380 read_power(ro_data);
liangzhen 0:2a52ec2fb0e0 381 } else if (!strcmp(cmd3, buf)) {
liangzhen 0:2a52ec2fb0e0 382 pc.printf("Measuring leakage.....\n");
liangzhen 0:2a52ec2fb0e0 383 read_leakage(ro_data);
liangzhen 0:2a52ec2fb0e0 384 }
liangzhen 0:2a52ec2fb0e0 385 break;
liangzhen 0:2a52ec2fb0e0 386 }
liangzhen 0:2a52ec2fb0e0 387 for (int i = 0; i < 50; i++) buf[i] = 0; // Clear buffer
liangzhen 0:2a52ec2fb0e0 388 wait(0.002);
liangzhen 0:2a52ec2fb0e0 389 }
liangzhen 0:2a52ec2fb0e0 390 }
liangzhen 0:2a52ec2fb0e0 391
liangzhen 0:2a52ec2fb0e0 392
liangzhen 0:2a52ec2fb0e0 393 //// MAIN FUNCTION
liangzhen 0:2a52ec2fb0e0 394 int main ()
liangzhen 0:2a52ec2fb0e0 395 {
liangzhen 0:2a52ec2fb0e0 396 //scan_slave(); //main() function from the original DDRO_scan code
liangzhen 0:2a52ec2fb0e0 397 pc.printf("SlaveMBED starts...\n");
liangzhen 0:2a52ec2fb0e0 398 scan_test();
liangzhen 0:2a52ec2fb0e0 399
liangzhen 0:2a52ec2fb0e0 400 return 0;
liangzhen 0:2a52ec2fb0e0 401 }