864821acd6e823eced948d2be2a3c211a20c7b50
9 return self
.pins
.has_key(k
)
11 def add_spec(self
, k
, v
):
14 def update(self
, pinidx
, v
):
15 if not self
.pins
.has_key(pinidx
):
18 self
.pins
[pinidx
].update(v
)
21 return self
.pins
.keys()
24 return self
.pins
.items()
32 def __delitem__(self
, k
):
38 def __init__(self
, fname
, pingroup
, bankspec
, suffix
, offs
, bank
, mux
,
39 spec
=None, limit
=None, origsuffix
=None):
41 # function type can be in, out or inout, represented by - + *
42 # strip function type out of each pin name
44 for i
in range(len(pingroup
)):
49 if fntype
not in '+-*':
52 fntype
= {'-': 'in', '+': 'out', '*': 'inout'}[fntype
]
53 self
.fntype
[pname
] = fntype
57 self
.pingroup
= pingroup
58 self
.bankspec
= bankspec
60 self
.origsuffix
= origsuffix
or suffix
64 # create consistent name suffixes
65 pingroup
= namesuffix(fname
, suffix
, pingroup
)
71 for name
in pingroup
[:limit
]:
73 name_
= "%s_%s" % (name
, suffix
)
76 if spec
and spec
.has_key(name
):
78 pin
= {mux
: (name_
, bank
)}
79 offs_bank
, offs_
= offs
82 idx_
+= bankspec
[bank
]
87 name_
= "%s_%s" % (name
, suffix
)
92 if not spec
.has_key(name
):
94 idx_
, mux_
, bank_
= spec
[name
]
96 pin
= {mux_
: (name_
, bank_
)}
105 def i2s(bankspec
, suffix
, offs
, bank
, mux
=1, spec
=None, limit
=None):
106 i2spins
= ['MCK+', 'BCK+', 'LRCK+', 'DI-', 'DO+']
108 # i2spins.append("DO%d+" % i)
109 return Pins('IIS', i2spins
, bankspec
, suffix
, offs
, bank
, mux
, spec
, limit
,
112 def emmc(bankspec
, suffix
, offs
, bank
, mux
=1, spec
=None):
113 emmcpins
= ['CMD+', 'CLK+']
115 emmcpins
.append("D%d*" % i
)
116 return Pins('MMC', emmcpins
, bankspec
, suffix
, offs
, bank
, mux
, spec
,
119 def sdmmc(bankspec
, suffix
, offs
, bank
, mux
=1, spec
=None,
120 start
=None, limit
=None):
121 sdmmcpins
= ['CMD+', 'CLK+']
123 sdmmcpins
.append("D%d*" % i
)
124 sdmmcpins
= sdmmcpins
[start
:limit
]
125 return Pins('SD', sdmmcpins
, bankspec
, suffix
, offs
, bank
, mux
, spec
,
128 def spi(bankspec
, suffix
, offs
, bank
, mux
=1, spec
=None):
129 spipins
= ['CLK*', 'NSS*', 'MOSI*', 'MISO*']
130 return Pins('SPI', spipins
, bankspec
, suffix
, offs
, bank
, mux
, spec
,
133 def quadspi(bankspec
, suffix
, offs
, bank
, mux
=1, spec
=None, limit
=None):
134 spipins
= ['CK*', 'NSS*', 'IO0*', 'IO1*', 'IO2*', 'IO3*']
135 return Pins('QSPI', spipins
, bankspec
, suffix
, offs
, bank
, mux
, spec
, limit
,
138 def i2c(bankspec
, suffix
, offs
, bank
, mux
=1, spec
=None):
139 spipins
= ['SDA*', 'SCL*']
140 return Pins('TWI', spipins
, bankspec
, suffix
, offs
, bank
, mux
, spec
,
143 def jtag(bankspec
, suffix
, offs
, bank
, mux
=1, spec
=None):
144 jtagpins
= ['MS+', 'DI-', 'DO+', 'CK+']
145 return Pins('JTAG', jtagpins
, bankspec
, suffix
, offs
, bank
, mux
, spec
,
148 def uart(bankspec
, suffix
, offs
, bank
, mux
=1, spec
=None):
149 uartpins
= ['TX+', 'RX-']
150 return Pins('UART', uartpins
, bankspec
, suffix
, offs
, bank
, mux
, spec
,
153 def namesuffix(name
, suffix
, namelist
):
157 names
.append("%s%s_%s" % (name
, suffix
, n
))
159 names
.append("%s_%s" % (name
, suffix
))
162 def ulpi(bankspec
, suffix
, offs
, bank
, mux
=1, spec
=None):
163 ulpipins
= ['CK+', 'DIR+', 'STP+', 'NXT+']
165 ulpipins
.append('D%d*' % i
)
166 return Pins('ULPI', ulpipins
, bankspec
, suffix
, offs
, bank
, mux
, spec
,
169 def uartfull(bankspec
, suffix
, offs
, bank
, mux
=1, spec
=None):
170 uartpins
= ['TX+', 'RX-', 'CTS-', 'RTS+']
171 return Pins('UARTQ', uartpins
, bankspec
, suffix
, offs
, bank
, mux
, spec
,
174 def rgbttl(bankspec
, suffix
, offs
, bank
, mux
=1, spec
=None):
175 ttlpins
= ['CK+', 'DE+', 'HS+', 'VS+']
177 ttlpins
.append("D%d+" % i
)
178 return Pins('LCD', ttlpins
, bankspec
, suffix
, offs
, bank
, mux
, spec
,
181 def rgmii(bankspec
, suffix
, offs
, bank
, mux
=1, spec
=None):
184 buspins
.append("ERXD%d-" % i
)
186 buspins
.append("ETXD%d+" % i
)
187 buspins
+= ['ERXCK-', 'ERXERR-', 'ERXDV-',
189 'ETXEN+', 'ETXCK+', 'ECRS-',
191 return Pins('RG', buspins
, bankspec
, suffix
, offs
, bank
, mux
, spec
,
194 def flexbus1(bankspec
, suffix
, offs
, bank
, mux
=1, spec
=None, limit
=None):
197 buspins
.append("AD%d*" % i
)
199 buspins
.append("CS%d+" % i
)
200 buspins
+= ['ALE', 'OE', 'RW', 'TA', 'CLK+',
201 'A0', 'A1', 'TS', 'TBST',
204 buspins
.append("BWE%d" % i
)
206 buspins
.append("CS%d+" % i
)
207 return Pins('FB', buspins
, bankspec
, suffix
, offs
, bank
, mux
, spec
, limit
,
210 def flexbus2(bankspec
, suffix
, offs
, bank
, mux
=1, spec
=None, limit
=None):
212 for i
in range(8,32):
213 buspins
.append("AD%d*" % i
)
214 return Pins('FB', buspins
, bankspec
, suffix
, offs
, bank
, mux
, spec
, limit
,
217 def sdram1(bankspec
, suffix
, offs
, bank
, mux
=1, spec
=None):
220 buspins
.append("SDRDQM%d*" % i
)
222 buspins
.append("SDRAD%d+" % i
)
224 buspins
.append("SDRDQ%d+" % i
)
226 buspins
.append("SDRCS%d#+" % i
)
228 buspins
.append("SDRDQ%d+" % i
)
230 buspins
.append("SDRBA%d+" % i
)
231 buspins
+= ['SDRCKE+', 'SDRRAS#+', 'SDRCAS#+', 'SDRWE#+',
233 return Pins('SDR', buspins
, bankspec
, suffix
, offs
, bank
, mux
, spec
,
236 def sdram2(bankspec
, suffix
, offs
, bank
, mux
=1, spec
=None, limit
=None):
239 buspins
.append("SDRCS%d#+" % i
)
240 for i
in range(8,32):
241 buspins
.append("SDRDQ%d*" % i
)
242 return Pins('SDR', buspins
, bankspec
, suffix
, offs
, bank
, mux
, spec
, limit
,
245 def mcu8080(bankspec
, suffix
, offs
, bank
, mux
=1, spec
=None):
248 buspins
.append("MCUD%d*" % i
)
250 buspins
.append("MCUAD%d+" % (i
+8))
252 buspins
.append("MCUCS%d+" % i
)
254 buspins
.append("MCUNRB%d+" % i
)
255 buspins
+= ['MCUCD+', 'MCURD+', 'MCUWR+', 'MCUCLE+', 'MCUALE+',
257 return Pins('MCU', buspins
, bankspec
, suffix
, offs
, bank
, mux
, spec
,
260 def _pinbank(bankspec
, prefix
, suffix
, offs
, bank
, gpiooffs
, gpionum
=1, mux
=1,
263 for i
in range(gpiooffs
, gpiooffs
+gpionum
):
264 gpiopins
.append("%s%d*" % (bank
, i
))
265 return Pins('GPIO', gpiopins
, bankspec
, suffix
, offs
, bank
, mux
, spec
,
268 def eint(bankspec
, suffix
, offs
, bank
, gpiooffs
, gpionum
=1, mux
=1, spec
=None):
270 for i
in range(gpiooffs
, gpiooffs
+gpionum
):
271 gpiopins
.append("%d*" % (i
))
272 return Pins('EINT', gpiopins
, bankspec
, suffix
, offs
, bank
, mux
, spec
,
275 def pwm(bankspec
, suffix
, offs
, bank
, mux
=1, spec
=None):
276 return Pins('PWM', ['+', ], bankspec
, suffix
, offs
, bank
, mux
, spec
,
279 def gpio(bankspec
, suffix
, offs
, bank
, gpiooffs
, gpionum
=1, mux
=1, spec
=None):
280 return _pinbank(bankspec
, "GPIO", suffix
, offs
, bank
, gpiooffs
,
281 gpionum
, mux
=0, spec
=None)
283 def pinmerge(pins
, fn
):
284 # hack, store the function specs in the pins dict
286 suffix
= fn
.origsuffix
289 if not hasattr(pins
, 'fnspec'):
293 assert not pins
.has_key('EINT')
294 if not pins
.fnspec
.has_key(fname
):
295 pins
.add_spec(fname
, {})
296 print "fname bank suffix", fname
, bank
, suffix
297 if suffix
or fname
== 'EINT' or fname
== 'PWM':
298 specname
= fname
+ suffix
300 specname
= fname
+ bank
301 pins
.fnspec
[fname
][specname
] = fn
305 for (pinidx
, v
) in fn
.pins
.items():
306 print "pinidx", pinidx
307 pins
.update(pinidx
, v
)