Liangzhen Lai / Mbed 2 deprecated Orange_Ferrari_board_functional

Dependencies:   DDRO_Farrari mbed

Fork of DDRO_Farrari by Liangzhen Lai

main.cpp

Committer:
liangzhen
Date:
2013-10-07
Revision:
0:84a8bcfbdec9
Child:
1:6a820a0ca03b

File content as of revision 0:84a8bcfbdec9:


#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);
    
 }