Liangzhen Lai / Mbed 2 deprecated Orange_Ferrari_board_functional

Dependencies:   DDRO_Farrari mbed

Fork of DDRO_Farrari by Liangzhen Lai

Committer:
liangzhen
Date:
Thu Jul 17 22:16:45 2014 +0000
Revision:
3:e1a6e12233dd
Parent:
2:e94460b2149f
simplify for functional purpose only

Who changed what in which revision?

UserRevisionLine numberNew contents of line
liangzhen 0:84a8bcfbdec9 1
liangzhen 0:84a8bcfbdec9 2 #include "mbed.h"
liangzhen 0:84a8bcfbdec9 3 #include "dac.h"
liangzhen 0:84a8bcfbdec9 4 #include "board_test.h"
liangzhen 0:84a8bcfbdec9 5 #include "scan.h"
liangzhen 0:84a8bcfbdec9 6 #include "power.h"
liangzhen 0:84a8bcfbdec9 7 #include "pinout.h"
liangzhen 0:84a8bcfbdec9 8 #include "pll.h"
liangzhen 0:84a8bcfbdec9 9 #include "lcd.h"
liangzhen 0:84a8bcfbdec9 10 #include "jtag.h"
liangzhen 0:84a8bcfbdec9 11 #include "mmap.h"
liangzhen 1:6a820a0ca03b 12 #include "clock.h"
liangzhen 0:84a8bcfbdec9 13 #include "EasyBMP.h"
liangzhen 1:6a820a0ca03b 14 #include "main.h"
liangzhen 0:84a8bcfbdec9 15
liangzhen 2:e94460b2149f 16 //#define WRITE_RESULTS
liangzhen 2:e94460b2149f 17 FILE *results_file;
liangzhen 2:e94460b2149f 18
liangzhen 2:e94460b2149f 19 DigitalOut myled(LED4);
liangzhen 2:e94460b2149f 20 #ifdef WRITE_RESULTS
liangzhen 2:e94460b2149f 21 //LocalFileSystem local("local"); // Create the local filesystem under the name "local"
liangzhen 2:e94460b2149f 22 #endif
liangzhen 2:e94460b2149f 23
liangzhen 1:6a820a0ca03b 24 int main()
liangzhen 1:6a820a0ca03b 25 {
liangzhen 1:6a820a0ca03b 26 float core_volt = 1;
liangzhen 2:e94460b2149f 27 #ifdef WRITE_RESULTS
liangzhen 2:e94460b2149f 28 results_file=fopen("/local/results.txt", "a"); // Open "out.txt" on the local file system for writing
liangzhen 2:e94460b2149f 29 #endif
liangzhen 2:e94460b2149f 30
liangzhen 3:e1a6e12233dd 31 // power up the board
liangzhen 3:e1a6e12233dd 32 pc.printf("Begin\r\n");
liangzhen 0:84a8bcfbdec9 33 power_down();
liangzhen 1:6a820a0ca03b 34 power_up(core_volt); // Power Up Chip
liangzhen 0:84a8bcfbdec9 35 pc.printf("Powered up!\r\n");
liangzhen 3:e1a6e12233dd 36 pc.printf("Start reading IDCode...\r\n");
liangzhen 0:84a8bcfbdec9 37
liangzhen 3:e1a6e12233dd 38 // initializing the resets
liangzhen 0:84a8bcfbdec9 39 PORESETn = 0;
liangzhen 0:84a8bcfbdec9 40 CORERESETn = 0;
liangzhen 1:6a820a0ca03b 41 wait_us(100);
liangzhen 0:84a8bcfbdec9 42 PORESETn = 1;
liangzhen 0:84a8bcfbdec9 43 CORERESETn = 1;
liangzhen 0:84a8bcfbdec9 44 JTAG jtag;
liangzhen 3:e1a6e12233dd 45
liangzhen 3:e1a6e12233dd 46 // read and verify chip ID
liangzhen 0:84a8bcfbdec9 47 int idcode = jtag.readID();
liangzhen 0:84a8bcfbdec9 48 if(idcode != 0x4ba00477) {
liangzhen 0:84a8bcfbdec9 49 pc.printf("ERROR: IDCode %X\r\n", idcode);
liangzhen 1:6a820a0ca03b 50 wait(2);
liangzhen 0:84a8bcfbdec9 51 power_down();
liangzhen 0:84a8bcfbdec9 52 return -1;
liangzhen 0:84a8bcfbdec9 53 }
liangzhen 0:84a8bcfbdec9 54 pc.printf("IDCode %X\r\n", idcode);
liangzhen 1:6a820a0ca03b 55
liangzhen 3:e1a6e12233dd 56 // power up the JTAG port
liangzhen 0:84a8bcfbdec9 57 jtag.reset();
liangzhen 0:84a8bcfbdec9 58 jtag.leaveState();
liangzhen 0:84a8bcfbdec9 59 jtag.PowerupDAP();
liangzhen 3:e1a6e12233dd 60
liangzhen 1:6a820a0ca03b 61 // setup necessary internal clock source selection
liangzhen 1:6a820a0ca03b 62 jtag.writeMemory(intclk_source, 2);
liangzhen 1:6a820a0ca03b 63 jtag.writeMemory(extclk_source, 1);
liangzhen 1:6a820a0ca03b 64 jtag.writeMemory(ext_div_by, 10);
liangzhen 3:e1a6e12233dd 65
liangzhen 3:e1a6e12233dd 66 float voltage=1;
liangzhen 3:e1a6e12233dd 67 power_core(voltage);
liangzhen 3:e1a6e12233dd 68 pc.printf("V: %f\r\n", voltage);
liangzhen 2:e94460b2149f 69
liangzhen 3:e1a6e12233dd 70 // load program
liangzhen 3:e1a6e12233dd 71 if(jtag.loadProgram()) {
liangzhen 3:e1a6e12233dd 72 dual_printf("Load Failed");
liangzhen 3:e1a6e12233dd 73 exit(1);
liangzhen 2:e94460b2149f 74 }
liangzhen 3:e1a6e12233dd 75
liangzhen 3:e1a6e12233dd 76 // reset the core and let it run
liangzhen 3:e1a6e12233dd 77 CORERESETn = 0;
liangzhen 3:e1a6e12233dd 78 CORERESETn = 1;
liangzhen 3:e1a6e12233dd 79 wait(0.2);
liangzhen 3:e1a6e12233dd 80
liangzhen 3:e1a6e12233dd 81 // open the JTAG port again
liangzhen 3:e1a6e12233dd 82 jtag.reset();
liangzhen 3:e1a6e12233dd 83 jtag.leaveState();
liangzhen 3:e1a6e12233dd 84 jtag.PowerupDAP();
liangzhen 3:e1a6e12233dd 85
liangzhen 3:e1a6e12233dd 86 // verify the output here with the following functions
liangzhen 3:e1a6e12233dd 87 // unsigned int readMemory(unsigned int address);
liangzhen 3:e1a6e12233dd 88 // void writeMemory(unsigned int address, unsigned int value);
liangzhen 3:e1a6e12233dd 89
liangzhen 3:e1a6e12233dd 90
liangzhen 0:84a8bcfbdec9 91 pc.printf("Powering Down\r\n");
liangzhen 0:84a8bcfbdec9 92 power_down();
liangzhen 0:84a8bcfbdec9 93 pc.printf("Done\r\n");
liangzhen 2:e94460b2149f 94 while(1) {
liangzhen 2:e94460b2149f 95 myled = 1;
liangzhen 2:e94460b2149f 96 wait(0.2);
liangzhen 2:e94460b2149f 97 myled = 0;
liangzhen 2:e94460b2149f 98 wait(0.2);
liangzhen 2:e94460b2149f 99 }
liangzhen 0:84a8bcfbdec9 100 }
liangzhen 0:84a8bcfbdec9 101
liangzhen 1:6a820a0ca03b 102 int check_FFT_Freq(JTAG &jtag, int fMHz)
liangzhen 1:6a820a0ca03b 103 {
liangzhen 1:6a820a0ca03b 104 if(jtag.loadProgram()) {
liangzhen 1:6a820a0ca03b 105 dual_printf("Load Failed");
liangzhen 1:6a820a0ca03b 106 exit(1);
liangzhen 1:6a820a0ca03b 107 }
liangzhen 1:6a820a0ca03b 108 set_pll_frequency (fMHz, jtag);
liangzhen 1:6a820a0ca03b 109 //dual_printf("Resetting");
liangzhen 1:6a820a0ca03b 110 CORERESETn = 0;
liangzhen 1:6a820a0ca03b 111 CORERESETn = 1;
liangzhen 1:6a820a0ca03b 112 wait(0.2);
liangzhen 1:6a820a0ca03b 113 jtag.reset();
liangzhen 1:6a820a0ca03b 114 jtag.leaveState();
liangzhen 1:6a820a0ca03b 115 jtag.PowerupDAP();
liangzhen 1:6a820a0ca03b 116 unsigned int buffer_fft[64];
liangzhen 1:6a820a0ca03b 117 for (int number1=0; number1<=63; number1++) {
liangzhen 1:6a820a0ca03b 118 buffer_fft[number1] = jtag.readMemory(0x24000100 + number1*4);
liangzhen 1:6a820a0ca03b 119 jtag.writeMemory(0x24000100 + number1*4,0xF0F0F0F0);
liangzhen 1:6a820a0ca03b 120 //printf("new[%d]: %d\r\n", number1, buffer_fft[number1]);
liangzhen 0:84a8bcfbdec9 121 }
liangzhen 1:6a820a0ca03b 122 if ( buffer_fft[0] == 0x0000fffc && buffer_fft[1]==0x0000fffd && buffer_fft[2]==0xffc0000a && buffer_fft[3]==0x0000fffe &&
liangzhen 1:6a820a0ca03b 123 buffer_fft[4]==0x0000fffd && buffer_fft[5]==0x0000ffff && buffer_fft[6]==0x0000fffd && buffer_fft[7]==0x00000000 &&
liangzhen 1:6a820a0ca03b 124 buffer_fft[8]==0x0000ffff && buffer_fft[9]==0x0000ffff && buffer_fft[10]==0xfffeffff && buffer_fft[11]==0xffff0000 &&
liangzhen 1:6a820a0ca03b 125 buffer_fft[12]==0x0000ffff && buffer_fft[13]==0xffff0000 && buffer_fft[14]==0xfffffffe && buffer_fft[15]==0xffff0000 &&
liangzhen 1:6a820a0ca03b 126 buffer_fft[16]==0x00010000 && buffer_fft[17]==0x0001ffff && buffer_fft[18]==0x0000ffff && buffer_fft[19]==0x0001ffff &&
liangzhen 1:6a820a0ca03b 127 buffer_fft[20]==0x0001fffe && buffer_fft[21]==0x0000fffe && buffer_fft[22]==0x0001fffe && buffer_fft[23]==0x0000ffff &&
liangzhen 1:6a820a0ca03b 128 buffer_fft[24]==0x0000ffff && buffer_fft[25]==0x0001fffe && buffer_fft[26]==0x0000ffff && buffer_fft[27]==0x00010000 &&
liangzhen 1:6a820a0ca03b 129 buffer_fft[28]==0x0001ffff && buffer_fft[29]==0x00010000 && buffer_fft[30]==0x0000ffff && buffer_fft[31]==0x00010000 &&
liangzhen 1:6a820a0ca03b 130 buffer_fft[32]==0x0000ffff && buffer_fft[33]==0x0000ffff && buffer_fft[34]==0x0000ffff && buffer_fft[35]==0x0000ffff &&
liangzhen 1:6a820a0ca03b 131 buffer_fft[36]==0x0000fffe && buffer_fft[37]==0x0000ffff && buffer_fft[38]==0x0000fffe && buffer_fft[39]==0x00000000 &&
liangzhen 1:6a820a0ca03b 132 buffer_fft[40]==0xffffffff && buffer_fft[41]==0x0000ffff && buffer_fft[42]==0xffffffff && buffer_fft[43]==0x00000000 &&
liangzhen 1:6a820a0ca03b 133 buffer_fft[44]==0x0000ffff && buffer_fft[45]==0x00000000 && buffer_fft[46]==0xffffffff && buffer_fft[47]==0x00000000 &&
liangzhen 1:6a820a0ca03b 134 buffer_fft[48]==0x00000000 && buffer_fft[49]==0x00000000 && buffer_fft[50]==0x00000000 && buffer_fft[51]==0x00000000 &&
liangzhen 1:6a820a0ca03b 135 buffer_fft[52]==0x0000ffff && buffer_fft[53]==0x0000ffff && buffer_fft[54]==0x0000ffff && buffer_fft[55]==0x00000000 &&
liangzhen 1:6a820a0ca03b 136 buffer_fft[56]==0xfffeffff && buffer_fft[57]==0xffffffff && buffer_fft[58]==0xffff0000 && buffer_fft[59]==0x00000000 &&
liangzhen 1:6a820a0ca03b 137 buffer_fft[60]==0x0000ffff && buffer_fft[61]==0x00000000 && buffer_fft[62]==0x003d000c && buffer_fft[63]==0x00000000 ) {
liangzhen 1:6a820a0ca03b 138 return 1;
liangzhen 1:6a820a0ca03b 139 } else {
liangzhen 1:6a820a0ca03b 140 return 0;
liangzhen 1:6a820a0ca03b 141 }
liangzhen 0:84a8bcfbdec9 142 }
liangzhen 0:84a8bcfbdec9 143
liangzhen 1:6a820a0ca03b 144 void DDRO_Sensor(JTAG &jtag)
liangzhen 1:6a820a0ca03b 145 {
liangzhen 0:84a8bcfbdec9 146 /**********************enable****************************************/
liangzhen 0:84a8bcfbdec9 147 jtag.writeMemory(ddro_syn_en, 0xffffffff);
liangzhen 0:84a8bcfbdec9 148 jtag.writeMemory(ddro_inv_en, 0xffffffff);
liangzhen 0:84a8bcfbdec9 149 /**********************set ref_clk and samp_clk**********************/
liangzhen 1:6a820a0ca03b 150 jtag.writeMemory(ddro_ref_src, 0x00000002);
liangzhen 0:84a8bcfbdec9 151 /**********************write threshold*******************************/
liangzhen 1:6a820a0ca03b 152 jtag.writeMemory(ddro_threshold, 100000);
liangzhen 1:6a820a0ca03b 153 //jtag.writeMemory(0xe000e104, 0x000000ff); // enable interrupts
liangzhen 0:84a8bcfbdec9 154
liangzhen 2:e94460b2149f 155 for (int ro_id=3; ro_id<=15; ro_id++) {
liangzhen 2:e94460b2149f 156 unsigned int meas1_s, meas1_e, meas2_s, meas2_e;
liangzhen 2:e94460b2149f 157 int delta1, delta2;
liangzhen 2:e94460b2149f 158 //pc.printf("RO %d\r\n ", ro_id-2);
liangzhen 1:6a820a0ca03b 159 jtag.writeMemory(ddro_samp_src, ro_id);
liangzhen 1:6a820a0ca03b 160 jtag.writeMemory(ddro_start, 0);
liangzhen 2:e94460b2149f 161 meas1_s = jtag.readMemory(ddro_count);
liangzhen 2:e94460b2149f 162 //pc.printf("Counter starts at: %d ", meas1);
liangzhen 2:e94460b2149f 163 jtag.writeMemory(ddro_start, 1);
liangzhen 2:e94460b2149f 164 wait_us(50000);
liangzhen 2:e94460b2149f 165 jtag.writeMemory(ddro_start, 0);
liangzhen 2:e94460b2149f 166 meas1_e = jtag.readMemory(ddro_count);
liangzhen 2:e94460b2149f 167 //pc.printf("ends at: %d\r\n", meas1);
liangzhen 2:e94460b2149f 168 delta1 = meas1_e - meas1_s;
liangzhen 2:e94460b2149f 169
liangzhen 2:e94460b2149f 170 jtag.writeMemory(ddro_samp_src, ro_id);
liangzhen 2:e94460b2149f 171 jtag.writeMemory(ddro_start, 0);
liangzhen 2:e94460b2149f 172 meas2_s = jtag.readMemory(ddro_count);
liangzhen 2:e94460b2149f 173 //pc.printf("Counter starts at: %d ", meas1);
liangzhen 1:6a820a0ca03b 174 jtag.writeMemory(ddro_start, 1);
liangzhen 1:6a820a0ca03b 175 wait_us(50000);
liangzhen 1:6a820a0ca03b 176 jtag.writeMemory(ddro_start, 0);
liangzhen 2:e94460b2149f 177 meas2_e = jtag.readMemory(ddro_count);
liangzhen 2:e94460b2149f 178 delta2 = meas2_e - meas2_s;
liangzhen 2:e94460b2149f 179 //printf("ends at: %d\r\n", meas1);
liangzhen 2:e94460b2149f 180
liangzhen 2:e94460b2149f 181 if ( (float)delta2/meas1_e>=0.95 && (float)delta2/meas1_e<=1.05 ) {
liangzhen 3:e1a6e12233dd 182 pc.printf("RO %d: %d\r\n", ro_id, (delta2+meas1_e)/2);
liangzhen 2:e94460b2149f 183 #ifdef WRITE_RESULTS
liangzhen 3:e1a6e12233dd 184 fprintf(results_file,"RO %d: %d\r\n", ro_id, (delta2+meas1_e)/2);
liangzhen 2:e94460b2149f 185 #endif
liangzhen 2:e94460b2149f 186 } else if ((float)delta1/meas2_e>=0.95 && (float)delta1/meas2_e<=1.05 ) {
liangzhen 3:e1a6e12233dd 187 pc.printf("RO %d: %d\r\n", ro_id, (delta1+meas2_e)/2);
liangzhen 2:e94460b2149f 188 #ifdef WRITE_RESULTS
liangzhen 3:e1a6e12233dd 189 fprintf(results_file,"RO %d: %d\r\n", ro_id, (delta1+meas2_e)/2);
liangzhen 2:e94460b2149f 190 #endif
liangzhen 2:e94460b2149f 191 } else if ( (float)delta2/delta1 >=0.95 && (float)delta2/delta1<=1.05 ) {
liangzhen 3:e1a6e12233dd 192 pc.printf("RO %d: %d\r\n", ro_id, (delta1+delta2)/2);
liangzhen 2:e94460b2149f 193 #ifdef WRITE_RESULTS
liangzhen 3:e1a6e12233dd 194 fprintf(results_file,"RO %d: %d\r\n", ro_id, (delta1+delta2)/2);
liangzhen 2:e94460b2149f 195 #endif
liangzhen 2:e94460b2149f 196 } else if ( (float)meas2_e/meas1_e >=0.95 && (float)meas2_e/meas1_e<=1.05 ) {
liangzhen 3:e1a6e12233dd 197 pc.printf("RO %d: %d\r\n", ro_id, (meas1_e+meas2_e)/2);
liangzhen 2:e94460b2149f 198 #ifdef WRITE_RESULTS
liangzhen 3:e1a6e12233dd 199 fprintf(results_file,"RO %d: %d\r\n", ro_id, (meas1_e+meas2_e)/2);
liangzhen 2:e94460b2149f 200 #endif
liangzhen 2:e94460b2149f 201 } else {
liangzhen 3:e1a6e12233dd 202 pc.printf("Error in measuring DDRO %d\r\n", ro_id);
liangzhen 2:e94460b2149f 203 #ifdef WRITE_RESULTS
liangzhen 3:e1a6e12233dd 204 fprintf(results_file,"Error in measuring DDRO %d\r\n", ro_id);
liangzhen 2:e94460b2149f 205 #endif
liangzhen 2:e94460b2149f 206 }
liangzhen 1:6a820a0ca03b 207 }
liangzhen 1:6a820a0ca03b 208 }