88 lines
2.6 KiB
C
88 lines
2.6 KiB
C
|
#ifndef _DRV_SPI_H_
|
||
|
#define _DRV_SPI_H_
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
#include "kit_macro.h"
|
||
|
|
||
|
typedef enum
|
||
|
{
|
||
|
kSpiDev_1,
|
||
|
kSpiDev_2,
|
||
|
kSpiDev_3,
|
||
|
kSpiDev_End,
|
||
|
}SpiDev;
|
||
|
|
||
|
//在CLOCK_PCLK2_FREQ 和 CLOCK_PCLK1_FREQ 基础上进行分频
|
||
|
typedef enum
|
||
|
{
|
||
|
kSpiFreq_Div2 = 0,
|
||
|
kSpiFreq_Div4,
|
||
|
kSpiFreq_Div8,
|
||
|
kSpiFreq_Div16,
|
||
|
kSpiFreq_Div32,
|
||
|
kSpiFreq_Div64,
|
||
|
kSpiFreq_Div128,
|
||
|
kSpiFreq_Div256,
|
||
|
kSpiFreq_End,
|
||
|
}SpiFreq;
|
||
|
|
||
|
|
||
|
/********************************************************************
|
||
|
CPOL CPHA
|
||
|
MODE0 0 0
|
||
|
MODE1 0 1
|
||
|
MODE2 1 0
|
||
|
MODE3 1 1
|
||
|
CPOL: SPI空闲时的时钟信号电平(1:高电平, 0:低电平)
|
||
|
CPHA: SPI在时钟第几个边沿采样(1:第二个边沿开始, 0:第一个边沿开始)
|
||
|
**********************************************************************/
|
||
|
typedef enum
|
||
|
{
|
||
|
kSpiMode_C0E0,
|
||
|
kSpiMode_C0E1,
|
||
|
kSpiMode_C1E0,
|
||
|
kSpiMode_C1E1,
|
||
|
kSpiMode_End,
|
||
|
}SpiMode;
|
||
|
|
||
|
typedef enum
|
||
|
{
|
||
|
SpiFrame_MSBFirst,
|
||
|
SpiFrame_LSBFirst,
|
||
|
SpiFrame_End,
|
||
|
}SpiFrame;
|
||
|
|
||
|
#define SPI_CFG_CPHA_0 (0u)
|
||
|
#define SPI_CFG_CPHA_1 KIT_CREAT_BIT(0)
|
||
|
#define SPI_CFG_CPOL_0 (0u)
|
||
|
#define SPI_CFG_CPOL_1 KIT_CREAT_BIT(1)
|
||
|
#define SPI_CFG_SLAVER (0u)
|
||
|
#define SPI_CFG_MASTER (0x0104u)
|
||
|
#define SPI_CFG_DISABLE (0u)
|
||
|
#define SPI_CFG_ENABLE KIT_CREAT_BIT(6)
|
||
|
#define SPI_CFG_MSB (0u)
|
||
|
#define SPI_CFG_LSB KIT_CREAT_BIT(7)
|
||
|
#define SPI_CFG_CS_HARD (0u) //CS由外设控制
|
||
|
#define SPI_CFG_CS_SOFT KIT_CREAT_BIT(9) //CS由软件控制
|
||
|
#define SPI_CFG_2L_RX_TX (0u) //双线收发
|
||
|
#define SPI_CFG_2L_RX (0x0400u) //双线只收
|
||
|
#define SPI_CFG_1L (0x8000u) //单线制
|
||
|
#define SPI_CFG_FRAME_TI (0x100000u) //单线制
|
||
|
|
||
|
KitResult drv_spi_init(SpiDev dev, SpiFreq freq, SpiMode mode, SpiFrame frame_order, uint16_t sck_idx, uint16_t miso_idx, uint16_t mosi_idx);
|
||
|
KitResult drv_spi_init1(SpiDev dev, SpiFreq freq, uint32_t spi_config, uint16_t sck_idx, uint16_t miso_idx, uint16_t mosi_idx);
|
||
|
KitResult drv_spi_set_dma(SpiDev dev, bool is_rx_en, bool is_tx_en);
|
||
|
KitResult drv_spi_sync_send_receive(SpiDev dev, uint8_t *data);
|
||
|
KitResult drv_spi_series_sync_send_receive(SpiDev dev, uint8_t *tx_buf, uint16_t tx_len, uint8_t *rx_buf, uint16_t rx_len);
|
||
|
|
||
|
KitResult drv_spi_dma_sync_send(SpiDev dev, uint8_t *tx_buf, uint16_t tx_len);
|
||
|
KitResult drv_spi_dma_sync_receive(SpiDev dev, uint8_t *rx_buf, uint16_t rx_len);
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif
|