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.
main.cpp@1:90a2068dd130, 2012-10-02 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |