/**
******************************************************************************
* @file xl_spi.h
* @author software group
* @brief This file contains all the functions prototypes for the SPI
* firmware library.
******************************************************************************
* @attention
*
* 2019 by Chipways Communications,Inc. All Rights Reserved.
* This software is supplied under the terms of a license
* agreement or non-disclosure agreement with Chipways.
* Passing on and copying of this document,and communication
* of its contents is not permitted without prior written
* authorization.
*
*
© COPYRIGHT 2019 Chipways
******************************************************************************
*/
#ifndef XL_SPI_H_
#define XL_SPI_H_
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ---------------------------------------------------------------*/
#include "XL6600.h"
/* Register define ------------------------------------------------------------*/
/* CTRLR0 Bit Fields */
#define SPI_CTRLR0_DFS_MASK 0xFu
#define SPI_CTRLR0_DFS_SHIFT 0
#define SPI_CTRLR0_SCPH_MASK 0x40u
#define SPI_CTRLR0_SCPH_SHIFT 6
#define SPI_CTRLR0_SCPOL_MASK 0x80u
#define SPI_CTRLR0_SCPOL_SHIFT 7
#define SPI_CTRLR0_TMOD_MASK 0x300u
#define SPI_CTRLR0_TMOD_SHIFT 8
#define SPI_CTRLR0_SLVOE_MASK 0x400u
#define SPI_CTRLR0_SLVOE_SHIFT 10
#define SPI_CTRLR0_SRL_MASK 0x800u
#define SPI_CTRLR0_SRL_SHIFT 11
/* CTRLR1 Bit Fields */
#define SPI_CTRLR1_NDF_MASK 0xFFFFu
#define SPI_CTRLR1_NDF_SHIFT 0
/* SPIENR Bit Fields */
#define SPI_SPIENR_SPIE_MASK 0x1u
#define SPI_SPIENR_SPIE_SHIFT 0
/* SER Bit Fields */
#define SPI_SER_SSEF_MASK 0x1u
#define SPI_SER_SSEF_SHIFT 0
/* BAUDR Bit Fields */
#define SPI_BAUDR_SCKDV_MASK 0xFFFFu
#define SPI_BAUDR_SCKDV_SHIFT 0
/* TXFTLR Bit Fields */
#define SPI_TXFTLR_TFTL_MASK 0xFu
#define SPI_TXFTLR_TFTL_SHIFT 0
/* RXFTLR Bit Fields */
#define SPI_RXFTLR_RFTL_MASK 0xFu
#define SPI_RXFTLR_RFTL_SHIFT 0
/* TXFLR Bit Fields */
#define SPI_TXFLR_TFL_MASK 0x1Fu
#define SPI_TXFLR_TFL_SHIFT 0
/* RXFLR Bit Fields */
#define SPI_RXFLR_RFL_MASK 0x1Fu
#define SPI_RXFLR_RFL_SHIFT 0
/* SR Bit Fields */
#define SPI_SR_BUSY_MASK 0x1u
#define SPI_SR_BUSY_SHIFT 0
#define SPI_SR_TFNF_MASK 0x2u
#define SPI_SR_TFNF_SHIFT 1
#define SPI_SR_TFE_MASK 0x4u
#define SPI_SR_TFE_SHIFT 2
#define SPI_SR_RFNE_MASK 0x8u
#define SPI_SR_RFNE_SHIFT 3
#define SPI_SR_RFF_MASK 0x10u
#define SPI_SR_RFF_SHIFT 4
#define SPI_SR_TXE_MASK 0x20u
#define SPI_SR_TXE_SHIFT 5
#define SPI_SR_DCOL_MASK 0x40u
#define SPI_SR_DCOL_SHIFT 6
/* IMR Bit Fields */
#define SPI_IMR_TXEIM_MASK 0x1u
#define SPI_IMR_TXEIM_SHIFT 0
#define SPI_IMR_TXOIM_MASK 0x2u
#define SPI_IMR_TXOIM_SHIFT 1
#define SPI_IMR_RXUIM_MASK 0x4u
#define SPI_IMR_RXUIM_SHIFT 2
#define SPI_IMR_RXOIM_MASK 0x8u
#define SPI_IMR_RXOIM_SHIFT 3
#define SPI_IMR_RXFIM_MASK 0x10u
#define SPI_IMR_RXFIM_SHIFT 4
/* ISR Bit Fields */
#define SPI_ISR_TXEIS_MASK 0x1u
#define SPI_ISR_TXEIS_SHIFT 0
#define SPI_ISR_TXOIS_MASK 0x2u
#define SPI_ISR_TXOIS_SHIFT 1
#define SPI_ISR_RXUIS_MASK 0x4u
#define SPI_ISR_RXUIS_SHIFT 2
#define SPI_ISR_RXOIS_MASK 0x8u
#define SPI_ISR_RXOIS_SHIFT 3
#define SPI_ISR_RXFIS_MASK 0x10u
#define SPI_ISR_RXFIS_SHIFT 4
/* RISR Bit Fields */
#define SPI_RISR_TXEIR_MASK 0x1u
#define SPI_RISR_TXEIR_SHIFT 0
#define SPI_RISR_TXOIR_MASK 0x2u
#define SPI_RISR_TXOIR_SHIFT 1
#define SPI_RISR_RXUIR_MASK 0x4u
#define SPI_RISR_RXUIR_SHIFT 2
#define SPI_RISR_RXOIR_MASK 0x8u
#define SPI_RISR_RXOIR_SHIFT 3
#define SPI_RISR_RXFIR_MASK 0x10u
#define SPI_RISR_RXFIR_SHIFT 4
/* TXOICR Bit Fields */
#define SPI_TXOICR_CTXOI_MASK 0x1u
#define SPI_TXOICR_CTXOI_SHIFT 0
/* RXOICR Bit Fields */
#define SPI_RXOICR_CRXOI_MASK 0x1u
#define SPI_RXOICR_CRXOI_SHIFT 0
/* RXUICR Bit Fields */
#define SPI_RXUICR_CRXUI_MASK 0x1u
#define SPI_RXUICR_CRXUI_SHIFT 0
/* ICR Bit Fields */
#define SPI_ICR_CI_MASK 0x1u
#define SPI_ICR_CI_SHIFT 0
/* DMACR Bit Fields */
#define SPI_DMACR_RDMAE_MASK 0x1u
#define SPI_DMACR_RDMAE_SHIFT 0
#define SPI_DMACR_TDMAE_MASK 0x2u
#define SPI_DMACR_TDMAE_SHIFT 1
/* DMATDLR Bit Fields */
#define SPI_DMATDLR_DMATDL_MASK 0xFu
#define SPI_DMATDLR_DMATDL_SHIFT 0
#define SPI_DMATDLR_DMATDL_WIDTH 4
/* DMARDLR Bit Fields */
#define SPI_DMARDLR_DMARDL_MASK 0xFu
#define SPI_DMARDLR_DMARDL_SHIFT 0
/* DR Bit Fields */
#define SPI_DR_DR_MASK 0xFFFFu
#define SPI_DR_DR_SHIFT 0
/* MODE Bit Fields */
#define SPI_MODE_MSTR_MASK 0x1u
#define SPI_MODE_MSTR_SHIFT 0
/* MODE Bit Fields */
#define SPI_MODE_PACK_MASK 0x2u
#define SPI_MODE_PACK_SHIFT 1
/** SPI - Register Layout Typedef */
typedef struct {
__IO uint32_t CTRLR0; /*!< SPI¿ØÖƼĴæÆ÷0, offset:0x0*/
__IO uint32_t CTRLR1; /*!< SPI¿ØÖƼĴæÆ÷1, offset:0x04*/
__IO uint32_t SPIENR; /*!< SPIʹÄܼĴæÆ÷, offset:0x08*/
uint32_t RESERVED_0[1];
__IO uint32_t SER; /*!< SPI´Ó»úʹÄܼĴæÆ÷, offset:0x10*/
__IO uint32_t BAUDR; /*!< SPI²¨ÌØÂÊÑ¡Ôñ¼Ä´æÆ÷, offset:0x14*/
__IO uint32_t TXFTLR; /*!< SPI·¢ËÍFIFOãÐÖµÉèÖüĴæÆ÷, offset:0x18*/
__IO uint32_t RXFTLR; /*!< SPI½ÓÊÕFIFOãÐÖµÉèÖüĴæÆ÷, offset:0x1C*/
__I uint32_t TXFLR; /*!< SPI·¢ËÍFIFOãÐÖµ¼Ä´æÆ÷, offset:0x20*/
__I uint32_t RXFLR; /*!< SPI½ÓÊÕFIFOãÐÖµ¼Ä´æÆ÷, offset:0x24*/
__I uint32_t SR; /*!< SPI״̬¼Ä´æÆ÷, offset:0x28*/
__IO uint32_t IMR; /*!< SPIÖÐ¶ÏÆÁ±Î¼Ä´æÆ÷, offset:0x2C*/
__I uint32_t ISR; /*!< SPIÖжÏ״̬¼Ä´æÆ÷, offset:0x30*/
__I uint32_t RISR; /*!< SPIÔʼÖжÏ״̬¼Ä´æÆ÷, offset:0x34*/
__I uint32_t TXOICR; /*!< SPI·¢ËÍFIFOÒç³öÖжÏÇåÁã¼Ä´æÆ÷, offset:0x38*/
__I uint32_t RXOICR; /*!< SPI½ÓÊÕFIFOÒç³öÖжÏÇåÁã¼Ä´æÆ÷, offset:0x3C*/
__I uint32_t RXUICR; /*!< SPI½ÓÊÕFIFOÏÂÒçÖжÏÇåÁã¼Ä´æÆ÷, offset:0x40*/
uint32_t RESERVED_1[1];
__I uint32_t ICR; /*!< SPIÖжÏÇåÁã¼Ä´æÆ÷, offset:0x48*/
__IO uint32_t DMACR; /*!< SPI DMA¿ØÖƼĴæÆ÷, offset:0x4C*/
__IO uint32_t DMATDLR; /*!< SPI DMA·¢ËÍÊý¾Ýˮƽ¼Ä´æÆ÷, offset:0x50*/
__IO uint32_t DMARDLR; /*!< SPI DMA½ÓÊÕÊý¾Ýˮƽ¼Ä´æÆ÷, offset:0x54*/
uint32_t RESERVED_2[1];
uint32_t RESERVED_3[1];
__IO uint32_t DR[36]; /*!< SPIÊý¾Ý¼Ä´æÆ÷, array offset: 0x60, array step: 0x4*/\
__IO uint32_t DLY; /*!< SPIÊý¾ÝÑÓ³Ù²ÉÑù¼Ä´æÆ÷, offset:0xF0*/
uint32_t RESERVED_4[1];
uint32_t RESERVED_5[1];
uint32_t RESERVED_6[1];
__IO uint32_t MODE; /*!< SPIģʽѡÔñ¼Ä´æÆ÷, array offset: 0x100 */
} SPI_Type;
//} SPI_Type, *SPI_MemMapPtr;
extern SPI_Type* SPI0;
extern SPI_Type* SPI1;
/** @addtogroup XL6600_StdPeriph_Driver
* @{
*/
/** @addtogroup SPI
* @{
*/
/* Exported types ------------------------------------------------------------*/
/**
* @brief SPIÖ÷»ú³õʼ»¯½á¹¹Ìå
*/
typedef struct
{
uint32_t SPI_SourceClk; /*!< ʱÖÓÔ´ */
uint32_t SPI_BAUDR; /*!< ²¨ÌØÂÊÑ¡Ôñ */
uint32_t SPI_SRL; /*!< ÒÆÎ»¼Ä´æÆ÷Ñ»· */
uint32_t SPI_TMOD; /*!< ´«Êäģʽ */
uint32_t SPI_SCPOL; /*!< ´®ÐÐʱÖÓ¼«ÐÔ */
uint32_t SPI_SCPH; /*!< ´®ÐÐʱÖÓÏàλ */
uint32_t SPI_DFS; /*!< Êý¾ÝÖ¡´óС */
uint32_t SPI_NDF; /*!< Êý¾ÝÖ¡ÊýÁ¿ */
uint32_t SPI_TFT; /*!< ·¢ËÍFIFOãÐÖµ */
uint32_t SPI_RFT; /*!< ½ÓÊÕFIFOãÐÖµ */
}SPI_MsterInitTypeDef, *SPI_MsterInitConfigPtr;
/**
* @brief SPI´Ó»ú³õʼ»¯½á¹¹Ìå
*/
typedef struct
{
FunctionalState SPI_SLVOE; /*!< ´Ó»úÊä³öʹÄÜ */
uint32_t SPI_SRL; /*!< ÒÆÎ»¼Ä´æÆ÷Ñ»· */
uint32_t SPI_TMOD; /*!< ´«Êäģʽ */
uint32_t SPI_SCPOL; /*!< ´®ÐÐʱÖÓ¼«ÐÔ */
uint32_t SPI_SCPH; /*!< ´®ÐÐʱÖÓÏàλ */
uint32_t SPI_DFS; /*!< Êý¾ÝÖ¡´óС */
uint32_t SPI_TFT; /*!< ·¢ËÍFIFOãÐÖµ */
uint32_t SPI_RFT; /*!< ½ÓÊÕFIFOãÐÖµ */
}SPI_SlaveInitTypeDef, *SPI_SlaveInitConfigPtr;
/* Exported constants --------------------------------------------------------*/
/** @defgroup SPI_Exported_Constants SPIÄ£¿éʹÓòÎÊý¶¨Òå
* @{
*/
/**
* @defgroup SPI_Work_Mode SPI¹¤×÷ģʽ
* @brief ʱÖÓÔ´Ñ¡Ôñ
* @{
*/
#define SPI_SRL_NORMAL ((uint16_t)0x0000) /*!< Õý³£Ä£Ê½¹¤×÷ */
#define SPI_SRL_TEST ((uint16_t)0x0800) /*!< ²âÊÔģʽ¹¤×÷ */
/**
* @}
*/
/**
* @defgroup SPI_Transfer_Mode SPI´«Êäģʽ
* @{
*/
#define SPI_TransmitAndReceive ((uint16_t)0x0000) /*!< ·¢ËͺͽÓÊÕ */
#define SPI_TransmitOnly ((uint16_t)0x0100) /*!< ½ö·¢ËÍ */
#define SPI_ReceiveOnly ((uint16_t)0x0200) /*!< ½ö½ÓÊÕ */
#define SPI_EEPROMRead ((uint16_t)0x0300) /*!< EEPROM¶ÁÈ¡ */
/**
* @}
*/
/**
* @defgroup SPI_Serial_Clock_Polarity SPIʱÖÓ¼«ÐÔ
* @{
*/
#define SPI_SCPOL_Low ((uint16_t)0x0000) /*!< SPIʱÖÓ¼«ÐÔΪµÍ */
#define SPI_SCPOL_High ((uint16_t)0x0080) /*!< SPIʱÖÓ¼«ÐÔλ¸ß */
/**
* @}
*/
/**
* @defgroup SPI Serial Clock Phase
* @brief ʱÖÓÔ´Ñ¡Ôñ
* @{
*/
#define SPI_SCPH_Middle ((uint16_t)0x0000) /*!< ´®ÐÐʱÖÓÔÚµÚÒ»¸öÊý¾ÝλµÄÖмäÇл» */
#define SPI_SCPH_Start ((uint16_t)0x0040) /*!< ´®ÐÐʱÖÓÔÚµÚÒ»¸öÊý¾Ýλ¿ªÊ¼Ê±Çл» */
/**
* @}
*/
/**
* @defgroup SPI_Data_Lenght SPIÊý¾Ý³¤¶È
* @{
*/
#define SPI_DataSize_4b ((uint16_t)0x0003) /*!< 4¨Dλ´®ÐÐÊý¾Ý´«Êä */
#define SPI_DataSize_5b ((uint16_t)0x0004) /*!< 5¨Dλ´®ÐÐÊý¾Ý´«Êä */
#define SPI_DataSize_6b ((uint16_t)0x0005) /*!< 6¨Dλ´®ÐÐÊý¾Ý´«Êä */
#define SPI_DataSize_7b ((uint16_t)0x0006) /*!< 7¨Dλ´®ÐÐÊý¾Ý´«Êä */
#define SPI_DataSize_8b ((uint16_t)0x0007) /*!< 8¨Dλ´®ÐÐÊý¾Ý´«Êä */
#define SPI_DataSize_9b ((uint16_t)0x0008) /*!< 9¨Dλ´®ÐÐÊý¾Ý´«Êä */
#define SPI_DataSize_10b ((uint16_t)0x0009) /*!< 10¨Dλ´®ÐÐÊý¾Ý´«Êä */
#define SPI_DataSize_11b ((uint16_t)0x000A) /*!< 11¨Dλ´®ÐÐÊý¾Ý´«Êä */
#define SPI_DataSize_12b ((uint16_t)0x000B) /*!< 12¨Dλ´®ÐÐÊý¾Ý´«Êä */
#define SPI_DataSize_13b ((uint16_t)0x000C) /*!< 13¨Dλ´®ÐÐÊý¾Ý´«Êä */
#define SPI_DataSize_14b ((uint16_t)0x000D) /*!< 14¨Dλ´®ÐÐÊý¾Ý´«Êä */
#define SPI_DataSize_15b ((uint16_t)0x000E) /*!< 15¨Dλ´®ÐÐÊý¾Ý´«Êä */
#define SPI_DataSize_16b ((uint16_t)0x000F) /*!< 16¨Dλ´®ÐÐÊý¾Ý´«Êä */
/**
* @}
*/
/**
* @brief SPI_Mode SPIģʽ
* @{
*/
typedef enum
{
SPI_MODE_MASTER = 0x00, /*!< Ö÷»úģʽ */
SPI_MODE_SLAVE = 0x01 /*!< ´Ó»úģʽ */
}SPI_MODETypeDef;
/**
* @}
*/
/**
* @brief SPI_Data_Pack SPI´«Êä°üÀàÐÍ
* @{
*/
typedef enum
{
SPI_PACK_CS_LOW = 0x00, /*!< ƬѡΪµÍ */
SPI_PACK_CS_HIGHT = 0x01 /*!< ƬѡΪ¸ß */
}SPI_PACKCSTypeDef;
/**
* @}
*/
/**
* @brief SPI TxRx_FIFO_Level SPI·¢ËÍ/½ÓÊÕFIFOÉî¶È
* @{
*/
typedef enum
{
SPI_TransmitFIFOLevel = 0x00, /*!< ·¢ËÍFIFOÓÐЧÊý¾Ý¸öÊý */
SPI_ReceiveFIFOLevel = 0x01 /*!< ½ÓÊÕFIFOÓÐЧÊý¾Ý¸öÊý */
}SPI_TXRXFIFOLevelDef;
/**
* @}
*/
/**
* @brief SPI_Status SPI״̬
* @{
*/
typedef enum
{
SPI_SPIBusyFlagStatus = 0, /*!< SPI·±Ã¦±ê־λ */
SPI_TransmitFIFONotFullStatus, /*!< ·¢ËÍFIFOδÂú */
SPI_TransmitFIFOEmptyStatus, /*!< ·¢ËÍFIFOΪ¿Õ */
SPI_ReceiveFIFONotEmptyStatus, /*!< ½ÓÊÕFIFO²»Îª¿Õ */
SPI_ReceiveFIFOFullStatus, /*!< ½ÓÊÕFIFOÒÑÂú */
SPI_TransmissionErrorStatus, /*!< Êý¾Ý·¢ËÍ´íÎó£¬Ö»ÓÐSPIΪ´Ó»úʱ²ÅÄÜʹÓô˹¦ÄÜ */
SPI_DataCollisionErrorStatus /*!< Êý¾Ý³åÍ»´íÎó£¬Ö»ÓÐSPIΪÖ÷»úʱ²ÅÓд˹¦ÄÜ*/
}SPI_StatusTypeDef;
/**
* @}
*/
/**
* @brief SPI_Interrupt_Status SPIÖжÏ״̬
* @{
*/
typedef enum
{
SPI_TransmitFIFOEmptyIT = 0, /*!< ·¢ËÍFIFOÒѿյÄÖжÏÑÚÂë */
SPI_TransmitFIFOOverflowIT, /*!< ·¢ËÍFIFOÒç³öµÄÖжÏÑÚÂë */
SPI_ReceiveFIFOUnderflowIT, /*!< ½ÓÊÕFIFOÏÂÒçµÄÖжÏÑÚÂë */
SPI_ReceiveFIFOOverflowIT, /*!< ½ÓÊÕFIFOÒç³öµÄÖжÏÑÚÂë */
SPI_ReceiveFIFOFullIT , /*!< ½ÓÊÕFIFOÒÑÂúµÄÖжÏÑÚÂë */
SPI_ALLIT = 0xFu /*!< ËùÓÐÑÚÂë */
}SPI_InterruptTypeDef;
/**
* @}
*/
/**
* @brief SPI_Interrupt_Mask SPIÖÐ¶ÏÆÁ±Î
* @{
*/
typedef enum
{
SPI_TransmitFIFOEmptyITStatus = 0, /*!< ·¢ËÍFIFOÒѿյÄÖжÏ״̬ */
SPI_TransmitFIFOOverflowITStatus, /*!< ·¢ËÍFIFOÒç³öµÄÖжÏ״̬ */
SPI_ReceiveFIFOUnderflowITStatus, /*!< ½ÓÊÕFIFOÏÂÒçµÄÖжÏ״̬ */
SPI_ReceiveFIFOOverflowITStatus, /*!< ½ÓÊÕFIFOÒç³öµÄÖжÏ״̬ */
SPI_ReceiveFIFOFullITStatus /*!< ½ÓÊÕFIFOÒÑÂúµÄÖжÏ״̬ */
}SPI_ITStatusMaskedDef;
/**
* @}
*/
/**
* @brief SPI_Raw_Interrupt_Status SPIÖжÏǰ״̬
* @{
*/
typedef enum
{
SPI_TransmitFIFOEmptyRawITStatus = 0, /*!< ·¢ËÍFIFOÔʼÖжÏΪ¿Õ״̬ */
SPI_TransmitFIFOOverflowRawITStatus, /*!< ·¢ËÍFIFOÔʼ״̬Òç³ö״̬ */
SPI_ReceiveFIFOUnderflowRawITStatus, /*!< ½ÓÊÕFIFOÔʼÖжÏÏÂÒç״̬ */
SPI_ReceiveFIFOOverflowRawITStatus, /*!< ½ÓÊÕFIFOÔʼÖжÏÒç³ö״̬ */
SPI_ReceiveFIFOFullRawITStatus /*!< ½ÓÊÕFIFOÔʼÖжÏÒÑÂú״̬ */
}SPI_RawITStatusTypeDef;
/**
* @}
*/
/**
* @brief SPI_Clear_Interrupt SPIÇå³ýÖжϱêÖ¾
* @{
*/
typedef enum
{
SPI_TransmitFIFOOverflowITClear = 0, /*!< Çå¿Õ·¢ËÍFIFOÒç³öÖжϼĴæÆ÷ */
SPI_ReceiveFIFOOverflowITClear, /*!< Çå¿Õ½ÓÊÕFIFOÒç³öÖжϼĴæÆ÷ */
SPI_ReceiveFIFOUnderflowITClear, /*!< Çå¿Õ½ÓÊÕFIFOÏÂÒçÖжϼĴæÆ÷ */
SPI_ALLITClear /*!< Çå¿ÕËùÓÐÖжÏ״̬ */
}SPI_InterruptClearDef;
/**
* @}
*/
/**
* @}
*/
/* Exported macro ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
void SPI_DeInit(SPI_Type *SPIx);
void SPI_SetMode(SPI_Type *SPIx,SPI_MODETypeDef SPI_MODEType);
void SPI_SetPackCS(SPI_Type *SPIx,SPI_PACKCSTypeDef SPI_PACKCSType);
void SPI_MasterInit(SPI_Type* SPIx, const SPI_MsterInitTypeDef *SPI_MasterInitStruct);
void SPI_SlaveInit(SPI_Type* SPIx,const SPI_SlaveInitTypeDef *SPI_SlaveInitStruct);
void SPI_EnableCmd(SPI_Type *SPIx,FunctionalState NewState);
void SPI_SlaveEnableCmd(SPI_Type *SPIx,FunctionalState NewState);
void SPI_SendData(SPI_Type *SPIx,uint16_t Data);
uint16_t SPI_ReceiveData(const SPI_Type *SPIx);
uint8_t SPI_GetFIFOLevel(const SPI_Type *SPIx,SPI_TXRXFIFOLevelDef FIFOLevelDef);
uint8_t SPI_GetStatus(const SPI_Type *SPIx,SPI_StatusTypeDef SPI_StatusType);
void SPI_InterruptEn(SPI_Type *SPIx, SPI_InterruptTypeDef SPI_Interrupt, FunctionalState NewState);
uint8_t SPI_ClearInterrupt(const SPI_Type *SPIx, SPI_InterruptClearDef SPI_Interrupt2Clear);
uint8_t SPI_GetIntMaskedStatus(const SPI_Type *SPIx,SPI_ITStatusMaskedDef SPI_IntStatusType);
uint8_t SPI_GetRawIntStatus(const SPI_Type *SPIx,SPI_RawITStatusTypeDef SPI_RawIntStatusType);
void SPI_SetDMATxDataLenght(SPI_Type *SPIx,uint8_t lenght);
void SPI_SetDMARxDataLenght(SPI_Type *SPIx,uint8_t lenght);
void SPI_DMATxEnableCmd(SPI_Type *SPIx,FunctionalState NewState);
void SPI_DMARxEnableCmd(SPI_Type *SPIx,FunctionalState NewState);
void SPI_DelaySampling(SPI_Type *SPIx,uint32_t nclock);
#ifdef __cplusplus
}
#endif
#endif /*__XL_SPI_H */
/**
* @}
*/
/**
* @}
*/