Liangzhen Lai / Mbed 2 deprecated Orange_Ferrari_board_functional

Dependencies:   DDRO_Farrari mbed

Fork of DDRO_Farrari by Liangzhen Lai

Revision:
0:84a8bcfbdec9
Child:
1:6a820a0ca03b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon Oct 07 22:58:19 2013 +0000
@@ -0,0 +1,346 @@
+
+#include "mbed.h"
+#include "dac.h"
+#include "board_test.h"
+#include "scan.h"
+#include "power.h"
+#include "pinout.h"
+#include "pll.h"
+#include "lcd.h"
+#include "jtag.h"
+#include "mmap.h"
+#include "clock.h"   
+#include "EasyBMP.h"
+
+extern "C" void mbed_reset();
+extern "C" void HardFault_Handler() { mbed_reset(); }
+class Watchdog {
+public:
+// Load timeout value in watchdog timer and enable
+    void kick(float s) {
+        LPC_WDT->WDCLKSEL = 0x1;                // Set CLK src to PCLK
+        uint32_t clk = SystemCoreClock / 16;    // WD has a fixed /4 prescaler, PCLK default is /4
+        LPC_WDT->WDTC = s * (float)clk;
+        LPC_WDT->WDMOD = 0x3;                   // Enabled and Reset
+        kick();
+    }
+// "kick" or "feed" the dog - reset the watchdog timer
+// by writing this required bit pattern
+    void kick() {
+        LPC_WDT->WDFEED = 0xAA;
+        LPC_WDT->WDFEED = 0x55;
+    }
+};
+Watchdog wdt;
+void DDRO_Sensor(void);
+int FFT_Freq(float);
+
+int main() {
+    float new_power = 0.9;
+   
+    //wdt.kick(20.0); 
+    pc.printf("Begin FFT\r\n");
+    char buffer[21];
+   
+    power_down();
+    power_up(new_power); // Power Up Chip
+    pc.printf("Powered up!\r\n");
+
+    PORESETn = 0;
+    CORERESETn = 0;
+    PORESETn = 1;
+    CORERESETn = 1;
+    
+    JTAG jtag;
+    int idcode = jtag.readID();
+    if(idcode != 0x4ba00477) {
+        pc.printf("ERROR: IDCode %X\r\n", idcode);
+        wait(20);
+        power_down();
+        return -1;
+    }
+    pc.printf("IDCode %X\r\n", idcode);
+   
+    jtag.reset();
+    jtag.leaveState();
+    jtag.PowerupDAP();
+    int freq = FFT_Freq(new_power);
+    pc.printf("fft working frequency: %d MHz\r\n", freq);
+    
+    DDRO_Sensor(); 
+    jtag.writeMemory(ddro_pad_out, 0xffffffff);
+    printf("Reading ddro pad out %x\n", jtag.readMemory(ddro_pad_out));
+    jtag.writeMemory(ddro_div_by, 0xffffffff);
+    printf("Reading ddro div by %x\n", jtag.readMemory(ddro_div_by));
+   
+    //wdt.kick();
+    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.getc();
+    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());
+    pc.getc();
+    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.getc();
+    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());
+    pc.getc();
+    char paus;
+    pc.printf("Powering Down\r\n");
+    power_down();
+    pc.printf("Done\r\n");
+}
+
+int FFT_Freq(float vdd) {
+    
+    JTAG jtag;
+    char buffer[21];
+    int counter_set=200;
+    int flag=0;
+    while(flag==0){
+    //load program
+        
+        if(jtag.loadProgram()) {
+            dual_printf("Load Failed");
+            exit(1);
+        }
+        jtag.writeMemory(PLL_RESET, 0);
+        jtag_pll(jtag, 1, 1, counter_set, 1, 10, 32 );
+        jtag.writeMemory(PLL_RESET, 1);
+        jtag.writeMemory(PLL_RESET, 0);
+        unsigned long long freq = calc_pll_freqs(1, 1, counter_set, 1, 10, 32);
+        freq = freq / 1000000; // in MHz
+        int fMHz = freq;
+        // dual_printf(buffer);
+         power_core(vdd);
+    
+         //dual_printf("Resetting");
+         CORERESETn = 0;
+         CORERESETn = 1;
+         wait(0.2);
+         jtag.reset();
+         jtag.leaveState();
+         jtag.PowerupDAP();
+        //  dual_printf("Reset finished");
+    
+    
+         unsigned int buffer_fft[64];
+         for (int number1=0; number1<=63; number1++) {
+               buffer_fft[number1] = jtag.readMemory(0x24000100 + number1*4);
+        //printf("new[%d]: %x\n", number1, buffer_fft[number1]);
+         }
+    
+         if ( buffer_fft[0] == 0x0000fffc && buffer_fft[1]==0x0000fffd && buffer_fft[2]==0xffc0000a && buffer_fft[3]==0x0000fffe && 
+              buffer_fft[4]==0x0000fffd && buffer_fft[5]==0x0000ffff && buffer_fft[6]==0x0000fffd && buffer_fft[7]==0x00000000 && 
+              buffer_fft[8]==0x0000ffff && buffer_fft[9]==0x0000ffff && buffer_fft[10]==0xfffeffff && buffer_fft[11]==0xffff0000 && 
+              buffer_fft[12]==0x0000ffff && buffer_fft[13]==0xffff0000 && buffer_fft[14]==0xfffffffe && buffer_fft[15]==0xffff0000 &&  
+              buffer_fft[16]==0x00010000  && buffer_fft[17]==0x0001ffff && buffer_fft[18]==0x0000ffff && buffer_fft[19]==0x0001ffff &&  
+              buffer_fft[20]==0x0001fffe && buffer_fft[21]==0x0000fffe && buffer_fft[22]==0x0001fffe && buffer_fft[23]==0x0000ffff && 
+              buffer_fft[24]==0x0000ffff && buffer_fft[25]==0x0001fffe && buffer_fft[26]==0x0000ffff && buffer_fft[27]==0x00010000 &&  
+              buffer_fft[28]==0x0001ffff && buffer_fft[29]==0x00010000 && buffer_fft[30]==0x0000ffff && buffer_fft[31]==0x00010000 &&  
+              buffer_fft[32]==0x0000ffff && buffer_fft[33]==0x0000ffff && buffer_fft[34]==0x0000ffff && buffer_fft[35]==0x0000ffff &&  
+              buffer_fft[36]==0x0000fffe && buffer_fft[37]==0x0000ffff && buffer_fft[38]==0x0000fffe && buffer_fft[39]==0x00000000 &&  
+              buffer_fft[40]==0xffffffff && buffer_fft[41]==0x0000ffff && buffer_fft[42]==0xffffffff && buffer_fft[43]==0x00000000 &&  
+              buffer_fft[44]==0x0000ffff && buffer_fft[45]==0x00000000 && buffer_fft[46]==0xffffffff && buffer_fft[47]==0x00000000 && 
+              buffer_fft[48]==0x00000000 && buffer_fft[49]==0x00000000 && buffer_fft[50]==0x00000000 && buffer_fft[51]==0x00000000 &&  
+              buffer_fft[52]==0x0000ffff && buffer_fft[53]==0x0000ffff && buffer_fft[54]==0x0000ffff && buffer_fft[55]==0x00000000 && 
+              buffer_fft[56]==0xfffeffff && buffer_fft[57]==0xffffffff && buffer_fft[58]==0xffff0000 && buffer_fft[59]==0x00000000 && 
+              buffer_fft[60]==0x0000ffff && buffer_fft[61]==0x00000000 && buffer_fft[62]==0x003d000c && buffer_fft[63]==0x00000000 ) {
+              //printf("***********************maximum freq ***********************   %d", fMHz);
+                     flag = 1;
+              //return fMHz;
+              }            
+          else counter_set = counter_set-1; 
+    }
+    unsigned long long freq = calc_pll_freqs(1, 1, counter_set, 1, 10, 32);
+    freq = freq / 1000000; // in MHz
+    int fMHz = freq;
+    return fMHz;
+}
+
+void DDRO_Sensor(void){
+    JTAG jtag;
+    /**********************enable****************************************/
+    jtag.writeMemory(ddro_syn_en, 0xffffffff);
+    //printf("Reading ddro syn en %x\n", jtag.readMemory(ddro_syn_en));
+    jtag.writeMemory(ddro_inv_en, 0xffffffff);
+   // printf("Reading ddro inv en %x\n", jtag.readMemory(ddro_inv_en));
+    
+    /**********************set ref_clk and samp_clk**********************/
+    jtag.writeMemory(ddro_samp_src, 0x00000000);
+    //printf("Reading ddro ref src %x\n", jtag.readMemory(ddro_ref_src));
+    jtag.writeMemory(ddro_ref_src, 0x00000003);
+    //printf("Reading samp src %x\n", jtag.readMemory(ddro_samp_src));
+    
+    /**********************write threshold*******************************/
+   // printf("Writing threshold\n");
+    jtag.writeMemory(ddro_threshold, 10);
+   // printf("Reading threshold %d\n", jtag.readMemory(ddro_threshold));
+
+    jtag.writeMemory(0xe000e104, 0x000000ff); // enable interrupts
+    
+    /**********************start DDRO************************************/
+  //  printf("Ready to start DDRO \n");
+  //  printf("DDRO starting\n");
+    jtag.writeMemory(ddro_start, 1);//*ddro_start = 1;
+    
+    /*********************output*****************************************/
+    printf("Reading ddro_count %d\n", jtag.readMemory(ddro_count));
+    jtag.writeMemory(ddro_start, 0);//*ddro_start = 1;
+  
+  
+  
+    
+    jtag.writeMemory(ddro_ref_src, 0x00000004);
+    printf("Reading ddro ref src %x\n", jtag.readMemory(ddro_ref_src));
+    jtag.writeMemory(ddro_start, 1);//*ddro_start = 1;
+    printf("Reading ddro_count %d\n", jtag.readMemory(ddro_count));
+    jtag.writeMemory(ddro_start, 0);
+    
+    jtag.writeMemory(ddro_ref_src, 0x00000005);
+    printf("Reading ddro ref src %x\n", jtag.readMemory(ddro_ref_src));
+    jtag.writeMemory(ddro_start, 1);
+    printf("Reading ddro_count %d\n", jtag.readMemory(ddro_count));
+    jtag.writeMemory(ddro_start, 0);
+    
+    jtag.writeMemory(ddro_ref_src, 0x00000006);
+    printf("Reading ddro ref src %x\n", jtag.readMemory(ddro_ref_src));
+    jtag.writeMemory(ddro_start, 1);
+    printf("Reading ddro_count %d\n", jtag.readMemory(ddro_count));
+    jtag.writeMemory(ddro_start, 0);
+    
+    jtag.writeMemory(ddro_ref_src, 0x00000007);
+    printf("Reading ddro ref src %x\n", jtag.readMemory(ddro_ref_src));
+    jtag.writeMemory(ddro_start, 1);
+    printf("Reading ddro_count %d\n", jtag.readMemory(ddro_count));
+    jtag.writeMemory(ddro_start, 0);
+    
+    jtag.writeMemory(ddro_ref_src, 0x00000008);
+    printf("Reading ddro ref src %x\n", jtag.readMemory(ddro_ref_src));
+    jtag.writeMemory(ddro_start, 1);
+    printf("Reading ddro_count %d\n", jtag.readMemory(ddro_count));
+    jtag.writeMemory(ddro_start, 0);
+    
+    jtag.writeMemory(ddro_ref_src, 0x00000009);
+    printf("Reading ddro ref src %x\n", jtag.readMemory(ddro_ref_src));
+    jtag.writeMemory(ddro_start, 1);
+    printf("Reading ddro_count %d\n", jtag.readMemory(ddro_count));
+    jtag.writeMemory(ddro_start, 0);
+    
+    jtag.writeMemory(ddro_ref_src, 0x0000000a);
+    printf("Reading ddro ref src %x\n", jtag.readMemory(ddro_ref_src));
+    jtag.writeMemory(ddro_start, 1);
+    printf("Reading ddro_count %d\n", jtag.readMemory(ddro_count));
+    jtag.writeMemory(ddro_start, 0);
+    
+    jtag.writeMemory(ddro_ref_src, 0x0000000b);
+    printf("Reading ddro ref src %x\n", jtag.readMemory(ddro_ref_src));
+    jtag.writeMemory(ddro_start, 1);
+    printf("Reading ddro_count %d\n", jtag.readMemory(ddro_count));
+    jtag.writeMemory(ddro_start, 0);
+    
+    jtag.writeMemory(ddro_ref_src, 0x0000000c);
+    printf("Reading ddro ref src %x\n", jtag.readMemory(ddro_ref_src));
+    jtag.writeMemory(ddro_start, 1);
+    printf("Reading ddro_count %d\n", jtag.readMemory(ddro_count));
+    jtag.writeMemory(ddro_start, 0);
+    
+    jtag.writeMemory(ddro_ref_src, 0x0000000d);
+    printf("Reading ddro ref src %x\n", jtag.readMemory(ddro_ref_src));
+    jtag.writeMemory(ddro_start, 1);
+    printf("Reading ddro_count %d\n", jtag.readMemory(ddro_count));
+    jtag.writeMemory(ddro_start, 0);
+    
+    jtag.writeMemory(ddro_ref_src, 0x0000000e);
+    printf("Reading ddro ref src %x\n", jtag.readMemory(ddro_ref_src));
+    jtag.writeMemory(ddro_start, 1);
+    printf("Reading ddro_count %d\n", jtag.readMemory(ddro_count));
+    jtag.writeMemory(ddro_start, 0);
+    
+    jtag.writeMemory(ddro_ref_src, 0x0000000f);
+    printf("Reading ddro ref src %x\n", jtag.readMemory(ddro_ref_src));
+    jtag.writeMemory(ddro_start, 1);
+    printf("Reading ddro_count %d\n", jtag.readMemory(ddro_count));
+    jtag.writeMemory(ddro_start, 0);
+    
+    jtag.writeMemory(ddro_ref_src, 0x00000010);
+    printf("Reading ddro ref src %x\n", jtag.readMemory(ddro_ref_src));
+    jtag.writeMemory(ddro_start, 1);
+    printf("Reading ddro_count %d\n", jtag.readMemory(ddro_count));
+    jtag.writeMemory(ddro_start, 0);
+    
+    jtag.writeMemory(ddro_ref_src, 0x00000011);
+    printf("Reading ddro ref src %x\n", jtag.readMemory(ddro_ref_src));
+    jtag.writeMemory(ddro_start, 1);
+    printf("Reading ddro_count %d\n", jtag.readMemory(ddro_count));
+    jtag.writeMemory(ddro_start, 0);
+    
+    jtag.writeMemory(ddro_ref_src, 0x00000012);
+    printf("Reading ddro ref src %x\n", jtag.readMemory(ddro_ref_src));
+    jtag.writeMemory(ddro_start, 1);
+    printf("Reading ddro_count %d\n", jtag.readMemory(ddro_count));
+    jtag.writeMemory(ddro_start, 0);
+    
+    jtag.writeMemory(ddro_ref_src, 0x00000013);
+    printf("Reading ddro ref src %x\n", jtag.readMemory(ddro_ref_src));
+    jtag.writeMemory(ddro_start, 1);
+    printf("Reading ddro_count %d\n", jtag.readMemory(ddro_count));
+    jtag.writeMemory(ddro_start, 0);
+    
+    jtag.writeMemory(ddro_ref_src, 0x00000014);
+    printf("Reading ddro ref src %x\n", jtag.readMemory(ddro_ref_src));
+    jtag.writeMemory(ddro_start, 1);
+    printf("Reading ddro_count %d\n", jtag.readMemory(ddro_count));
+    jtag.writeMemory(ddro_start, 0);
+    
+    jtag.writeMemory(ddro_ref_src, 0x00000015);
+    printf("Reading ddro ref src %x\n", jtag.readMemory(ddro_ref_src));
+    jtag.writeMemory(ddro_start, 1);
+    printf("Reading ddro_count %d\n", jtag.readMemory(ddro_count));
+    jtag.writeMemory(ddro_start, 0);
+    
+    jtag.writeMemory(ddro_ref_src, 0x00000016);
+    printf("Reading ddro ref src %x\n", jtag.readMemory(ddro_ref_src));
+    jtag.writeMemory(ddro_start, 1);
+    printf("Reading ddro_count %d\n", jtag.readMemory(ddro_count));
+    jtag.writeMemory(ddro_start, 0);
+    
+    jtag.writeMemory(ddro_ref_src, 0x00000017);
+    printf("Reading ddro ref src %x\n", jtag.readMemory(ddro_ref_src));
+    jtag.writeMemory(ddro_start, 1);
+    printf("Reading ddro_count %d\n", jtag.readMemory(ddro_count));
+    jtag.writeMemory(ddro_start, 0);
+    
+    jtag.writeMemory(ddro_ref_src, 0x00000018);
+    printf("Reading ddro ref src %x\n", jtag.readMemory(ddro_ref_src));
+    jtag.writeMemory(ddro_start, 1);
+    printf("Reading ddro_count %d\n", jtag.readMemory(ddro_count));
+    jtag.writeMemory(ddro_start, 0);
+    
+    jtag.writeMemory(ddro_ref_src, 0x00000019);
+    printf("Reading ddro ref src %x\n", jtag.readMemory(ddro_ref_src));
+    jtag.writeMemory(ddro_start, 1);
+    printf("Reading ddro_count %d\n", jtag.readMemory(ddro_count));
+    jtag.writeMemory(ddro_start, 0);
+    
+ }