]> Repositories - Adafruit_Blinka-hackapet.git/blob - src/adafruit_blinka/microcontroller/am335x/pin.py
Merge pull request #807 from brentru/force-mcp
[Adafruit_Blinka-hackapet.git] / src / adafruit_blinka / microcontroller / am335x / pin.py
1 # SPDX-FileCopyrightText: 2021 Melissa LeBlanc-Williams for Adafruit Industries
2 #
3 # SPDX-License-Identifier: MIT
4 """AM335x pin names"""
5 try:
6     from Adafruit_BBIO import GPIO
7 except ImportError as error:
8     raise RuntimeError(
9         "The library 'Adafruit_BBIO' was not found. To install, try typing: "
10         "pip install Adafruit_BBIO"
11     ) from error
12
13
14 class Pin:
15     """Pins dont exist in CPython so...lets make our own!"""
16
17     IN = 0
18     OUT = 1
19     LOW = 0
20     HIGH = 1
21     PULL_NONE = 0
22     PULL_UP = 1
23     PULL_DOWN = 2
24
25     id = None
26     _value = LOW
27     _mode = IN
28
29     def __init__(self, pin_name):
30         self.id = pin_name
31
32     def __repr__(self):
33         return str(self.id)
34
35     def __eq__(self, other):
36         return self.id == other
37
38     def init(self, mode=IN, pull=None):
39         """Initialize the Pin"""
40         if mode is not None:
41             if mode == self.IN:
42                 self._mode = self.IN
43                 GPIO.setup(self.id, GPIO.IN)
44             elif mode == self.OUT:
45                 self._mode = self.OUT
46                 GPIO.setup(self.id, GPIO.OUT)
47             else:
48                 raise RuntimeError("Invalid mode for pin: %s" % self.id)
49         if pull is not None:
50             if self._mode != self.IN:
51                 raise RuntimeError("Cannot set pull resistor on output")
52             if pull == self.PULL_UP:
53                 GPIO.setup(self.id, GPIO.IN, pull_up_down=GPIO.PUD_UP)
54             elif pull == self.PULL_DOWN:
55                 GPIO.setup(self.id, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
56             else:
57                 raise RuntimeError("Invalid pull for pin: %s" % self.id)
58
59     def value(self, val=None):
60         """Set or return the Pin Value"""
61         if val is not None:
62             if val == self.LOW:
63                 self._value = val
64                 GPIO.output(self.id, val)
65             elif val == self.HIGH:
66                 self._value = val
67                 GPIO.output(self.id, val)
68             else:
69                 raise RuntimeError("Invalid value for pin")
70             return None
71         return GPIO.input(self.id)
72
73
74 # names in comments copied from
75 # https://github.com/adafruit/adafruit-beaglebone-io-python/blob/master/source/common.c#L73
76
77 # PocketBeagle
78 # P1_1 = SYS VIN        # VIN_AC
79 P1_2 = Pin("P1_2")  # GPIO2_23 - GPIO_87
80 P1_3 = Pin("P1_3")  # USB1_VBUS_OUT - (silkscreen: USB1 V_EN)
81 P1_4 = Pin("P1_4")  # GPIO2_25 - GPIO_89
82 # P1_5 = USB VBUS       # USB1_VBUS_IN
83 P1_6 = Pin("P1_6")  # SPI0_CS0 - GPIO_5
84 # P1_7 = USB VIN        # VIN-USB
85 P1_8 = Pin("P1_8")  # SPI0_SCLK - GPIO_2
86 # P1_9 = USB1 DN        # USB1-DN
87 P1_10 = Pin("P1_10")  # SPI0_D0 - GPIO_3
88 # P1_11 = USB1 DP       # USB1-DP
89 P1_12 = Pin("P1_12")  # SPI0_D1 - GPIO_4
90 # P1_13 = USB1 ID       # USB1-ID
91 # P1_14 = SYS 3.3V      # VOUT-3.3V
92 # P1_15 = SYS GND       # GND
93 # P1_16 = SYS GND       # GND
94 # P1_17 = AIN 1.8V REF- # VREFN
95 # P1_18 = AIN 1.8V REF+ # VREFP
96 P1_19 = Pin("P1_19")  # AIN0
97 P1_20 = Pin("P1_20")  # GPIO0_20 - GPIO_20
98 P1_21 = Pin("P1_21")  # AIN1
99 # P1_22 = SYS GND       # GND
100 P1_23 = Pin("P1_23")  # AIN2
101 # P1_22 = SYS VOUT      # VOUT-5V
102 P1_25 = Pin("P1_25")  # AIN3
103 P1_26 = Pin("P1_26")  # I2C2_SDA - GPIO_12
104 P1_27 = Pin("P1_27")  # AIN4
105 P1_28 = Pin("P1_28")  # I2C2_SCL - GPIO_13
106 P1_29 = Pin("P1_29")  # GPIO3_21 - GPIO_117
107 P1_30 = Pin("P1_30")  # UART0_TXD - GPIO_43
108 P1_31 = Pin("P1_31")  # GPIO3_18 - GPIO_114
109 P1_32 = Pin("P1_32")  # UART0_RXD - GPIO_42
110 P1_33 = Pin("P1_33")  # GPIO3_15 - GPIO_111
111 P1_34 = Pin("P1_34")  # GPIO0_26 - GPIO_26
112 P1_35 = Pin("P1_35")  # GPIO2_24 - GPIO_88
113 P1_36 = Pin("P1_36")  # EHRPWM0A - GPIO_110
114
115
116 P2_1 = Pin("P2_1")  # EHRPWM1A - GPIO_50
117 P2_2 = Pin("P2_2")  # GPIO1_27 - GPIO_59
118 P2_3 = Pin("P2_3")  # GPIO0_23 - GPIO_23
119 P2_4 = Pin("P2_4")  # GPIO1_26 - GPIO_58
120 P2_5 = Pin("P2_5")  # UART4_RXD - GPIO_30
121 P2_6 = Pin("P2_6")  # GPIO1_25 - GPIO_57
122 P2_7 = Pin("P2_7")  # UART4_TXD - GPIO_31
123 P2_8 = Pin("P2_8")  # GPIO1_28 - GPIO_60
124 P2_9 = Pin("P2_9")  # I2C1_SCL - GPIO_15
125 P2_10 = Pin("P2_10")  # GPIO1_20 - GPIO_52
126 P2_11 = Pin("P2_11")  # I2C1_SDA - GPIO_14
127 # P2_12 = SYS  PWR BTN  # POWER_BUTTON
128 # P2_13 = SYS VOUT      # VOUT-5V
129 # P2_14 = BAT VIN       # BAT-VIN
130 # P2_15 = SYS GND       # GND
131 # P2_16 = BAT TEMP      # BAT-TEMP
132 P2_17 = Pin("P2_17")  # GPIO2_1 - GPIO_65
133 P2_18 = Pin("P2_18")  # GPIO1_15 - GPIO_47
134 P2_19 = Pin("P2_19")  # GPIO0_27 - GPIO_27
135 P2_20 = Pin("P2_20")  # GPIO2_0 - GPIO_64
136 # P2_21 = SYS GND       # GND
137 P2_22 = Pin("P2_22")  # GPIO1_14 - GPIO_46
138 # P2_23 = SYS 3.3V      # VOUT-3.3V
139 P2_24 = Pin("P2_24")  # GPIO1_12 - GPIO_44
140 P2_25 = Pin("P2_25")  # SPI1_D1 - GPIO_41
141 # P2_26 = SYS NRST      # RESET#
142 P2_27 = Pin("P2_27")  # SPI1_D0 - GPIO_40
143 P2_28 = Pin("P2_28")  # GPIO3_20 - GPIO_116
144 P2_29 = Pin("P2_29")  # SPI1_SCLK - GPIO_7
145 P2_30 = Pin("P2_30")  # GPIO3_17 - GPIO_113
146 P2_31 = Pin("P2_31")  # SPI1_CS1 - GPIO_19
147 P2_32 = Pin("P2_32")  # GPIO3_16 - GPIO_112
148 P2_33 = Pin("P2_33")  # GPIO1_13 - GPIO_45
149 P2_34 = Pin("P2_34")  # GPIO3_19 - GPIO_115
150 P2_35 = Pin("P2_35")  # GPIO2_22 - GPIO_86
151 P2_36 = Pin("P2_36")  # AIN7
152
153
154 # BeagleBone Black
155 # P8_1 = DGND           # DGND - GPIO_0
156 # P8_2 = DGND           # DGND - GPIO_0
157 P8_3 = Pin("P8_3")  # GPIO1_6 - GPIO_38
158 P8_4 = Pin("P8_4")  # GPIO1_7 - GPIO_39
159 P8_5 = Pin("P8_5")  # GPIO1_2 - GPIO_34
160 P8_6 = Pin("P8_6")  # GPIO1_3 - GPIO_35
161 P8_7 = Pin("P8_7")  # TIMER4 - GPIO_66
162 P8_8 = Pin("P8_8")  # TIMER7 - GPIO_67
163 P8_9 = Pin("P8_9")  # TIMER5 - GPIO_69
164 P8_10 = Pin("P8_10")  # TIMER6 - GPIO_68
165 P8_11 = Pin("P8_11")  # GPIO1_13 - GPIO_45
166 P8_12 = Pin("P8_12")  # GPIO1_12 - GPIO_44
167 P8_13 = Pin("P8_13")  # EHRPWM2B - GPIO_23
168 P8_14 = Pin("P8_14")  # GPIO0_26 - GPIO_26
169 P8_15 = Pin("P8_15")  # GPIO1_15 - GPIO_47
170 P8_16 = Pin("P8_16")  # GPIO1_14 - GPIO_46
171 P8_17 = Pin("P8_17")  # GPIO0_27 - GPIO_27
172 P8_18 = Pin("P8_18")  # GPIO2_1 - GPIO_65
173 P8_19 = Pin("P8_19")  # EHRPWM2A - GPIO_22
174 P8_20 = Pin("P8_20")  # GPIO1_31 - GPIO_63
175 P8_21 = Pin("P8_21")  # GPIO1_30 - GPIO_62
176 P8_22 = Pin("P8_22")  # GPIO1_5 - GPIO_37
177 P8_23 = Pin("P8_23")  # GPIO1_4 - GPIO_36
178 P8_24 = Pin("P8_24")  # GPIO1_1 - GPIO_33
179 P8_25 = Pin("P8_25")  # GPIO1_0 - GPIO_32
180 P8_26 = Pin("P8_26")  # GPIO1_29 - GPIO_61
181 P8_27 = Pin("P8_27")  # GPIO2_22 - GPIO_86
182 P8_28 = Pin("P8_28")  # GPIO2_24 - GPIO_88
183 P8_29 = Pin("P8_29")  # GPIO2_23 - GPIO_87
184 P8_30 = Pin("P8_30")  # GPIO2_25 - GPIO_89
185 P8_31 = Pin("P8_31")  # UART5_CTSN - GPIO_10
186 P8_32 = Pin("P8_32")  # UART5_RTSN - GPIO_11
187 P8_33 = Pin("P8_33")  # UART4_RTSN - GPIO_9
188 P8_34 = Pin("P8_34")  # UART3_RTSN - GPIO_81
189 P8_35 = Pin("P8_35")  # UART4_CTSN - GPIO_8
190 P8_36 = Pin("P8_36")  # UART3_CTSN - GPIO_80
191 P8_37 = Pin("P8_37")  # UART5_TXD - GPIO_78
192 P8_38 = Pin("P8_38")  # UART5_RXD - GPIO_79
193 P8_39 = Pin("P8_39")  # GPIO2_12 - GPIO_76
194 P8_40 = Pin("P8_40")  # GPIO2_13 - GPIO_77
195 P8_41 = Pin("P8_41")  # GPIO2_10 - GPIO_74
196 P8_42 = Pin("P8_42")  # GPIO2_11 - GPIO_75
197 P8_43 = Pin("P8_43")  # GPIO2_8 - GPIO_72
198 P8_44 = Pin("P8_44")  # GPIO2_9 - GPIO_73
199 P8_45 = Pin("P8_45")  # GPIO2_6 - GPIO_70
200 P8_46 = Pin("P8_46")  # GPIO2_7 - GPIO_71
201
202 # P9_1 = DGND           # DGND - GPIO_0
203 # P9_2 = DGND           # DGND - GPIO_0
204 # P9_3 = VDD_3V3        # VDD_3V3 - GPIO_0
205 # P9_4 = VDD_3V3        # VDD_3V3 - GPIO_0
206 # P9_5 = VDD_5V         # VDD_5V - GPIO_0
207 # P9_6 = VDD_5V         # VDD_5V - GPIO_0
208 # P9_7 = SYS_5V         # SYS_5V - GPIO_0
209 # P9_8 = SYS_5V         # SYS_5V - GPIO_0
210 # P9_9 = PWR_BUT        # PWR_BUT - GPIO_0
211 # P9_10 = SYS_RESETN    # SYS_RESETn - GPIO_0
212 P9_11 = Pin("P9_11")  # UART4_RXD - GPIO_30
213 P9_12 = Pin("P9_12")  # GPIO1_28 - GPIO_60
214 P9_13 = Pin("P9_13")  # UART4_TXD - GPIO_31
215 P9_14 = Pin("P9_14")  # EHRPWM1A - GPIO_50
216 P9_15 = Pin("P9_15")  # GPIO1_16 - GPIO_48
217 P9_16 = Pin("P9_16")  # EHRPWM1B - GPIO_51
218 P9_17 = Pin("P9_17")  # I2C1_SCL - GPIO_5
219 P9_18 = Pin("P9_18")  # I2C1_SDA - GPIO_4
220 P9_19 = Pin("P9_19")  # I2C2_SCL - GPIO_13
221 P9_20 = Pin("P9_20")  # I2C2_SDA - GPIO_12
222 P9_21 = Pin("P9_21")  # UART2_TXD - GPIO_3
223 P9_22 = Pin("P9_22")  # UART2_RXD - GPIO_2
224 P9_23 = Pin("P9_23")  # GPIO1_17 - GPIO_49
225 P9_24 = Pin("P9_24")  # UART1_TXD - GPIO_15
226 P9_25 = Pin("P9_25")  # GPIO3_21 - GPIO_117
227 P9_26 = Pin("P9_26")  # UART1_RXD - GPIO_14
228 P9_27 = Pin("P9_27")  # GPIO3_19 - GPIO_115
229 P9_28 = Pin("P9_28")  # SPI1_CS0 - GPIO_113
230 P9_29 = Pin("P9_29")  # SPI1_D0 - GPIO_111
231 P9_30 = Pin("P9_30")  # SPI1_D1 - GPIO_112
232 P9_31 = Pin("P9_31")  # SPI1_SCLK - GPIO_110
233 # P9_32 = VDD_ADC       # VDD_ADC - GPIO_0
234 # P9_33 = AIN4          # AIN4 - GPIO_0
235 # P9_34 = GNDA_ADC      # GNDA_ADC - GPIO_0
236 # P9_35 = AIN6          # AIN6 - GPIO_0
237 # P9_36 = AIN5          # AIN5 - GPIO_0
238 # P9_37 = AIN2          # AIN2 - GPIO_0
239 # P9_38 = AIN3          # AIN3 - GPIO_0
240 # P9_39 = AIN0          # AIN0 - GPIO_0
241 # P9_40 = AIN1          # AIN1 - GPIO_0
242 P9_41 = Pin("P9_41")  # CLKOUT2 - GPIO_20
243 P9_42 = Pin("P9_42")  # GPIO0_7 - GPIO_7
244 # P9_43 = DGND          # DGND - GPIO_0
245 # P9_44 = DGND          # DGND - GPIO_0
246 # P9_45 = DGND          # DGND - GPIO_0
247 # P9_46 = DGND          # DGND - GPIO_0
248
249
250 ##########################################
251 # common to all beagles
252 USR0 = Pin("USR0")  # USR0 - GPIO_53
253 USR1 = Pin("USR1")  # USR1 - GPIO_54
254 USR2 = Pin("USR2")  # USR2 - GPIO_55
255 USR3 = Pin("USR3")  # USR3 - GPIO_56
256
257
258 ##########################################
259 # specials
260
261 # analog input
262 AIN0 = Pin("AIN0")
263 AIN1 = Pin("AIN1")
264 AIN2 = Pin("AIN2")
265 AIN3 = Pin("AIN3")
266 AIN4 = Pin("AIN4")
267 AIN5 = Pin("AIN5")
268 AIN6 = Pin("AIN6")
269 AIN7 = Pin("AIN7")
270
271 # PWM
272 EHRPWM0A = Pin("EHRPWM0A")
273 EHRPWM0B = Pin("EHRPWM0B")
274 EHRPWM1A = Pin("EHRPWM1A")
275 EHRPWM1B = Pin("EHRPWM1B")
276 EHRPWM2A = Pin("EHRPWM2A")
277 EHRPWM2B = Pin("EHRPWM2B")
278 ECAPPWM0 = Pin("ECAPPWM0")
279 ECAPPWM2 = Pin("ECAPPWM2")
280 TIMER4 = Pin("TIMER4")
281 TIMER5 = Pin("TIMER5")
282 TIMER6 = Pin("TIMER6")
283 TIMER7 = Pin("TIMER7")
284
285
286 # I2C1
287 I2C1_SDA = Pin("I2C1_SDA")
288 I2C1_SCL = Pin("I2C1_SCL")
289
290 # I2C2
291 I2C2_SDA = Pin("I2C2_SDA")
292 I2C2_SCL = Pin("I2C2_SCL")
293
294 # SPI0
295 SPI0_CS0 = Pin("SPI0_CS0")
296 SPI0_SCLK = Pin("SPI0_SCLK")
297 SPI0_D1 = Pin("SPI0_D1")
298 SPI0_D0 = Pin("SPI0_D0")
299
300 # SPI1
301 SPI1_CS0 = Pin("SPI1_CS0")
302 SPI1_CS1 = Pin("SPI1_CS1")
303 SPI1_SCLK = Pin("SPI1_SCLK")
304 SPI1_D1 = Pin("SPI1_D1")
305 SPI1_D0 = Pin("SPI1_D0")
306
307 # UART0
308 UART0_TXD = Pin("UART0_TXD")
309 UART0_RXD = Pin("UART0_RXD")
310
311 # UART1
312 UART1_TXD = Pin("UART1_TXD")
313 UART1_RXD = Pin("UART1_RXD")
314 UART1_RTSn = Pin("UART1_RTSn")
315 UART1_CTSn = Pin("UART1_CTSn")
316
317 # UART2
318 UART2_TXD = Pin("UART2_TXD")
319 UART2_RXD = Pin("UART2_RXD")
320
321 # UART3
322 UART3_TXD = Pin("UART3_TXD")
323 UART3_RXD = Pin("UART3_RXD")
324 UART3_RTSn = Pin("UART3_RTSn")
325 UART3_CTSn = Pin("UART3_CTSn")
326
327 # UART4
328 UART4_TXD = Pin("UART4_TXD")
329 UART4_RXD = Pin("UART4_RXD")
330 UART4_RTSn = Pin("UART4_RTSn")
331 UART4_CTSn = Pin("UART4_CTSn")
332
333 # UART5
334 UART5_TXD = Pin("UART5_TXD")
335 UART5_RXD = Pin("UART5_RXD")
336 UART5_RTSn = Pin("UART5_RTSn")
337 UART5_CTSn = Pin("UART5_CTSn")
338
339
340 # ordered as spiId, sckId, mosiId, misoId
341 spiPorts = (
342     (0, SPI0_SCLK, SPI0_D1, SPI0_D0),
343     (1, SPI1_SCLK, SPI1_D1, SPI1_D0),
344 )
345
346 # ordered as uartId, txId, rxId
347 uartPorts = (
348     # (0, UART0_TXD, UART0_RXD),
349     # (1, UART1_TXD, UART1_RXD),
350     # (2, UART2_TXD, UART2_RXD),
351     # (4, UART4_TXD, UART4_RXD),
352     # (5, UART5_TXD, UART5_RXD),
353 )
354
355 # ordered as i2cId, SCL, SDA
356 i2cPorts = (
357     (1, I2C1_SCL, I2C1_SDA),
358     (2, I2C2_SCL, I2C2_SDA),
359 )
360
361 PWM1 = P1_36
362 PWM2 = P1_33
363 PWM3 = P2_1
364 PWM4 = P2_3
365
366 pwmOuts = (((0, 0), PWM1), ((0, 1), PWM2), ((2, 0), PWM3), ((4, 1), PWM4))