]> Repositories - Adafruit_Blinka-hackapet.git/blob - src/adafruit_blinka/microcontroller/nxp_lpc4330/pin.py
Added GreatFET One Support
[Adafruit_Blinka-hackapet.git] / src / adafruit_blinka / microcontroller / nxp_lpc4330 / pin.py
1 """NXP LPC4330 pin names"""
2 try:
3     from greatfet import GreatFET
4     from greatfet.interfaces.adc import ADC
5
6     gf = GreatFET()
7 except:
8     raise RuntimeError("Unable to create GreatFET object. Make sure library is installed and the device is connected.")
9
10 class Pin:
11     """A basic Pin class for the NXP LPC4330 that acts as a wrapper for the GreatFET api."""
12
13     # pin modes
14     OUT = gf.gpio.DIRECTION_OUT
15     IN = gf.gpio.DIRECTION_IN
16     ADC = 2
17     DAC = 3
18
19     # pin values
20     LOW = 0
21     HIGH = 1
22
23     def __init__(self, pin_id=None):
24         self.id = pin_id
25         self._mode = None
26         self._pin = None
27
28     def init(self, mode=IN, pull=None):
29         """Initialize the Pin"""
30         if self.id is None:
31             raise RuntimeError("Can not init a None type pin.")
32         if mode in (Pin.IN, Pin.OUT):
33             if self.id not in gf.GPIO_MAPPINGS:
34                 raise ValueError("Pin does not have GPIO capabilities")
35             self._pin = gf.gpio.get_pin(self.id)
36             self._pin.set_direction(mode)
37         elif mode == Pin.ADC:
38             # ADC only available on these pins
39             if self.id not in gf.ADC_MAPPINGS:
40                 raise ValueError("Pin does not have ADC capabilities")
41             gf.ADC_MAPPINGS[self.id]
42             # TODO: figure out a way to pass the ADC number without breaking the interface
43             self._pin = ADC(gf, self.id)
44         elif mode == Pin.DAC:
45             # DAC only available on these pins
46             if self.id not in ("J2_P5"):
47                 raise ValueError("Pin does not have DAC capabilities")
48             self._pin = gf.apis.dac
49             self._pin.initialize()
50         else:
51             raise ValueError("Incorrect pin mode: {}".format(mode))
52         self._mode = mode
53
54     def value(self, val=None):
55         """Set or return the Pin Value"""
56         # Digital In / Out
57         if self._mode in (Pin.IN, Pin.OUT):
58             # digital read
59             if val is None:
60                 return self._pin.get_state()
61             # digital write
62             if val in (Pin.LOW, Pin.HIGH):
63                 self._pin.set_state(val)
64                 return None
65             # nope
66             raise ValueError("Invalid value for pin.")
67         # Analog In
68         if self._mode == Pin.ADC:
69             if val is None:
70                 # Read ADC here
71                 return self._pin.read_samples()[0]
72             # read only
73             raise AttributeError("'AnalogIn' object has no attribute 'value'")
74         # Analog Out
75         if self._mode == Pin.DAC:
76             if val is None:
77                 # write only
78                 raise AttributeError("unreadable attribute")
79             # Set DAC Here
80             self._pin.set_value(int(val))
81             return None
82         raise RuntimeError(
83             "No action for mode {} with value {}".format(self._mode, val)
84         )
85
86 # create pin instances for each pin
87 # J1 Header Pins
88 J1_P3 = Pin("J1_P3")
89 J1_P4 = Pin("J1_P4")
90 J1_P5 = Pin("J1_P5")
91 J1_P6 = Pin("J1_P6")
92 J1_P7 = Pin("J1_P7")
93 J1_P8 = Pin("J1_P8")
94 J1_P9 = Pin("J1_P9")
95 J1_P10 = Pin("J1_P10")
96 J1_P12 = Pin("J1_P12")
97 J1_P13 = Pin("J1_P13")
98 J1_P14 = Pin("J1_P14")
99 J1_P15 = Pin("J1_P15")
100 J1_P16 = Pin("J1_P16")
101 J1_P17 = Pin("J1_P17")
102 J1_P18 = Pin("J1_P18")
103 J1_P19 = Pin("J1_P19")
104 J1_P20 = Pin("J1_P20")
105 J1_P21 = Pin("J1_P21")
106 J1_P22 = Pin("J1_P22")
107 J1_P23 = Pin("J1_P23")
108 J1_P24 = Pin("J1_P24")
109 J1_P25 = Pin("J1_P25")
110 J1_P26 = Pin("J1_P26")
111 J1_P27 = Pin("J1_P27")
112 J1_P28 = Pin("J1_P28")
113 J1_P29 = Pin("J1_P29")
114 J1_P30 = Pin("J1_P30")
115 J1_P31 = Pin("J1_P31")
116 J1_P32 = Pin("J1_P32")
117 J1_P33 = Pin("J1_P33")
118 J1_P34 = Pin("J1_P34")
119 J1_P35 = Pin("J1_P35")
120 J1_P37 = Pin("J1_P37")
121 J1_P39 = Pin("J1_P39")  # MOSI
122 J1_P40 = Pin("J1_P40")  # MISO
123
124
125
126 # J2 Header Pins
127 J2_P3 = Pin("J2_P3")
128 J2_P4 = Pin("J2_P4")
129 J2_P5 = Pin("J2_P5")    # ADC, ADC, DAC
130 J2_P6 = Pin("J2_P6")
131 J2_P7 = Pin("J2_P7")
132 J2_P8 = Pin("J2_P8")
133 J2_P9 = Pin("J2_P9")    # ADC, GPIO
134 J2_P10 = Pin("J2_P10")
135 J2_P13 = Pin("J2_P13")
136 J2_P14 = Pin("J2_P14")
137 J2_P15 = Pin("J2_P15")
138 J2_P16 = Pin("J2_P16")  # GPIO, ADC
139 J2_P18 = Pin("J2_P18")
140 J2_P19 = Pin("J2_P19")
141 J2_P20 = Pin("J2_P20")
142 J2_P22 = Pin("J2_P22")
143 J2_P23 = Pin("J2_P23")
144 J2_P24 = Pin("J2_P24")
145 J2_P25 = Pin("J2_P25")
146 J2_P27 = Pin("J2_P27")
147 J2_P28 = Pin("J2_P28")
148 J2_P29 = Pin("J2_P29")
149 J2_P30 = Pin("J2_P30")
150 J2_P31 = Pin("J2_P31")
151 J2_P33 = Pin("J2_P33")
152 J2_P34 = Pin("J2_P34")
153 J2_P35 = Pin("J2_P35")
154 J2_P36 = Pin("J2_P36")
155 J2_P37 = Pin("J2_P37")
156 J2_P38 = Pin("J2_P38")
157
158 # Bonus Row Pins
159 J7_P2 = Pin("J7_P2")
160 J7_P3 = Pin("J7_P3")
161 J7_P4 = Pin("J7_P4")    # ADC, ADC
162 J7_P5 = Pin("J7_P5")    # ADC, ADC
163 J7_P6 = Pin("J7_P6")
164 J7_P7 = Pin("J7_P7")
165 J7_P8 = Pin("J7_P8")
166 J7_P13 = Pin("J7_P13")
167 J7_P14 = Pin("J7_P14")
168 J7_P15 = Pin("J7_P15")
169 J7_P16 = Pin("J7_P16")
170 J7_P17 = Pin("J7_P17")
171 J7_P18 = Pin("J7_P18")
172
173 SCL = Pin()
174 SDA = Pin()
175
176 SCK = Pin()
177 MOSI = J1_P39
178 MISO = J1_P40
179
180 TX = J1_P33
181 RX = J1_P34
182
183 # ordered as uartId, txId, rxId
184 uartPorts = ((0, TX, RX),)
185
186 # pwm outputs: pwm channel and pin
187 pwmOuts = (
188     (0, J1_P4),
189     (1, J1_P6),
190     (2, J1_P28),
191     (3, J1_P30),
192     (4, J2_P36),
193     (5, J2_P34),
194     (6, J2_P33),
195     (7, J1_P34),
196     (8, J2_P9),
197     (9, J1_P6),
198     (10, J1_P25),
199     (11, J1_P32),
200     (12, J1_P31),
201     (13, J2_P3),
202     (14, J1_P3),
203     (15, J1_P5),
204 )