Liangzhen Lai / Mbed 2 deprecated Orange_Ferrari_board_functional

Dependencies:   DDRO_Farrari mbed

Fork of DDRO_Farrari by Liangzhen Lai

Files at this revision

API Documentation at this revision

Comitter:
liangzhen
Date:
Thu Jul 17 22:16:45 2014 +0000
Parent:
2:e94460b2149f
Commit message:
simplify for functional purpose only

Changed in this revision

DDRO_Farrari.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
power.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DDRO_Farrari.lib	Thu Jul 17 22:16:45 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/liangzhen/code/DDRO_Farrari/#e94460b2149f
--- a/main.cpp	Thu Feb 20 03:40:20 2014 +0000
+++ b/main.cpp	Thu Jul 17 22:16:45 2014 +0000
@@ -28,21 +28,22 @@
     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");
+    // power up the board
+    pc.printf("Begin\r\n");
     power_down();
     power_up(core_volt); // Power Up Chip
     pc.printf("Powered up!\r\n");
+    pc.printf("Start reading IDCode...\r\n");
 
+    // initializing the resets
     PORESETn = 0;
     CORERESETn = 0;
     wait_us(100);
-    pc.getc();
     PORESETn = 1;
     CORERESETn = 1;
-    pc.getc();
     JTAG jtag;
+
+    // read and verify chip ID
     int idcode = jtag.readID();
     if(idcode != 0x4ba00477) {
         pc.printf("ERROR: IDCode %X\r\n", idcode);
@@ -52,84 +53,43 @@
     }
     pc.printf("IDCode %X\r\n", idcode);
 
+    // power up the JTAG port
     jtag.reset();
     jtag.leaveState();
     jtag.PowerupDAP();
+
     // setup necessary internal clock source selection
     jtag.writeMemory(intclk_source, 2);
     jtag.writeMemory(extclk_source, 1);
     jtag.writeMemory(ext_div_by, 10);
-    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
+
+    float voltage=1;
+    power_core(voltage);
+    pc.printf("V: %f\r\n", voltage);
 
-            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
-        }
+    // load program
+    if(jtag.loadProgram()) {
+        dual_printf("Load Failed");
+        exit(1);
     }
-    /*
-
-    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));
-    */
-
-
-
+    
+    // reset the core and let it run
+    CORERESETn = 0;
+    CORERESETn = 1;
+    wait(0.2);
+    
+    // open the JTAG port again
+    jtag.reset();
+    jtag.leaveState();
+    jtag.PowerupDAP();
+    
+    // verify the output here with the following functions
+    // unsigned int readMemory(unsigned int address);
+    // void writeMemory(unsigned int address, unsigned int value);
+    
+    
     pc.printf("Powering Down\r\n");
     power_down();
-#ifdef WRITE_RESULTS
-    fclose(results_file);
-#endif
     pc.printf("Done\r\n");
     while(1) {
         myled = 1;
@@ -219,29 +179,29 @@
         //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);
+            pc.printf("RO %d:  %d\r\n", ro_id, (delta2+meas1_e)/2);
 #ifdef WRITE_RESULTS
-            fprintf(results_file,"RO %d:  %d\n\r", ro_id, (delta2+meas1_e)/2);
+            fprintf(results_file,"RO %d:  %d\r\n", 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);
+            pc.printf("RO %d:  %d\r\n", ro_id, (delta1+meas2_e)/2);
 #ifdef WRITE_RESULTS
-            fprintf(results_file,"RO %d:  %d\n\r", ro_id, (delta1+meas2_e)/2);
+            fprintf(results_file,"RO %d:  %d\r\n", 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);
+            pc.printf("RO %d:  %d\r\n", ro_id, (delta1+delta2)/2);
 #ifdef WRITE_RESULTS
-            fprintf(results_file,"RO %d:  %d\n\r", ro_id, (delta1+delta2)/2);
+            fprintf(results_file,"RO %d:  %d\r\n", 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);
+            pc.printf("RO %d:  %d\r\n", 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);
+            fprintf(results_file,"RO %d:  %d\r\n", ro_id, (meas1_e+meas2_e)/2);
 #endif
         } else {
-            pc.printf("Error in measuring DDRO %d\n\r", ro_id);
+            pc.printf("Error in measuring DDRO %d\r\n", ro_id);
 #ifdef WRITE_RESULTS
-            fprintf(results_file,"Error in measuring DDRO %d\n\r", ro_id);
+            fprintf(results_file,"Error in measuring DDRO %d\r\n", ro_id);
 #endif
         }
     }
--- a/power.cpp	Thu Feb 20 03:40:20 2014 +0000
+++ b/power.cpp	Thu Jul 17 22:16:45 2014 +0000
@@ -49,7 +49,7 @@
     wait(POWER_UP_TIME);
     power_chan(PLLAVDD, periph_volt);
     wait(POWER_UP_TIME);
-    
+
     // Sensor
     power_chan(SENSORVDD, core_volt);//power_chan(SENSORVDD, 1.0);
     wait(POWER_UP_TIME);