amiro-blt / Target / Modules / LightRing_1-0 / Boot / lib / CMSIS / CMSIS debug support.htm @ 367c0652
History | View | Annotate | Download (9.092 KB)
1 | 69661903 | Thomas Schöpping | <html>
|
---|---|---|---|
2 | |||
3 | <head>
|
||
4 | <title>CMSIS Debug Support</title> |
||
5 | <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> |
||
6 | <meta name="GENERATOR" content="Microsoft FrontPage 6.0"> |
||
7 | <meta name="ProgId" content="FrontPage.Editor.Document"> |
||
8 | <style>
|
||
9 | <!--
|
||
10 | /*-----------------------------------------------------------
|
||
11 | Keil Software CHM Style Sheet
|
||
12 | -----------------------------------------------------------*/
|
||
13 | body { color: #000000; background-color: #FFFFFF; font-size: 75%; font-family:
|
||
14 | Verdana, Arial, 'Sans Serif' }
|
||
15 | a:link { color: #0000FF; text-decoration: underline }
|
||
16 | a:visited { color: #0000FF; text-decoration: underline }
|
||
17 | a:active { color: #FF0000; text-decoration: underline }
|
||
18 | a:hover { color: #FF0000; text-decoration: underline }
|
||
19 | h1 { font-family: Verdana; font-size: 18pt; color: #000080; font-weight: bold;
|
||
20 | text-align: Center; margin-right: 3 }
|
||
21 | h2 { font-family: Verdana; font-size: 14pt; color: #000080; font-weight: bold;
|
||
22 | background-color: #CCCCCC; margin-top: 24; margin-bottom: 3;
|
||
23 | padding: 6 }
|
||
24 | h3 { font-family: Verdana; font-size: 10pt; font-weight: bold; background-color:
|
||
25 | #CCCCCC; margin-top: 24; margin-bottom: 3; padding: 6 }
|
||
26 | pre { font-family: Courier New; font-size: 10pt; background-color: #CCFFCC;
|
||
27 | margin-left: 24; margin-right: 24 }
|
||
28 | ul { list-style-type: square; margin-top: 6pt; margin-bottom: 0 }
|
||
29 | ol { margin-top: 6pt; margin-bottom: 0 }
|
||
30 | li { clear: both; margin-bottom: 6pt }
|
||
31 | table { font-size: 100%; border-width: 0; padding: 0 }
|
||
32 | th { color: #FFFFFF; background-color: #000080; text-align: left; vertical-align:
|
||
33 | bottom; padding-right: 6pt }
|
||
34 | tr { text-align: left; vertical-align: top }
|
||
35 | td { text-align: left; vertical-align: top; padding-right: 6pt }
|
||
36 | .ToolT { font-size: 8pt; color: #808080 }
|
||
37 | .TinyT { font-size: 8pt; text-align: Center }
|
||
38 | code { color: #000000; background-color: #E0E0E0; font-family: 'Courier New', Courier;
|
||
39 | line-height: 120%; font-style: normal }
|
||
40 | /*-----------------------------------------------------------
|
||
41 | Notes
|
||
42 | -----------------------------------------------------------*/
|
||
43 | p.note { font-weight: bold; clear: both; margin-bottom: 3pt; padding-top: 6pt }
|
||
44 | /*-----------------------------------------------------------
|
||
45 | Expanding/Contracting Divisions
|
||
46 | -----------------------------------------------------------*/
|
||
47 | #expand { text-decoration: none; margin-bottom: 3pt }
|
||
48 | img.expand { border-style: none; border-width: medium }
|
||
49 | div.expand { display: none; margin-left: 9pt; margin-top: 0 }
|
||
50 | /*-----------------------------------------------------------
|
||
51 | Where List Tags
|
||
52 | -----------------------------------------------------------*/
|
||
53 | p.wh { font-weight: bold; clear: both; margin-top: 6pt; margin-bottom: 3pt }
|
||
54 | table.wh { width: 100% }
|
||
55 | td.whItem { white-space: nowrap; font-style: italic; padding-right: 6pt; padding-bottom:
|
||
56 | 6pt }
|
||
57 | td.whDesc { padding-bottom: 6pt }
|
||
58 | /*-----------------------------------------------------------
|
||
59 | Keil Table Tags
|
||
60 | -----------------------------------------------------------*/
|
||
61 | table.kt { border: 1pt solid #000000 }
|
||
62 | th.kt { white-space: nowrap; border-bottom: 1pt solid #000000; padding-left: 6pt;
|
||
63 | padding-right: 6pt; padding-top: 4pt; padding-bottom: 4pt }
|
||
64 | tr.kt { }
|
||
65 | td.kt { color: #000000; background-color: #E0E0E0; border-top: 1pt solid #A0A0A0;
|
||
66 | padding-left: 6pt; padding-right: 6pt; padding-top: 2pt;
|
||
67 | padding-bottom: 2pt }
|
||
68 | /*-----------------------------------------------------------
|
||
69 | -----------------------------------------------------------*/
|
||
70 | -->
|
||
71 | |||
72 | </style>
|
||
73 | </head>
|
||
74 | |||
75 | <body>
|
||
76 | |||
77 | <h1>CMSIS Debug Support</h1> |
||
78 | |||
79 | <hr>
|
||
80 | |||
81 | <h2>Cortex-M3 ITM Debug Access</h2> |
||
82 | <p>
|
||
83 | The Cortex-M3 incorporates the Instrumented Trace Macrocell (ITM) that provides together with |
||
84 | the Serial Viewer Output trace capabilities for the microcontroller system. The ITM has |
||
85 | 32 communication channels which are able to transmit 32 / 16 / 8 bit values; two ITM |
||
86 | communication channels are used by CMSIS to output the following information: |
||
87 | </p>
|
||
88 | <ul>
|
||
89 | <li>ITM Channel 0: used for printf-style output via the debug interface.</li> |
||
90 | <li>ITM Channel 31: is reserved for RTOS kernel awareness debugging.</li> |
||
91 | </ul>
|
||
92 | |||
93 | <h2>Debug IN / OUT functions</h2> |
||
94 | <p>CMSIS provides following debug functions:</p> |
||
95 | <ul>
|
||
96 | <li>ITM_SendChar (uses ITM channel 0)</li> |
||
97 | <li>ITM_ReceiveChar (uses global variable)</li> |
||
98 | <li>ITM_CheckChar (uses global variable)</li> |
||
99 | </ul>
|
||
100 | |||
101 | <h3>ITM_SendChar</h3> |
||
102 | <p>
|
||
103 | <strong>ITM_SendChar</strong> is used to transmit a character over ITM channel 0 from |
||
104 | the microcontroller system to the debug system. <br>
|
||
105 | Only a 8 bit value is transmitted. |
||
106 | </p>
|
||
107 | <pre>
|
||
108 | static __INLINE uint32_t ITM_SendChar (uint32_t ch) |
||
109 | { |
||
110 | /* check if debugger connected and ITM channel enabled for tracing */ |
||
111 | if ((CoreDebug->DEMCR & CoreDebug_DEMCR_TRCENA) && |
||
112 | (ITM->TCR & ITM_TCR_ITMENA) && |
||
113 | (ITM->TER & (1UL << 0)) ) |
||
114 | { |
||
115 | while (ITM->PORT[0].u32 == 0);
|
||
116 | ITM->PORT[0].u8 = (uint8_t)ch;
|
||
117 | } |
||
118 | return (ch); |
||
119 | }</pre>
|
||
120 | |||
121 | <h3>ITM_ReceiveChar</h3> |
||
122 | <p>
|
||
123 | ITM communication channel is only capable for OUT direction. For IN direction |
||
124 | a globel variable is used. A simple mechansim detects if a character is received. |
||
125 | The project to test need to be build with debug information. |
||
126 | </p>
|
||
127 | |||
128 | <p>
|
||
129 | The globale variable <strong>ITM_RxBuffer</strong> is used to transmit a 8 bit value from debug system |
||
130 | to microcontroller system. <strong>ITM_RxBuffer</strong> is 32 bit wide to enshure a proper handshake. |
||
131 | </p>
|
||
132 | <pre>
|
||
133 | extern volatile int ITM_RxBuffer; /* variable to receive characters */ |
||
134 | </pre>
|
||
135 | <p>
|
||
136 | A dedicated bit pattern is used to determin if <strong>ITM_RxBuffer</strong> is empty |
||
137 | or contains a valid value. |
||
138 | </p>
|
||
139 | <pre>
|
||
140 | #define ITM_RXBUFFER_EMPTY 0x5AA55AA5 /* value identifying ITM_RxBuffer is ready for next character */ |
||
141 | </pre>
|
||
142 | <p>
|
||
143 | <strong>ITM_ReceiveChar</strong> is used to receive a 8 bit value from the debug system. The function is nonblocking. |
||
144 | It returns the received character or '-1' if no character was available. |
||
145 | </p>
|
||
146 | <pre>
|
||
147 | static __INLINE int ITM_ReceiveChar (void) { |
||
148 | int ch = -1; /* no character available */ |
||
149 | |||
150 | if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) { |
||
151 | ch = ITM_RxBuffer; |
||
152 | ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ |
||
153 | } |
||
154 | |||
155 | return (ch); |
||
156 | } |
||
157 | </pre>
|
||
158 | |||
159 | <h3>ITM_CheckChar</h3> |
||
160 | <p>
|
||
161 | <strong>ITM_CheckChar</strong> is used to check if a character is received. |
||
162 | </p>
|
||
163 | <pre>
|
||
164 | static __INLINE int ITM_CheckChar (void) { |
||
165 | |||
166 | if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) { |
||
167 | return (0); /* no character available */ |
||
168 | } else { |
||
169 | return (1); /* character available */ |
||
170 | } |
||
171 | }</pre>
|
||
172 | |||
173 | |||
174 | <h2>ITM Debug Support in uVision</h2> |
||
175 | <p>
|
||
176 | uVision uses in a debug session the <strong>Debug (printf) Viewer</strong> window to |
||
177 | display the debug data. |
||
178 | </p>
|
||
179 | <p>Direction microcontroller system -> uVision:</p> |
||
180 | <ul>
|
||
181 | <li>
|
||
182 | Characters received via ITM communication channel 0 are written in a printf style |
||
183 | to <strong>Debug (printf) Viewer</strong> window. |
||
184 | </li>
|
||
185 | </ul>
|
||
186 | |||
187 | <p>Direction uVision -> microcontroller system:</p> |
||
188 | <ul>
|
||
189 | <li>Check if <strong>ITM_RxBuffer</strong> variable is available (only performed once).</li> |
||
190 | <li>Read character from <strong>Debug (printf) Viewer</strong> window.</li> |
||
191 | <li>If <strong>ITM_RxBuffer</strong> empty write character to <strong>ITM_RxBuffer</strong>.</li> |
||
192 | </ul>
|
||
193 | |||
194 | <p class="Note">Note</p> |
||
195 | <ul>
|
||
196 | <li><p>Current solution does not use a buffer machanism for trasmitting the characters.</p> |
||
197 | </li>
|
||
198 | </ul>
|
||
199 | |||
200 | <h2>RTX Kernel awareness in uVision</h2> |
||
201 | <p>
|
||
202 | uVision / RTX are using a simple and efficient solution for RTX Kernel awareness. |
||
203 | No format overhead is necessary.<br>
|
||
204 | uVsion debugger decodes the RTX events via the 32 / 16 / 8 bit ITM write access |
||
205 | to ITM communication channel 31. |
||
206 | </p>
|
||
207 | |||
208 | <p>Following RTX events are traced:</p> |
||
209 | <ul>
|
||
210 | <li>Task Create / Delete event
|
||
211 | <ol>
|
||
212 | <li>32 bit access. Task start address is transmitted</li> |
||
213 | <li>16 bit access. Task ID and Create/Delete flag are transmitted<br> |
||
214 | High byte holds Create/Delete flag, Low byte holds TASK ID. |
||
215 | </li>
|
||
216 | </ol>
|
||
217 | </li>
|
||
218 | <li>Task switch event
|
||
219 | <ol>
|
||
220 | <li>8 bit access. Task ID of current task is transmitted</li> |
||
221 | </ol>
|
||
222 | </li>
|
||
223 | </ul>
|
||
224 | |||
225 | <p class="Note">Note</p> |
||
226 | <ul>
|
||
227 | <li><p>Other RTOS information could be retrieved via memory read access in a polling mode manner.</p> |
||
228 | </li>
|
||
229 | </ul>
|
||
230 | |||
231 | |||
232 | <p class="MsoNormal"><span lang="EN-GB"> </span></p> |
||
233 | |||
234 | <hr>
|
||
235 | |||
236 | <p class="TinyT">Copyright ? KEIL - An ARM Company.<br> |
||
237 | All rights reserved.<br>
|
||
238 | Visit our web site at <a href="http://www.keil.com">www.keil.com</a>. |
||
239 | </p>
|
||
240 | |||
241 | </body>
|
||
242 | |||
243 | </html> |