origen_swd 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|