@@ -21,7 +21,7 @@ def __init__(self, error=None):
21
21
22
22
class RTTCommand ():
23
23
"""RTT command opcodes."""
24
- TRIGGER_SET = 0x01
24
+ TRIG_SET = 0x01
25
25
TRIG_WINDOW_SET = 0x03
26
26
TRIG_SINGLE_SET = 0x05
27
27
AVERAGE_START = 0x06
@@ -109,24 +109,6 @@ def get_metadata(self):
109
109
raise PPKError ("Invalid operation: must connect first." )
110
110
return self ._metadata .copy ()
111
111
112
- def enable_ext_trigger_in (self ):
113
- """Enable the 'TRIG IN' external trigger."""
114
- if not self ._connected :
115
- raise PPKError ("Invalid operation: must connect first." )
116
- self ._log ("Enable 'TRIG IN' external trigger." )
117
- if not self ._ext_trig_enabled :
118
- self ._write_ppk_cmd ([RTTCommand .EXT_TRIG_IN_TOGGLE ])
119
- self ._ext_trig_enabled = True
120
-
121
- def disable_ext_trigger_in (self ):
122
- """Disable the 'TRIG IN' external trigger."""
123
- if not self ._connected :
124
- raise PPKError ("Invalid operation: must connect first." )
125
- self ._log ("Disable 'TRIG IN' external trigger." )
126
- if self ._ext_trig_enabled :
127
- self ._write_ppk_cmd ([RTTCommand .EXT_TRIG_IN_TOGGLE ])
128
- self ._ext_trig_enabled = False
129
-
130
112
def enable_dut_power (self ):
131
113
"""Turn DUT power on."""
132
114
if not self ._connected :
@@ -166,7 +148,13 @@ def set_user_resistors(self, user_r1, user_r2, user_r3):
166
148
self ._write_ppk_cmd (cmd )
167
149
168
150
def enable_spike_filtering (self ):
169
- """Enable spike filtering feature."""
151
+ """Enable spike filtering feature.
152
+
153
+ When this is turned on, the PPK software will filter data directly
154
+ after an automatic range switch. This will limit unwanted spikes
155
+ due to rapid switching, but may also remove short current spikes
156
+ that might be of significance.
157
+ """
170
158
if not self ._connected :
171
159
raise PPKError ("Invalid operation: must connect first." )
172
160
self ._log ("Enabling spike filtering." )
@@ -253,13 +241,25 @@ def measure_triggers(self, window_time_us, level_ua, count=1):
253
241
if not self ._connected :
254
242
raise PPKError ("Invalid operation: must connect first." )
255
243
self ._log ("measure_triggers(%r, %r, %r)." % (window_time_us , level_ua , count ))
256
- ppk_helper = PPKDataHelper ()
257
244
self .set_trigger_window (window_time_us )
258
245
if count == 1 :
259
246
self ._set_single_trigger (level_ua )
260
247
else :
261
248
self ._set_trigger (level_ua )
262
- # Each buffer includes a timestamp.
249
+ return self ._measure_triggers (count )
250
+
251
+ def measure_external_triggers (self , window_time_us , count = 1 ):
252
+ """Wait for the 'TRIG IN' pin before capturing trigger buffers."""
253
+ if not self ._connected :
254
+ raise PPKError ("Invalid operation: must connect first." )
255
+ self ._log ("measure_external_triggers(%r, %r)." % (window_time_us , count ))
256
+ self .set_trigger_window (window_time_us )
257
+ self ._enable_ext_trigger_in ()
258
+ return self ._measure_triggers (count )
259
+
260
+ def _measure_triggers (self , count = 1 ):
261
+ """"""
262
+ ppk_helper = PPKDataHelper ()
263
263
samples_count = count * 2
264
264
while True :
265
265
self ._read_and_parse_ppk_data (ppk_helper )
@@ -268,7 +268,10 @@ def measure_triggers(self, window_time_us, level_ua, count=1):
268
268
if samples_count <= collected_buffs :
269
269
break
270
270
self ._log ('' )
271
- self ._stop_trigger ()
271
+ if self ._ext_trig_enabled :
272
+ self ._disable_ext_trigger_in ()
273
+ else :
274
+ self ._stop_trigger ()
272
275
self ._flush_rtt ()
273
276
result = []
274
277
for ts , trig_buf in ppk_helper .get_trigger_buffs (* self ._resistors ):
@@ -277,6 +280,24 @@ def measure_triggers(self, window_time_us, level_ua, count=1):
277
280
result .append ((np_avg (trig_buf ), timestamped_buf ))
278
281
return result
279
282
283
+ def _enable_ext_trigger_in (self ):
284
+ """Enable the 'TRIG IN' external trigger.
285
+
286
+ The external trigger is used in place of the normal TRIG_SET
287
+ and TRIG_SINGLE_SET commands.
288
+ """
289
+ self ._log ("Enable 'TRIG IN' external trigger." )
290
+ if not self ._ext_trig_enabled :
291
+ self ._write_ppk_cmd ([RTTCommand .EXT_TRIG_IN_TOGGLE ])
292
+ self ._ext_trig_enabled = True
293
+
294
+ def _disable_ext_trigger_in (self ):
295
+ """Disable the 'TRIG IN' external trigger."""
296
+ self ._log ("Disable 'TRIG IN' external trigger." )
297
+ if self ._ext_trig_enabled :
298
+ self ._write_ppk_cmd ([RTTCommand .EXT_TRIG_IN_TOGGLE ])
299
+ self ._ext_trig_enabled = False
300
+
280
301
def _start_average_measurement (self ):
281
302
"""Start generating average current measurements."""
282
303
self ._log ("Starting average measurement." )
@@ -298,7 +319,7 @@ def _set_trigger(self, level_ua):
298
319
high = (level_ua >> 16 ) & 0xFF
299
320
mid = (level_ua >> 8 ) & 0xFF
300
321
low = level_ua & 0xFF
301
- self ._write_ppk_cmd ([RTTCommand .TRIGGER_SET , high , mid , low ])
322
+ self ._write_ppk_cmd ([RTTCommand .TRIG_SET , high , mid , low ])
302
323
303
324
def _set_single_trigger (self , level_ua ):
304
325
"""Set the single trigger level.
0 commit comments