origen_swd 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/config/version.rb +1 -1
- data/lib/origen_swd/driver.rb +62 -32
- data/pattern/example_reg.rb +21 -2
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 32e3a4ba31f96f540948b330acce8492d086d611
|
4
|
+
data.tar.gz: da2d96d5848554de9567b75cf00f5d1d2f3e889f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d929d91c6528ad0574829e822ea82b5030b6b354699dd4e3b4c9ee32c8a1a0075d2f53cc603f07d773568bf911e3deaab8f331e74f455e296e3d75796ac30d47
|
7
|
+
data.tar.gz: 30985d2ececf9375b45fa865cc0b881c4408d6fee57d33401663c0b2f8435b66e1e5b638491128307326b539300e1bd42b94fbaa5474c19a7a62d647d35e191e
|
data/config/version.rb
CHANGED
data/lib/origen_swd/driver.rb
CHANGED
@@ -247,49 +247,51 @@ module OrigenSWD
|
|
247
247
|
# @option options [String] :overlay String for pattern label to
|
248
248
|
# facilitate pattern overlay
|
249
249
|
def shift_payload(reg_or_val, options)
|
250
|
-
|
250
|
+
options = { no_subr: false }.merge(options)
|
251
|
+
|
252
|
+
reg = to_reg(reg_or_val, options)
|
251
253
|
size = 32 # SWD only used to write to DP and AP registers of ARM Debugger (32 bits)
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
if options[:overlay_label].nil?
|
259
|
-
options[:overlay_label] = options[:overlay]
|
260
|
-
$tester.label(options[:overlay_label]) if options.key?(:overlay)
|
261
|
-
end
|
254
|
+
|
255
|
+
# tester does not support direct labels, so can't do
|
256
|
+
if options[:no_subr] && !$tester.respond_to?('label')
|
257
|
+
cc 'This tester does not support use of labels, cannot do no_subr option as requested'
|
258
|
+
cc ' going with subroutine overlay instead'
|
259
|
+
options[:no_subr] = false
|
262
260
|
end
|
261
|
+
|
262
|
+
cc options[:arm_debug_comment] if options.key?(:arm_debug_comment)
|
263
263
|
swd_clk.drive(1)
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
264
|
+
|
265
|
+
reg_overlay = extract_reg_overlay(reg)
|
266
|
+
if reg_overlay && !options[:no_subr] && !Origen.mode.simulation?
|
267
|
+
Origen.tester.call_subroutine(reg[0].overlay_str)
|
268
|
+
else
|
269
|
+
last_overlay_label = ''
|
270
|
+
size.times do |i|
|
271
|
+
swd_dio.dont_care
|
272
|
+
if options[:read]
|
273
|
+
if reg[i].is_to_be_stored?
|
269
274
|
Origen.tester.store_next_cycle(swd_dio)
|
270
275
|
swd_dio.dont_care if Origen.tester.j750?
|
271
|
-
elsif
|
272
|
-
|
273
|
-
elsif reg_or_val[i].is_to_be_read?
|
274
|
-
swd_dio.assert(reg_or_val[i] ? reg_or_val[i] : 0)
|
275
|
-
elsif options[:compare_data]
|
276
|
-
swd_dio.assert(reg_or_val[i] ? reg_or_val[i] : 0)
|
277
|
-
else
|
278
|
-
swd_dio.dont_care
|
276
|
+
elsif reg[i].is_to_be_read?
|
277
|
+
swd_dio.assert(reg[i] ? reg[i] : 0)
|
279
278
|
end
|
280
279
|
else
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
280
|
+
swd_dio.drive(reg_or_val[i])
|
281
|
+
end
|
282
|
+
|
283
|
+
if reg[i].has_overlay? && !Origen.mode.simulation? && tester.respond_to?('label')
|
284
|
+
if reg[i].overlay_str != last_overlay_label
|
285
|
+
Origen.tester.label(reg[i].overlay_str)
|
286
|
+
last_overlay_label = reg[i].overlay_str
|
285
287
|
end
|
288
|
+
tester.cycle dont_compress: true
|
289
|
+
else
|
290
|
+
tester.cycle
|
286
291
|
end
|
287
|
-
$tester.cycle
|
288
|
-
else
|
289
|
-
$tester.label("// SWD Data Pin #{i}") if options.key?(:overlay) && !Origen.mode.simulation?
|
290
|
-
swd_dio.drive!(reg_or_val[i])
|
291
292
|
end
|
292
293
|
end
|
294
|
+
|
293
295
|
# Clear read and similar flags to reflect that the request has just
|
294
296
|
# been fulfilled
|
295
297
|
reg_or_val.clear_flags if reg_or_val.respond_to?(:clear_flags)
|
@@ -317,5 +319,33 @@ module OrigenSWD
|
|
317
319
|
def swd_dio
|
318
320
|
owner.pin(:swd_dio)
|
319
321
|
end
|
322
|
+
|
323
|
+
# Converts reg_or_val to reg
|
324
|
+
def to_reg(reg_or_val, options)
|
325
|
+
if reg_or_val.respond_to?(:data)
|
326
|
+
reg = reg_or_val.dup
|
327
|
+
else
|
328
|
+
reg = Reg.dummy(32)
|
329
|
+
if reg_or_val.nil?
|
330
|
+
reg.read(options[:compare_data]) if options[:compare_data]
|
331
|
+
else
|
332
|
+
reg.write(reg_or_val)
|
333
|
+
reg.read if options[:read]
|
334
|
+
end
|
335
|
+
end
|
336
|
+
reg.overlay(options[:arm_debug_overlay]) if options.key?(:arm_debug_overlay)
|
337
|
+
reg.overlay(options[:overlay_label]) if options.key?(:overlay)
|
338
|
+
reg
|
339
|
+
end
|
340
|
+
|
341
|
+
# Return overlay sting if same for all bits, otherwise return nil
|
342
|
+
def extract_reg_overlay(reg)
|
343
|
+
ovl = reg[0].overlay_str
|
344
|
+
reg.size.times do |i|
|
345
|
+
return nil unless reg[i].has_overlay?
|
346
|
+
return nil if ovl != reg[i].overlay_str || ovl.nil?
|
347
|
+
end
|
348
|
+
ovl
|
349
|
+
end
|
320
350
|
end
|
321
351
|
end
|
data/pattern/example_reg.rb
CHANGED
@@ -11,14 +11,21 @@ Pattern.create do
|
|
11
11
|
reg.write(0xFF01FF01)
|
12
12
|
swd.write(0, reg, 0xFF01FF01)
|
13
13
|
|
14
|
-
test "Write to DR register with overlay"
|
14
|
+
test "Write to DR register with overlay, no subroutine"
|
15
15
|
reg.overlay("write_overlay")
|
16
|
+
swd.write(0, reg, 0xFF01FF01, no_subr: true)
|
17
|
+
reg.overlay(nil)
|
18
|
+
|
19
|
+
test "Write to DR register with overlay, use subroutine if available"
|
20
|
+
reg.overlay("write_overlay_subr")
|
16
21
|
swd.write(0, reg, 0xFF01FF01)
|
22
|
+
reg.overlay(nil)
|
17
23
|
|
18
24
|
test "Write to DR register with single bit overlay"
|
19
25
|
reg.overlay(nil)
|
20
|
-
reg.bit(:bit).overlay("
|
26
|
+
reg.bit(:bit).overlay("bit_write_overlay")
|
21
27
|
swd.write(0, reg, 0xFF01FF01)
|
28
|
+
reg.overlay(nil)
|
22
29
|
|
23
30
|
|
24
31
|
test "Read full DR register"
|
@@ -26,6 +33,18 @@ Pattern.create do
|
|
26
33
|
reg.read
|
27
34
|
swd.read(0, reg)
|
28
35
|
|
36
|
+
test "Full register (32 bits) read with overlay, no subroutine"
|
37
|
+
reg.overlay('read_overlay')
|
38
|
+
reg.read
|
39
|
+
swd.read(0, reg, no_subr: true)
|
40
|
+
reg.overlay(nil)
|
41
|
+
|
42
|
+
test "Full register (32 bits) read with overlay, use subroutine if available"
|
43
|
+
reg.overlay('read_overlay_subr')
|
44
|
+
reg.read
|
45
|
+
swd.read(0, reg)
|
46
|
+
reg.overlay(nil)
|
47
|
+
|
29
48
|
test "Read single bit out of DR register"
|
30
49
|
reg.bit(:bit).read
|
31
50
|
swd.read(0, reg)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: origen_swd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ronnie Lajaunie
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-05-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: origen
|
@@ -64,7 +64,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
64
64
|
version: 1.8.11
|
65
65
|
requirements: []
|
66
66
|
rubyforge_project:
|
67
|
-
rubygems_version: 2.
|
67
|
+
rubygems_version: 2.6.7
|
68
68
|
signing_key:
|
69
69
|
specification_version: 4
|
70
70
|
summary: Driver for single-wire-debug interface.
|