rt-thread-official/bsp/rm48x50/HALCoGen/include/spi.h

155 lines
4.0 KiB
C

/** @file spi.h
* @brief SPI Driver Definition File
* @date 29.May.2013
* @version 03.05.02
*
* (c) Texas Instruments 2009-2013, All rights reserved.
*/
#ifndef __SPI_H__
#define __SPI_H__
#include "reg_spi.h"
/** @enum chipSelect
* @brief Transfer Group Chip Select
*/
enum spiChipSelect
{
SPI_CS_NONE = 0xFFU,
SPI_CS_0 = 0xFEU,
SPI_CS_1 = 0xFDU,
SPI_CS_2 = 0xFBU,
SPI_CS_3 = 0xF7U,
SPI_CS_4 = 0xEFU,
SPI_CS_5 = 0xDFU,
SPI_CS_6 = 0xBFU,
SPI_CS_7 = 0x7FU
};
/** @enum spiPinSelect
* @brief spi Pin Select
*/
enum spiPinSelect
{
SPI_PIN_CS0 = 0U,
SPI_PIN_CS1 = 1U,
SPI_PIN_CS2 = 2U,
SPI_PIN_CS3 = 3U,
SPI_PIN_CS4 = 4U,
SPI_PIN_CS5 = 5U,
SPI_PIN_CS6 = 6U,
SPI_PIN_CS7 = 7U,
SPI_PIN_ENA = 8U,
SPI_PIN_CLK = 9U,
SPI_PIN_SIMO = 10U,
SPI_PIN_SOMI = 11U,
SPI_PIN_SIMO_1 = 17U,
SPI_PIN_SIMO_2 = 18U,
SPI_PIN_SIMO_3 = 19U,
SPI_PIN_SIMO_4 = 20U,
SPI_PIN_SIMO_5 = 21U,
SPI_PIN_SIMO_6 = 22U,
SPI_PIN_SIMO_7 = 23U,
SPI_PIN_SOMI_1 = 25U,
SPI_PIN_SOMI_2 = 26U,
SPI_PIN_SOMI_3 = 27U,
SPI_PIN_SOMI_4 = 28U,
SPI_PIN_SOMI_5 = 29U,
SPI_PIN_SOMI_6 = 30U,
SPI_PIN_SOMI_7 = 31U
};
/** @enum dataformat
* @brief SPI dataformat register select
*/
typedef enum dataformat
{
SPI_FMT_0 = 0U,
SPI_FMT_1 = 1U,
SPI_FMT_2 = 2U,
SPI_FMT_3 = 3U
}SPIDATAFMT_t;
/** @struct spiDAT1RegConfig
* @brief SPI data register configuration
*/
typedef struct spiDAT1RegConfig
{
boolean CS_HOLD;
boolean WDEL;
SPIDATAFMT_t DFSEL;
uint8 CSNR;
}spiDAT1_t;
/** @enum SpiTxRxDataStatus
* @brief SPI Data Status
*/
typedef enum SpiTxRxDataStatus
{
SPI_READY = 0U,
SPI_PENDING = 1U,
SPI_COMPLETED = 2U
}SpiDataStatus_t;
/* USER CODE BEGIN (0) */
/* USER CODE END */
/**
* @defgroup SPI SPI
* @brief Serial Peripheral Interface Module.
*
* SPI is a high-speed synchronous serial input/output port that allows a serial bit stream of
* programmed length (2 to 16 bits) to be shifted in and out of the device at a programmed bit-transfer rate.
*
* Related Files
* - reg_spi.h
* - spi.h
* - spi.c
* @addtogroup SPI
* @{
*/
/* SPI Interface Functions */
void spiInit(void);
void spiSetFunctional(spiBASE_t *spi, uint32 port);
void spiEnableNotification(spiBASE_t *spi, uint32 flags);
void spiDisableNotification(spiBASE_t *spi, uint32 flags);
uint32 spiTransmitData(spiBASE_t *spi, spiDAT1_t *dataconfig_t, uint32 blocksize, uint16 * srcbuff);
void spiSendData(spiBASE_t *spi, spiDAT1_t *dataconfig_t, uint32 blocksize, uint16 * srcbuff);
uint32 spiReceiveData(spiBASE_t *spi, spiDAT1_t *dataconfig_t, uint32 blocksize, uint16 * destbuff);
void spiGetData(spiBASE_t *spi, spiDAT1_t *dataconfig_t, uint32 blocksize, uint16 * destbuff);
uint32 spiTransmitAndReceiveData(spiBASE_t *spi, spiDAT1_t *dataconfig_t, uint32 blocksize, uint16 * srcbuff, uint16 * destbuff);
void spiSendAndGetData(spiBASE_t *spi, spiDAT1_t *dataconfig_t, uint32 blocksize, uint16 * srcbuff, uint16 * destbuff);
void spiEnableLoopback(spiBASE_t *spi, loopBackType_t Loopbacktype);
void spiDisableLoopback(spiBASE_t *spi);
SpiDataStatus_t SpiTxStatus(spiBASE_t *spi);
SpiDataStatus_t SpiRxStatus(spiBASE_t *spi);
/** @fn void spiNotification(spiBASE_t *spi, uint32 flags)
* @brief Interrupt callback
* @param[in] spi - Spi module base address
* @param[in] flags - Copy of error interrupt flags
*
* This is a callback that is provided by the application and is called upon
* an interrupt. The parameter passed to the callback is a copy of the
* interrupt flag register.
*/
void spiNotification(spiBASE_t *spi, uint32 flags);
/** @fn void spiEndNotification(spiBASE_t *spi)
* @brief Interrupt callback for End of TX or RX data length.
* @param[in] spi - Spi module base address
*
* This is a callback that is provided by the application and is called upon
* an interrupt at the End of TX or RX data length.
*/
void spiEndNotification(spiBASE_t *spi);
/**@}*/
/* USER CODE BEGIN (1) */
/* USER CODE END */
#endif