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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c8c309c479f7909b8266f9e642dbbe614b0ef8ed
4
- data.tar.gz: 0623f5d41b8a0ae7cb9fa527ecbdf1fbdf940ef2
3
+ metadata.gz: 32e3a4ba31f96f540948b330acce8492d086d611
4
+ data.tar.gz: da2d96d5848554de9567b75cf00f5d1d2f3e889f
5
5
  SHA512:
6
- metadata.gz: 9b52f1c3ea5db823849cc1afb0dbea312a7aab30d41a389a101215059b82e4318346395e3443b1aa0557c900ab55705b1d2c4eda7f11721de355a2630c9d503a
7
- data.tar.gz: f2cc61effbb85769c07d915ca27c44befe1664c86f362e8e8faabd2e417604edfe9e2a6da04b50a2efeb39713b7ea307eec948aef98f6c7285eb3205508013c1
6
+ metadata.gz: d929d91c6528ad0574829e822ea82b5030b6b354699dd4e3b4c9ee32c8a1a0075d2f53cc603f07d773568bf911e3deaab8f331e74f455e296e3d75796ac30d47
7
+ data.tar.gz: 30985d2ececf9375b45fa865cc0b881c4408d6fee57d33401663c0b2f8435b66e1e5b638491128307326b539300e1bd42b94fbaa5474c19a7a62d647d35e191e
@@ -1,6 +1,6 @@
1
1
  module OrigenSWD
2
2
  MAJOR = 1
3
- MINOR = 0
3
+ MINOR = 1
4
4
  BUGFIX = 0
5
5
  DEV = nil
6
6
 
@@ -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
- cc options[:arm_debug_comment] if options.key?(:arm_debug_comment)
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
- contains_bits = (contains_bits?(reg_or_val) || is_a_bit?(reg_or_val))
253
- if options.key?(:arm_debug_overlay)
254
- options[:overlay] = options[:arm_debug_overlay]
255
- options[:overlay_label] = options[:arm_debug_overlay]
256
- end
257
- if options.key?(:overlay)
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
- size.times do |i|
265
- if options[:read]
266
- # If it's a register support bit-wise reads
267
- if contains_bits
268
- if reg_or_val[i].is_to_be_stored?
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 reg_or_val[i].has_overlay?
272
- $tester.label(reg_or_val[i].overlay_str)
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
- if options[:compare_data] && reg_or_val
282
- swd_dio.assert(reg_or_val[i] ? reg_or_val[i] : 0)
283
- else
284
- swd_dio.dont_care
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
@@ -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("write_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.0.0
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-04-28 00:00:00.000000000 Z
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.5.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.