Zimin Wang / Mbed 2 deprecated DDRO_Farrari

Dependencies:   mbed-rtos mbed

Fork of DDRO_Farrari by Liangzhen Lai

main.cpp

Committer:
josewang
Date:
2014-01-20
Revision:
3:f8f27b0de752
Parent:
2:bf2ce6c4e789
Child:
4:90f2f3006498

File content as of revision 3:f8f27b0de752:


#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"
#include "main.h"

int main()
{
    float core_volt = 1;

    //wdt.kick(20.0);
    pc.printf("Begin FFT\r\n");
    power_down();
    power_up(core_volt); // Power Up Chip
    pc.printf("Powered up!\r\n");

    PORESETn = 0;
    CORERESETn = 0;
    wait_us(100);
    PORESETn = 1;
    CORERESETn = 1;

    JTAG jtag;
    // We check if JTAG works well by checking idcode returned by issuing a test instruction and read result idcode back.
    int idcode = jtag.readID();
    if(idcode != 0x4ba00477) {
        pc.printf("ERROR: IDCode %X\r\n", idcode);
        wait(2);
        power_down();
        return -1;
    }
    pc.printf("IDCode %X\r\n", idcode);

    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);
    power_core(1);
    
    set_pll_frequency (200, jtag);
    //DDRO_Sensor(jtag);
    pc.printf("Begining loading program.\r\n");
    if (jtag.loadProgram()) {
        dual_printf("Load Failed");
    } else {
        CORERESETn = 0;
        CORERESETn = 1;
        wait(0.2);
        jtag.reset();
        jtag.leaveState();
        jtag.PowerupDAP();
        // read result
        unsigned int result[2];
        for (int i = 0; i < 2; ++i)
            result[i] = jtag.readMemory(0x24000100 + i * 4);
        // print result
        char *resultByte = (char *)result;
        for (int i = 0; i < 8; ++i)
            pc.printf("%x", resultByte[i]);
        pc.printf("\r\n");
    }

    pc.printf("Powering Down\r\n");
    power_down();
    pc.printf("Done\r\n");
    while (1)
        ;
}

void DDRO_Sensor(JTAG &jtag)
{
    /**********************enable****************************************/
    jtag.writeMemory(ddro_syn_en, 0xffffffff);
    jtag.writeMemory(ddro_inv_en, 0xffffffff);
    /**********************set ref_clk and samp_clk**********************/
    jtag.writeMemory(ddro_ref_src, 0x00000002);
    /**********************write threshold*******************************/
    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);
        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);
        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);
    }
}