#ifndef _SR_BSP_SPI_H
#define _SR_BSP_SPI_H

#include "sr_config.h"
#include "board_config.h"

#ifdef SR_USE_SPI

//原厂头文件
#include "n32l40x_spi.h"

//配置参数枚举直接赋值为原厂值，省去参数转换

#define BSP_SPI_MASTER      SPI_MODE_MASTER   /*!< 主机*/
#define BSP_SPI_SLAVE       SPI_MODE_SLAVE    /*!< 从机*/

#define BSP_SPI_CPOL_LOW    SPI_CLKPOL_LOW  /*!< 空闲状态是低电平*/  
#define BSP_SPI_CPOL_HIGH   SPI_CLKPOL_HIGH /*!< 空闲状态是高电平*/ 

#define BSP_SPI_CPHA_1EDGE  SPI_CLKPHA_FIRST_EDGE   /*!< 奇数边沿采样*/            
#define BSP_SPI_CPHA_2EDGE  SPI_CLKPHA_SECOND_EDGE   /*!< 偶数边沿采样*/ 

#define BSP_SPI_MSB         SPI_FB_MSB  /*!< MSB优先*/
#define BSP_SPI_LSB         SPI_FB_LSB  /*!< LSB优先*/

#define BSP_SPI_DW_8BIT     SPI_DATA_SIZE_8BITS  /*!< 8bit*/
#define BSP_SPI_DW_16BIT    SPI_DATA_SIZE_16BITS /*!< 16bit*/

//波特率预分频值
#define BSP_SPI_BRPRES_2    SPI_BR_PRESCALER_2   
#define BSP_SPI_BRPRES_4    SPI_BR_PRESCALER_4   
#define BSP_SPI_BRPRES_8    SPI_BR_PRESCALER_8   
#define BSP_SPI_BRPRES_16   SPI_BR_PRESCALER_16  
#define BSP_SPI_BRPRES_32   SPI_BR_PRESCALER_32  
#define BSP_SPI_BRPRES_64   SPI_BR_PRESCALER_64  
#define BSP_SPI_BRPRES_128  SPI_BR_PRESCALER_128 
#define BSP_SPI_BRPRES_256  SPI_BR_PRESCALER_256 


#define SPI_DUMMY_BYTE   0xFF

#ifndef BSP_SPI1_SCK_PIN
#define BSP_SPI1_SCK_PIN   SR_GPIO5  // PA5
#endif

#ifndef BSP_SPI1_SCK_AF
#define BSP_SPI1_SCK_AF    SR_GPIO_AF0
#endif

#ifndef BSP_SPI1_MISO_PIN
#define BSP_SPI1_MISO_PIN  SR_GPIO6  // PA6
#endif

#ifndef BSP_SPI1_MISO_AF
#define BSP_SPI1_MISO_AF   SR_GPIO_AF0
#endif

#ifndef BSP_SPI1_MOSI_PIN
#define BSP_SPI1_MOSI_PIN  SR_GPIO7  // PA7   
#endif

#ifndef BSP_SPI1_MOSI_AF
#define BSP_SPI1_MOSI_AF   SR_GPIO_AF0
#endif



#ifndef BSP_SPI2_SCK_PIN
#define BSP_SPI2_SCK_PIN   SR_GPIO33  // PB13
#endif

#ifndef BSP_SPI2_SCK_AF
#define BSP_SPI2_SCK_AF    SR_GPIO_AF0
#endif

#ifndef BSP_SPI2_MISO_PIN
#define BSP_SPI2_MISO_PIN  SR_GPIO34  // PB14
#endif

#ifndef BSP_SPI2_MISO_AF
#define BSP_SPI2_MISO_AF   SR_GPIO_AF0
#endif


#ifndef BSP_SPI2_MOSI_PIN
#define BSP_SPI2_MOSI_PIN  SR_GPIO35  // PB15
#endif

#ifndef BSP_SPI2_MOSI_AF
#define BSP_SPI2_MOSI_AF   SR_GPIO_AF0
#endif






/**
 * @brief 朝阳应用使用的SPI的ID号
 */
typedef enum
{
  SR_SPI1 = 1,
  SR_SPI2 = 2,

} SR_SPI_ID_E;



/**
 * @brief SPI设备信息结构体
 */
typedef struct BSP_SPI_INFO
{
  const char *name;  /*!< spi设备的名字*/
  void *trdHandle;   /*!< 第三方平台使用的句柄指针*/
  SPI_Module  *instance;  /*!< NATION平台HAL库变量，如SPI1、SPI2,对应SPI寄存器地址*/
  int8_t srId;       /*!< 朝阳使用的ID*/

} BSP_SPI_INFO_T;


SR_DEVICE_T *BspSpiOpen(SR_SPI_ID_E spiId);
int BspSpiClose(SR_DEVICE_T *dev);
int BspSpiConfig(SR_DEVICE_T *dev, SR_SPI_CFG_T *cfg);
int BspSpiReadReg(SR_DEVICE_T *dev, uint32_t reg,uint16_t regLen, uint8_t *buff, uint16_t buffLen);
int BspSpiWriteReg(SR_DEVICE_T *dev, uint32_t reg,uint16_t regLen,uint8_t *buff, uint16_t buffLen);
int BspSpiWriteRead(SR_DEVICE_T *dev,uint8_t *txBuf,uint8_t *rxBuf,uint16_t len,uint8_t csCtrl);


#endif  // end of SR_USE_SPI


#endif

