|
| 1 | +# The following are ARM CoreSight blocks but the Silicon Vendors are free to chose |
| 2 | +# alternate base addresses. Check with your vendor documentation |
| 3 | +set language c |
| 4 | +set $ITM_BASE = 0xE0000000 |
| 5 | +set $DWT_BASE = 0xE0001000 |
| 6 | +set $SCS_BASE = 0xE000E000 |
| 7 | +set $SCB_BASE = $SCS_BASE + 0xD00 |
| 8 | +set $DCB_BASE = $SCB_BASE + 0xF0 |
| 9 | +set $TPI_BASE = 0xE0040000 |
| 10 | +set language auto |
| 11 | + |
1 | 12 | #
|
2 | 13 | # Help needed: There are many useful functions here but most of them use hardcoded addresses
|
3 | 14 | # that may not be the same for all devices. Wish we can port all these functions to something
|
4 | 15 | # more usable (modifiable). In the meantime we are going to use the function defined in gdb-swo.Initializes
|
5 | 16 | #
|
6 | 17 | define EnableITMAccess
|
7 | 18 | set language c
|
8 |
| - set *0xE000EDFC |= 0x1000000 |
9 |
| - set *0xE0000FB0 = 0xC5ACCE55 |
| 19 | + set *($DCB_BASE + 0xC) |= 0x1000000 |
| 20 | + set *($ITM_BASE + 0xFB0) = 0xC5ACCE55 |
10 | 21 | set language auto
|
11 | 22 | end
|
12 | 23 |
|
13 | 24 | define BaseSWOSetup
|
14 | 25 | set language c
|
15 |
| - set *0xE0040304 = 0x100 |
16 |
| - set *0xE00400F0 = 2 |
17 |
| - set *0xE0040010 = $arg0 |
18 |
| - set *0xE0001000 &= ~(0x8000) |
19 |
| - set *0xE0001000 |= 0xBFF |
| 26 | + |
| 27 | + # NRZ is the default format |
| 28 | + set $format = 2 |
| 29 | + if $argc > 1 |
| 30 | + # format specified explicitly |
| 31 | + set $format = $arg1 |
| 32 | + end |
| 33 | + |
| 34 | + set *($TPI_BASE + 0x304) = 0x100 |
| 35 | + set *($TPI_BASE + 0x0F0) = $format |
| 36 | + set *($TPI_BASE + 0x010) = $arg0 |
| 37 | + set *($DWT_BASE) &= ~(0x8000) |
| 38 | + set *($DWT_BASE) |= 0xBFF |
20 | 39 | set language auto
|
21 | 40 | end
|
22 | 41 |
|
23 | 42 | define SetITMTimestampFrequency
|
24 | 43 | set language c
|
25 |
| - set *0xE0000E80 &= ~(0x3 << 10) |
26 |
| - set *0xE0000E80 |= ($arg0 << 10) |
| 44 | + set *($ITM_BASE + 0xE80) &= ~(0x3 << 10) |
| 45 | + set *($ITM_BASE + 0xE80) |= ($arg0 << 10) |
27 | 46 | set language auto
|
28 | 47 | end
|
29 | 48 |
|
30 | 49 | define SetITMTimestampPrescale
|
31 | 50 | set language c
|
32 |
| - set *0xE0000E80 &= ~(0x3 << 8) |
33 |
| - set *0xE0000E80 |= ($arg0 << 8) |
| 51 | + set *($ITM_BASE + 0xE80) &= ~(0x3 << 8) |
| 52 | + set *($ITM_BASE + 0xE80) |= ($arg0 << 8) |
34 | 53 | set language auto
|
35 | 54 | end
|
36 | 55 |
|
37 | 56 | define EnableITMPorts
|
38 | 57 | set language c
|
39 |
| - set *0xE0000E00 |= $arg0 |
| 58 | + set *($ITM_BASE + 0xE00) |= $arg0 |
40 | 59 | set language auto
|
41 | 60 | end
|
42 | 61 |
|
43 | 62 | define DisableITMPorts
|
44 | 63 | set language c
|
45 |
| - set *0xE0000E00 &= ~($arg0) |
| 64 | + set *($ITM_BASE + 0xE00) &= ~($arg0) |
46 | 65 | set language auto
|
47 | 66 | end
|
48 | 67 |
|
49 | 68 | define SetITMId
|
50 | 69 | set language c
|
51 |
| - set *0xE0000E80 &= ~(0x7F << 16) |
52 |
| - set *0xE0000E80 |= ($arg0 << 16) |
| 70 | + set *($ITM_BASE + 0xE80) &= ~(0x7F << 16) |
| 71 | + set *($ITM_BASE + 0xE80) |= ($arg0 << 16) |
53 | 72 | set language auto
|
54 | 73 | end
|
55 | 74 |
|
56 | 75 | define ITMGlobalEnable
|
57 | 76 | set language c
|
58 |
| - set $busy = ((*0xE0000E80 & 0x800000)) |
| 77 | + set $busy = ((*($ITM_BASE + 0xE80) & 0x800000)) |
59 | 78 | while ($busy)
|
60 |
| - set $busy = ((*0xE0000E80 & 0x800000)) |
| 79 | + set $busy = ((*($ITM_BASE + 0xE80) & 0x800000)) |
61 | 80 | end
|
62 | 81 |
|
63 |
| - set *0xE0000E80 |= 0x1 |
| 82 | + set *($ITM_BASE + 0xE80) |= 0x1 |
64 | 83 |
|
65 |
| - set $busy = ((*0xE0000E80 & 0x800000)) |
| 84 | + set $busy = ((*($ITM_BASE + 0xE80) & 0x800000)) |
66 | 85 | while ($busy)
|
67 |
| - set $busy = ((*0xE0000E80 & 0x800000)) |
| 86 | + set $busy = ((*($ITM_BASE + 0xE80) & 0x800000)) |
68 | 87 | end
|
69 | 88 | set language auto
|
70 | 89 | end
|
71 | 90 |
|
72 | 91 | define ITMGlobalDisable
|
73 | 92 | set language c
|
74 |
| - set $busy = ((*0xE0000E80 & 0x800000)) |
| 93 | + set $busy = ((*($ITM_BASE + 0xE80) & 0x800000)) |
75 | 94 | while ($busy)
|
76 |
| - set $busy = ((*0xE0000E80 & 0x800000)) |
| 95 | + set $busy = ((*($ITM_BASE + 0xE80) & 0x800000)) |
77 | 96 | end
|
78 | 97 |
|
79 |
| - set *0xE0000E80 &= ~(0x1) |
| 98 | + set *($ITM_BASE + 0xE80) &= ~(0x1) |
80 | 99 |
|
81 |
| - set $busy = ((*0xE0000E80 & 0x800000)) |
| 100 | + set $busy = ((*($ITM_BASE + 0xE80) & 0x800000)) |
82 | 101 | while ($busy)
|
83 |
| - set $busy = ((*0xE0000E80 & 0x800000)) |
| 102 | + set $busy = ((*($ITM_BASE + 0xE80) & 0x800000)) |
84 | 103 | end
|
85 | 104 | set language auto
|
86 | 105 | end
|
87 | 106 |
|
88 | 107 | define ITMTimestampEnable
|
89 | 108 | set language c
|
90 |
| - set *0xE0000E80 |= 0x302 |
| 109 | + set *($ITM_BASE + 0xE80) |= 0x302 |
91 | 110 | set language auto
|
92 | 111 | end
|
93 | 112 |
|
94 | 113 | define ITMTimestampDisable
|
95 | 114 | set language c
|
96 |
| - set *0xE0000E80 &= ~(0x2) |
| 115 | + set *($ITM_BASE + 0xE80) &= ~(0x2) |
97 | 116 | set language auto
|
98 | 117 | end
|
99 | 118 |
|
100 | 119 | define ITMSyncEnable
|
101 | 120 | set language c
|
102 |
| - set *0xE0000E80 |= 0x4 |
| 121 | + set *($ITM_BASE + 0xE80) |= 0x4 |
103 | 122 | set language auto
|
104 | 123 | end
|
105 | 124 |
|
106 | 125 | define ITMSyncDisable
|
107 | 126 | set language c
|
108 |
| - set *0xE0000E80 &= ~(0x4) |
| 127 | + set *($ITM_BASE + 0xE80) &= ~(0x4) |
109 | 128 | set language auto
|
110 | 129 | end
|
111 | 130 |
|
112 | 131 | define ITMDWTTransferEnable
|
113 | 132 | set language c
|
114 |
| - set *0xE0000E80 |= 0x8 |
| 133 | + set *($ITM_BASE + 0xE80) |= 0x8 |
115 | 134 | set language auto
|
116 | 135 | end
|
117 | 136 |
|
118 | 137 | define ITMDWTTransferDisable
|
119 | 138 | set language c
|
120 |
| - set *0xE0000E80 &= (~0x8) |
| 139 | + set *($ITM_BASE + 0xE80) &= (~0x8) |
121 | 140 | set language auto
|
122 | 141 | end
|
123 | 142 |
|
124 | 143 | define EnableDWTSync
|
125 | 144 | set language c
|
126 |
| - set *0xE0001000 |= 0x800 |
| 145 | + set *($DWT_BASE) |= 0x800 |
127 | 146 | set language auto
|
128 | 147 | end
|
129 | 148 |
|
130 | 149 | define DisableDWTSync
|
131 | 150 | set language c
|
132 |
| - set *0xE0001000 &= ~(0x800) |
| 151 | + set *($DWT_BASE) &= ~(0x800) |
133 | 152 | set language auto
|
134 | 153 | end
|
135 | 154 |
|
136 | 155 | define EnablePCSample
|
137 | 156 | set language c
|
138 |
| - set *0xE0001004 = 0x0 |
139 |
| - set *0xE0001000 |= 0x1201 |
| 157 | + set *($DWT_BASE + 0x004) = 0x0 |
| 158 | + set *($DWT_BASE) |= 0x1201 |
140 | 159 | set language auto
|
141 | 160 | end
|
142 | 161 |
|
143 | 162 | define DisablePCSample
|
144 | 163 | set language c
|
145 |
| - set *0xE0001000 &= ~(0x1000) |
| 164 | + set *($DWT_BASE) &= ~(0x1000) |
146 | 165 | set language auto
|
147 | 166 | end
|
148 | 167 |
|
149 | 168 | define EnableCycleCountEvent
|
150 | 169 | set language c
|
151 |
| - set *0xE0001000 |= 0x400000 |
| 170 | + set *($DWT_BASE) |= 0x400000 |
152 | 171 | set language auto
|
153 | 172 | end
|
154 | 173 |
|
155 | 174 | define DisableCycleCountEvent
|
156 | 175 | set language c
|
157 |
| - set *0xE0001000 &= ~(0x400000) |
| 176 | + set *($DWT_BASE) &= ~(0x400000) |
158 | 177 | set language auto
|
159 | 178 | end
|
160 | 179 |
|
161 | 180 | define EnableFoldedEvent
|
162 | 181 | set language c
|
163 |
| - set *0xE0001000 |= 0x200000 |
| 182 | + set *($DWT_BASE) |= 0x200000 |
164 | 183 | set language auto
|
165 | 184 | end
|
166 | 185 |
|
167 | 186 | define DisableFoldedEvent
|
168 | 187 | set language c
|
169 |
| - set *0xE0001000 &= ~(0x200000) |
| 188 | + set *($DWT_BASE) &= ~(0x200000) |
170 | 189 | set language auto
|
171 | 190 | end
|
172 | 191 |
|
173 | 192 | define EnableLSUCountEvent
|
174 | 193 | set language c
|
175 |
| - set *0xE0001000 |= 0x100000 |
| 194 | + set *($DWT_BASE) |= 0x100000 |
176 | 195 | set language auto
|
177 | 196 | end
|
178 | 197 |
|
179 | 198 | define DisableLSUCountEvent
|
180 | 199 | set language c
|
181 |
| - set *0xE0001000 &= ~(0x100000) |
| 200 | + set *($DWT_BASE) &= ~(0x100000) |
182 | 201 | set language auto
|
183 | 202 | end
|
184 | 203 |
|
185 | 204 | define EnableSleepCountEvent
|
186 | 205 | set language c
|
187 |
| - set *0xE0001000 |= 0x80000 |
| 206 | + set *($DWT_BASE) |= 0x80000 |
188 | 207 | set language auto
|
189 | 208 | end
|
190 | 209 |
|
191 | 210 | define DisableSleepCountEvent
|
192 | 211 | set language c
|
193 |
| - set *0xE0001000 &= ~(0x80000) |
| 212 | + set *($DWT_BASE) &= ~(0x80000) |
194 | 213 | set language auto
|
195 | 214 | end
|
196 | 215 |
|
197 | 216 | define EnableInterruptOverheadEvent
|
198 | 217 | set language c
|
199 |
| - set *0xE0001000 |= 0x40000 |
| 218 | + set *($DWT_BASE) |= 0x40000 |
200 | 219 | set language auto
|
201 | 220 | end
|
202 | 221 |
|
203 | 222 | define DisableInterruptOverheadEvent
|
204 | 223 | set language c
|
205 |
| - set *0xE0001000 &= ~(0x40000) |
| 224 | + set *($DWT_BASE) &= ~(0x40000) |
206 | 225 | set language auto
|
207 | 226 | end
|
208 | 227 |
|
209 | 228 | define EnableCPICountEvent
|
210 | 229 | set language c
|
211 |
| - set *0xE0001000 |= 0x20000 |
| 230 | + set *($DWT_BASE) |= 0x20000 |
212 | 231 | set language auto
|
213 | 232 | end
|
214 | 233 |
|
215 | 234 | define DisableCPICountEvent
|
216 | 235 | set language c
|
217 |
| - set *0xE0001000 &= ~(0x20000) |
| 236 | + set *($DWT_BASE) &= ~(0x20000) |
218 | 237 | set language auto
|
219 | 238 | end
|
220 | 239 |
|
221 | 240 | define SoftwareReset
|
222 | 241 | set language c
|
| 242 | + |
| 243 | + set $halt = 0 |
| 244 | + |
| 245 | + if $argc |
| 246 | + set $halt = $arg0 |
| 247 | + end |
| 248 | + |
| 249 | + if $halt |
| 250 | + set $demcr = *($DCB_BASE + 0xC) |
| 251 | + set *($DCB_BASE + 0xC) |= 1 |
| 252 | + end |
| 253 | + |
223 | 254 | set *0xE000ED0C = 0x05FA0004
|
224 | 255 | set $busy = (*0xE000ED0C & 0x4)
|
225 | 256 | while ($busy)
|
226 | 257 | set $busy = (*0xE000ED0C & 0x4)
|
227 | 258 | end
|
| 259 | + |
| 260 | + if $halt |
| 261 | + # restore DEMCR value |
| 262 | + set *($DCB_BASE + 0xC) = $demcr |
| 263 | + end |
| 264 | + |
228 | 265 | set language auto
|
229 | 266 | end
|
0 commit comments