Skip to content

Commit 4bef280

Browse files
committed
resources.interface: allow SPIResource to be unidirectional.
See #104.
1 parent ad9408d commit 4bef280

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

nmigen_boards/resources/interface.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,18 +59,23 @@ def IrDAResource(number, *, rx, tx, en=None, sd=None,
5959
def SPIResource(*args, cs, clk, copi, cipo, int=None, reset=None,
6060
conn=None, attrs=None, role="controller"):
6161
assert role in ("controller", "peripheral")
62+
assert copi is not None or cipo is not None # support unidirectional SPI
6263

6364
io = []
6465
if role == "controller":
6566
io.append(Subsignal("cs", PinsN(cs, dir="o", conn=conn)))
6667
io.append(Subsignal("clk", Pins(clk, dir="o", conn=conn, assert_width=1)))
67-
io.append(Subsignal("copi", Pins(copi, dir="o", conn=conn, assert_width=1)))
68-
io.append(Subsignal("cipo", Pins(cipo, dir="i", conn=conn, assert_width=1)))
68+
if copi is not None:
69+
io.append(Subsignal("copi", Pins(copi, dir="o", conn=conn, assert_width=1)))
70+
if cipo is not None:
71+
io.append(Subsignal("cipo", Pins(cipo, dir="i", conn=conn, assert_width=1)))
6972
else: # peripheral
7073
io.append(Subsignal("cs", PinsN(cs, dir="i", conn=conn, assert_width=1)))
7174
io.append(Subsignal("clk", Pins(clk, dir="i", conn=conn, assert_width=1)))
72-
io.append(Subsignal("copi", Pins(copi, dir="i", conn=conn, assert_width=1)))
73-
io.append(Subsignal("cipo", Pins(cipo, dir="oe", conn=conn, assert_width=1)))
75+
if copi is not None:
76+
io.append(Subsignal("copi", Pins(copi, dir="i", conn=conn, assert_width=1)))
77+
if cipo is not None:
78+
io.append(Subsignal("cipo", Pins(cipo, dir="oe", conn=conn, assert_width=1)))
7479
if int is not None:
7580
if role == "controller":
7681
io.append(Subsignal("int", Pins(int, dir="i", conn=conn)))
@@ -95,8 +100,7 @@ def I2CResource(*args, scl, sda, conn=None, attrs=None):
95100
return Resource.family(*args, default_name="i2c", ios=io)
96101

97102

98-
def DirectUSBResource(*args, d_p, d_n, pullup=None, vbus_valid=None,
99-
conn=None, attrs=None):
103+
def DirectUSBResource(*args, d_p, d_n, pullup=None, vbus_valid=None, conn=None, attrs=None):
100104

101105
io = []
102106
io.append(Subsignal("d_p", Pins(d_p, dir="io", conn=conn, assert_width=1)))

0 commit comments

Comments
 (0)