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@4:fc56fa8aa794, 2012-09-29 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |