![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
FRDM-K64F, Avnet M14A2A, Grove Shield, to create smart home system. In use with AT&Ts M2x & Flow.
Dependencies: mbed FXOS8700CQ MODSERIAL
itm_output.cpp@85:0cf65ceb4492, 2019-04-29 (annotated)
- Committer:
- jwhammel
- Date:
- Mon Apr 29 04:24:38 2019 +0000
- Revision:
- 85:0cf65ceb4492
- Parent:
- 68:6e311c747045
We have added an alarm trigger that gets sent to AT&T Flow.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
fkellermavnet | 68:6e311c747045 | 1 | /* =================================================================== |
fkellermavnet | 68:6e311c747045 | 2 | Copyright © 2016, AVNET Inc. |
fkellermavnet | 68:6e311c747045 | 3 | |
fkellermavnet | 68:6e311c747045 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); |
fkellermavnet | 68:6e311c747045 | 5 | you may not use this file except in compliance with the License. |
fkellermavnet | 68:6e311c747045 | 6 | You may obtain a copy of the License at |
fkellermavnet | 68:6e311c747045 | 7 | |
fkellermavnet | 68:6e311c747045 | 8 | http://www.apache.org/licenses/LICENSE-2.0 |
fkellermavnet | 68:6e311c747045 | 9 | |
fkellermavnet | 68:6e311c747045 | 10 | Unless required by applicable law or agreed to in writing, |
fkellermavnet | 68:6e311c747045 | 11 | software distributed under the License is distributed on an |
fkellermavnet | 68:6e311c747045 | 12 | "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, |
fkellermavnet | 68:6e311c747045 | 13 | either express or implied. See the License for the specific |
fkellermavnet | 68:6e311c747045 | 14 | language governing permissions and limitations under the License. |
fkellermavnet | 68:6e311c747045 | 15 | |
fkellermavnet | 68:6e311c747045 | 16 | ======================================================================== */ |
fkellermavnet | 68:6e311c747045 | 17 | |
JMF | 60:2aa16fd02dfd | 18 | //Used for ULINK output only |
JMF | 60:2aa16fd02dfd | 19 | // |
JMF | 60:2aa16fd02dfd | 20 | |
JMF | 60:2aa16fd02dfd | 21 | /* ITM registers */ |
JMF | 60:2aa16fd02dfd | 22 | #define ITM_PORT0_U8 (*((volatile unsigned int *)0xE0000000)) |
JMF | 60:2aa16fd02dfd | 23 | #define ITM_PORT0_U32 (*((volatile unsigned long *)0xE0000000)) |
JMF | 60:2aa16fd02dfd | 24 | #define ITM_TER (*((volatile unsigned long *)0xE0000E00)) |
JMF | 60:2aa16fd02dfd | 25 | #define ITM_TCR (*((volatile unsigned long *)0xE0000E80)) |
JMF | 60:2aa16fd02dfd | 26 | |
JMF | 60:2aa16fd02dfd | 27 | #define ITM_TCR_ITMENA_Msk (1UL << 0) |
JMF | 60:2aa16fd02dfd | 28 | |
JMF | 60:2aa16fd02dfd | 29 | /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ |
JMF | 60:2aa16fd02dfd | 30 | #define ITM_RXBUFFER_EMPTY 0x5AA55AA5 |
JMF | 60:2aa16fd02dfd | 31 | |
JMF | 60:2aa16fd02dfd | 32 | /*!< Variable to receive characters. */ |
JMF | 60:2aa16fd02dfd | 33 | extern |
JMF | 60:2aa16fd02dfd | 34 | volatile int ITM_RxBuffer; |
JMF | 60:2aa16fd02dfd | 35 | volatile int ITM_RxBuffer = ITM_RXBUFFER_EMPTY; |
JMF | 60:2aa16fd02dfd | 36 | |
JMF | 60:2aa16fd02dfd | 37 | /** \brief ITM Send Character |
JMF | 60:2aa16fd02dfd | 38 | |
JMF | 60:2aa16fd02dfd | 39 | The function transmits a character via the ITM channel 0, and |
JMF | 60:2aa16fd02dfd | 40 | \li Just returns when no debugger is connected that has booked the output. |
JMF | 60:2aa16fd02dfd | 41 | \li Is blocking when a debugger is connected, but the previous character |
JMF | 60:2aa16fd02dfd | 42 | sent has not been transmitted. |
JMF | 60:2aa16fd02dfd | 43 | |
JMF | 60:2aa16fd02dfd | 44 | \param [in] ch Character to transmit. |
JMF | 60:2aa16fd02dfd | 45 | |
JMF | 60:2aa16fd02dfd | 46 | \returns Character to transmit. |
JMF | 60:2aa16fd02dfd | 47 | */ |
JMF | 60:2aa16fd02dfd | 48 | int ITM_putc (int ch) { |
JMF | 60:2aa16fd02dfd | 49 | if ((ITM_TCR & ITM_TCR_ITMENA_Msk) && /* ITM enabled */ |
JMF | 60:2aa16fd02dfd | 50 | (ITM_TER & (1UL << 0) )) { /* ITM Port #0 enabled */ |
JMF | 60:2aa16fd02dfd | 51 | while (ITM_PORT0_U32 == 0); |
JMF | 60:2aa16fd02dfd | 52 | ITM_PORT0_U8 = (int)ch; |
JMF | 60:2aa16fd02dfd | 53 | } |
JMF | 60:2aa16fd02dfd | 54 | return (ch); |
JMF | 60:2aa16fd02dfd | 55 | } |
JMF | 60:2aa16fd02dfd | 56 | |
JMF | 60:2aa16fd02dfd | 57 | /** \brief ITM Receive Character |
JMF | 60:2aa16fd02dfd | 58 | |
JMF | 60:2aa16fd02dfd | 59 | The function inputs a character via the external variable \ref ITM_RxBuffer. |
JMF | 60:2aa16fd02dfd | 60 | This variable is monitored and altered by the debugger to provide input. |
JMF | 60:2aa16fd02dfd | 61 | |
JMF | 60:2aa16fd02dfd | 62 | \return Received character. |
JMF | 60:2aa16fd02dfd | 63 | \return -1 No character pending. |
JMF | 60:2aa16fd02dfd | 64 | */ |
JMF | 60:2aa16fd02dfd | 65 | int ITM_getc (void) { |
JMF | 60:2aa16fd02dfd | 66 | int ch = -1; /* no character available */ |
JMF | 60:2aa16fd02dfd | 67 | |
JMF | 60:2aa16fd02dfd | 68 | if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) { |
JMF | 60:2aa16fd02dfd | 69 | ch = ITM_RxBuffer; |
JMF | 60:2aa16fd02dfd | 70 | ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ |
JMF | 60:2aa16fd02dfd | 71 | } |
JMF | 60:2aa16fd02dfd | 72 | |
JMF | 60:2aa16fd02dfd | 73 | return (ch); |
JMF | 60:2aa16fd02dfd | 74 | } |
JMF | 60:2aa16fd02dfd | 75 | |
JMF | 60:2aa16fd02dfd | 76 | /** \brief ITM send string |
JMF | 60:2aa16fd02dfd | 77 | |
JMF | 60:2aa16fd02dfd | 78 | The function sends a null terminated string via the external variable \ref ITM_RxBuffer. |
JMF | 60:2aa16fd02dfd | 79 | This variable is monitored and altered by the debugger to provide input. |
JMF | 60:2aa16fd02dfd | 80 | |
JMF | 60:2aa16fd02dfd | 81 | \return Received character. |
JMF | 60:2aa16fd02dfd | 82 | \return -1 No character pending. |
JMF | 60:2aa16fd02dfd | 83 | */ |
JMF | 60:2aa16fd02dfd | 84 | int ITM_puts (char * str) { |
JMF | 60:2aa16fd02dfd | 85 | int i=0; |
JMF | 60:2aa16fd02dfd | 86 | |
JMF | 60:2aa16fd02dfd | 87 | while(str[i]) |
JMF | 60:2aa16fd02dfd | 88 | ITM_putc(str[i++]); |
JMF | 60:2aa16fd02dfd | 89 | return i; |
JMF | 60:2aa16fd02dfd | 90 | } |
JMF | 60:2aa16fd02dfd | 91 |