File: spi.py

package info (click to toggle)
m1n1 1.5.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,468 kB
  • sloc: python: 42,002; ansic: 33,376; asm: 1,101; makefile: 271; xml: 177; sh: 116
file content (117 lines) | stat: -rw-r--r-- 2,864 bytes parent folder | download | duplicates (3)
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
import sys, pathlib
sys.path.append(str(pathlib.Path(__file__).resolve().parents[1]))

from m1n1.setup import *
from m1n1 import asm
from m1n1.shell import run_shell
from m1n1.gpiola import GPIOLogicAnalyzer
from m1n1.hw.spi import *

p.smp_start_secondaries()

spi = u.adt["arm-io/spi2"].get_reg(0)[0] + 0x8000
regs = SPIRegs(u, spi)

aic = u.adt["arm-io/aic"].get_reg(0)[0]

gpio = u.adt["arm-io/gpio0"].get_reg(0)[0]
count = u.adt["arm-io/gpio0"].getprop("#gpio-pins")

pins={}
for i in range(150, 150+32):
    pins[f"pin{i}"] = i

m = GPIOLogicAnalyzer(u, "arm-io/gpio0",
                      pins=pins,
                      regs={"a": gpio},
                      div=1,
                      cpu=1,
                      on_pin_change=True,
                      on_reg_change=False)

regs.CTRL.val = 0xc
regs.PIN.val = 0x2
regs.CFG.val = 0x20 | (1<<15) | 6
regs.CFG.val = 0x20 | (1<<15) | 4
regs.CFG.val = 0x20 | (1<<15) | 2
regs.CFG.val = 0x20 | (3<<15) | 0

m.regs = {}

m.start(30000000, bufsize=0x80000)

regs.STATUS.val = 0xffffffff
regs.IF_XFER.val = 0xffffffff
regs.IF_FIFO.val = 0xffffffff

regs.CLKDIV.val = 0xfff
regs.INTER_DELAY.val = 0x1000

regs.SHIFTCFG.val = 0x21fcf7

regs.PIN.val = 0x2
print("pinconfig", hex(regs.PINCFG.val))
regs.PINCFG.val = 0x100
#regs.PINCONFIG.val = 0x2-7
print("pinconfig", hex(regs.PINCFG.val))
print("shiftconfig", hex(regs.SHIFTCFG.val))

p.write32(spi + 0x3c, 0xffffffff)

regs.PINCFG.val = 0x002
regs.PINCFG.val = 0x200

#p.write32(0x28e0380bc, 0x80100000)
#p.write32(0x28e0380c4, 0x80100000)

data = b"\xff\xff\xff\xff\x00\x00\xff\xff"

for i in range(2):
    for j in data:
        regs.TXDATA.val = j | 0xffffff00
    regs.RXCNT.val = len(data)
    regs.TXCNT.val = len(data)

    regs.STATUS.val = 0xffffffff
    regs.IF_XFER.val = 0xffffffff
    regs.IF_FIFO.val = 0xffffffff

    regs.PIN.val = 0x0
    regs.CTRL.val = 0x1
    #regs.TXDATA.val = 0xff
    #regs.TXDATA.val = 0xff

    i = 0
    while regs.TXCNT.val != 0:
        print(f"{regs.TXCNT.val:#x} {regs.FIFOSTAT.reg} {regs.STATUS.val:#x} {regs.IF_FIFO.val:#x} {p.read32(spi + 0x134):#x}")
        regs.STATUS.val = 0xffffffff
        regs.IF_XFER.val = 0xffffffff
        regs.IF_FIFO.val = 0xffffffff
        #regs.CTRL.val = 0x0
        #time.sleep(0.1)
        #regs.CTRL.val = 0x1[
        print(hex(i))
        #p.write32(spi + i, 0xffffffff)
        #p.write32(spi + i, 0)
        i += 4
        if i > 0x100:
            break
    time.sleep(0.001)
    print(f"{regs.RXCNT.val:#x} {regs.FIFOSTAT.reg} {regs.STATUS.val:#x} {regs.IF_FIFO.val:#x}")
    regs.STATUS.val = 0xffffffff
    regs.IF_XFER.val = 0xffffffff
    regs.IF_FIFO.val = 0xffffffff

    mon.poll()
    
    while regs.FIFOSTAT.reg.LEVEL_RX:
        print("RX", hex(regs.RXDATA.val))

    regs.CTRL.val = 0

m.complete()
m.show()

#run_shell(globals(), msg="Have fun!")