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 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.