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
Read from ram buffer and print

Who changed what in which revision?

UserRevisionLine numberNew contents of line
josewang 10:95e9932f7990 1 /*
josewang 10:95e9932f7990 2 * Implementations of two threads created in main.cpp.
josewang 10:95e9932f7990 3 * One thread is used for handling core read/write request, the other thread is for sending an acknowledge interrupt.
josewang 10:95e9932f7990 4 *
josewang 10:95e9932f7990 5 * Written by Zimin Wang
josewang 10:95e9932f7990 6 *
josewang 10:95e9932f7990 7 */
josewang 10:95e9932f7990 8 #include "mbed.h"
josewang 10:95e9932f7990 9 #include "rtos.h"
josewang 10:95e9932f7990 10 #include "jtag.h"
josewang 10:95e9932f7990 11 #include "mmap.h"
josewang 10:95e9932f7990 12 #include "GPIOInterrupt.h"
josewang 10:95e9932f7990 13 #include "basic_io.h"
josewang 10:95e9932f7990 14 #include "signal.h"
josewang 10:95e9932f7990 15
josewang 10:95e9932f7990 16 #define PRINT_REQ (0U)
josewang 10:95e9932f7990 17 #define SCAN_REQ (1U)
josewang 10:95e9932f7990 18
josewang 10:95e9932f7990 19 // interrupt pins
josewang 10:95e9932f7990 20 static InterruptIn req_intr(p15);
josewang 10:95e9932f7990 21 // p16 is used to send an IRQ1 to core.
josewang 10:95e9932f7990 22 static DigitalOut ack_intr(p16);
josewang 10:95e9932f7990 23
josewang 10:95e9932f7990 24 void enable_GPIO_intr(void (*handler)(void)) {
josewang 10:95e9932f7990 25 req_intr.rise(handler);
josewang 10:95e9932f7990 26 req_intr.mode(PullDown);
josewang 10:95e9932f7990 27 }
josewang 10:95e9932f7990 28
josewang 10:95e9932f7990 29 void disable_GPIO_intr(void) {
josewang 10:95e9932f7990 30 req_intr.disable_irq();
josewang 10:95e9932f7990 31 return;
josewang 10:95e9932f7990 32 }
josewang 10:95e9932f7990 33
josewang 10:95e9932f7990 34
josewang 10:95e9932f7990 35 // GPIO_out should be put in main loop. When an output request interrupt from chip occurs,
josewang 10:95e9932f7990 36 // this function read output data from chip and print data. Then it sends an output acknowledge
josewang 10:95e9932f7990 37 // signal to unblock task in the chip.
josewang 10:95e9932f7990 38 // When there is no output request interrupt it returns quietly.
josewang 10:95e9932f7990 39 void listen_req(void const *args) {
josewang 10:95e9932f7990 40 static bool init = true;
josewang 10:95e9932f7990 41
josewang 10:95e9932f7990 42 JTAG *pJtag = (JTAG *)args;
josewang 10:95e9932f7990 43 while (1) {
josewang 10:95e9932f7990 44 Thread::signal_wait(SIG_COREREQ);
josewang 10:95e9932f7990 45 if (init) {
josewang 10:95e9932f7990 46 // inittialize jtag
josewang 10:95e9932f7990 47 pJtag->reset();
josewang 10:95e9932f7990 48 pJtag->leaveState();
josewang 10:95e9932f7990 49 pJtag->PowerupDAP();
josewang 10:95e9932f7990 50 init = false;
josewang 10:95e9932f7990 51 }
josewang 10:95e9932f7990 52 // check whether it's a print request or scan request
josewang 10:95e9932f7990 53 unsigned int type = pJtag->readMemory(IO_TYPE);
josewang 10:95e9932f7990 54 if (type == PRINT_REQ) {
josewang 10:95e9932f7990 55 // read message from JTAG
josewang 10:95e9932f7990 56 term_printf(pJtag);
josewang 10:95e9932f7990 57 } else if (type == SCAN_REQ) {
josewang 10:95e9932f7990 58 term_scanf(pJtag);
josewang 10:95e9932f7990 59 } else {
josewang 10:95e9932f7990 60 mbed_printf("Unknown request type: %u\r\n", type);
josewang 10:95e9932f7990 61 continue;
josewang 10:95e9932f7990 62 }
josewang 10:95e9932f7990 63 // generate an acknowledge interrupt signal
josewang 10:95e9932f7990 64 ack_intr = 1;
josewang 10:95e9932f7990 65 ack_intr = 0;
josewang 10:95e9932f7990 66 }
josewang 10:95e9932f7990 67 }
josewang 10:95e9932f7990 68
josewang 10:95e9932f7990 69
josewang 10:95e9932f7990 70 /*
josewang 10:95e9932f7990 71 // GPIO_in should be put in main loop. When an input request interrupt from chip occurs,
josewang 10:95e9932f7990 72 // this functino read user input and write user input to the chip. Then it sends an input
josewang 10:95e9932f7990 73 // acknowledge interrupt to unblock task in the chip.
josewang 10:95e9932f7990 74 // When there is no input request interrupt it returns quietly.
josewang 10:95e9932f7990 75 void GPIO_in(void const *args) {
josewang 10:95e9932f7990 76 while (1) {
josewang 10:95e9932f7990 77 mbed_printf("Enter GPIO in.\r\n");
josewang 10:95e9932f7990 78 // generate interrupt signal
josewang 10:95e9932f7990 79 in_ack = 1;
josewang 10:95e9932f7990 80 in_ack = 0;
josewang 10:95e9932f7990 81 Thread::wait(4000);
josewang 10:95e9932f7990 82 }
josewang 10:95e9932f7990 83 }
josewang 10:95e9932f7990 84 */