X-Git-Url: https://git.ayoreis.com/Adafruit_Blinka-hackapet.git/blobdiff_plain/3f017a27633d001cdb30d6e36bfce3baea3ab52d..40b64d58a1a537ccc55e1c45fe6804b495c6e055:/src/adafruit_blinka/microcontroller/am335x/pin.py diff --git a/src/adafruit_blinka/microcontroller/am335x/pin.py b/src/adafruit_blinka/microcontroller/am335x/pin.py new file mode 100644 index 0000000..24ae0c1 --- /dev/null +++ b/src/adafruit_blinka/microcontroller/am335x/pin.py @@ -0,0 +1,198 @@ +import Adafruit_BBIO.GPIO as GPIO + +# Pins dont exist in CPython so...lets make our own! +class Pin: + IN = 0 + OUT = 1 + LOW = 0 + HIGH = 1 + PULL_NONE = 0 + PULL_UP = 1 + PULL_DOWN = 2 + + id = None + _value = LOW + _mode = IN + + def __init__(self, pin_name): + self.id = pin_name + + def __repr__(self): + return str(self.id) + + def __eq__(self, other): + return self.id == other + + def init(self, mode=IN, pull=None): + if mode != None: + if mode == self.IN: + self._mode = self.IN + GPIO.setup(self.id, GPIO.IN) + elif mode == self.OUT: + self._mode = self.OUT + GPIO.setup(self.id, GPIO.OUT) + else: + raise RuntimeError("Invalid mode for pin: %s" % self.id) + if pull != None: + if self._mode != self.IN: + raise RuntimeError("Cannot set pull resistor on output") + if pull == self.PULL_UP: + GPIO.setup(self.id, GPIO.IN, pull_up_down=GPIO.PUD_UP) + elif pull == self.PULL_DOWN: + GPIO.setup(self.id, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) + else: + raise RuntimeError("Invalid pull for pin: %s" % self.id) + + def value(self, val=None): + if val != None: + if val == self.LOW: + self._value = val + GPIO.output(self.id, val) + elif val == self.HIGH: + self._value = val + GPIO.output(self.id, val) + else: + raise RuntimeError("Invalid value for pin") + else: + return GPIO.input(self.id) + +P8_3 = Pin('P8_3') +P8_4 = Pin('P8_4') +P8_5 = Pin('P8_5') +P8_6 = Pin('P8_6') +P8_7 = Pin('P8_7') +P8_8 = Pin('P8_8') +P8_9 = Pin('P8_9') +P8_10 = Pin('P8_10') +P8_11 = Pin('P8_11') +P8_12 = Pin('P8_12') +P8_13 = Pin('P8_13') +P8_14 = Pin('P8_14') +P8_15 = Pin('P8_15') +P8_16 = Pin('P8_16') +P8_17 = Pin('P8_17') +P8_18 = Pin('P8_18') +P8_19 = Pin('P8_19') +P8_20 = Pin('P8_20') +P8_21 = Pin('P8_21') +P8_22 = Pin('P8_22') +P8_23 = Pin('P8_23') +P8_24 = Pin('P8_24') +P8_25 = Pin('P8_25') +P8_26 = Pin('P8_26') +P8_27 = Pin('P8_27') +P8_28 = Pin('P8_28') +P8_29 = Pin('P8_29') +P8_30 = Pin('P8_30') +P8_31 = Pin('P8_31') +P8_32 = Pin('P8_32') +P8_33 = Pin('P8_33') +P8_34 = Pin('P8_34') +P8_35 = Pin('P8_35') +P8_36 = Pin('P8_36') +P8_37 = Pin('P8_37') +P8_38 = Pin('P8_38') +P8_39 = Pin('P8_39') +P8_40 = Pin('P8_40') +P8_41 = Pin('P8_41') +P8_42 = Pin('P8_42') +P8_43 = Pin('P8_43') +P8_44 = Pin('P8_44') +P8_45 = Pin('P8_45') +P8_46 = Pin('P8_46') +P9_11 = Pin('P9_11') +P9_12 = Pin('P9_12') +P9_13 = Pin('P9_13') +P9_14 = Pin('P9_14') +P9_15 = Pin('P9_15') +P9_16 = Pin('P9_16') +P9_17 = Pin('P9_17') +P9_18 = Pin('P9_18') +P9_19 = Pin('P9_19') +P9_20 = Pin('P9_20') +P9_21 = Pin('P9_21') +P9_22 = Pin('P9_22') +P9_23 = Pin('P9_23') +P9_24 = Pin('P9_24') +P9_25 = Pin('P9_25') +P9_26 = Pin('P9_26') +P9_27 = Pin('P9_27') +P9_28 = Pin('P9_28') +P9_29 = Pin('P9_29') +P9_30 = Pin('P9_30') +P9_31 = Pin('P9_31') +P9_41 = Pin('P9_41') +P9_42 = Pin('P9_42') + +USR0 = Pin('USR0') +USR1 = Pin('USR1') +USR2 = Pin('USR2') +USR3 = Pin('USR3') + +SCL = Pin('P9_19') +SDA = Pin('P9_20') + +# Refer to header default pin modes +# http://beagleboard.org/static/images/cape-headers.png +# +# P9_17 (SPI0_CSO => CE0) enables peripheral device +# P9_18 (SPI0_D1 => MOSI) outputs data to peripheral device +# P9_21 (SPIO_DO => MISO) receives data from peripheral device +# P9_22 (SPI0_SCLK => SCLK) outputs clock signal +# +# Use config-pin to set pin mode for SPI pins +# https://github.com/beagleboard/bb.org-overlays/tree/master/tools/beaglebone-universal-io +# config-pin p9.17 spi_cs +# config-pin p9.18 spi +# config-pin p9.21 spi +# config-pin p9.22 spi_sclk +# +CE0 = Pin('P9_17') +MOSI = Pin('P9_18') +MISO = Pin('P9_21') +SCLK = Pin('P9_22') +#CircuitPython naming convention for SPI Clock +SCK = Pin('P9_22') + +# Pins for SPI1 +# refer to: +# http://beagleboard.org/static/images/cape-headers-spi.png +# +# CE1 P9.28 SPI1_CS0 +# MISO_1 P9.29 SPI1_D0 +# MOSI_1 P9.30 SPI1_D1 +# SCLK_1 P9.31 SPI_SCLK +# +# SPI1 conflicts with HDMI Audio (McASP) +# +# Refer to: +# https://elinux.org/Beagleboard:BeagleBoneBlack_Debian#U-Boot_Overlays +# +# To Disable HDMI AUDIO, uncomment this line in /boot/uEnv.txt: +# disable_uboot_overlay_audio=1 +# +# Set pin modes for SPI1 with: +# +# config-pin p9.28 spi1_cs +# config-pin p9.29 spi1 +# config-pin p9.30 spi1 +# config-pin p9.31 spi_sclk +CE1 = Pin('P9_28') +MOSI_1 = Pin('P9_29') +MISO_1 = Pin('P9_30') +SCLK_1 = Pin('P9_31') +#CircuitPython naming convention for SPI Clock +SCK_1 = Pin('P9_31') + +# ordered as spiId, sckId, mosiId, misoId +spiPorts = ((0, SCLK, MOSI, MISO), (1, SCLK_1, MOSI_1, MISO_1)) + +# ordered as uartId, txId, rxId +uartPorts = ( + (), +) + +i2cPorts = ( + (2, SCL, SDA), +) +