File: multicore.py

package info (click to toggle)
simulavr 1.0.0%2Bgit20160221.e53413b-1
  • links: PTS
  • area: main
  • in suites: buster
  • size: 5,748 kB
  • sloc: cpp: 35,491; python: 6,991; ansic: 3,567; makefile: 1,072; sh: 653; asm: 414; tcl: 320
file content (49 lines) | stat: -rw-r--r-- 1,735 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
# Example code for multicore example with python interface

# import python interface
import pysimulavr

if __name__ == "__main__":

  # get systemclock instance
  print "multicore example:"
  sc = pysimulavr.SystemClock.Instance()
  
  # create core A: clock generator 250Hz with device clock 4MHz
  print "  create core A ..."
  devA = pysimulavr.AvrFactory.instance().makeDevice("atmega16")
  devA.Load("multicore_a.elf")
  devA.SetClockFreq(250) # clock period in ns!
  sc.Add(devA)
  
  # create core B: count rising edges, device clock 10MHz, calculated cnt_res = 156,25 nominal!
  print "  create core B ..."
  devB = pysimulavr.AvrFactory.instance().makeDevice("atmega16")
  devB.Load("multicore_b.elf")
  devB.SetClockFreq(100) # clock period in ns!
  sc.Add(devB)

  # create net: connect core A, Port B3 to core B, Port D2
  print "  connect core A with core B ..."
  n = pysimulavr.Net()
  n.Add(devA.GetPin("B3"))
  n.Add(devB.GetPin("D2"))

  # get addresses for cnt_res and cnt_irq variables
  a = devB.data.GetAddressAtSymbol("cnt_irq")
  print "  core B: address(cnt_irq)=0x%x" % a
  b = devB.data.GetAddressAtSymbol("cnt_res")
  print "  core B: address(cnt_res)=0x%x" % a
  
  # run simulation, stop after given time and check values
  print "  run simulation ..."
  sc.RunTimeRange(4000000)
  print "  t= 4ms, cnt_irq=%d, cnt_res=%3d" % (devB.getRWMem(a), devB.getRWMem(b))
  sc.RunTimeRange(4000000)
  print "  t= 8ms, cnt_irq=%d, cnt_res=%3d" % (devB.getRWMem(a), devB.getRWMem(b))
  sc.RunTimeRange(12000000)
  print "  t=20ms, cnt_irq=%d, cnt_res=%3d" % (devB.getRWMem(a), devB.getRWMem(b))
  sc.RunTimeRange(12000000)
  print "  t=32ms, cnt_irq=%d, cnt_res=%3d" % (devB.getRWMem(a), devB.getRWMem(b))
  
# EOF