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.
Fork of DDRO_Farrari by
main.cpp@10:95e9932f7990, 2014-02-25 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |
