Merge pull request #80 from caternuson/no_cs

Refinements for no CS configs
This commit is contained in:
Limor "Ladyada" Fried 2022-01-24 21:17:42 -05:00 committed by GitHub
commit b689ae60a2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 12 deletions

View File

@ -88,8 +88,10 @@ Adafruit_SPIDevice::~Adafruit_SPIDevice() {
* init * init
*/ */
bool Adafruit_SPIDevice::begin(void) { bool Adafruit_SPIDevice::begin(void) {
pinMode(_cs, OUTPUT); if (_cs != -1) {
digitalWrite(_cs, HIGH); pinMode(_cs, OUTPUT);
digitalWrite(_cs, HIGH);
}
if (_spi) { // hardware SPI if (_spi) { // hardware SPI
_spi->begin(); _spi->begin();
@ -299,7 +301,7 @@ bool Adafruit_SPIDevice::write(uint8_t *buffer, size_t len,
_spi->beginTransaction(*_spiSetting); _spi->beginTransaction(*_spiSetting);
} }
digitalWrite(_cs, LOW); setChipSelect(LOW);
// do the writing // do the writing
#if defined(ARDUINO_ARCH_ESP32) #if defined(ARDUINO_ARCH_ESP32)
if (_spi) { if (_spi) {
@ -319,7 +321,7 @@ bool Adafruit_SPIDevice::write(uint8_t *buffer, size_t len,
transfer(buffer[i]); transfer(buffer[i]);
} }
} }
digitalWrite(_cs, HIGH); setChipSelect(HIGH);
if (_spi) { if (_spi) {
_spi->endTransaction(); _spi->endTransaction();
@ -362,9 +364,10 @@ bool Adafruit_SPIDevice::read(uint8_t *buffer, size_t len, uint8_t sendvalue) {
if (_spi) { if (_spi) {
_spi->beginTransaction(*_spiSetting); _spi->beginTransaction(*_spiSetting);
} }
digitalWrite(_cs, LOW);
setChipSelect(LOW);
transfer(buffer, len); transfer(buffer, len);
digitalWrite(_cs, HIGH); setChipSelect(HIGH);
if (_spi) { if (_spi) {
_spi->endTransaction(); _spi->endTransaction();
@ -406,7 +409,7 @@ bool Adafruit_SPIDevice::write_then_read(uint8_t *write_buffer,
_spi->beginTransaction(*_spiSetting); _spi->beginTransaction(*_spiSetting);
} }
digitalWrite(_cs, LOW); setChipSelect(LOW);
// do the writing // do the writing
#if defined(ARDUINO_ARCH_ESP32) #if defined(ARDUINO_ARCH_ESP32)
if (_spi) { if (_spi) {
@ -452,7 +455,7 @@ bool Adafruit_SPIDevice::write_then_read(uint8_t *write_buffer,
DEBUG_SERIAL.println(); DEBUG_SERIAL.println();
#endif #endif
digitalWrite(_cs, HIGH); setChipSelect(HIGH);
if (_spi) { if (_spi) {
_spi->endTransaction(); _spi->endTransaction();
@ -476,11 +479,9 @@ bool Adafruit_SPIDevice::write_and_read(uint8_t *buffer, size_t len) {
_spi->beginTransaction(*_spiSetting); _spi->beginTransaction(*_spiSetting);
} }
digitalWrite(_cs, LOW); setChipSelect(LOW);
transfer(buffer, len); transfer(buffer, len);
setChipSelect(HIGH);
digitalWrite(_cs, HIGH);
if (_spi) { if (_spi) {
_spi->endTransaction(); _spi->endTransaction();
@ -489,4 +490,10 @@ bool Adafruit_SPIDevice::write_and_read(uint8_t *buffer, size_t len) {
return true; return true;
} }
void Adafruit_SPIDevice::setChipSelect(int value) {
if (_cs == -1)
return;
digitalWrite(_cs, value);
}
#endif // SPI exists #endif // SPI exists

View File

@ -95,6 +95,7 @@ private:
uint32_t _freq; uint32_t _freq;
BusIOBitOrder _dataOrder; BusIOBitOrder _dataOrder;
uint8_t _dataMode; uint8_t _dataMode;
void setChipSelect(int value);
int8_t _cs, _sck, _mosi, _miso; int8_t _cs, _sck, _mosi, _miso;
#ifdef BUSIO_USE_FAST_PINIO #ifdef BUSIO_USE_FAST_PINIO