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.
Fork of DDRO_Farrari by
Diff: main.cpp
- 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);
+
+ }
