Serial Wire Output (SWO) viewer for tracing purposes. Tested on F401 and ST-LINK Utility as well as for F103 and Segger J-Link SWO viewer.
Dependents: WiFi_Scanner mbed_nucleo_swo DISCO-F429ZI_LCDTS_demo_richard TEST_SM_SPEED
Revision 0:0fd55660fc26, committed 2014-03-28
- Comitter:
- wim
- Date:
- Fri Mar 28 19:32:13 2014 +0000
- Child:
- 1:bae4cff278f6
- Commit message:
- First Test
Changed in this revision
| SWO.cpp | Show annotated file Show diff for this revision Revisions of this file |
| SWO.h | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/SWO.cpp Fri Mar 28 19:32:13 2014 +0000
@@ -0,0 +1,68 @@
+
+#include "SWO.h"
+
+
+/*********************************************************************
+*
+* Defines for Cortex-M debug unit
+*/
+#define ITM_STIM_U32(n) (*(volatile unsigned int*)(0xE0000000+4*n)) // Stimulus Port n Register word access
+//#define ITM_STIM_U32_0 (*(volatile unsigned int*)0xE0000000) // Stimulus Port 0 Register word access
+//#define ITM_STIM_U8_0 (*(volatile char*)0xE0000000) // Stimulus Port 0 Register byte access
+#define ITM_ENA (*(volatile unsigned int*)0xE0000E00) // Trace Enable Ports Register
+#define ITM_TCR (*(volatile unsigned int*)0xE0000E80) // Trace control register
+
+
+
+/*********************************************************************
+*
+* SWO_PrintChar()
+*
+* @brief
+* Checks if SWO is set up. If it is not, return,
+* to avoid program hangs if no debugger is connected.
+* If it is set up, print a character to the ITM_STIM register
+* in order to provide data for SWO.
+* @param c The Character to be printed.
+* @notes Additional checks for device specific registers can be added.
+*/
+void SWO_PrintChar(char c) {
+ //
+ // Check if ITM_TCR.ITMENA is set
+ //
+ if ((ITM_TCR & 1) == 0) {
+ return;
+ }
+ //
+ // Check if stimulus port is enabled
+ //
+ if ((ITM_ENA & 1) == 0) {
+ return;
+ }
+ //
+ // Wait until STIMx is ready,
+ // then send data
+ //
+// while ((ITM_STIM_U8(0) & 1) == 0);
+// ITM_STIM_U8(0) = c;
+
+ while ((ITM_STIM_U32(0) & 1) == 0);
+ ITM_STIM_U32(0) = c;
+}
+
+/*********************************************************************
+*
+* SWO_PrintString()
+*
+* @brief Print a string via SWO.
+* @param *s The string to be printed.
+*
+*/
+void SWO_PrintString(const char *s) {
+ //
+ // Print out character per character
+ //
+ while (*s) {
+ SWO_PrintChar(*s++);
+ }
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SWO.h Fri Mar 28 19:32:13 2014 +0000 @@ -0,0 +1,18 @@ +/*---------------------------------------------------------------------- +File : SWO.h +Purpose : Simple implementation for output via SWO for Cortex-M processors. + It can be used with any IDE. This sample implementation ensures that + output via SWO is enabled in order to guarantee that the application + does not hang. + +*/ +#ifndef _SWO_H +#define _SWO_H + +/** Prototypes +*/ +void SWO_PrintChar (char c); +void SWO_PrintString(const char *s); + + +#endif \ No newline at end of file
SWO viewer