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:
- 0:84a8bcfbdec9
- Child:
- 1:6a820a0ca03b
diff -r 000000000000 -r 84a8bcfbdec9 main.cpp --- /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); + + }