/*! * \file spi-board.h * * \brief SPI driver implementation * * \copyright Revised BSD License, see section \ref LICENSE. * * \code * ______ _ * / _____) _ | | * ( (____ _____ ____ _| |_ _____ ____| |__ * \____ \| ___ | (_ _) ___ |/ ___) _ \ * _____) ) ____| | | || |_| ____( (___| | | | * (______/|_____)_|_|_| \__)_____)\____)_| |_| * (C)2013-2017 Semtech * * \endcode * * \author Miguel Luis ( Semtech ) * * \author Gregory Cristian ( Semtech ) */ #ifndef __SPI_H__ #define __SPI_H__ #ifdef __cplusplus extern "C" { #endif #include "gpio.h" /*! * SPI peripheral ID */ typedef enum { SPI_1, SPI_2, }SpiId_t; /*! * SPI object type definition */ typedef struct Spi_s { SpiId_t SpiId; Gpio_t Mosi; Gpio_t Miso; Gpio_t Sclk; Gpio_t Nss; }Spi_t; /*! * \brief Initializes the SPI object and MCU peripheral * * \remark When NSS pin is software controlled set the pin name to NC otherwise * set the pin name to be used. * * \param [IN] obj SPI object * \param [IN] mosi SPI MOSI pin name to be used * \param [IN] miso SPI MISO pin name to be used * \param [IN] sclk SPI SCLK pin name to be used * \param [IN] nss SPI NSS pin name to be used */ void SpiInit( Spi_t *obj, SpiId_t spiId, PinNames mosi, PinNames miso, PinNames sclk, PinNames nss ); /*! * \brief De-initializes the SPI object and MCU peripheral * * \param [IN] obj SPI object */ void SpiDeInit( Spi_t *obj ); /*! * \brief Configures the SPI peripheral * * \remark Slave mode isn't currently handled * * \param [IN] obj SPI object * \param [IN] bits Number of bits to be used. [8 or 16] * \param [IN] cpol Clock polarity * \param [IN] cpha Clock phase * \param [IN] slave When set the peripheral acts in slave mode */ void SpiFormat( Spi_t *obj, int8_t bits, int8_t cpol, int8_t cpha, int8_t slave ); /*! * \brief Sets the SPI speed * * \param [IN] obj SPI object * \param [IN] hz SPI clock frequency in hz */ void SpiFrequency( Spi_t *obj, uint32_t hz ); /*! * \brief Sends outData and receives inData * * \param [IN] obj SPI object * \param [IN] outData Byte to be sent * \retval inData Received byte. */ uint16_t SpiInOut( Spi_t *obj, uint16_t outData ); #ifdef __cplusplus } #endif #endif // __SPI_H__