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@6:a27c0fd4f210, 2012-10-02 (annotated)
- 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?
| 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 | 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 | } |