Standardize Marlin SPI (part 1) (#19989)
This commit is contained in:
		@@ -127,11 +127,9 @@
 | 
			
		||||
    for (uint16_t i = 0; i < nbyte; i++) doio(buf[i]);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void spiSend(uint32_t chan, byte b) {
 | 
			
		||||
  }
 | 
			
		||||
  void spiSend(uint32_t chan, byte b) {}
 | 
			
		||||
 | 
			
		||||
  void spiSend(uint32_t chan, const uint8_t* buf, size_t nbyte) {
 | 
			
		||||
  }
 | 
			
		||||
  void spiSend(uint32_t chan, const uint8_t* buf, size_t nbyte) {}
 | 
			
		||||
 | 
			
		||||
  // Read single byte from SPI
 | 
			
		||||
  uint8_t spiRec() { return doio(0xFF); }
 | 
			
		||||
@@ -143,9 +141,7 @@
 | 
			
		||||
    for (uint16_t i = 0; i < nbyte; i++) buf[i] = doio(0xFF);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  uint8_t spiTransfer(uint8_t b) {
 | 
			
		||||
    return doio(b);
 | 
			
		||||
  }
 | 
			
		||||
  uint8_t spiTransfer(uint8_t b) { return doio(b); }
 | 
			
		||||
 | 
			
		||||
  // Write from buffer to SPI
 | 
			
		||||
  void spiSendBlock(uint8_t token, const uint8_t* buf) {
 | 
			
		||||
@@ -201,6 +197,15 @@ SPIClass::SPIClass(uint8_t device) {
 | 
			
		||||
  GPDMA_Init();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SPIClass::SPIClass(pin_t mosi, pin_t miso, pin_t sclk, pin_t ssel) {
 | 
			
		||||
  #if BOARD_NR_SPI >= 1
 | 
			
		||||
    if (mosi == BOARD_SPI1_MOSI_PIN) SPIClass(1);
 | 
			
		||||
  #endif
 | 
			
		||||
  #if BOARD_NR_SPI >= 2
 | 
			
		||||
    if (mosi == BOARD_SPI2_MOSI_PIN) SPIClass(2);
 | 
			
		||||
  #endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SPIClass::begin() {
 | 
			
		||||
  // Init the SPI pins in the first begin call
 | 
			
		||||
  if ((_currentSetting->spi_d == LPC_SSP0 && spiInitialised[0] == false) ||
 | 
			
		||||
@@ -331,25 +336,15 @@ void SPIClass::read(uint8_t *buf, uint32_t len) {
 | 
			
		||||
  for (uint16_t i = 0; i < len; i++) buf[i] = transfer(0xFF);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SPIClass::setClock(uint32_t clock) {
 | 
			
		||||
  _currentSetting->clock = clock;
 | 
			
		||||
}
 | 
			
		||||
void SPIClass::setClock(uint32_t clock) { _currentSetting->clock = clock; }
 | 
			
		||||
 | 
			
		||||
void SPIClass::setModule(uint8_t device) {
 | 
			
		||||
  _currentSetting = &_settings[device - 1];// SPI channels are called 1 2 and 3 but the array is zero indexed
 | 
			
		||||
}
 | 
			
		||||
void SPIClass::setModule(uint8_t device) { _currentSetting = &_settings[device - 1]; } // SPI channels are called 1, 2, and 3 but the array is zero-indexed
 | 
			
		||||
 | 
			
		||||
void SPIClass::setBitOrder(uint8_t bitOrder) {
 | 
			
		||||
  _currentSetting->bitOrder = bitOrder;
 | 
			
		||||
}
 | 
			
		||||
void SPIClass::setBitOrder(uint8_t bitOrder) { _currentSetting->bitOrder = bitOrder; }
 | 
			
		||||
 | 
			
		||||
void SPIClass::setDataMode(uint8_t dataMode) {
 | 
			
		||||
  _currentSetting->dataMode = dataMode;
 | 
			
		||||
}
 | 
			
		||||
void SPIClass::setDataMode(uint8_t dataMode) { _currentSetting->dataMode = dataMode; }
 | 
			
		||||
 | 
			
		||||
void SPIClass::setDataSize(uint32_t ds) {
 | 
			
		||||
  _currentSetting->dataSize = ds;
 | 
			
		||||
}
 | 
			
		||||
void SPIClass::setDataSize(uint32_t dataSize) { _currentSetting->dataSize = dataSize; }
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Set up/tear down
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										45
									
								
								Marlin/src/HAL/LPC1768/MarlinSPI.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								Marlin/src/HAL/LPC1768/MarlinSPI.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Marlin 3D Printer Firmware
 | 
			
		||||
 * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
 | 
			
		||||
 *
 | 
			
		||||
 * Based on Sprinter and grbl.
 | 
			
		||||
 * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation, either version 3 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include <SPI.h>
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Marlin currently requires 3 SPI classes:
 | 
			
		||||
 *
 | 
			
		||||
 * SPIClass:
 | 
			
		||||
 *  This class is normally provided by frameworks and has a semi-default interface.
 | 
			
		||||
 *  This is needed because some libraries reference it globally.
 | 
			
		||||
 *
 | 
			
		||||
 * SPISettings:
 | 
			
		||||
 *  Container for SPI configs for SPIClass. As above, libraries may reference it globally.
 | 
			
		||||
 *
 | 
			
		||||
 * These two classes are often provided by frameworks so we cannot extend them to add
 | 
			
		||||
 * useful methods for Marlin.
 | 
			
		||||
 *
 | 
			
		||||
 * MarlinSPI:
 | 
			
		||||
 *  Provides the default SPIClass interface plus some Marlin goodies such as a simplified
 | 
			
		||||
 *  interface for SPI DMA transfer.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
using MarlinSPI = SPIClass;
 | 
			
		||||
@@ -126,6 +126,11 @@ public:
 | 
			
		||||
   */
 | 
			
		||||
  SPIClass(uint8_t spiPortNumber);
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Init using pins
 | 
			
		||||
   */
 | 
			
		||||
  SPIClass(pin_t mosi, pin_t miso, pin_t sclk, pin_t ssel = (pin_t)-1);
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Select and configure the current selected SPI device to use
 | 
			
		||||
   */
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user