16a98d91a9eef0031e1b6df7df1acad4d81ec809
4 def __init__(self
, readfn
, writefn
, name
, addr
, length
, busword
, mode
):
13 if self
.mode
not in ["rw", "ro"]:
14 raise KeyError(name
+ "register not readable")
16 for i
in range(self
.length
):
17 r |
= self
.readfn(self
.addr
+ 4*i
)
18 if i
!= (self
.length
-1):
22 def write(self
, value
):
23 if self
.mode
not in ["rw", "wo"]:
24 raise KeyError(name
+ "register not writable")
25 for i
in range(self
.length
):
26 dat
= (value
>> ((self
.length
-1-i
)*self
.busword
)) & (2**self
.busword
-1)
27 self
.writefn(self
.addr
+ 4*i
, dat
)
30 def __init__(self
, d
):
33 def __getattr__(self
, attr
):
35 return self
.__dict
__['d'][attr
]
38 raise KeyError("No such register " + attr
)
40 def build_map(addrmap
, busword
, readfn
, writefn
):
41 csv_reader
= csv
.reader(open(addrmap
), delimiter
=',', quotechar
='#')
43 for item
in csv_reader
:
44 name
, addr
, length
, mode
= item
45 addr
= int(addr
.replace("0x", ""), 16)
47 d
[name
] = MappedReg(readfn
, writefn
, name
, addr
, length
, busword
, mode
)