X-Git-Url: https://git.ayoreis.com/Adafruit_Blinka-hackapet.git/blobdiff_plain/98f4a4378478d11e514acd7ff22a9c674f3cbca3..c2bc4a90827f28abb6b51eae659a1f80a65c0497:/src/adafruit_blinka/microcontroller/nxp_lpc4330/spi.py diff --git a/src/adafruit_blinka/microcontroller/nxp_lpc4330/spi.py b/src/adafruit_blinka/microcontroller/nxp_lpc4330/spi.py index 37cc6c4..29f4734 100644 --- a/src/adafruit_blinka/microcontroller/nxp_lpc4330/spi.py +++ b/src/adafruit_blinka/microcontroller/nxp_lpc4330/spi.py @@ -1,6 +1,10 @@ +# SPDX-FileCopyrightText: 2021 Melissa LeBlanc-Williams for Adafruit Industries +# +# SPDX-License-Identifier: MIT """SPI Class for NXP LPC4330""" from greatfet import GreatFET + class SPI: """Custom I2C Class for NXP LPC4330""" @@ -10,6 +14,8 @@ class SPI: self._gf = GreatFET() self._frequency = None self.buffer_size = 255 + self._mode = 0 + self._spi = None self._presets = { 204000: (100, 9), 408000: (100, 4), @@ -25,9 +31,9 @@ class SPI: 34000000: (2, 2), 51000000: (2, 1), 102000000: (2, 0), - } - - # pylint: disable=too-many-arguments + } + + # pylint: disable=too-many-arguments,unused-argument def init( self, baudrate=100000, @@ -44,7 +50,7 @@ class SPI: polarity = int(polarity) phase = int(phase) self._mode = (polarity << 1) | phase - + # Using API due to possible interface change self._spi = self._gf.apis.spi # Check baudrate against presets and adjust to the closest one @@ -57,6 +63,7 @@ class SPI: # Set the polarity and phase (the "SPI mode"). self._spi.set_clock_polarity_and_phase(self._mode) + # pylint: enable=too-many-arguments def _find_closest_preset(self, target_frequency): @@ -65,9 +72,10 @@ class SPI: to the found value """ closest_preset = None - for frequency in self._presets: - preset = self._presets[frequency] - if self._frequency is None or abs(frequency - target_frequency) < abs(self._frequency - target_frequency): + for frequency, preset in self._presets.items(): + if self._frequency is None or abs(frequency - target_frequency) < abs( + self._frequency - target_frequency + ): self._frequency = frequency closest_preset = preset @@ -87,7 +95,7 @@ class SPI: def readinto(self, buf, start=0, end=None, write_value=0): """Read data from SPI and into the buffer""" end = end if end else len(buf) - result = self._transmit([], end - start) + result = self._transmit([write_value] * (end - start), end - start) for i, b in enumerate(result): buf[start + i] = b @@ -104,8 +112,6 @@ class SPI: in_end = in_end if in_end else len(buffer_in) result = self._transmit(buffer_out[out_start:out_end], in_end - in_start) - for i, b in enumerate(result): - buf[start + i] = b for i, b in enumerate(result): buffer_in[in_start + i] = b @@ -126,8 +132,8 @@ class SPI: # Transmit our data in chunks of the buffer size. while data_to_transmit: # Extract a single data chunk from the transmit buffer. - chunk = data_to_transmit[0:self.buffer_size] - del data_to_transmit[0:self.buffer_size] + chunk = data_to_transmit[0 : self.buffer_size] + del data_to_transmit[0 : self.buffer_size] # Finally, exchange the data. response = self._spi.clock_data(len(chunk), bytes(chunk))