Zimin Wang / Mbed 2 deprecated DDRO_Farrari

Dependencies:   mbed-rtos mbed

Fork of DDRO_Farrari by Liangzhen Lai

Committer:
josewang
Date:
Tue Feb 25 02:14:41 2014 +0000
Revision:
10:95e9932f7990
Parent:
9:cbb692f51e0f
Read from ram buffer and print

Who changed what in which revision?

UserRevisionLine numberNew contents of line
liangzhen 0:84a8bcfbdec9 1 #include "mbed.h"
josewang 10:95e9932f7990 2 #include "rtos.h"
liangzhen 0:84a8bcfbdec9 3 #include "power.h"
liangzhen 0:84a8bcfbdec9 4 #include "pinout.h"
liangzhen 0:84a8bcfbdec9 5 #include "pll.h"
liangzhen 0:84a8bcfbdec9 6 #include "jtag.h"
liangzhen 0:84a8bcfbdec9 7 #include "mmap.h"
josewang 10:95e9932f7990 8 #include "GPIOInterrupt.h"
josewang 10:95e9932f7990 9 #include "basic_io.h"
josewang 10:95e9932f7990 10 #include "panic.h"
liangzhen 1:6a820a0ca03b 11 #include "main.h"
josewang 10:95e9932f7990 12 #include "signal.h"
liangzhen 0:84a8bcfbdec9 13
josewang 10:95e9932f7990 14 // pointer to thread
josewang 10:95e9932f7990 15 Thread *thread_ptr;
josewang 9:cbb692f51e0f 16
josewang 10:95e9932f7990 17 void init_hw(void);
josewang 10:95e9932f7990 18 void req_intr_handler(void);
josewang 10:95e9932f7990 19 void print_rambuffer(void const *args);
josewang 9:cbb692f51e0f 20
liangzhen 1:6a820a0ca03b 21 int main()
liangzhen 1:6a820a0ca03b 22 {
josewang 10:95e9932f7990 23 init_hw();
josewang 10:95e9932f7990 24
liangzhen 0:84a8bcfbdec9 25 JTAG jtag;
josewang 2:bf2ce6c4e789 26 // We check if JTAG works well by checking idcode returned by issuing a test instruction and read result idcode back.
liangzhen 0:84a8bcfbdec9 27 int idcode = jtag.readID();
liangzhen 0:84a8bcfbdec9 28 if(idcode != 0x4ba00477) {
josewang 10:95e9932f7990 29 panic("ERROR: IDCode %X\r\n", idcode);
liangzhen 0:84a8bcfbdec9 30 }
josewang 10:95e9932f7990 31
josewang 10:95e9932f7990 32 // create working threads first
josewang 10:95e9932f7990 33 Thread core_handler(listen_req, (void *)(&jtag));
josewang 10:95e9932f7990 34 Thread debugThread(print_rambuffer, (void *)(&jtag));
josewang 10:95e9932f7990 35 thread_ptr = &core_handler;
josewang 10:95e9932f7990 36 // enable GPIO interrupt
josewang 10:95e9932f7990 37 enable_GPIO_intr(&req_intr_handler);
liangzhen 1:6a820a0ca03b 38
liangzhen 0:84a8bcfbdec9 39 jtag.reset();
liangzhen 0:84a8bcfbdec9 40 jtag.leaveState();
liangzhen 0:84a8bcfbdec9 41 jtag.PowerupDAP();
liangzhen 1:6a820a0ca03b 42 // setup necessary internal clock source selection
liangzhen 1:6a820a0ca03b 43 jtag.writeMemory(intclk_source, 2);
liangzhen 1:6a820a0ca03b 44 jtag.writeMemory(extclk_source, 1);
liangzhen 1:6a820a0ca03b 45 jtag.writeMemory(ext_div_by, 10);
liangzhen 1:6a820a0ca03b 46 power_core(1);
josewang 3:f8f27b0de752 47
liangzhen 1:6a820a0ca03b 48 set_pll_frequency (200, jtag);
josewang 9:cbb692f51e0f 49
josewang 7:98cbf8c8d7fb 50 // Begin to load program
josewang 10:95e9932f7990 51 mbed_printf("Begining loading program.\r\n");
josewang 7:98cbf8c8d7fb 52 if (jtag.loadProgram()) {
josewang 10:95e9932f7990 53 mbed_printf("Load Failed!\r\n");
josewang 7:98cbf8c8d7fb 54 } else {
josewang 10:95e9932f7990 55 mbed_printf("Load Succeed!\r\n");
josewang 7:98cbf8c8d7fb 56 CORERESETn = 0;
josewang 10:95e9932f7990 57 CORERESETn = 1;
josewang 10:95e9932f7990 58 char line[80];
josewang 7:98cbf8c8d7fb 59
josewang 7:98cbf8c8d7fb 60 while (1) {
josewang 10:95e9932f7990 61
josewang 10:95e9932f7990 62 mbed_printf("Type 'quit' to quit.\r\n");
josewang 10:95e9932f7990 63 mbed_scanf("%s", line);
josewang 10:95e9932f7990 64 if (strncmp(line, "quit", 80) == 0)
josewang 7:98cbf8c8d7fb 65 break;
josewang 10:95e9932f7990 66 else if (strncmp(line, "debug", 80) == 0)
josewang 10:95e9932f7990 67 debugThread.signal_set(SIG_DEBUG);
josewang 10:95e9932f7990 68
josewang 7:98cbf8c8d7fb 69 }
josewang 10:95e9932f7990 70
josewang 7:98cbf8c8d7fb 71 }
josewang 10:95e9932f7990 72
josewang 10:95e9932f7990 73 core_handler.terminate();
josewang 10:95e9932f7990 74 thread_ptr = NULL;
josewang 10:95e9932f7990 75 jtag.reset();
josewang 10:95e9932f7990 76
josewang 10:95e9932f7990 77 mbed_printf("Powering Down\r\n");
josewang 7:98cbf8c8d7fb 78 power_down();
josewang 10:95e9932f7990 79 mbed_printf("Done.\r\n");
josewang 7:98cbf8c8d7fb 80 while (1)
josewang 7:98cbf8c8d7fb 81 ;
liangzhen 0:84a8bcfbdec9 82 }
liangzhen 0:84a8bcfbdec9 83
josewang 10:95e9932f7990 84 void init_hw(void) {
josewang 10:95e9932f7990 85 float core_volt = 1;
josewang 10:95e9932f7990 86 power_down();
josewang 10:95e9932f7990 87 power_up(core_volt); // Power Up Chip
josewang 10:95e9932f7990 88 mbed_printf("Powered up!\r\n");
josewang 10:95e9932f7990 89
josewang 10:95e9932f7990 90 PORESETn = 0;
josewang 10:95e9932f7990 91 CORERESETn = 0;
josewang 10:95e9932f7990 92 wait_us(100);
josewang 10:95e9932f7990 93 PORESETn = 1;
josewang 10:95e9932f7990 94 CORERESETn = 1;
josewang 10:95e9932f7990 95 }
liangzhen 0:84a8bcfbdec9 96
josewang 10:95e9932f7990 97 void req_intr_handler(void) {
josewang 10:95e9932f7990 98 if (thread_ptr)
josewang 10:95e9932f7990 99 thread_ptr->signal_set(SIG_COREREQ);
josewang 10:95e9932f7990 100 return;
josewang 10:95e9932f7990 101 }
josewang 10:95e9932f7990 102
josewang 10:95e9932f7990 103 void print_rambuffer(void const *args) {
josewang 10:95e9932f7990 104 static bool init = true;
josewang 10:95e9932f7990 105 JTAG *pJtag = (JTAG *)args;
josewang 10:95e9932f7990 106 while (1) {
josewang 10:95e9932f7990 107 Thread::signal_wait(SIG_DEBUG);
josewang 10:95e9932f7990 108 if (init) {
josewang 10:95e9932f7990 109 pJtag->reset();
josewang 10:95e9932f7990 110 pJtag->leaveState();
josewang 10:95e9932f7990 111 pJtag->PowerupDAP();
josewang 10:95e9932f7990 112 init = false;
josewang 10:95e9932f7990 113 }
josewang 10:95e9932f7990 114 debug_print(pJtag);
liangzhen 1:6a820a0ca03b 115 }
liangzhen 1:6a820a0ca03b 116 }