]> Repositories - Adafruit_Blinka-hackapet.git/blob - src/adafruit_blinka/microcontroller/beaglebone_black/pin.py
a379f1dfc438d58c2377dcaeded26b3422b77dc2
[Adafruit_Blinka-hackapet.git] / src / adafruit_blinka / microcontroller / beaglebone_black / pin.py
1 import Adafruit_BBIO.GPIO as GPIO
2
3 # Pins dont exist in CPython so...lets make our own!
4 class Pin:
5     IN = 0
6     OUT = 1
7     LOW = 0
8     HIGH = 1
9     PULL_NONE = 0
10     PULL_UP = 1
11     PULL_DOWN = 2
12     
13     id = None
14     _value = LOW
15     _mode = IN
16     
17     def __init__(self, pin_name):
18         self.id = pin_name
19
20     def __repr__(self):
21         return str(self.id)
22
23     def __eq__(self, other):
24         return self.id == other
25
26     def init(self, mode=IN, pull=None):
27         if mode != None:
28             if mode == self.IN:
29                 self._mode = self.IN
30                 GPIO.setup(self.id, GPIO.IN)
31             elif mode == self.OUT:
32                 self._mode = self.OUT
33                 GPIO.setup(self.id, GPIO.OUT)
34             else:
35                 raise RuntimeError("Invalid mode for pin: %s" % self.id)
36         if pull != None:
37             if self._mode != self.IN:
38                 raise RuntimeError("Cannot set pull resistor on output")
39             if pull == self.PULL_UP:
40                 GPIO.setup(self.id, GPIO.IN, pull_up_down=GPIO.PUD_UP)
41             elif pull == self.PULL_DOWN:
42                 GPIO.setup(self.id, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
43             else:
44                 raise RuntimeError("Invalid pull for pin: %s" % self.id)       
45
46     def value(self, val=None):
47         if val != None:
48             if val == self.LOW:
49                 self._value = val
50                 GPIO.output(self.id, val)
51             elif val == self.HIGH:
52                 self._value = val
53                 GPIO.output(self.id, val)
54             else:
55                 raise RuntimeError("Invalid value for pin")
56         else:
57             return GPIO.input(self.id)
58
59 P8_3 = Pin('P8_3')
60 P8_4 = Pin('P8_4')
61 P8_5 = Pin('P8_5')
62 P8_6 = Pin('P8_6')
63 P8_7 = Pin('P8_7')
64 P8_8 = Pin('P8_8')
65 P8_9 = Pin('P8_9')
66 P8_10 = Pin('P8_10')
67 P8_11 = Pin('P8_11')
68 P8_12 = Pin('P8_12')
69 P8_13 = Pin('P8_13')
70 P8_14 = Pin('P8_14')
71 P8_15 = Pin('P8_15')
72 P8_16 = Pin('P8_16')
73 P8_17 = Pin('P8_17')
74 P8_18 = Pin('P8_18')
75 P8_19 = Pin('P8_19')
76 P8_20 = Pin('P8_20')
77 P8_21 = Pin('P8_21')
78 P8_22 = Pin('P8_22')
79 P8_23 = Pin('P8_23')
80 P8_24 = Pin('P8_24')
81 P8_25 = Pin('P8_25')
82 P8_26 = Pin('P8_26')
83 P8_27 = Pin('P8_27')
84 P8_28 = Pin('P8_28')
85 P8_29 = Pin('P8_29')
86 P8_30 = Pin('P8_30')
87 P8_31 = Pin('P8_31')
88 P8_32 = Pin('P8_32')
89 P8_33 = Pin('P8_33')
90 P8_34 = Pin('P8_34')
91 P8_35 = Pin('P8_35')
92 P8_36 = Pin('P8_36')
93 P8_37 = Pin('P8_37')
94 P8_38 = Pin('P8_38')
95 P8_39 = Pin('P8_39')
96 P8_40 = Pin('P8_40')
97 P8_41 = Pin('P8_41')
98 P8_42 = Pin('P8_42')
99 P8_43 = Pin('P8_43')
100 P8_44 = Pin('P8_44')
101 P8_45 = Pin('P8_45')
102 P8_46 = Pin('P8_46')
103 P9_11 = Pin('P9_11')
104 P9_12 = Pin('P9_12')
105 P9_13 = Pin('P9_13')
106 P9_14 = Pin('P9_14')
107 P9_15 = Pin('P9_15')
108 P9_16 = Pin('P9_16')
109 P9_17 = Pin('P9_17')
110 P9_18 = Pin('P9_18')
111 P9_19 = Pin('P9_19')
112 P9_20 = Pin('P9_20')
113 P9_21 = Pin('P9_21')
114 P9_22 = Pin('P9_22')
115 P9_23 = Pin('P9_23')
116 P9_24 = Pin('P9_24')
117 P9_25 = Pin('P9_25')
118 P9_26 = Pin('P9_26')
119 P9_27 = Pin('P9_27')
120 P9_28 = Pin('P9_28')
121 P9_29 = Pin('P9_29')
122 P9_30 = Pin('P9_30')
123 P9_31 = Pin('P9_31')
124 P9_41 = Pin('P9_41')
125 P9_42 = Pin('P9_42')
126
127 USR0 = Pin('USR0')
128 USR1 = Pin('USR1')
129 USR2 = Pin('USR2')
130 USR3 = Pin('USR3')
131
132 SCL = Pin('P9_19')
133 SDA = Pin('P9_20')
134
135 # Refer to header default pin modes
136 # http://beagleboard.org/static/images/cape-headers.png
137 #
138 # P9_17 (SPI0_CSO => CE0) enables peripheral device
139 # P9_18 (SPI0_D1 => MOSI) outputs data to peripheral device
140 # P9_21 (SPIO_DO => MISO) receives data from peripheral device
141 # P9_22 (SPI0_SCLK => SCLK) outputs clock signal
142
143 # Use config-pin to set pin mode for SPI pins
144 # https://github.com/beagleboard/bb.org-overlays/tree/master/tools/beaglebone-universal-io
145 # config-pin p9.17 spi_cs
146 # config-pin p9.18 spi
147 # config-pin p9.21 spi
148 # config-pin p9.22 spi_sclk
149 #
150 CE0 = Pin('P9_17')
151 MOSI = Pin('P9_18')
152 MISO = Pin('P9_21')
153 SCLK = Pin('P9_22')
154 #CircuitPython naming convention for SPI Clock
155 SCK = Pin('P9_22')
156
157 # ordered as spiId, sckId, mosiId, misoId
158 #spiPorts = ((0, SCLK, MOSI, MISO), (1, SCLK_1, MOSI_1, MISO_1))
159 spiPorts = ((0, SCLK, MOSI, MISO), (1, SCLK, MOSI, MISO))
160
161 # ordered as uartId, txId, rxId
162 uartPorts = (
163     (),
164 )
165
166 i2cPorts = (
167     (2, SCL, SDA),
168 )
169