A simple project for sending button input up to AT&T Flow
Dependencies: FXOS8700CQ MODSERIAL mbed
For instructions on using this program, see the AT&T Starter Kit tutorial on it.
itm_output.cpp@60:2aa16fd02dfd, 2016-07-30 (annotated)
- Committer:
- JMF
- Date:
- Sat Jul 30 16:26:22 2016 +0000
- Revision:
- 60:2aa16fd02dfd
added two files that are only used if you are building for ULINK output. Not yet included in the project build/link.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
JMF | 60:2aa16fd02dfd | 1 | //Used for ULINK output only |
JMF | 60:2aa16fd02dfd | 2 | // |
JMF | 60:2aa16fd02dfd | 3 | |
JMF | 60:2aa16fd02dfd | 4 | /* ITM registers */ |
JMF | 60:2aa16fd02dfd | 5 | #define ITM_PORT0_U8 (*((volatile unsigned int *)0xE0000000)) |
JMF | 60:2aa16fd02dfd | 6 | #define ITM_PORT0_U32 (*((volatile unsigned long *)0xE0000000)) |
JMF | 60:2aa16fd02dfd | 7 | #define ITM_TER (*((volatile unsigned long *)0xE0000E00)) |
JMF | 60:2aa16fd02dfd | 8 | #define ITM_TCR (*((volatile unsigned long *)0xE0000E80)) |
JMF | 60:2aa16fd02dfd | 9 | |
JMF | 60:2aa16fd02dfd | 10 | #define ITM_TCR_ITMENA_Msk (1UL << 0) |
JMF | 60:2aa16fd02dfd | 11 | |
JMF | 60:2aa16fd02dfd | 12 | /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ |
JMF | 60:2aa16fd02dfd | 13 | #define ITM_RXBUFFER_EMPTY 0x5AA55AA5 |
JMF | 60:2aa16fd02dfd | 14 | |
JMF | 60:2aa16fd02dfd | 15 | /*!< Variable to receive characters. */ |
JMF | 60:2aa16fd02dfd | 16 | extern |
JMF | 60:2aa16fd02dfd | 17 | volatile int ITM_RxBuffer; |
JMF | 60:2aa16fd02dfd | 18 | volatile int ITM_RxBuffer = ITM_RXBUFFER_EMPTY; |
JMF | 60:2aa16fd02dfd | 19 | |
JMF | 60:2aa16fd02dfd | 20 | /** \brief ITM Send Character |
JMF | 60:2aa16fd02dfd | 21 | |
JMF | 60:2aa16fd02dfd | 22 | The function transmits a character via the ITM channel 0, and |
JMF | 60:2aa16fd02dfd | 23 | \li Just returns when no debugger is connected that has booked the output. |
JMF | 60:2aa16fd02dfd | 24 | \li Is blocking when a debugger is connected, but the previous character |
JMF | 60:2aa16fd02dfd | 25 | sent has not been transmitted. |
JMF | 60:2aa16fd02dfd | 26 | |
JMF | 60:2aa16fd02dfd | 27 | \param [in] ch Character to transmit. |
JMF | 60:2aa16fd02dfd | 28 | |
JMF | 60:2aa16fd02dfd | 29 | \returns Character to transmit. |
JMF | 60:2aa16fd02dfd | 30 | */ |
JMF | 60:2aa16fd02dfd | 31 | int ITM_putc (int ch) { |
JMF | 60:2aa16fd02dfd | 32 | if ((ITM_TCR & ITM_TCR_ITMENA_Msk) && /* ITM enabled */ |
JMF | 60:2aa16fd02dfd | 33 | (ITM_TER & (1UL << 0) )) { /* ITM Port #0 enabled */ |
JMF | 60:2aa16fd02dfd | 34 | while (ITM_PORT0_U32 == 0); |
JMF | 60:2aa16fd02dfd | 35 | ITM_PORT0_U8 = (int)ch; |
JMF | 60:2aa16fd02dfd | 36 | } |
JMF | 60:2aa16fd02dfd | 37 | return (ch); |
JMF | 60:2aa16fd02dfd | 38 | } |
JMF | 60:2aa16fd02dfd | 39 | |
JMF | 60:2aa16fd02dfd | 40 | /** \brief ITM Receive Character |
JMF | 60:2aa16fd02dfd | 41 | |
JMF | 60:2aa16fd02dfd | 42 | The function inputs a character via the external variable \ref ITM_RxBuffer. |
JMF | 60:2aa16fd02dfd | 43 | This variable is monitored and altered by the debugger to provide input. |
JMF | 60:2aa16fd02dfd | 44 | |
JMF | 60:2aa16fd02dfd | 45 | \return Received character. |
JMF | 60:2aa16fd02dfd | 46 | \return -1 No character pending. |
JMF | 60:2aa16fd02dfd | 47 | */ |
JMF | 60:2aa16fd02dfd | 48 | int ITM_getc (void) { |
JMF | 60:2aa16fd02dfd | 49 | int ch = -1; /* no character available */ |
JMF | 60:2aa16fd02dfd | 50 | |
JMF | 60:2aa16fd02dfd | 51 | if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) { |
JMF | 60:2aa16fd02dfd | 52 | ch = ITM_RxBuffer; |
JMF | 60:2aa16fd02dfd | 53 | ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ |
JMF | 60:2aa16fd02dfd | 54 | } |
JMF | 60:2aa16fd02dfd | 55 | |
JMF | 60:2aa16fd02dfd | 56 | return (ch); |
JMF | 60:2aa16fd02dfd | 57 | } |
JMF | 60:2aa16fd02dfd | 58 | |
JMF | 60:2aa16fd02dfd | 59 | /** \brief ITM send string |
JMF | 60:2aa16fd02dfd | 60 | |
JMF | 60:2aa16fd02dfd | 61 | The function sends a null terminated string via the external variable \ref ITM_RxBuffer. |
JMF | 60:2aa16fd02dfd | 62 | This variable is monitored and altered by the debugger to provide input. |
JMF | 60:2aa16fd02dfd | 63 | |
JMF | 60:2aa16fd02dfd | 64 | \return Received character. |
JMF | 60:2aa16fd02dfd | 65 | \return -1 No character pending. |
JMF | 60:2aa16fd02dfd | 66 | */ |
JMF | 60:2aa16fd02dfd | 67 | int ITM_puts (char * str) { |
JMF | 60:2aa16fd02dfd | 68 | int i=0; |
JMF | 60:2aa16fd02dfd | 69 | |
JMF | 60:2aa16fd02dfd | 70 | while(str[i]) |
JMF | 60:2aa16fd02dfd | 71 | ITM_putc(str[i++]); |
JMF | 60:2aa16fd02dfd | 72 | return i; |
JMF | 60:2aa16fd02dfd | 73 | } |
JMF | 60:2aa16fd02dfd | 74 |