24#define SPI_PIPE_LINE_SIZE_8B 3U
25#define SPI_PIPE_LINE_SIZE_4B 4U
26#define SPI_PIPE_LINE_SIZE_2B 5U
27#define SPI_PIPE_LINE_SIZE_OB 2U
29#define SPI_FSM_WAIT_DATA_STA 7U
30#define SPI_FSM_M_STR_STA 3U
31#define SPI_FSM_IDLE_STA 2U
175#if CONFIG_SPI_ENABLE_DMA
259#if CONFIG_SPI_ENABLE_DMA
273#define SPI_POL_VEL_ILLEGAL (~0xFu)
274#define SPI_START_DELAY_MAX 0xFFu
275#define SPI_END_DELAY_MAX 0xFFu
276#define SPI_FRAME_DELAY_MAX 0xFFu
277#define SPI_CLK_PRESSCALE_MAX 0xFFu
278#define SPI_FIFO_LEN 16u
279#define SPI_FRAME_SIZE_MAX 1024U
280#define SPI_SLAVE_IRQ_NICE_ADJUST (-1)
285#define SPI_DATA_WIDTH_MIN 4U
286#define SPI_DATA_WIDTH_BYTE 8U
287#define SPI_DATA_WIDTH_HALF_WORD 16U
288#define SPI_DATA_WIDTH_WORD 32U
289#define SPI_DATA_WIDTH_MAX SPI_DATA_WIDTH_WORD
291#define SPI_INTERNAL_DIV_SHIFT (1u)
292#define SPI_CLK_PRESSCALE_MAX_SHIFT (8u)
293#define SPI_TIMMING_CFG(f, s, e) \
294 (FV_SPI_TIM_CTRL_START_DLY(s) | FV_SPI_TIM_CTRL_END_DLY(e) | \
295 FV_SPI_TIM_CTRL_FRM_DLY(f))
296#define BUS_BUSY_MASK (SPI_STATE_BUSY_TX | SPI_STATE_BUSY_RX)
297#define BUS_BUSY_DMA_MASK (SPI_STATE_DMA_TX | SPI_STATE_DMA_RX)
298#define BUS_BUSY_IRQ_MASK (SPI_STATE_IRQ_TX | SPI_STATE_IRQ_RX)
299#define BUS_FIFO_STATE_MASK (SPI_RX_FIFO_READ | SPI_TX_FIFO_WRITE)
300#define BUS_BUSY_ASYNC_MASK (BUS_BUSY_DMA_MASK | BUS_BUSY_IRQ_MASK)
301#define BUS_BUSY_STATUS_MASK (BUS_BUSY_MASK | BUS_BUSY_ASYNC_MASK)
302#define BUS_FIFO_STATE_ERR_MASK \
303 (SPI_TX_FIFO_UDR | SPI_RX_FIFO_OVR | SPI_TX_DMA_ERR | SPI_RX_DMA_ERR)
304#define BUS_FIFO_EMPTYE_TIMEOUT(f_delay, s_delay, e_delay, baudrate) \
305 (((f_delay) + (s_delay) + (e_delay) + SPI_DATA_WIDTH_MAX) * 1000000 / \
307#define BUS_STATE_TX_MASK \
308 (SPI_STATE_DMA_TX | SPI_STATE_BUSY_TX | SPI_STATE_IRQ_TX)
309#define BUS_STATE_RX_MASK \
310 (SPI_STATE_DMA_RX | SPI_STATE_BUSY_RX | SPI_STATE_IRQ_RX)
312#define SPI_SATE_EXT_FLAGS \
313 (SPI_STATE_IS_UNS_EN | SPI_STATE_IS_RO_END | SPI_STATE_CS_ACTIVEED)
315#define SPI_GET_WIDTH_SHIFT(width_type) \
316 (((width_type) == SPI_DATA_WIDTH_WORD \
318 : ((width_type) / SPI_DATA_WIDTH_BYTE) - 1))
320#define SPI_GET_WIDTH_TYPE(width) \
322 ? (SPI_DATA_WIDTH_WORD) \
323 : ((width) > 8U ? SPI_DATA_WIDTH_HALF_WORD : SPI_DATA_WIDTH_BYTE))
325#define SPI_IS_VALID_LEN(bytes, width) \
326 (!((bytes) & ((0x1 << SPI_GET_WIDTH_SHIFT(SPI_GET_WIDTH_TYPE(width))) - 1)))
329#define SPI_READ_FIFO_TIMEOUT_MAX(f_delay, s_delay, e_delay, baudrate) \
330 ((((f_delay) + (s_delay) + (e_delay)) * 9 + \
331 SPI_DATA_WIDTH_MAX * SPI_FIFO_LEN) * \
332 1000000 / (baudrate))
418 uint32_t bytes, uint32_t timeout);
SemiDrive clock generator driver header file.
@ SDRV_STATUS_GROUP_SPI
Definition: sdrv_common.h:37
#define SDRV_ERROR_STATUS(group, code)
Construct a status code value from a group and code number. All the error statuses are negetive numbe...
Definition: sdrv_common.h:17
SemiDrive DMA driver header file.
sdrv_dma_channel_id_e
DMA Channel ID.
Definition: sdrv_dma.h:47
spi_cs_polarity
Spi cs mode.
Definition: sdrv_spi.h:49
@ CS_ACTIVE_HIGH
Definition: sdrv_spi.h:49
@ CS_ACTIVE_LOW
Definition: sdrv_spi.h:49
struct sdrv_spi sdrv_spi_t
Spi bus module handler type .
irq_type
Spi irq type .
Definition: sdrv_spi.h:93
@ SPI_RX_READ_REQ
Definition: sdrv_spi.h:95
@ SPI_TRASPORT_FINISH
Definition: sdrv_spi.h:94
@ SPI_CS_INVLD_REQ
Definition: sdrv_spi.h:97
@ SPI_TX_WRITE_REQ
Definition: sdrv_spi.h:96
uint32_t sdrv_spi_slave_get_transmit_len(struct sdrv_spi *bus)
Get slave transmit cnt.
spi_event_type
Spi async transmit callback type .
Definition: sdrv_spi.h:117
@ SPI_TRANS_DONE
Definition: sdrv_spi.h:118
@ SPI_TRANS_FAIL
Definition: sdrv_spi.h:119
@ SPI_TRANS_PASS
Definition: sdrv_spi.h:120
void sdrv_spi_polling(struct sdrv_spi *bus)
Get SPI bus polling.
@ SDRV_SPI_STATUS_SYNC_TIMEOUT
Definition: sdrv_spi.h:355
@ SDRV_SPI_STATUS_UCMD_TIMEOUT_WRITE
Definition: sdrv_spi.h:349
@ SDRV_SPI_STATUS_FAIL_DMA_SETUP
Definition: sdrv_spi.h:360
@ SDRV_SPI_STATUS_SOFT_CS_TIMEOUT
Definition: sdrv_spi.h:346
@ SDRV_SPI_STATUS_SOFT_CS_WAIT_TIMEOUT
Definition: sdrv_spi.h:357
@ SDRV_SPI_STATUS_UCMD_TIMEOUT_FINISH
Definition: sdrv_spi.h:352
@ SDRV_SPI_STATUS_MODE_ERROR
Definition: sdrv_spi.h:337
@ SDRV_SPI_STATUS_GCMD_NO_SUPPORT
Definition: sdrv_spi.h:339
@ SDRV_SPI_STATUS_GCMD_TIMEOUT_WRITE
Definition: sdrv_spi.h:341
@ SDRV_SPI_STATUS_PARAM_ILLEGAL
Definition: sdrv_spi.h:364
@ SDRV_SPI_STATUS_FAIL_IRQ_SETUP
Definition: sdrv_spi.h:362
@ SDRV_SPI_STATUS_GCMD_TIMEOUT_FINISH
Definition: sdrv_spi.h:343
spi_state
Spi Bus state flags.
Definition: sdrv_spi.h:59
@ SPI_STATE_INITED
Definition: sdrv_spi.h:61
@ SPI_STATE_IS_RO_END
Definition: sdrv_spi.h:72
@ SPI_STATE_IRQ_ACT
Definition: sdrv_spi.h:64
@ SPI_STATE_DMA_RX
Definition: sdrv_spi.h:66
@ SPI_STATE_BUSY_RX
Definition: sdrv_spi.h:63
@ SPI_STATE_IS_UNS_EN
Definition: sdrv_spi.h:71
@ SPI_STATE_DMA_TX_RD
Definition: sdrv_spi.h:73
@ SPI_STATE_DMA_RX_RD
Definition: sdrv_spi.h:74
@ SPI_STATE_UNINIT
Definition: sdrv_spi.h:60
@ SPI_STATE_DMA_TX
Definition: sdrv_spi.h:65
@ SPI_STATE_IRQ_RX
Definition: sdrv_spi.h:68
@ SPI_STATE_IS_SLAVE
Definition: sdrv_spi.h:69
@ SPI_STATE_IRQ_TX
Definition: sdrv_spi.h:67
@ SPI_STATE_CS_ACTIVEED
Definition: sdrv_spi.h:70
@ SPI_STATE_BUSY_TX
Definition: sdrv_spi.h:62
void sdrv_spi_attach_async_callback(struct sdrv_spi *spi, spi_callback_t cb)
Setup the async callback handler.
spi_cs_select
Spi hardware cs select .
Definition: sdrv_spi.h:54
@ CS_SEL_SS3
Definition: sdrv_spi.h:54
@ CS_SEL_SS2
Definition: sdrv_spi.h:54
@ CS_SEL_SS0
Definition: sdrv_spi.h:54
@ CS_SEL_SS1
Definition: sdrv_spi.h:54
spi_cpha
Spi sclk phase mode.
Definition: sdrv_spi.h:41
@ DATA_CPT_ON_FIRST_SCK_EDGE
Definition: sdrv_spi.h:42
@ DATA_CPT_ON_SECOND_SCK_EDGE
Definition: sdrv_spi.h:43
int sdrv_spi_config_device(struct sdrv_spi *spi, const struct spi_device_config *cfg)
SPI device configuration.
fifo_state
Spi fifo state flags.
Definition: sdrv_spi.h:80
@ SPI_TX_DMA_ERR
Definition: sdrv_spi.h:85
@ SPI_RX_DMA_ERR
Definition: sdrv_spi.h:86
@ SPI_TX_FIFO_UDR
Definition: sdrv_spi.h:83
@ SPI_TX_FIFO_WRITE
Definition: sdrv_spi.h:82
@ SPI_RX_FIFO_OVR
Definition: sdrv_spi.h:84
@ SPI_TX_ONLY_DONE
Definition: sdrv_spi.h:87
@ SPI_RX_FIFO_READ
Definition: sdrv_spi.h:81
data_dir
Spi transmit data direction type .
Definition: sdrv_spi.h:126
@ SPI_TX_DIR
Definition: sdrv_spi.h:126
@ SPI_RX_DIR
Definition: sdrv_spi.h:126
int sdrv_spi_deinit(struct sdrv_spi *bus)
Deinitialize the SPI device.
spi_ops_type
Spi transmit mode .
Definition: sdrv_spi.h:108
@ OP_MODE_IRQ
Definition: sdrv_spi.h:110
@ OP_MODE_SYNC
Definition: sdrv_spi.h:109
@ OP_MODE_DMA
Definition: sdrv_spi.h:111
spi_cpol
Spi sclk idle mode.
Definition: sdrv_spi.h:36
@ SCK_IDLE_LOW
Definition: sdrv_spi.h:36
@ SCK_IDLE_HIGH
Definition: sdrv_spi.h:36
enum spi_bus_state sdrv_spi_get_status(struct sdrv_spi *spi)
Get SPI bus state.
int sdrv_spi_sync_transmit(struct sdrv_spi *spi, void *tx_buf, void *rx_buf, uint32_t bytes, uint32_t timeout)
SPI sync transmit.
spi_bus_state
Spi bus idle/busy state .
Definition: sdrv_spi.h:103
@ SPI_IDLE
Definition: sdrv_spi.h:103
@ SPI_BUSY
Definition: sdrv_spi.h:103
int sdrv_spi_init(struct sdrv_spi *spi, struct spi_common_config *cfg)
Initialize the SPI module.
int sdrv_spi_async_transmit(struct sdrv_spi *spi, void *tx_buf, void *rx_buf, uint32_t bytes, enum spi_ops_type type)
SPI async transmit in IRQ or DMA mode.
void(* spi_callback_t)(void *spi, spi_event_type Event)
Spi async transmit callback type .
Definition: sdrv_spi.h:131
Abstract clock slice node for driver operate.
Definition: sdrv_ckgen.h:184
DMA channel structure.
Definition: sdrv_dma.h:554
DMA controller structure.
Definition: sdrv_dma.h:472
Spi bus module handler type .
Definition: sdrv_spi.h:238
uint32_t cur_cmd
Definition: sdrv_spi.h:258
spi_callback_t callback
Definition: sdrv_spi.h:252
uint32_t base
Definition: sdrv_spi.h:240
uint32_t irq
Definition: sdrv_spi.h:242
uint32_t state
Definition: sdrv_spi.h:256
sdrv_dma_channel_t tx_dma_chan
Definition: sdrv_spi.h:265
uint32_t max_baudrate
Definition: sdrv_spi.h:244
const struct spi_common_config * com_config
Definition: sdrv_spi.h:248
struct spi_dma_context tx_context
Definition: sdrv_spi.h:267
struct spi_dma_context rx_context
Definition: sdrv_spi.h:263
sdrv_dma_channel_t rx_dma_chan
Definition: sdrv_spi.h:261
struct spi_transmit_cb transmit_sche
Definition: sdrv_spi.h:254
const struct spi_device_config * dev_config
Definition: sdrv_spi.h:250
uint32_t min_baudrate
Definition: sdrv_spi.h:246
uint32_t dma_err
Definition: sdrv_spi.h:269
Spi controller configuration .
Definition: sdrv_spi.h:166
sdrv_dma_channel_id_e rx_ch_id
Definition: sdrv_spi.h:177
uint32_t base
Definition: sdrv_spi.h:184
uint32_t irq
Definition: sdrv_spi.h:186
bool is_spi_mode
Definition: sdrv_spi.h:168
sdrv_dma_t * dma_ins
Definition: sdrv_spi.h:181
sdrv_dma_channel_id_e tx_ch_id
Definition: sdrv_spi.h:179
const sdrv_ckgen_slice_node_t * clk
Definition: sdrv_spi.h:188
bool is_polling_mode
Definition: sdrv_spi.h:174
bool is_master
Definition: sdrv_spi.h:172
bool is_half_mode
Definition: sdrv_spi.h:170
SPI device configuration.
Definition: sdrv_spi.h:136
uint8_t clk2cs_end_delay
Definition: sdrv_spi.h:154
uint8_t width
Definition: sdrv_spi.h:148
uint32_t sclk_freq
Definition: sdrv_spi.h:138
uint8_t fream_delay
Definition: sdrv_spi.h:150
uint8_t cs_sel
Definition: sdrv_spi.h:146
enum spi_cpha cpha
Definition: sdrv_spi.h:142
bool is_tx_delay
Definition: sdrv_spi.h:160
bool is_soft_cs
Definition: sdrv_spi.h:158
enum spi_cs_polarity cs_pol
Definition: sdrv_spi.h:144
uint8_t clk2cs_delay
Definition: sdrv_spi.h:152
bool is_lsb_mode
Definition: sdrv_spi.h:156
enum spi_cpol cpol
Definition: sdrv_spi.h:140
Spi dma context type .
Definition: sdrv_spi.h:205
void * bus
Definition: sdrv_spi.h:207
bool is_need_handle
Definition: sdrv_spi.h:208
enum data_dir dir
Definition: sdrv_spi.h:206
Spi transmit context type .
Definition: sdrv_spi.h:214
uint32_t expect_len
Definition: sdrv_spi.h:230
uint32_t cur_remian
Definition: sdrv_spi.h:228
uint32_t rx_cur
Definition: sdrv_spi.h:224
uint32_t len
Definition: sdrv_spi.h:216
union spi_data_ptr ptxdata
Definition: sdrv_spi.h:222
union spi_data_ptr prxdata
Definition: sdrv_spi.h:220
struct spi_transmit_cb * next
Definition: sdrv_spi.h:232
uint32_t tx_cur
Definition: sdrv_spi.h:226
uint8_t width_type
Definition: sdrv_spi.h:218
Spi transmition data ptr .
Definition: sdrv_spi.h:194
uint16_t * u16_ptr
Definition: sdrv_spi.h:198
uint8_t * u8_ptr
Definition: sdrv_spi.h:197
uint32_t val
Definition: sdrv_spi.h:196
uint32_t * u32_ptr
Definition: sdrv_spi.h:199