Liangzhen Lai / Mbed 2 deprecated DDRO_software

Dependencies:   mbed

Committer:
liangzhen
Date:
Tue Oct 02 01:16:03 2012 +0000
Revision:
6:a27c0fd4f210
Parent:
5:0a3fb48e39a3
Child:
7:b98d752b7b95
with sample main function

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 5:0a3fb48e39a3 14 /*
liangzhen 5:0a3fb48e39a3 15 int main()
liangzhen 5:0a3fb48e39a3 16 {
liangzhen 5:0a3fb48e39a3 17
liangzhen 5:0a3fb48e39a3 18 PLL clk;
liangzhen 5:0a3fb48e39a3 19 JTAG jtag;
liangzhen 5:0a3fb48e39a3 20
liangzhen 5:0a3fb48e39a3 21 powerReset();
liangzhen 5:0a3fb48e39a3 22 powerUp(1);
liangzhen 5:0a3fb48e39a3 23 wait_us(10);
liangzhen 5:0a3fb48e39a3 24 RESET=1;
liangzhen 5:0a3fb48e39a3 25 wait_us(10);
liangzhen 5:0a3fb48e39a3 26 RESET=0;
liangzhen 5:0a3fb48e39a3 27 wait_us(10);
liangzhen 5:0a3fb48e39a3 28 RESET=1;
liangzhen 5:0a3fb48e39a3 29 clk.setPLL(100);
liangzhen 5:0a3fb48e39a3 30 RESET=0;
liangzhen 5:0a3fb48e39a3 31 wait_us(10);
liangzhen 5:0a3fb48e39a3 32 RESET=1;
liangzhen 5:0a3fb48e39a3 33 jtag.DAP_enable();
liangzhen 5:0a3fb48e39a3 34 unsigned int address, value;
liangzhen 5:0a3fb48e39a3 35 jtag.loadProgram();
liangzhen 5:0a3fb48e39a3 36 address = 0x44000008;
liangzhen 5:0a3fb48e39a3 37 value = 0x00000001;
liangzhen 5:0a3fb48e39a3 38 jtag.writeMemory(address, value);
liangzhen 5:0a3fb48e39a3 39
liangzhen 5:0a3fb48e39a3 40 address = 0x44000004;
liangzhen 5:0a3fb48e39a3 41 jtag.writeMemory(address, value);
liangzhen 5:0a3fb48e39a3 42 //core is running......
liangzhen 5:0a3fb48e39a3 43
liangzhen 6:a27c0fd4f210 44
liangzhen 6:a27c0fd4f210 45 int* ro_readings = new int [70]; //0-63: Oscillator (DDRO), 64-65: SRAM/Core Power, 66-69: Leakage
liangzhen 6:a27c0fd4f210 46 master_write();
liangzhen 6:a27c0fd4f210 47 master_read(ro_readings);
liangzhen 6:a27c0fd4f210 48
liangzhen 5:0a3fb48e39a3 49 if( some GPIO != 0) {powerDown();}
liangzhen 5:0a3fb48e39a3 50 }
liangzhen 5:0a3fb48e39a3 51 */
liangzhen 5:0a3fb48e39a3 52
liangzhen 3:764ccaf29ce9 53 int main()
liangzhen 3:764ccaf29ce9 54 {
liangzhen 0:c928c2d8bd02 55 s.printf("DDRO_software starts ...\r\n");
liangzhen 3:764ccaf29ce9 56 double voltage = 1;
liangzhen 0:c928c2d8bd02 57 PLL clk;
liangzhen 3:764ccaf29ce9 58 JTAG jtag;
liangzhen 4:fc56fa8aa794 59 int* ro_readings = new int [70];
liangzhen 4:fc56fa8aa794 60 #ifdef FILE_OUTPUT
liangzhen 3:764ccaf29ce9 61 FILE *outFile = fopen("/local/test.out", "a");
liangzhen 4:fc56fa8aa794 62 #endif
liangzhen 4:fc56fa8aa794 63 for (int i=0; i<1; i++) {
liangzhen 3:764ccaf29ce9 64 voltage = 1 - 0.05*i;
liangzhen 3:764ccaf29ce9 65 powerReset();
liangzhen 3:764ccaf29ce9 66 powerUp(voltage);
liangzhen 4:fc56fa8aa794 67 #ifdef FILE_OUTPUT
liangzhen 3:764ccaf29ce9 68 fprintf(outFile, "Voltage: %f\n", voltage);
liangzhen 4:fc56fa8aa794 69 #endif
liangzhen 3:764ccaf29ce9 70 RESET = 0;
liangzhen 3:764ccaf29ce9 71 wait_us(10);
liangzhen 3:764ccaf29ce9 72 RESET = 1;
liangzhen 4:fc56fa8aa794 73 for(int iii=0; iii<1; iii++) {
liangzhen 6:a27c0fd4f210 74 master_write();
liangzhen 6:a27c0fd4f210 75 master_read(ro_readings);
liangzhen 4:fc56fa8aa794 76 for (int ii=0; ii<64; ii++) {
liangzhen 4:fc56fa8aa794 77 #ifdef FILE_OUTPUT
liangzhen 4:fc56fa8aa794 78 fprintf(outFile, "RO %d %d\n", ii, ro_readings[ii]);
liangzhen 4:fc56fa8aa794 79 #endif
liangzhen 4:fc56fa8aa794 80 s.printf("RO %d %d\n", ii, ro_readings[ii]);
liangzhen 4:fc56fa8aa794 81 }
liangzhen 4:fc56fa8aa794 82 #ifdef FILE_OUTPUT
liangzhen 4:fc56fa8aa794 83 fprintf(outFile, "CORE %X\nSRAM %X\n", ro_readings[64],ro_readings[65]);
liangzhen 4:fc56fa8aa794 84 #endif
liangzhen 4:fc56fa8aa794 85 double core_meas = 3.3*ro_readings[64]/0x10000;
liangzhen 4:fc56fa8aa794 86 double sram_meas = 3.3*ro_readings[65]/0x10000;
liangzhen 4:fc56fa8aa794 87 s.printf("CORE %X\nSRAM %X\n", ro_readings[64],ro_readings[65]);
liangzhen 4:fc56fa8aa794 88 s.printf("CORE %f\nSRAM %f\n", core_meas, sram_meas);
liangzhen 4:fc56fa8aa794 89 double rvtp_meas = 3.3*ro_readings[66]/0x10000;
liangzhen 4:fc56fa8aa794 90 double hvtp_meas = 3.3*ro_readings[67]/0x10000;
liangzhen 4:fc56fa8aa794 91 double rvtn_meas = 3.3*ro_readings[68]/0x10000;
liangzhen 4:fc56fa8aa794 92 double hvtn_meas = 3.3*ro_readings[69]/0x10000;
liangzhen 4:fc56fa8aa794 93 #ifdef FILE_OUTPUT
liangzhen 4:fc56fa8aa794 94 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 95 fprintf(outFile, "RVTP %f\nHVTP %f\nRVTN %f\nHVTN %f\n", rvtp_meas, hvtp_meas, rvtn_meas, hvtn_meas);
liangzhen 4:fc56fa8aa794 96 #endif
liangzhen 3:764ccaf29ce9 97 }
liangzhen 3:764ccaf29ce9 98 int fmax;
liangzhen 3:764ccaf29ce9 99 int lower = 51;
liangzhen 3:764ccaf29ce9 100 int higher = 199;
liangzhen 3:764ccaf29ce9 101 int frequency = (lower+higher)/2;
liangzhen 4:fc56fa8aa794 102 clk.setPLL(frequency);
liangzhen 4:fc56fa8aa794 103 clk.setPLL(frequency);
liangzhen 3:764ccaf29ce9 104 RESET = 0;
liangzhen 3:764ccaf29ce9 105 wait_us(10);
liangzhen 3:764ccaf29ce9 106 RESET = 1;
liangzhen 4:fc56fa8aa794 107
liangzhen 4:fc56fa8aa794 108 // power characterization
liangzhen 4:fc56fa8aa794 109 frequency = 151;
liangzhen 4:fc56fa8aa794 110 clk.setPLL(frequency);
liangzhen 4:fc56fa8aa794 111 clk.setPLL(frequency);
liangzhen 4:fc56fa8aa794 112 RESET = 0;
liangzhen 4:fc56fa8aa794 113 wait_us(10);
liangzhen 4:fc56fa8aa794 114 RESET = 1;
liangzhen 4:fc56fa8aa794 115 //jtag.JTAG_test();
liangzhen 4:fc56fa8aa794 116 /*
liangzhen 6:a27c0fd4f210 117 while (higher - lower >30) {
liangzhen 4:fc56fa8aa794 118 s.printf("testing %d\n", frequency);
liangzhen 4:fc56fa8aa794 119 if(jtag.JTAG_test()) {
liangzhen 3:764ccaf29ce9 120 lower = frequency;
liangzhen 3:764ccaf29ce9 121 frequency = (lower+higher)/2;
liangzhen 3:764ccaf29ce9 122 clk.setPLL(frequency);
liangzhen 4:fc56fa8aa794 123 clk.setPLL(frequency);
liangzhen 3:764ccaf29ce9 124 RESET = 0;
liangzhen 3:764ccaf29ce9 125 wait_us(10);
liangzhen 3:764ccaf29ce9 126 RESET = 1;
liangzhen 3:764ccaf29ce9 127 } else {
liangzhen 3:764ccaf29ce9 128 higher = frequency;
liangzhen 3:764ccaf29ce9 129 frequency = (lower+higher)/2;
liangzhen 3:764ccaf29ce9 130 clk.setPLL(frequency);
liangzhen 4:fc56fa8aa794 131 clk.setPLL(frequency);
liangzhen 3:764ccaf29ce9 132 RESET = 0;
liangzhen 3:764ccaf29ce9 133 wait_us(10);
liangzhen 3:764ccaf29ce9 134 RESET = 1;
liangzhen 3:764ccaf29ce9 135 }
liangzhen 3:764ccaf29ce9 136 }
liangzhen 4:fc56fa8aa794 137 */
liangzhen 6:a27c0fd4f210 138
liangzhen 4:fc56fa8aa794 139 #ifdef FILE_OUTPUT
liangzhen 3:764ccaf29ce9 140 fprintf(outFile, "fmax %d\n", lower*5);
liangzhen 4:fc56fa8aa794 141 #endif
liangzhen 4:fc56fa8aa794 142 s.printf("fmax %d\n", lower*5);
liangzhen 3:764ccaf29ce9 143 powerDown();
liangzhen 0:c928c2d8bd02 144 }
liangzhen 4:fc56fa8aa794 145 #ifdef FILE_OUTPUT
liangzhen 3:764ccaf29ce9 146 fclose(outFile);
liangzhen 4:fc56fa8aa794 147 #endif
liangzhen 0:c928c2d8bd02 148 s.printf("DDRO_software ends.\r\n");
liangzhen 3:764ccaf29ce9 149 while(1) {
liangzhen 3:764ccaf29ce9 150 finish_flag = !finish_flag;
liangzhen 3:764ccaf29ce9 151 wait(1);
liangzhen 3:764ccaf29ce9 152 }
liangzhen 0:c928c2d8bd02 153 }