Liangzhen Lai / Mbed 2 deprecated Orange_Ferrari_board_functional

Dependencies:   DDRO_Farrari mbed

Fork of DDRO_Farrari by Liangzhen Lai

Revision:
3:e1a6e12233dd
Parent:
2:e94460b2149f
diff -r e94460b2149f -r e1a6e12233dd main.cpp
--- 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
         }
     }