1 # SPDX-FileCopyrightText: 2021 Melissa LeBlanc-Williams for Adafruit Industries
 
   3 # SPDX-License-Identifier: MIT
 
   4 """NXP LPC4330 pin names"""
 
   6     from greatfet import GreatFET
 
   7     from greatfet.interfaces.adc import ADC
 
  10 except ModuleNotFoundError:
 
  12         "Unable to create GreatFET object. Make sure library is "
 
  13         "installed and the device is connected."
 
  14     ) from ModuleNotFoundError
 
  18     """A basic Pin class for the NXP LPC4330 that
 
  19     acts as a wrapper for the GreatFET api.
 
  23     OUT = gf.gpio.DIRECTION_OUT
 
  24     IN = gf.gpio.DIRECTION_IN
 
  32     def __init__(self, pin_id=None):
 
  37     def init(self, mode=IN, pull=None):
 
  38         """Initialize the Pin"""
 
  40             raise RuntimeError("Can not init a None type pin.")
 
  42             raise NotImplementedError("Internal pullups and pulldowns not supported")
 
  43         if mode in (Pin.IN, Pin.OUT):
 
  44             if self.id not in gf.GPIO_MAPPINGS:
 
  45                 raise ValueError("Pin does not have GPIO capabilities")
 
  46             self._pin = gf.gpio.get_pin(self.id)
 
  47             self._pin.set_direction(mode)
 
  49             # ADC only available on these pins
 
  50             if self.id not in gf.ADC_MAPPINGS:
 
  51                 raise ValueError("Pin does not have ADC capabilities")
 
  52             self._pin = ADC(gf, self.id)
 
  54             # DAC only available on these pins
 
  55             if self.id != "J2_P5":
 
  56                 raise ValueError("Pin does not have DAC capabilities")
 
  57             self._pin = gf.apis.dac
 
  58             self._pin.initialize()
 
  60             raise ValueError("Incorrect pin mode: {}".format(mode))
 
  63     def value(self, val=None):
 
  64         """Set or return the Pin Value"""
 
  66         if self._mode in (Pin.IN, Pin.OUT):
 
  69                 return self._pin.get_state()
 
  71             if val in (Pin.LOW, Pin.HIGH):
 
  72                 self._pin.set_state(val)
 
  75             raise ValueError("Invalid value for pin.")
 
  77         if self._mode == Pin.ADC:
 
  80                 return self._pin.read_samples()[0]
 
  82             raise AttributeError("'AnalogIn' object has no attribute 'value'")
 
  84         if self._mode == Pin.DAC:
 
  87                 raise AttributeError("unreadable attribute")
 
  89             self._pin.set_value(int(val))
 
  92             "No action for mode {} with value {}".format(self._mode, val)
 
  96 # create pin instances for each pin
 
 105 J1_P10 = Pin("J1_P10")
 
 106 J1_P12 = Pin("J1_P12")
 
 107 J1_P13 = Pin("J1_P13")
 
 108 J1_P14 = Pin("J1_P14")
 
 109 J1_P15 = Pin("J1_P15")
 
 110 J1_P16 = Pin("J1_P16")
 
 111 J1_P17 = Pin("J1_P17")
 
 112 J1_P18 = Pin("J1_P18")
 
 113 J1_P19 = Pin("J1_P19")
 
 114 J1_P20 = Pin("J1_P20")
 
 115 J1_P21 = Pin("J1_P21")
 
 116 J1_P22 = Pin("J1_P22")
 
 117 J1_P23 = Pin("J1_P23")
 
 118 J1_P24 = Pin("J1_P24")
 
 119 J1_P25 = Pin("J1_P25")
 
 120 J1_P26 = Pin("J1_P26")
 
 121 J1_P27 = Pin("J1_P27")
 
 122 J1_P28 = Pin("J1_P28")
 
 123 J1_P29 = Pin("J1_P29")
 
 124 J1_P30 = Pin("J1_P30")
 
 125 J1_P31 = Pin("J1_P31")
 
 126 J1_P32 = Pin("J1_P32")
 
 127 J1_P33 = Pin("J1_P33")
 
 128 J1_P34 = Pin("J1_P34")
 
 129 J1_P35 = Pin("J1_P35")
 
 130 J1_P37 = Pin("J1_P37")
 
 131 J1_P39 = Pin("J1_P39")  # MOSI
 
 132 J1_P40 = Pin("J1_P40")  # MISO
 
 138 J2_P5 = Pin("J2_P5")  # ADC, ADC, DAC
 
 142 J2_P9 = Pin("J2_P9")  # ADC, GPIO
 
 143 J2_P10 = Pin("J2_P10")
 
 144 J2_P13 = Pin("J2_P13")
 
 145 J2_P14 = Pin("J2_P14")
 
 146 J2_P15 = Pin("J2_P15")
 
 147 J2_P16 = Pin("J2_P16")  # GPIO, ADC
 
 148 J2_P18 = Pin("J2_P18")
 
 149 J2_P19 = Pin("J2_P19")
 
 150 J2_P20 = Pin("J2_P20")
 
 151 J2_P22 = Pin("J2_P22")
 
 152 J2_P23 = Pin("J2_P23")
 
 153 J2_P24 = Pin("J2_P24")
 
 154 J2_P25 = Pin("J2_P25")
 
 155 J2_P27 = Pin("J2_P27")
 
 156 J2_P28 = Pin("J2_P28")
 
 157 J2_P29 = Pin("J2_P29")
 
 158 J2_P30 = Pin("J2_P30")
 
 159 J2_P31 = Pin("J2_P31")
 
 160 J2_P33 = Pin("J2_P33")
 
 161 J2_P34 = Pin("J2_P34")
 
 162 J2_P35 = Pin("J2_P35")
 
 163 J2_P36 = Pin("J2_P36")
 
 164 J2_P37 = Pin("J2_P37")
 
 165 J2_P38 = Pin("J2_P38")
 
 170 J7_P4 = Pin("J7_P4")  # ADC, ADC
 
 171 J7_P5 = Pin("J7_P5")  # ADC, ADC
 
 175 J7_P13 = Pin("J7_P13")
 
 176 J7_P14 = Pin("J7_P14")
 
 177 J7_P15 = Pin("J7_P15")
 
 178 J7_P16 = Pin("J7_P16")
 
 179 J7_P17 = Pin("J7_P17")
 
 180 J7_P18 = Pin("J7_P18")
 
 192 # ordered as uartId, txId, rxId
 
 193 uartPorts = ((0, TX, RX),)
 
 195 # pwm outputs: pwm channel and pin