Contiki-NG
segger-rtt-conf.h
1 /*********************************************************************
2 * SEGGER MICROCONTROLLER GmbH & Co. KG *
3 * Solutions for real time microcontroller applications *
4 **********************************************************************
5 * *
6 * (c) 2014 - 2015 SEGGER Microcontroller GmbH & Co. KG *
7 * *
8 * www.segger.com Support: support@segger.com *
9 * *
10 **********************************************************************
11 ----------------------------------------------------------------------
12 File : SEGGER_RTT_Conf.h
13 Purpose : Implementation of SEGGER real-time transfer (RTT) which
14  allows real-time communication on targets which support
15  debugger memory accesses while the CPU is running.
16 ---------------------------END-OF-HEADER------------------------------
17 */
18 
19 #ifndef SEGGER_RTT_CONF_H
20 #define SEGGER_RTT_CONF_H
21 
22 #ifdef __ICCARM__
23  #include <intrinsics.h>
24 #endif
25 
26 /*********************************************************************
27 *
28 * Defines, configurable
29 *
30 **********************************************************************
31 */
32 
33 #define SEGGER_RTT_MAX_NUM_UP_BUFFERS (2) // Max. number of up-buffers (T->H) available on this target (Default: 2)
34 #define SEGGER_RTT_MAX_NUM_DOWN_BUFFERS (2) // Max. number of down-buffers (H->T) available on this target (Default: 2)
35 
36 #define BUFFER_SIZE_UP (1024) // Size of the buffer for terminal output of target, up to host (Default: 1k)
37 #define BUFFER_SIZE_DOWN (16) // Size of the buffer for terminal input to target from host (Usually keyboard input) (Default: 16)
38 
39 #define SEGGER_RTT_PRINTF_BUFFER_SIZE (64u) // Size of buffer for RTT printf to bulk-send chars via RTT (Default: 64)
40 
41 #define SEGGER_RTT_MODE_DEFAULT SEGGER_RTT_MODE_NO_BLOCK_SKIP // Mode for pre-initialized terminal channel (buffer 0)
42 
43 //
44 // Target is not allowed to perform other RTT operations while string still has not been stored completely.
45 // Otherwise we would probably end up with a mixed string in the buffer.
46 // If using RTT from within interrupts, multiple tasks or multi processors, define the SEGGER_RTT_LOCK() and SEGGER_RTT_UNLOCK() function here.
47 //
48 /*********************************************************************
49 *
50 * RTT lock configuration for SEGGER Embedded Studio,
51 * Rowley CrossStudio and GCC
52 */
53 #if (defined __SES_ARM) || (defined __CROSSWORKS_ARM) || (defined __GNUC__)
54  #ifdef __ARM_ARCH_6M__
55  #define SEGGER_RTT_LOCK(SavedState) { \
56  asm volatile ("mrs %0, primask \n\t" \
57  "mov r1, $1 \n\t" \
58  "msr primask, r1 \n\t" \
59  : "=r" (SavedState) \
60  : \
61  : "r1" \
62  ); \
63  }
64 
65  #define SEGGER_RTT_UNLOCK(SavedState) { \
66  asm volatile ("msr primask, %0 \n\t" \
67  : \
68  : "r" (SavedState) \
69  : \
70  ); \
71  }
72 
73  #elif (defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__))
74  #define SEGGER_RTT_LOCK(SavedState) { \
75  asm volatile ("mrs %0, basepri \n\t" \
76  "mov r1, $128 \n\t" \
77  "msr basepri, r1 \n\t" \
78  : "=r" (SavedState) \
79  : \
80  : "r1" \
81  ); \
82  }
83  #define SEGGER_RTT_UNLOCK(SavedState) { \
84  asm volatile ("msr basepri, %0 \n\t" \
85  : \
86  : "r" (SavedState) \
87  : \
88  ); \
89  }
90  #else
91  #define SEGGER_RTT_LOCK(SavedState) (void)(SavedState)
92  #define SEGGER_RTT_UNLOCK(SavedState) (void)(SavedState)
93  #endif
94 #endif
95 
96 /*********************************************************************
97 *
98 * RTT lock configuration for IAR EWARM
99 */
100 #ifdef __ICCARM__
101  #if (defined (__ARM7M__) && (__CORE__ == __ARM7M__))
102  #define SEGGER_RTT_LOCK(SavedState) { \
103  SavedState = __get_PRIMASK(); \
104  __set_PRIMASK(1); \
105  }
106 
107  #define SEGGER_RTT_UNLOCK(SavedState) { \
108  __set_PRIMASK(SavedState); \
109  }
110  #elif (defined (__ARM7EM__) && (__CORE__ == __ARM7EM__))
111  #define SEGGER_RTT_LOCK(SavedState) { \
112  SavedState = __get_BASEPRI(); \
113  __set_BASEPRI(128); \
114  }
115 
116  #define SEGGER_RTT_UNLOCK(SavedState) { \
117  __set_BASEPRI(SavedState); \
118  }
119  #endif
120 #endif
121 
122 /*********************************************************************
123 *
124 * RTT lock configuration fallback
125 */
126 #ifndef SEGGER_RTT_LOCK
127  #define SEGGER_RTT_LOCK(SavedState) (void)(SavedState)
128 #endif
129 
130 #ifndef SEGGER_RTT_UNLOCK
131  #define SEGGER_RTT_UNLOCK(SavedState) (void)(SavedState)
132 #endif
133 
134 #endif
135 /*************************** End of file ****************************/