File: timer_16_icap_p.py

package info (click to toggle)
simulavr 1.0.0%2Bgit20160221.e53413b-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 6,740 kB
  • sloc: cpp: 35,491; python: 6,995; ansic: 3,567; makefile: 1,075; sh: 653; asm: 414; tcl: 320; javascript: 32
file content (60 lines) | stat: -rw-r--r-- 2,037 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
from simtestutil import SimTestCase, SimTestLoader
import pysimulavr

class XPin(pysimulavr.Pin):
  
  def __init__(self, dev, sim, name, state = None):
    pysimulavr.Pin.__init__(self)
    self.ct = sim.getCurrentTime
    self.name = name
    if state is not None: self.SetPin(state)
    # hold the connecting net here, it have not be destroyed, if we leave this method
    self.__net = pysimulavr.Net()
    self.__net.Add(self)
    self.__net.Add(dev.GetPin(name))
    
class TestCase(SimTestCase):
  
  _state_0 = "L"
  _state_1 = "H"
  
  def setPinAndGetValue(self, pin, state, runtime, label):
    pin.SetPin(state)
    self.sim.doRun(self.sim.getCurrentTime() + runtime)
    return self.sim.getWordByName(self.dev, label)
    
  def test_00(self):
    """check input capture"""
    self.assertDevice()
    self.assertStartTime()
    ct = self.dev.GetClockFreq()
    rt = 15000
    # skip initialisation
    self.assertInitDone()
    # check input_capture after initialisation
    self.assertWordValue("input_capture", 0)
    # connect pin, set to state before edge
    x = XPin(self.dev, self.sim, "D4", self._state_0)
    self.sim.doRun(self.sim.getCurrentTime() + 10000)
    # set pin to state after edge
    t0 = self.sim.getCurrentTime()
    v0 = self.setPinAndGetValue(x, self._state_1, rt, "input_capture")
    self.assertTrue(v0 > 0, "value input capture is 0")
    # set pin to state before edge
    self.setPinAndGetValue(x, self._state_0, rt, "input_capture")
    # set pin to state after edge (second edge)
    t1 = self.sim.getCurrentTime()
    v1 = self.setPinAndGetValue(x, self._state_1, rt, "input_capture")
    self.assertTrue(v1 > 0, "value input capture is 0 (2. edge)")
    # calculate difference on captured values
    self.assertEqual(t1 - t0, (v1 - v0) * ct)
    # delete external pin
    del x
    
if __name__ == '__main__':
  
  from unittest import TextTestRunner
  tests = SimTestLoader("timer_16_icap_p_atmega128.elf").loadTestsFromTestCase(TestCase)
  TextTestRunner(verbosity = 2).run(tests)

# EOF