Zimin Wang / Mbed 2 deprecated DDRO_Farrari

Dependencies:   mbed-rtos mbed

Fork of DDRO_Farrari by Liangzhen Lai

Committer:
josewang
Date:
Mon Jan 20 08:41:49 2014 +0000
Revision:
3:f8f27b0de752
Parent:
2:bf2ce6c4e789
Child:
4:90f2f3006498
A program to test whether gcc-compiled program runs on 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;
josewang 2:bf2ce6c4e789 33 // We check if JTAG works well by checking idcode returned by issuing a test instruction and read result idcode back.
liangzhen 0:84a8bcfbdec9 34 int idcode = jtag.readID();
liangzhen 0:84a8bcfbdec9 35 if(idcode != 0x4ba00477) {
liangzhen 0:84a8bcfbdec9 36 pc.printf("ERROR: IDCode %X\r\n", idcode);
liangzhen 1:6a820a0ca03b 37 wait(2);
liangzhen 0:84a8bcfbdec9 38 power_down();
liangzhen 0:84a8bcfbdec9 39 return -1;
liangzhen 0:84a8bcfbdec9 40 }
liangzhen 0:84a8bcfbdec9 41 pc.printf("IDCode %X\r\n", idcode);
liangzhen 1:6a820a0ca03b 42
liangzhen 0:84a8bcfbdec9 43 jtag.reset();
liangzhen 0:84a8bcfbdec9 44 jtag.leaveState();
liangzhen 0:84a8bcfbdec9 45 jtag.PowerupDAP();
liangzhen 1:6a820a0ca03b 46 // setup necessary internal clock source selection
liangzhen 1:6a820a0ca03b 47 jtag.writeMemory(intclk_source, 2);
liangzhen 1:6a820a0ca03b 48 jtag.writeMemory(extclk_source, 1);
liangzhen 1:6a820a0ca03b 49 jtag.writeMemory(ext_div_by, 10);
liangzhen 1:6a820a0ca03b 50 power_core(1);
josewang 3:f8f27b0de752 51
liangzhen 1:6a820a0ca03b 52 set_pll_frequency (200, jtag);
josewang 3:f8f27b0de752 53 //DDRO_Sensor(jtag);
josewang 3:f8f27b0de752 54 pc.printf("Begining loading program.\r\n");
josewang 3:f8f27b0de752 55 if (jtag.loadProgram()) {
josewang 3:f8f27b0de752 56 dual_printf("Load Failed");
josewang 3:f8f27b0de752 57 } else {
josewang 3:f8f27b0de752 58 CORERESETn = 0;
josewang 3:f8f27b0de752 59 CORERESETn = 1;
josewang 3:f8f27b0de752 60 wait(0.2);
josewang 3:f8f27b0de752 61 jtag.reset();
josewang 3:f8f27b0de752 62 jtag.leaveState();
josewang 3:f8f27b0de752 63 jtag.PowerupDAP();
josewang 3:f8f27b0de752 64 // read result
josewang 3:f8f27b0de752 65 unsigned int result[2];
josewang 3:f8f27b0de752 66 for (int i = 0; i < 2; ++i)
josewang 3:f8f27b0de752 67 result[i] = jtag.readMemory(0x24000100 + i * 4);
josewang 3:f8f27b0de752 68 // print result
josewang 3:f8f27b0de752 69 char *resultByte = (char *)result;
josewang 3:f8f27b0de752 70 for (int i = 0; i < 8; ++i)
josewang 3:f8f27b0de752 71 pc.printf("%x", resultByte[i]);
josewang 3:f8f27b0de752 72 pc.printf("\r\n");
josewang 3:f8f27b0de752 73 }
liangzhen 1:6a820a0ca03b 74
liangzhen 0:84a8bcfbdec9 75 pc.printf("Powering Down\r\n");
liangzhen 0:84a8bcfbdec9 76 power_down();
liangzhen 0:84a8bcfbdec9 77 pc.printf("Done\r\n");
josewang 3:f8f27b0de752 78 while (1)
josewang 3:f8f27b0de752 79 ;
liangzhen 0:84a8bcfbdec9 80 }
liangzhen 0:84a8bcfbdec9 81
liangzhen 1:6a820a0ca03b 82 void DDRO_Sensor(JTAG &jtag)
liangzhen 1:6a820a0ca03b 83 {
liangzhen 0:84a8bcfbdec9 84 /**********************enable****************************************/
liangzhen 0:84a8bcfbdec9 85 jtag.writeMemory(ddro_syn_en, 0xffffffff);
liangzhen 0:84a8bcfbdec9 86 jtag.writeMemory(ddro_inv_en, 0xffffffff);
liangzhen 0:84a8bcfbdec9 87 /**********************set ref_clk and samp_clk**********************/
liangzhen 1:6a820a0ca03b 88 jtag.writeMemory(ddro_ref_src, 0x00000002);
liangzhen 0:84a8bcfbdec9 89 /**********************write threshold*******************************/
liangzhen 1:6a820a0ca03b 90 jtag.writeMemory(ddro_threshold, 100000);
liangzhen 1:6a820a0ca03b 91 //jtag.writeMemory(0xe000e104, 0x000000ff); // enable interrupts
liangzhen 0:84a8bcfbdec9 92
liangzhen 1:6a820a0ca03b 93 for (int ro_id=3;ro_id<=15;ro_id++) {
liangzhen 1:6a820a0ca03b 94 pc.printf("RO %d\r\n ", ro_id-2);
liangzhen 1:6a820a0ca03b 95 jtag.writeMemory(ddro_samp_src, ro_id);
liangzhen 1:6a820a0ca03b 96 jtag.writeMemory(ddro_start, 0);
liangzhen 1:6a820a0ca03b 97 int meas1 = jtag.readMemory(ddro_count);
liangzhen 1:6a820a0ca03b 98 pc.printf("Counter starts at: %d ", meas1);
liangzhen 1:6a820a0ca03b 99 jtag.writeMemory(ddro_start, 1);
liangzhen 1:6a820a0ca03b 100 wait_us(50000);
liangzhen 1:6a820a0ca03b 101 jtag.writeMemory(ddro_start, 0);
liangzhen 1:6a820a0ca03b 102 meas1 = jtag.readMemory(ddro_count);
liangzhen 1:6a820a0ca03b 103 pc.printf("ends at: %d\r\n", meas1);
liangzhen 1:6a820a0ca03b 104
liangzhen 1:6a820a0ca03b 105 jtag.writeMemory(ddro_samp_src, ro_id);
liangzhen 1:6a820a0ca03b 106 jtag.writeMemory(ddro_start, 0);
liangzhen 1:6a820a0ca03b 107 meas1 = jtag.readMemory(ddro_count);
liangzhen 1:6a820a0ca03b 108 pc.printf("Counter starts at: %d ", meas1);
liangzhen 1:6a820a0ca03b 109 jtag.writeMemory(ddro_start, 1);
liangzhen 1:6a820a0ca03b 110 wait_us(50000);
liangzhen 1:6a820a0ca03b 111 jtag.writeMemory(ddro_start, 0);
liangzhen 1:6a820a0ca03b 112 meas1 = jtag.readMemory(ddro_count);
liangzhen 1:6a820a0ca03b 113 printf("ends at: %d\r\n", meas1);
liangzhen 1:6a820a0ca03b 114 }
liangzhen 1:6a820a0ca03b 115 }