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
main.cpp@1:6a820a0ca03b, 2013-10-21 (annotated)
- 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?
User | Revision | Line number | New 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 | } |