Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: DDRO_Farrari mbed
Fork of DDRO_Farrari by
Diff: main.cpp
- Revision:
- 1:6a820a0ca03b
- Parent:
- 0:84a8bcfbdec9
- Child:
- 2:e94460b2149f
diff -r 84a8bcfbdec9 -r 6a820a0ca03b main.cpp --- a/main.cpp Mon Oct 07 22:58:19 2013 +0000 +++ b/main.cpp Mon Oct 21 22:36:51 2013 +0000 @@ -9,94 +9,69 @@ #include "lcd.h" #include "jtag.h" #include "mmap.h" -#include "clock.h" +#include "clock.h" #include "EasyBMP.h" +#include "main.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 core_volt = 1; -int main() { - float new_power = 0.9; - - //wdt.kick(20.0); + //wdt.kick(20.0); pc.printf("Begin FFT\r\n"); - char buffer[21]; - power_down(); - power_up(new_power); // Power Up Chip + 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; int idcode = jtag.readID(); if(idcode != 0x4ba00477) { pc.printf("ERROR: IDCode %X\r\n", idcode); - wait(20); + wait(2); 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); + // 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); + /* + for (int i=0; i<2; i++) { + int upper = 120; + int lower = 22; + while (upper-lower > 1) { + int middle = (upper+lower)/2; + middle = middle * 5; + if(check_FFT_Freq(jtag, middle)) { + lower = middle/5; + } else { + upper = middle/5; + } + } + pc.printf("fft working frequency: %d MHz\r\n", lower*5); + } + */ + set_pll_frequency (200, jtag); + DDRO_Sensor(jtag); + /* - DDRO_Sensor(); jtag.writeMemory(ddro_pad_out, 0xffffffff); - printf("Reading ddro pad out %x\n", jtag.readMemory(ddro_pad_out)); + 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\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(); + printf("Reading ddro div by %x\r\n", jtag.readMemory(ddro_div_by)); + wait(1); gain_ctrl=1; pc.printf("GAIN_CTRL = 1\r\n"); @@ -104,243 +79,94 @@ 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; + + 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.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; +int check_FFT_Freq(JTAG &jtag, int fMHz) +{ + if(jtag.loadProgram()) { + dual_printf("Load Failed"); + exit(1); + } + set_pll_frequency (fMHz, jtag); + //dual_printf("Resetting"); + CORERESETn = 0; + CORERESETn = 1; + wait(0.2); + jtag.reset(); + jtag.leaveState(); + jtag.PowerupDAP(); + unsigned int buffer_fft[64]; + for (int number1=0; number1<=63; number1++) { + buffer_fft[number1] = jtag.readMemory(0x24000100 + number1*4); + jtag.writeMemory(0x24000100 + number1*4,0xF0F0F0F0); + //printf("new[%d]: %d\r\n", number1, buffer_fft[number1]); } - unsigned long long freq = calc_pll_freqs(1, 1, counter_set, 1, 10, 32); - freq = freq / 1000000; // in MHz - int fMHz = freq; - return fMHz; + 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 ) { + return 1; + } else { + return 0; + } } -void DDRO_Sensor(void){ - JTAG jtag; +void DDRO_Sensor(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)); - + jtag.writeMemory(ddro_ref_src, 0x00000002); /**********************write threshold*******************************/ - // printf("Writing threshold\n"); - jtag.writeMemory(ddro_threshold, 10); - // printf("Reading threshold %d\n", jtag.readMemory(ddro_threshold)); + jtag.writeMemory(ddro_threshold, 100000); + //jtag.writeMemory(0xe000e104, 0x000000ff); // enable interrupts - 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); - - } + 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); + } +}