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.
Dependencies: DDRO_Farrari mbed
Fork of DDRO_Farrari by
Diff: main.cpp
- Revision:
- 2:e94460b2149f
- Parent:
- 1:6a820a0ca03b
- Child:
- 3:e1a6e12233dd
diff -r 6a820a0ca03b -r e94460b2149f main.cpp --- a/main.cpp Mon Oct 21 22:36:51 2013 +0000 +++ b/main.cpp Thu Feb 20 03:40:20 2014 +0000 @@ -13,9 +13,21 @@ #include "EasyBMP.h" #include "main.h" +//#define WRITE_RESULTS +FILE *results_file; + +DigitalOut myled(LED4); +#ifdef WRITE_RESULTS +//LocalFileSystem local("local"); // Create the local filesystem under the name "local" +#endif + int main() { float core_volt = 1; +#ifdef WRITE_RESULTS + results_file=fopen("/local/results.txt", "a"); // Open "out.txt" on the local file system for writing +#endif + //wdt.kick(20.0); pc.printf("Begin FFT\r\n"); @@ -26,9 +38,10 @@ PORESETn = 0; CORERESETn = 0; wait_us(100); + pc.getc(); PORESETn = 1; CORERESETn = 1; - + pc.getc(); JTAG jtag; int idcode = jtag.readID(); if(idcode != 0x4ba00477) { @@ -46,52 +59,84 @@ jtag.writeMemory(intclk_source, 2); jtag.writeMemory(extclk_source, 1); jtag.writeMemory(ext_div_by, 10); - power_core(1); + for(int iter=0; iter<3; iter++) { +#ifdef WRITE_RESULTS + fprintf(results_file,"Iteration: %d\n", iter); +#endif + float voltage=1; + for(int i=0; i<=5; i++) { + voltage = 1 - 0.04*i; + power_core(voltage); +#ifdef WRITE_RESULTS + fprintf(results_file,"V: %f\n", voltage); +#endif + int upper = 120; + int lower = 22; + while (upper-lower > 1) { + int middle = (upper+lower)/2; + middle = middle * 5; + bool if_pass = true; + for (int j=1; j<10; j++) { + if(!check_FFT_Freq(jtag,middle)) { + if_pass = false; + j=10; + } + } + if(if_pass) { + lower = middle/5; + } else { + upper = middle/5; + } + } + pc.printf("fft working frequency: %d MHz\r\n", lower*5); +#ifdef WRITE_RESULTS + fprintf(results_file,"FFT: %d\n", lower*5); +#endif + set_pll_frequency (200, jtag); + DDRO_Sensor(jtag); + wait(1); + gain_ctrl=1; +#ifdef WRITE_RESULTS + fprintf(results_file,"GAIN_CTRL = 1\r\n"); + fprintf(results_file,"SEN: %f\r\n",meas_sen.read()); + fprintf(results_file,"MEM1: %f\r\n",meas_mem1.read()); + fprintf(results_file,"MEM2: %f\r\n",meas_mem2.read()); + fprintf(results_file,"CORE: %f\r\n",meas_core.read()); +#endif + wait(1); + gain_ctrl=0; +#ifdef WRITE_RESULTS + + fprintf(results_file,"GAIN_CTRL = 0\r\n"); + fprintf(results_file,"SEN: %f\r\n",meas_sen.read()); + fprintf(results_file,"MEM1: %f\r\n",meas_mem1.read()); + fprintf(results_file,"MEM2: %f\r\n",meas_mem2.read()); + fprintf(results_file,"CORE: %f\r\n",meas_core.read()); +#endif + } + } /* - for (int i=0; i<2; i++) { - int upper = 120; - int lower = 22; - while (upper-lower > 1) { - int middle = (upper+lower)/2; - middle = middle * 5; - if(check_FFT_Freq(jtag, middle)) { - lower = middle/5; - } else { - upper = middle/5; - } - } - pc.printf("fft working frequency: %d MHz\r\n", lower*5); - } - */ - set_pll_frequency (200, jtag); - DDRO_Sensor(jtag); - /* - + jtag.writeMemory(ddro_pad_out, 0xffffffff); printf("Reading ddro pad out %x\r\n", jtag.readMemory(ddro_pad_out)); jtag.writeMemory(ddro_div_by, 0xffffffff); printf("Reading ddro div by %x\r\n", jtag.readMemory(ddro_div_by)); - - wait(1); - gain_ctrl=1; - pc.printf("GAIN_CTRL = 1\r\n"); - pc.printf("SEN: %f\r\n",meas_sen.read()); - pc.printf("MEM1: %f\r\n",meas_mem1.read()); - pc.printf("MEM2: %f\r\n",meas_mem2.read()); - pc.printf("CORE: %f\r\n",meas_core.read()); + */ - wait(1); - gain_ctrl=0; - pc.printf("GAIN_CTRL = 0\r\n"); - pc.printf("SEN: %f\r\n",meas_sen.read()); - pc.printf("MEM1: %f\r\n",meas_mem1.read()); - pc.printf("MEM2: %f\r\n",meas_mem2.read()); - pc.printf("CORE: %f\r\n",meas_core.read()); - */ + pc.printf("Powering Down\r\n"); power_down(); +#ifdef WRITE_RESULTS + fclose(results_file); +#endif pc.printf("Done\r\n"); + while(1) { + myled = 1; + wait(0.2); + myled = 0; + wait(0.2); + } } int check_FFT_Freq(JTAG &jtag, int fMHz) @@ -147,26 +192,57 @@ jtag.writeMemory(ddro_threshold, 100000); //jtag.writeMemory(0xe000e104, 0x000000ff); // enable interrupts - for (int ro_id=3;ro_id<=15;ro_id++) { - pc.printf("RO %d\r\n ", ro_id-2); + for (int ro_id=3; ro_id<=15; ro_id++) { + unsigned int meas1_s, meas1_e, meas2_s, meas2_e; + int delta1, delta2; + //pc.printf("RO %d\r\n ", ro_id-2); jtag.writeMemory(ddro_samp_src, ro_id); jtag.writeMemory(ddro_start, 0); - int meas1 = jtag.readMemory(ddro_count); - pc.printf("Counter starts at: %d ", meas1); + meas1_s = jtag.readMemory(ddro_count); + //pc.printf("Counter starts at: %d ", meas1); + jtag.writeMemory(ddro_start, 1); + wait_us(50000); + jtag.writeMemory(ddro_start, 0); + meas1_e = jtag.readMemory(ddro_count); + //pc.printf("ends at: %d\r\n", meas1); + delta1 = meas1_e - meas1_s; + + jtag.writeMemory(ddro_samp_src, ro_id); + jtag.writeMemory(ddro_start, 0); + meas2_s = jtag.readMemory(ddro_count); + //pc.printf("Counter starts at: %d ", meas1); jtag.writeMemory(ddro_start, 1); wait_us(50000); jtag.writeMemory(ddro_start, 0); - meas1 = jtag.readMemory(ddro_count); - pc.printf("ends at: %d\r\n", meas1); - - jtag.writeMemory(ddro_samp_src, ro_id); - jtag.writeMemory(ddro_start, 0); - meas1 = jtag.readMemory(ddro_count); - pc.printf("Counter starts at: %d ", meas1); - jtag.writeMemory(ddro_start, 1); - wait_us(50000); - jtag.writeMemory(ddro_start, 0); - meas1 = jtag.readMemory(ddro_count); - printf("ends at: %d\r\n", meas1); + meas2_e = jtag.readMemory(ddro_count); + delta2 = meas2_e - meas2_s; + //printf("ends at: %d\r\n", meas1); + + if ( (float)delta2/meas1_e>=0.95 && (float)delta2/meas1_e<=1.05 ) { + pc.printf("RO %d: %d\n\r", ro_id, (delta2+meas1_e)/2); +#ifdef WRITE_RESULTS + fprintf(results_file,"RO %d: %d\n\r", ro_id, (delta2+meas1_e)/2); +#endif + } else if ((float)delta1/meas2_e>=0.95 && (float)delta1/meas2_e<=1.05 ) { + pc.printf("RO %d: %d\n\r", ro_id, (delta1+meas2_e)/2); +#ifdef WRITE_RESULTS + fprintf(results_file,"RO %d: %d\n\r", ro_id, (delta1+meas2_e)/2); +#endif + } else if ( (float)delta2/delta1 >=0.95 && (float)delta2/delta1<=1.05 ) { + pc.printf("RO %d: %d\n\r", ro_id, (delta1+delta2)/2); +#ifdef WRITE_RESULTS + fprintf(results_file,"RO %d: %d\n\r", ro_id, (delta1+delta2)/2); +#endif + } else if ( (float)meas2_e/meas1_e >=0.95 && (float)meas2_e/meas1_e<=1.05 ) { + pc.printf("RO %d: %d\n\r", ro_id, (meas1_e+meas2_e)/2); +#ifdef WRITE_RESULTS + fprintf(results_file,"RO %d: %d\n\r", ro_id, (meas1_e+meas2_e)/2); +#endif + } else { + pc.printf("Error in measuring DDRO %d\n\r", ro_id); +#ifdef WRITE_RESULTS + fprintf(results_file,"Error in measuring DDRO %d\n\r", ro_id); +#endif + } } }