Liangzhen Lai / Mbed 2 deprecated DDRO_software

Dependencies:   mbed

Committer:
liangzhen
Date:
Sat Sep 29 19:22:38 2012 +0000
Revision:
4:fc56fa8aa794
Parent:
3:764ccaf29ce9
Child:
5:0a3fb48e39a3
With power sensing and leakage sensing codes

Who changed what in which revision?

UserRevisionLine numberNew contents of line
liangzhen 0:c928c2d8bd02 1 #include "power_up.h"
liangzhen 0:c928c2d8bd02 2 #include "scan.h"
liangzhen 1:acf14b6dd1be 3 #include "master_i2c.h"
liangzhen 1:acf14b6dd1be 4 #include "JTAG.h"
liangzhen 0:c928c2d8bd02 5 using namespace std;
liangzhen 0:c928c2d8bd02 6
liangzhen 4:fc56fa8aa794 7 //#define FILE_OUTPUT
liangzhen 4:fc56fa8aa794 8
liangzhen 0:c928c2d8bd02 9 DigitalOut RESET (p21);
liangzhen 0:c928c2d8bd02 10
liangzhen 0:c928c2d8bd02 11 Serial s(USBTX, USBRX);
liangzhen 3:764ccaf29ce9 12 DigitalOut finish_flag (LED3);
liangzhen 1:acf14b6dd1be 13
liangzhen 3:764ccaf29ce9 14 int main()
liangzhen 3:764ccaf29ce9 15 {
liangzhen 0:c928c2d8bd02 16 s.printf("DDRO_software starts ...\r\n");
liangzhen 3:764ccaf29ce9 17 double voltage = 1;
liangzhen 0:c928c2d8bd02 18 PLL clk;
liangzhen 3:764ccaf29ce9 19 JTAG jtag;
liangzhen 4:fc56fa8aa794 20 int* ro_readings = new int [70];
liangzhen 4:fc56fa8aa794 21 #ifdef FILE_OUTPUT
liangzhen 3:764ccaf29ce9 22 FILE *outFile = fopen("/local/test.out", "a");
liangzhen 4:fc56fa8aa794 23 #endif
liangzhen 4:fc56fa8aa794 24 for (int i=0; i<1; i++) {
liangzhen 3:764ccaf29ce9 25 voltage = 1 - 0.05*i;
liangzhen 3:764ccaf29ce9 26 powerReset();
liangzhen 3:764ccaf29ce9 27 powerUp(voltage);
liangzhen 4:fc56fa8aa794 28 #ifdef FILE_OUTPUT
liangzhen 3:764ccaf29ce9 29 fprintf(outFile, "Voltage: %f\n", voltage);
liangzhen 4:fc56fa8aa794 30 #endif
liangzhen 3:764ccaf29ce9 31 RESET = 0;
liangzhen 3:764ccaf29ce9 32 wait_us(10);
liangzhen 3:764ccaf29ce9 33 RESET = 1;
liangzhen 4:fc56fa8aa794 34 for(int iii=0; iii<1; iii++) {
liangzhen 4:fc56fa8aa794 35 master_write();
liangzhen 4:fc56fa8aa794 36 master_read(ro_readings);
liangzhen 4:fc56fa8aa794 37 for (int ii=0; ii<64; ii++) {
liangzhen 4:fc56fa8aa794 38 #ifdef FILE_OUTPUT
liangzhen 4:fc56fa8aa794 39 fprintf(outFile, "RO %d %d\n", ii, ro_readings[ii]);
liangzhen 4:fc56fa8aa794 40 #endif
liangzhen 4:fc56fa8aa794 41 s.printf("RO %d %d\n", ii, ro_readings[ii]);
liangzhen 4:fc56fa8aa794 42 }
liangzhen 4:fc56fa8aa794 43 #ifdef FILE_OUTPUT
liangzhen 4:fc56fa8aa794 44 fprintf(outFile, "CORE %X\nSRAM %X\n", ro_readings[64],ro_readings[65]);
liangzhen 4:fc56fa8aa794 45 #endif
liangzhen 4:fc56fa8aa794 46 double core_meas = 3.3*ro_readings[64]/0x10000;
liangzhen 4:fc56fa8aa794 47 double sram_meas = 3.3*ro_readings[65]/0x10000;
liangzhen 4:fc56fa8aa794 48 s.printf("CORE %X\nSRAM %X\n", ro_readings[64],ro_readings[65]);
liangzhen 4:fc56fa8aa794 49 s.printf("CORE %f\nSRAM %f\n", core_meas, sram_meas);
liangzhen 4:fc56fa8aa794 50 double rvtp_meas = 3.3*ro_readings[66]/0x10000;
liangzhen 4:fc56fa8aa794 51 double hvtp_meas = 3.3*ro_readings[67]/0x10000;
liangzhen 4:fc56fa8aa794 52 double rvtn_meas = 3.3*ro_readings[68]/0x10000;
liangzhen 4:fc56fa8aa794 53 double hvtn_meas = 3.3*ro_readings[69]/0x10000;
liangzhen 4:fc56fa8aa794 54 #ifdef FILE_OUTPUT
liangzhen 4:fc56fa8aa794 55 fprintf(outFile, "RVTP %X\nHVTP %X\nRVTN %X\nHVTN %X\n", ro_readings[66],ro_readings[67], ro_readings[68],ro_readings[69]);
liangzhen 4:fc56fa8aa794 56 fprintf(outFile, "RVTP %f\nHVTP %f\nRVTN %f\nHVTN %f\n", rvtp_meas, hvtp_meas, rvtn_meas, hvtn_meas);
liangzhen 4:fc56fa8aa794 57 #endif
liangzhen 3:764ccaf29ce9 58 }
liangzhen 3:764ccaf29ce9 59 int fmax;
liangzhen 3:764ccaf29ce9 60 int lower = 51;
liangzhen 3:764ccaf29ce9 61 int higher = 199;
liangzhen 3:764ccaf29ce9 62 int frequency = (lower+higher)/2;
liangzhen 4:fc56fa8aa794 63 clk.setPLL(frequency);
liangzhen 4:fc56fa8aa794 64 clk.setPLL(frequency);
liangzhen 3:764ccaf29ce9 65 RESET = 0;
liangzhen 3:764ccaf29ce9 66 wait_us(10);
liangzhen 3:764ccaf29ce9 67 RESET = 1;
liangzhen 4:fc56fa8aa794 68
liangzhen 4:fc56fa8aa794 69 // power characterization
liangzhen 4:fc56fa8aa794 70 frequency = 151;
liangzhen 4:fc56fa8aa794 71 clk.setPLL(frequency);
liangzhen 4:fc56fa8aa794 72 clk.setPLL(frequency);
liangzhen 4:fc56fa8aa794 73 RESET = 0;
liangzhen 4:fc56fa8aa794 74 wait_us(10);
liangzhen 4:fc56fa8aa794 75 RESET = 1;
liangzhen 4:fc56fa8aa794 76 //jtag.JTAG_test();
liangzhen 4:fc56fa8aa794 77 /*
liangzhen 4:fc56fa8aa794 78 while (higher - lower >100) {
liangzhen 4:fc56fa8aa794 79 s.printf("testing %d\n", frequency);
liangzhen 4:fc56fa8aa794 80 if(jtag.JTAG_test()) {
liangzhen 3:764ccaf29ce9 81 lower = frequency;
liangzhen 3:764ccaf29ce9 82 frequency = (lower+higher)/2;
liangzhen 3:764ccaf29ce9 83 clk.setPLL(frequency);
liangzhen 4:fc56fa8aa794 84 clk.setPLL(frequency);
liangzhen 3:764ccaf29ce9 85 RESET = 0;
liangzhen 3:764ccaf29ce9 86 wait_us(10);
liangzhen 3:764ccaf29ce9 87 RESET = 1;
liangzhen 3:764ccaf29ce9 88 } else {
liangzhen 3:764ccaf29ce9 89 higher = frequency;
liangzhen 3:764ccaf29ce9 90 frequency = (lower+higher)/2;
liangzhen 3:764ccaf29ce9 91 clk.setPLL(frequency);
liangzhen 4:fc56fa8aa794 92 clk.setPLL(frequency);
liangzhen 3:764ccaf29ce9 93 RESET = 0;
liangzhen 3:764ccaf29ce9 94 wait_us(10);
liangzhen 3:764ccaf29ce9 95 RESET = 1;
liangzhen 3:764ccaf29ce9 96 }
liangzhen 3:764ccaf29ce9 97 }
liangzhen 4:fc56fa8aa794 98 */
liangzhen 4:fc56fa8aa794 99 #ifdef FILE_OUTPUT
liangzhen 3:764ccaf29ce9 100 fprintf(outFile, "fmax %d\n", lower*5);
liangzhen 4:fc56fa8aa794 101 #endif
liangzhen 4:fc56fa8aa794 102 s.printf("fmax %d\n", lower*5);
liangzhen 3:764ccaf29ce9 103 powerDown();
liangzhen 0:c928c2d8bd02 104 }
liangzhen 4:fc56fa8aa794 105 #ifdef FILE_OUTPUT
liangzhen 3:764ccaf29ce9 106 fclose(outFile);
liangzhen 4:fc56fa8aa794 107 #endif
liangzhen 0:c928c2d8bd02 108 s.printf("DDRO_software ends.\r\n");
liangzhen 3:764ccaf29ce9 109 while(1) {
liangzhen 3:764ccaf29ce9 110 finish_flag = !finish_flag;
liangzhen 3:764ccaf29ce9 111 wait(1);
liangzhen 3:764ccaf29ce9 112 }
liangzhen 0:c928c2d8bd02 113 }