Liangzhen Lai / Mbed 2 deprecated Orange_Ferrari_board_functional

Dependencies:   DDRO_Farrari mbed

Fork of DDRO_Farrari by Liangzhen Lai

Committer:
liangzhen
Date:
Mon Oct 21 22:36:51 2013 +0000
Revision:
1:6a820a0ca03b
Parent:
0:84a8bcfbdec9
Child:
2:e94460b2149f
mbed code for Farrari board

Who changed what in which revision?

UserRevisionLine numberNew contents of line
liangzhen 0:84a8bcfbdec9 1
liangzhen 0:84a8bcfbdec9 2 #include "mbed.h"
liangzhen 0:84a8bcfbdec9 3 #include "dac.h"
liangzhen 0:84a8bcfbdec9 4 #include "board_test.h"
liangzhen 0:84a8bcfbdec9 5 #include "scan.h"
liangzhen 0:84a8bcfbdec9 6 #include "power.h"
liangzhen 0:84a8bcfbdec9 7 #include "pinout.h"
liangzhen 0:84a8bcfbdec9 8 #include "pll.h"
liangzhen 0:84a8bcfbdec9 9 #include "lcd.h"
liangzhen 0:84a8bcfbdec9 10 #include "jtag.h"
liangzhen 0:84a8bcfbdec9 11 #include "mmap.h"
liangzhen 1:6a820a0ca03b 12 #include "clock.h"
liangzhen 0:84a8bcfbdec9 13 #include "EasyBMP.h"
liangzhen 1:6a820a0ca03b 14 #include "main.h"
liangzhen 0:84a8bcfbdec9 15
liangzhen 1:6a820a0ca03b 16 int main()
liangzhen 1:6a820a0ca03b 17 {
liangzhen 1:6a820a0ca03b 18 float core_volt = 1;
liangzhen 0:84a8bcfbdec9 19
liangzhen 1:6a820a0ca03b 20 //wdt.kick(20.0);
liangzhen 0:84a8bcfbdec9 21 pc.printf("Begin FFT\r\n");
liangzhen 0:84a8bcfbdec9 22 power_down();
liangzhen 1:6a820a0ca03b 23 power_up(core_volt); // Power Up Chip
liangzhen 0:84a8bcfbdec9 24 pc.printf("Powered up!\r\n");
liangzhen 0:84a8bcfbdec9 25
liangzhen 0:84a8bcfbdec9 26 PORESETn = 0;
liangzhen 0:84a8bcfbdec9 27 CORERESETn = 0;
liangzhen 1:6a820a0ca03b 28 wait_us(100);
liangzhen 0:84a8bcfbdec9 29 PORESETn = 1;
liangzhen 0:84a8bcfbdec9 30 CORERESETn = 1;
liangzhen 1:6a820a0ca03b 31
liangzhen 0:84a8bcfbdec9 32 JTAG jtag;
liangzhen 0:84a8bcfbdec9 33 int idcode = jtag.readID();
liangzhen 0:84a8bcfbdec9 34 if(idcode != 0x4ba00477) {
liangzhen 0:84a8bcfbdec9 35 pc.printf("ERROR: IDCode %X\r\n", idcode);
liangzhen 1:6a820a0ca03b 36 wait(2);
liangzhen 0:84a8bcfbdec9 37 power_down();
liangzhen 0:84a8bcfbdec9 38 return -1;
liangzhen 0:84a8bcfbdec9 39 }
liangzhen 0:84a8bcfbdec9 40 pc.printf("IDCode %X\r\n", idcode);
liangzhen 1:6a820a0ca03b 41
liangzhen 0:84a8bcfbdec9 42 jtag.reset();
liangzhen 0:84a8bcfbdec9 43 jtag.leaveState();
liangzhen 0:84a8bcfbdec9 44 jtag.PowerupDAP();
liangzhen 1:6a820a0ca03b 45 // setup necessary internal clock source selection
liangzhen 1:6a820a0ca03b 46 jtag.writeMemory(intclk_source, 2);
liangzhen 1:6a820a0ca03b 47 jtag.writeMemory(extclk_source, 1);
liangzhen 1:6a820a0ca03b 48 jtag.writeMemory(ext_div_by, 10);
liangzhen 1:6a820a0ca03b 49 power_core(1);
liangzhen 1:6a820a0ca03b 50 /*
liangzhen 1:6a820a0ca03b 51 for (int i=0; i<2; i++) {
liangzhen 1:6a820a0ca03b 52 int upper = 120;
liangzhen 1:6a820a0ca03b 53 int lower = 22;
liangzhen 1:6a820a0ca03b 54 while (upper-lower > 1) {
liangzhen 1:6a820a0ca03b 55 int middle = (upper+lower)/2;
liangzhen 1:6a820a0ca03b 56 middle = middle * 5;
liangzhen 1:6a820a0ca03b 57 if(check_FFT_Freq(jtag, middle)) {
liangzhen 1:6a820a0ca03b 58 lower = middle/5;
liangzhen 1:6a820a0ca03b 59 } else {
liangzhen 1:6a820a0ca03b 60 upper = middle/5;
liangzhen 1:6a820a0ca03b 61 }
liangzhen 1:6a820a0ca03b 62 }
liangzhen 1:6a820a0ca03b 63 pc.printf("fft working frequency: %d MHz\r\n", lower*5);
liangzhen 1:6a820a0ca03b 64 }
liangzhen 1:6a820a0ca03b 65 */
liangzhen 1:6a820a0ca03b 66 set_pll_frequency (200, jtag);
liangzhen 1:6a820a0ca03b 67 DDRO_Sensor(jtag);
liangzhen 1:6a820a0ca03b 68 /*
liangzhen 0:84a8bcfbdec9 69
liangzhen 0:84a8bcfbdec9 70 jtag.writeMemory(ddro_pad_out, 0xffffffff);
liangzhen 1:6a820a0ca03b 71 printf("Reading ddro pad out %x\r\n", jtag.readMemory(ddro_pad_out));
liangzhen 0:84a8bcfbdec9 72 jtag.writeMemory(ddro_div_by, 0xffffffff);
liangzhen 1:6a820a0ca03b 73 printf("Reading ddro div by %x\r\n", jtag.readMemory(ddro_div_by));
liangzhen 1:6a820a0ca03b 74
liangzhen 0:84a8bcfbdec9 75 wait(1);
liangzhen 0:84a8bcfbdec9 76 gain_ctrl=1;
liangzhen 0:84a8bcfbdec9 77 pc.printf("GAIN_CTRL = 1\r\n");
liangzhen 0:84a8bcfbdec9 78 pc.printf("SEN: %f\r\n",meas_sen.read());
liangzhen 0:84a8bcfbdec9 79 pc.printf("MEM1: %f\r\n",meas_mem1.read());
liangzhen 0:84a8bcfbdec9 80 pc.printf("MEM2: %f\r\n",meas_mem2.read());
liangzhen 0:84a8bcfbdec9 81 pc.printf("CORE: %f\r\n",meas_core.read());
liangzhen 1:6a820a0ca03b 82
liangzhen 1:6a820a0ca03b 83 wait(1);
liangzhen 1:6a820a0ca03b 84 gain_ctrl=0;
liangzhen 1:6a820a0ca03b 85 pc.printf("GAIN_CTRL = 0\r\n");
liangzhen 1:6a820a0ca03b 86 pc.printf("SEN: %f\r\n",meas_sen.read());
liangzhen 1:6a820a0ca03b 87 pc.printf("MEM1: %f\r\n",meas_mem1.read());
liangzhen 1:6a820a0ca03b 88 pc.printf("MEM2: %f\r\n",meas_mem2.read());
liangzhen 1:6a820a0ca03b 89 pc.printf("CORE: %f\r\n",meas_core.read());
liangzhen 1:6a820a0ca03b 90 */
liangzhen 1:6a820a0ca03b 91
liangzhen 0:84a8bcfbdec9 92 pc.printf("Powering Down\r\n");
liangzhen 0:84a8bcfbdec9 93 power_down();
liangzhen 0:84a8bcfbdec9 94 pc.printf("Done\r\n");
liangzhen 0:84a8bcfbdec9 95 }
liangzhen 0:84a8bcfbdec9 96
liangzhen 1:6a820a0ca03b 97 int check_FFT_Freq(JTAG &jtag, int fMHz)
liangzhen 1:6a820a0ca03b 98 {
liangzhen 1:6a820a0ca03b 99 if(jtag.loadProgram()) {
liangzhen 1:6a820a0ca03b 100 dual_printf("Load Failed");
liangzhen 1:6a820a0ca03b 101 exit(1);
liangzhen 1:6a820a0ca03b 102 }
liangzhen 1:6a820a0ca03b 103 set_pll_frequency (fMHz, jtag);
liangzhen 1:6a820a0ca03b 104 //dual_printf("Resetting");
liangzhen 1:6a820a0ca03b 105 CORERESETn = 0;
liangzhen 1:6a820a0ca03b 106 CORERESETn = 1;
liangzhen 1:6a820a0ca03b 107 wait(0.2);
liangzhen 1:6a820a0ca03b 108 jtag.reset();
liangzhen 1:6a820a0ca03b 109 jtag.leaveState();
liangzhen 1:6a820a0ca03b 110 jtag.PowerupDAP();
liangzhen 1:6a820a0ca03b 111 unsigned int buffer_fft[64];
liangzhen 1:6a820a0ca03b 112 for (int number1=0; number1<=63; number1++) {
liangzhen 1:6a820a0ca03b 113 buffer_fft[number1] = jtag.readMemory(0x24000100 + number1*4);
liangzhen 1:6a820a0ca03b 114 jtag.writeMemory(0x24000100 + number1*4,0xF0F0F0F0);
liangzhen 1:6a820a0ca03b 115 //printf("new[%d]: %d\r\n", number1, buffer_fft[number1]);
liangzhen 0:84a8bcfbdec9 116 }
liangzhen 1:6a820a0ca03b 117 if ( buffer_fft[0] == 0x0000fffc && buffer_fft[1]==0x0000fffd && buffer_fft[2]==0xffc0000a && buffer_fft[3]==0x0000fffe &&
liangzhen 1:6a820a0ca03b 118 buffer_fft[4]==0x0000fffd && buffer_fft[5]==0x0000ffff && buffer_fft[6]==0x0000fffd && buffer_fft[7]==0x00000000 &&
liangzhen 1:6a820a0ca03b 119 buffer_fft[8]==0x0000ffff && buffer_fft[9]==0x0000ffff && buffer_fft[10]==0xfffeffff && buffer_fft[11]==0xffff0000 &&
liangzhen 1:6a820a0ca03b 120 buffer_fft[12]==0x0000ffff && buffer_fft[13]==0xffff0000 && buffer_fft[14]==0xfffffffe && buffer_fft[15]==0xffff0000 &&
liangzhen 1:6a820a0ca03b 121 buffer_fft[16]==0x00010000 && buffer_fft[17]==0x0001ffff && buffer_fft[18]==0x0000ffff && buffer_fft[19]==0x0001ffff &&
liangzhen 1:6a820a0ca03b 122 buffer_fft[20]==0x0001fffe && buffer_fft[21]==0x0000fffe && buffer_fft[22]==0x0001fffe && buffer_fft[23]==0x0000ffff &&
liangzhen 1:6a820a0ca03b 123 buffer_fft[24]==0x0000ffff && buffer_fft[25]==0x0001fffe && buffer_fft[26]==0x0000ffff && buffer_fft[27]==0x00010000 &&
liangzhen 1:6a820a0ca03b 124 buffer_fft[28]==0x0001ffff && buffer_fft[29]==0x00010000 && buffer_fft[30]==0x0000ffff && buffer_fft[31]==0x00010000 &&
liangzhen 1:6a820a0ca03b 125 buffer_fft[32]==0x0000ffff && buffer_fft[33]==0x0000ffff && buffer_fft[34]==0x0000ffff && buffer_fft[35]==0x0000ffff &&
liangzhen 1:6a820a0ca03b 126 buffer_fft[36]==0x0000fffe && buffer_fft[37]==0x0000ffff && buffer_fft[38]==0x0000fffe && buffer_fft[39]==0x00000000 &&
liangzhen 1:6a820a0ca03b 127 buffer_fft[40]==0xffffffff && buffer_fft[41]==0x0000ffff && buffer_fft[42]==0xffffffff && buffer_fft[43]==0x00000000 &&
liangzhen 1:6a820a0ca03b 128 buffer_fft[44]==0x0000ffff && buffer_fft[45]==0x00000000 && buffer_fft[46]==0xffffffff && buffer_fft[47]==0x00000000 &&
liangzhen 1:6a820a0ca03b 129 buffer_fft[48]==0x00000000 && buffer_fft[49]==0x00000000 && buffer_fft[50]==0x00000000 && buffer_fft[51]==0x00000000 &&
liangzhen 1:6a820a0ca03b 130 buffer_fft[52]==0x0000ffff && buffer_fft[53]==0x0000ffff && buffer_fft[54]==0x0000ffff && buffer_fft[55]==0x00000000 &&
liangzhen 1:6a820a0ca03b 131 buffer_fft[56]==0xfffeffff && buffer_fft[57]==0xffffffff && buffer_fft[58]==0xffff0000 && buffer_fft[59]==0x00000000 &&
liangzhen 1:6a820a0ca03b 132 buffer_fft[60]==0x0000ffff && buffer_fft[61]==0x00000000 && buffer_fft[62]==0x003d000c && buffer_fft[63]==0x00000000 ) {
liangzhen 1:6a820a0ca03b 133 return 1;
liangzhen 1:6a820a0ca03b 134 } else {
liangzhen 1:6a820a0ca03b 135 return 0;
liangzhen 1:6a820a0ca03b 136 }
liangzhen 0:84a8bcfbdec9 137 }
liangzhen 0:84a8bcfbdec9 138
liangzhen 1:6a820a0ca03b 139 void DDRO_Sensor(JTAG &jtag)
liangzhen 1:6a820a0ca03b 140 {
liangzhen 0:84a8bcfbdec9 141 /**********************enable****************************************/
liangzhen 0:84a8bcfbdec9 142 jtag.writeMemory(ddro_syn_en, 0xffffffff);
liangzhen 0:84a8bcfbdec9 143 jtag.writeMemory(ddro_inv_en, 0xffffffff);
liangzhen 0:84a8bcfbdec9 144 /**********************set ref_clk and samp_clk**********************/
liangzhen 1:6a820a0ca03b 145 jtag.writeMemory(ddro_ref_src, 0x00000002);
liangzhen 0:84a8bcfbdec9 146 /**********************write threshold*******************************/
liangzhen 1:6a820a0ca03b 147 jtag.writeMemory(ddro_threshold, 100000);
liangzhen 1:6a820a0ca03b 148 //jtag.writeMemory(0xe000e104, 0x000000ff); // enable interrupts
liangzhen 0:84a8bcfbdec9 149
liangzhen 1:6a820a0ca03b 150 for (int ro_id=3;ro_id<=15;ro_id++) {
liangzhen 1:6a820a0ca03b 151 pc.printf("RO %d\r\n ", ro_id-2);
liangzhen 1:6a820a0ca03b 152 jtag.writeMemory(ddro_samp_src, ro_id);
liangzhen 1:6a820a0ca03b 153 jtag.writeMemory(ddro_start, 0);
liangzhen 1:6a820a0ca03b 154 int meas1 = jtag.readMemory(ddro_count);
liangzhen 1:6a820a0ca03b 155 pc.printf("Counter starts at: %d ", meas1);
liangzhen 1:6a820a0ca03b 156 jtag.writeMemory(ddro_start, 1);
liangzhen 1:6a820a0ca03b 157 wait_us(50000);
liangzhen 1:6a820a0ca03b 158 jtag.writeMemory(ddro_start, 0);
liangzhen 1:6a820a0ca03b 159 meas1 = jtag.readMemory(ddro_count);
liangzhen 1:6a820a0ca03b 160 pc.printf("ends at: %d\r\n", meas1);
liangzhen 1:6a820a0ca03b 161
liangzhen 1:6a820a0ca03b 162 jtag.writeMemory(ddro_samp_src, ro_id);
liangzhen 1:6a820a0ca03b 163 jtag.writeMemory(ddro_start, 0);
liangzhen 1:6a820a0ca03b 164 meas1 = jtag.readMemory(ddro_count);
liangzhen 1:6a820a0ca03b 165 pc.printf("Counter starts at: %d ", meas1);
liangzhen 1:6a820a0ca03b 166 jtag.writeMemory(ddro_start, 1);
liangzhen 1:6a820a0ca03b 167 wait_us(50000);
liangzhen 1:6a820a0ca03b 168 jtag.writeMemory(ddro_start, 0);
liangzhen 1:6a820a0ca03b 169 meas1 = jtag.readMemory(ddro_count);
liangzhen 1:6a820a0ca03b 170 printf("ends at: %d\r\n", meas1);
liangzhen 1:6a820a0ca03b 171 }
liangzhen 1:6a820a0ca03b 172 }