Program Listing for File spi3w-ino.hpp
↰ Return to documentation for file (src/framework/arduino/pal/spi3w-ino.hpp)
/*
* \file spi3w-ino.hpp
* \brief Arduino SPI 3wire extension
* \author Infineon Technologies AG
* \version 4.0.0
* \copyright 2020-2024 Infineon Technologies AG
*
* SPDX-License-Identifier: MIT
*/
#ifndef SPI3W_INO_HPP
#define SPI3W_INO_HPP
#include <Arduino.h>
#include "SPI.h"
#include "pal-pin-types.hpp"
namespace tle5012
{
#define SPI3W_ARD 1
#define SPI3W_XMC 2
#define SPI3W_ESP32 3
#define MAX_SLAVE_NUM 4
#define SPEED 1000000U
#if defined(ARDUINO_UNOR4_MINIMA) || defined(ARDUINO_UNOR4_WIFI)
// This part is yet to be implemented
class SPIClass3W : public ArduinoSPI {
#elif defined(ARDUINO_ARCH_RP2040)
// This part is yet to be implemented
class SPIClass3W : public MbedSPI {
#elif defined(ARDUINO_ARCH_SAMD)
// This part is yet to be implemented
class SPIClass3W : public SPIClassSAMD {
#else
class SPIClass3W : public SPIClass {
#endif
public:
#if defined(UC_FAMILY) && (UC_FAMILY == 1 || UC_FAMILY == 4)
#define SPI3W_INO SPI3W_XMC
#elif defined(ESP32) && (ALTERNATIVE_PINS == 3)
#define SPI3W_INO SPI3W_ESP32
#else
#define SPI3W_INO SPI3W_ARD
#endif
uint8_t mCS;
uint8_t mSpiNum;
SPIClass3W(uint8_t spiNum = 0);
~SPIClass3W();
void begin(uint8_t miso, uint8_t mosi, uint8_t sck, uint8_t cs);
void setCSPin(uint8_t cs);
void sendReceiveSpi(uint16_t* sent_data, uint16_t size_of_sent_data, uint16_t* received_data, uint16_t size_of_received_data);
private:
uint8_t mMOSI;
uint8_t mMISO;
uint8_t mSCK;
#if defined(UC_FAMILY) && (UC_FAMILY == 1 || UC_FAMILY == 4)
typedef struct
{
XMC_USIC_CH_t* channel;
XMC_SPI_CH_CONFIG_t channel_config;
XMC_PORT_PIN_t mosi;
XMC_GPIO_CONFIG_t mosi_open;
XMC_GPIO_CONFIG_t mosi_close;
XMC_PORT_PIN_t miso;
XMC_GPIO_CONFIG_t miso_open;
XMC_GPIO_CONFIG_t miso_close;
XMC_USIC_INPUT_t input_source;
XMC_PORT_PIN_t sck;
XMC_GPIO_CONFIG_t sck_config;
XMC_PORT_PIN_t cs;
XMC_GPIO_CONFIG_t cs_config;
} XMC_3W_SPI_t;
XMC_3W_SPI_t m3Wire;
void setupSPI();
void initSpi();
#elif defined(ESP32) && (ALTERNATIVE_PINS == 3)
void *e3Wire;
#endif
};
extern SPIClass3W SPI3W;
#if (NUM_SPI > 1)
extern SPIClass3W SPI3W1;
# if (NUM_SPI > 2)
extern SPIClass3W SPI3W2;
# if (NUM_SPI > 3)
extern SPIClass3W SPI3W3;
# if (NUM_SPI > 4)
extern SPIClass3W SPI3W4;
# endif
# endif
# endif
#endif
}
#endif /* SPI3W_INO_HPP */