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@7:b98d752b7b95, 2012-10-02 (annotated)
- Committer:
- liangzhen
- Date:
- Tue Oct 02 23:53:32 2012 +0000
- Revision:
- 7:b98d752b7b95
- Parent:
- 6:a27c0fd4f210
with all features
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 | 7:b98d752b7b95 | 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 | 7:b98d752b7b95 | 43 | |
| liangzhen | 7:b98d752b7b95 | 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 | 7:b98d752b7b95 | 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 | 7:b98d752b7b95 | 59 | int* ro_readings = new int [68]; |
| 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 | } |
| liangzhen | 4:fc56fa8aa794 | 81 | double core_meas = 3.3*ro_readings[64]/0x10000; |
| liangzhen | 4:fc56fa8aa794 | 82 | double sram_meas = 3.3*ro_readings[65]/0x10000; |
| liangzhen | 4:fc56fa8aa794 | 83 | #ifdef FILE_OUTPUT |
| liangzhen | 7:b98d752b7b95 | 84 | fprintf(outFile, "CORE %f\nSRAM %f\n", core_meas,sram_meas); |
| liangzhen | 7:b98d752b7b95 | 85 | #endif |
| liangzhen | 7:b98d752b7b95 | 86 | double hvtp_meas = 1.8*0.33/ro_readings[66]/0.001; |
| liangzhen | 7:b98d752b7b95 | 87 | double hvtn_meas = 1.5*0.33/ro_readings[67]/0.001; |
| liangzhen | 7:b98d752b7b95 | 88 | #ifdef FILE_OUTPUT |
| liangzhen | 7:b98d752b7b95 | 89 | fprintf(outFile, "HVTP %f\nHVTN %f\n", hvtp_meas, hvtn_meas); |
| liangzhen | 4:fc56fa8aa794 | 90 | #endif |
| liangzhen | 3:764ccaf29ce9 | 91 | } |
| liangzhen | 3:764ccaf29ce9 | 92 | int fmax; |
| liangzhen | 3:764ccaf29ce9 | 93 | int lower = 51; |
| liangzhen | 3:764ccaf29ce9 | 94 | int higher = 199; |
| liangzhen | 3:764ccaf29ce9 | 95 | int frequency = (lower+higher)/2; |
| liangzhen | 4:fc56fa8aa794 | 96 | clk.setPLL(frequency); |
| liangzhen | 4:fc56fa8aa794 | 97 | clk.setPLL(frequency); |
| liangzhen | 3:764ccaf29ce9 | 98 | RESET = 0; |
| liangzhen | 3:764ccaf29ce9 | 99 | wait_us(10); |
| liangzhen | 3:764ccaf29ce9 | 100 | RESET = 1; |
| liangzhen | 4:fc56fa8aa794 | 101 | |
| liangzhen | 7:b98d752b7b95 | 102 | while (higher - lower >1) { |
| liangzhen | 4:fc56fa8aa794 | 103 | s.printf("testing %d\n", frequency); |
| liangzhen | 4:fc56fa8aa794 | 104 | if(jtag.JTAG_test()) { |
| liangzhen | 3:764ccaf29ce9 | 105 | lower = frequency; |
| liangzhen | 3:764ccaf29ce9 | 106 | frequency = (lower+higher)/2; |
| liangzhen | 3:764ccaf29ce9 | 107 | clk.setPLL(frequency); |
| liangzhen | 4:fc56fa8aa794 | 108 | clk.setPLL(frequency); |
| liangzhen | 3:764ccaf29ce9 | 109 | RESET = 0; |
| liangzhen | 3:764ccaf29ce9 | 110 | wait_us(10); |
| liangzhen | 3:764ccaf29ce9 | 111 | RESET = 1; |
| liangzhen | 3:764ccaf29ce9 | 112 | } else { |
| liangzhen | 3:764ccaf29ce9 | 113 | higher = frequency; |
| liangzhen | 3:764ccaf29ce9 | 114 | frequency = (lower+higher)/2; |
| liangzhen | 3:764ccaf29ce9 | 115 | clk.setPLL(frequency); |
| liangzhen | 4:fc56fa8aa794 | 116 | clk.setPLL(frequency); |
| liangzhen | 3:764ccaf29ce9 | 117 | RESET = 0; |
| liangzhen | 3:764ccaf29ce9 | 118 | wait_us(10); |
| liangzhen | 3:764ccaf29ce9 | 119 | RESET = 1; |
| liangzhen | 3:764ccaf29ce9 | 120 | } |
| liangzhen | 3:764ccaf29ce9 | 121 | } |
| liangzhen | 6:a27c0fd4f210 | 122 | |
| liangzhen | 7:b98d752b7b95 | 123 | |
| liangzhen | 4:fc56fa8aa794 | 124 | #ifdef FILE_OUTPUT |
| liangzhen | 3:764ccaf29ce9 | 125 | fprintf(outFile, "fmax %d\n", lower*5); |
| liangzhen | 4:fc56fa8aa794 | 126 | #endif |
| liangzhen | 3:764ccaf29ce9 | 127 | powerDown(); |
| liangzhen | 0:c928c2d8bd02 | 128 | } |
| liangzhen | 4:fc56fa8aa794 | 129 | #ifdef FILE_OUTPUT |
| liangzhen | 3:764ccaf29ce9 | 130 | fclose(outFile); |
| liangzhen | 4:fc56fa8aa794 | 131 | #endif |
| liangzhen | 0:c928c2d8bd02 | 132 | s.printf("DDRO_software ends.\r\n"); |
| liangzhen | 3:764ccaf29ce9 | 133 | while(1) { |
| liangzhen | 3:764ccaf29ce9 | 134 | finish_flag = !finish_flag; |
| liangzhen | 3:764ccaf29ce9 | 135 | wait(1); |
| liangzhen | 3:764ccaf29ce9 | 136 | } |
| liangzhen | 0:c928c2d8bd02 | 137 | } |