Zimin Wang / Mbed 2 deprecated DDRO_Farrari

Dependencies:   mbed-rtos mbed

Fork of DDRO_Farrari by Liangzhen Lai

Committer:
josewang
Date:
Tue Feb 11 05:49:10 2014 +0000
Revision:
7:98cbf8c8d7fb
Parent:
6:d772ad205bc7
Child:
8:d351a61cee25
Test FreeRTOS kernel, input data using USB interupt handler

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"
josewang 6:d772ad205bc7 15 #include "serialIO.h"
liangzhen 0:84a8bcfbdec9 16
liangzhen 1:6a820a0ca03b 17 int main()
liangzhen 1:6a820a0ca03b 18 {
liangzhen 1:6a820a0ca03b 19 float core_volt = 1;
liangzhen 0:84a8bcfbdec9 20
liangzhen 1:6a820a0ca03b 21 //wdt.kick(20.0);
liangzhen 0:84a8bcfbdec9 22 pc.printf("Begin FFT\r\n");
liangzhen 0:84a8bcfbdec9 23 power_down();
liangzhen 1:6a820a0ca03b 24 power_up(core_volt); // Power Up Chip
liangzhen 0:84a8bcfbdec9 25 pc.printf("Powered up!\r\n");
liangzhen 0:84a8bcfbdec9 26
liangzhen 0:84a8bcfbdec9 27 PORESETn = 0;
liangzhen 0:84a8bcfbdec9 28 CORERESETn = 0;
liangzhen 1:6a820a0ca03b 29 wait_us(100);
liangzhen 0:84a8bcfbdec9 30 PORESETn = 1;
liangzhen 0:84a8bcfbdec9 31 CORERESETn = 1;
liangzhen 1:6a820a0ca03b 32
liangzhen 0:84a8bcfbdec9 33 JTAG jtag;
josewang 2:bf2ce6c4e789 34 // We check if JTAG works well by checking idcode returned by issuing a test instruction and read result idcode back.
liangzhen 0:84a8bcfbdec9 35 int idcode = jtag.readID();
liangzhen 0:84a8bcfbdec9 36 if(idcode != 0x4ba00477) {
liangzhen 0:84a8bcfbdec9 37 pc.printf("ERROR: IDCode %X\r\n", idcode);
liangzhen 1:6a820a0ca03b 38 wait(2);
liangzhen 0:84a8bcfbdec9 39 power_down();
liangzhen 0:84a8bcfbdec9 40 return -1;
liangzhen 0:84a8bcfbdec9 41 }
liangzhen 0:84a8bcfbdec9 42 pc.printf("IDCode %X\r\n", idcode);
liangzhen 1:6a820a0ca03b 43
liangzhen 0:84a8bcfbdec9 44 jtag.reset();
liangzhen 0:84a8bcfbdec9 45 jtag.leaveState();
liangzhen 0:84a8bcfbdec9 46 jtag.PowerupDAP();
liangzhen 1:6a820a0ca03b 47 // setup necessary internal clock source selection
liangzhen 1:6a820a0ca03b 48 jtag.writeMemory(intclk_source, 2);
liangzhen 1:6a820a0ca03b 49 jtag.writeMemory(extclk_source, 1);
liangzhen 1:6a820a0ca03b 50 jtag.writeMemory(ext_div_by, 10);
liangzhen 1:6a820a0ca03b 51 power_core(1);
josewang 3:f8f27b0de752 52
liangzhen 1:6a820a0ca03b 53 set_pll_frequency (200, jtag);
josewang 7:98cbf8c8d7fb 54 // attach new interrupt handler
josewang 6:d772ad205bc7 55 pc.attach(&Tx_interrupt, Serial::TxIrq);
josewang 6:d772ad205bc7 56 pc.attach(&Rx_interrupt, Serial::RxIrq);
josewang 7:98cbf8c8d7fb 57 // Begin to load program
josewang 7:98cbf8c8d7fb 58 sprintf(tx_line, "Begining loading program.\r\n");
josewang 7:98cbf8c8d7fb 59 send_line();
josewang 7:98cbf8c8d7fb 60 if (jtag.loadProgram()) {
josewang 7:98cbf8c8d7fb 61 sprintf(tx_line, "Load Failed!\r\n");
josewang 6:d772ad205bc7 62 send_line();
josewang 7:98cbf8c8d7fb 63 } else {
josewang 7:98cbf8c8d7fb 64 CORERESETn = 0;
josewang 7:98cbf8c8d7fb 65 CORERESETn = 1;
josewang 7:98cbf8c8d7fb 66 wait(0.2);
josewang 7:98cbf8c8d7fb 67 jtag.reset();
josewang 7:98cbf8c8d7fb 68 jtag.leaveState();
josewang 7:98cbf8c8d7fb 69 jtag.PowerupDAP();
josewang 7:98cbf8c8d7fb 70
josewang 7:98cbf8c8d7fb 71 while (1) {
josewang 7:98cbf8c8d7fb 72 sprintf(tx_line, "Type 'quit' to quit. Press any key to continue.\r\n");
josewang 7:98cbf8c8d7fb 73 send_line();
josewang 7:98cbf8c8d7fb 74 read_line();
josewang 7:98cbf8c8d7fb 75 if (strncmp(rx_line, "quit", 80) == 0)
josewang 7:98cbf8c8d7fb 76 break;
josewang 7:98cbf8c8d7fb 77 //sprintf(tx_line, "%s\r\n", rx_line);
josewang 7:98cbf8c8d7fb 78 //send_line();
josewang 7:98cbf8c8d7fb 79 unsigned int value;
josewang 7:98cbf8c8d7fb 80 for (int i = 0; i < 2; ++i) {
josewang 7:98cbf8c8d7fb 81 value = jtag.readMemory(0x24000110 + i * 4);
josewang 7:98cbf8c8d7fb 82 sprintf(tx_line, "hex is: %08x\r\n", value);
josewang 7:98cbf8c8d7fb 83 send_line();
josewang 7:98cbf8c8d7fb 84 }
josewang 7:98cbf8c8d7fb 85 }
josewang 7:98cbf8c8d7fb 86 }
josewang 7:98cbf8c8d7fb 87
josewang 7:98cbf8c8d7fb 88 sprintf(tx_line, "Powering Down\r\n");
josewang 7:98cbf8c8d7fb 89 send_line();
josewang 7:98cbf8c8d7fb 90 power_down();
josewang 7:98cbf8c8d7fb 91 sprintf(tx_line, "Done.\r\n");
josewang 7:98cbf8c8d7fb 92 send_line();
josewang 7:98cbf8c8d7fb 93 while (1)
josewang 7:98cbf8c8d7fb 94 ;
liangzhen 0:84a8bcfbdec9 95 }
liangzhen 0:84a8bcfbdec9 96
liangzhen 1:6a820a0ca03b 97 void DDRO_Sensor(JTAG &jtag)
liangzhen 1:6a820a0ca03b 98 {
liangzhen 0:84a8bcfbdec9 99 /**********************enable****************************************/
liangzhen 0:84a8bcfbdec9 100 jtag.writeMemory(ddro_syn_en, 0xffffffff);
liangzhen 0:84a8bcfbdec9 101 jtag.writeMemory(ddro_inv_en, 0xffffffff);
liangzhen 0:84a8bcfbdec9 102 /**********************set ref_clk and samp_clk**********************/
liangzhen 1:6a820a0ca03b 103 jtag.writeMemory(ddro_ref_src, 0x00000002);
liangzhen 0:84a8bcfbdec9 104 /**********************write threshold*******************************/
liangzhen 1:6a820a0ca03b 105 jtag.writeMemory(ddro_threshold, 100000);
liangzhen 1:6a820a0ca03b 106 //jtag.writeMemory(0xe000e104, 0x000000ff); // enable interrupts
liangzhen 0:84a8bcfbdec9 107
liangzhen 1:6a820a0ca03b 108 for (int ro_id=3;ro_id<=15;ro_id++) {
liangzhen 1:6a820a0ca03b 109 pc.printf("RO %d\r\n ", ro_id-2);
liangzhen 1:6a820a0ca03b 110 jtag.writeMemory(ddro_samp_src, ro_id);
liangzhen 1:6a820a0ca03b 111 jtag.writeMemory(ddro_start, 0);
liangzhen 1:6a820a0ca03b 112 int meas1 = jtag.readMemory(ddro_count);
liangzhen 1:6a820a0ca03b 113 pc.printf("Counter starts at: %d ", meas1);
liangzhen 1:6a820a0ca03b 114 jtag.writeMemory(ddro_start, 1);
liangzhen 1:6a820a0ca03b 115 wait_us(50000);
liangzhen 1:6a820a0ca03b 116 jtag.writeMemory(ddro_start, 0);
liangzhen 1:6a820a0ca03b 117 meas1 = jtag.readMemory(ddro_count);
liangzhen 1:6a820a0ca03b 118 pc.printf("ends at: %d\r\n", meas1);
liangzhen 1:6a820a0ca03b 119
liangzhen 1:6a820a0ca03b 120 jtag.writeMemory(ddro_samp_src, ro_id);
liangzhen 1:6a820a0ca03b 121 jtag.writeMemory(ddro_start, 0);
liangzhen 1:6a820a0ca03b 122 meas1 = jtag.readMemory(ddro_count);
liangzhen 1:6a820a0ca03b 123 pc.printf("Counter starts at: %d ", meas1);
liangzhen 1:6a820a0ca03b 124 jtag.writeMemory(ddro_start, 1);
liangzhen 1:6a820a0ca03b 125 wait_us(50000);
liangzhen 1:6a820a0ca03b 126 jtag.writeMemory(ddro_start, 0);
liangzhen 1:6a820a0ca03b 127 meas1 = jtag.readMemory(ddro_count);
liangzhen 1:6a820a0ca03b 128 printf("ends at: %d\r\n", meas1);
liangzhen 1:6a820a0ca03b 129 }
liangzhen 1:6a820a0ca03b 130 }