52 #ifndef __GR55XX_LL_DSPI_H__
53 #define __GR55XX_LL_DSPI_H__
76 typedef struct _ll_dspi_init_t
88 uint32_t transmit_format;
117 #define LL_DSPI_SR_FFE DSPI_STAT_FRE
118 #define LL_DSPI_SR_BUSY DSPI_STAT_BUSY
119 #define LL_DSPI_SR_OVR DSPI_STAT_OVR
120 #define LL_DSPI_SR_MODF DSPI_STAT_MODF
121 #define LL_DSPI_SR_TFE DSPI_STAT_TXE
122 #define LL_DSPI_SR_RFNE DSPI_STAT_RXNE
123 #define LL_DSPI_SR_ALL (LL_DSPI_SR_FFE | \
135 #define LL_DSPI_IM_TXE DSPI_CR2_TXEIE
136 #define LL_DSPI_IM_RXNE DSPI_CR2_RXNEIE
137 #define LL_DSPI_IM_ER DSPI_CR2_ERRIE
143 #define LL_DSPI_PROT_MODE_SPI (0UL << DSPI_MODE_SPIMODE_Pos)
144 #define LL_DSPI_PROT_MODE_3W1L (1UL << DSPI_MODE_SPIMODE_Pos)
145 #define LL_DSPI_PROT_MODE_4W1L (2UL << DSPI_MODE_SPIMODE_Pos)
146 #define LL_DSPI_PROT_MODE_4W2L (3UL << DSPI_MODE_SPIMODE_Pos)
152 #define LL_DSPI_TF_MSB_FIRST (0x0)
153 #define LL_DSPI_TF_LSB_FIRST DSPI_CR1_LSBFIRST
159 #define LL_DSPI_DATASIZE_4BIT (3UL << DSPI_CR2_DS_Pos)
160 #define LL_DSPI_DATASIZE_5BIT (4UL << DSPI_CR2_DS_Pos)
161 #define LL_DSPI_DATASIZE_6BIT (5UL << DSPI_CR2_DS_Pos)
162 #define LL_DSPI_DATASIZE_7BIT (6UL << DSPI_CR2_DS_Pos)
163 #define LL_DSPI_DATASIZE_8BIT (7UL << DSPI_CR2_DS_Pos)
164 #define LL_DSPI_DATASIZE_9BIT (8UL << DSPI_CR2_DS_Pos)
165 #define LL_DSPI_DATASIZE_10BIT (9UL << DSPI_CR2_DS_Pos)
166 #define LL_DSPI_DATASIZE_11BIT (10UL << DSPI_CR2_DS_Pos)
167 #define LL_DSPI_DATASIZE_12BIT (11UL << DSPI_CR2_DS_Pos)
168 #define LL_DSPI_DATASIZE_13BIT (12UL << DSPI_CR2_DS_Pos)
169 #define LL_DSPI_DATASIZE_14BIT (13UL << DSPI_CR2_DS_Pos)
170 #define LL_DSPI_DATASIZE_15BIT (14UL << DSPI_CR2_DS_Pos)
171 #define LL_DSPI_DATASIZE_16BIT (15UL << DSPI_CR2_DS_Pos)
172 #define LL_DSPI_DATASIZE_17BIT (16UL << DSPI_CR2_DS_Pos)
173 #define LL_DSPI_DATASIZE_18BIT (17UL << DSPI_CR2_DS_Pos)
174 #define LL_DSPI_DATASIZE_19BIT (18UL << DSPI_CR2_DS_Pos)
175 #define LL_DSPI_DATASIZE_20BIT (19UL << DSPI_CR2_DS_Pos)
176 #define LL_DSPI_DATASIZE_21BIT (20UL << DSPI_CR2_DS_Pos)
177 #define LL_DSPI_DATASIZE_22BIT (21UL << DSPI_CR2_DS_Pos)
178 #define LL_DSPI_DATASIZE_23BIT (22UL << DSPI_CR2_DS_Pos)
179 #define LL_DSPI_DATASIZE_24BIT (23UL << DSPI_CR2_DS_Pos)
180 #define LL_DSPI_DATASIZE_25BIT (24UL << DSPI_CR2_DS_Pos)
181 #define LL_DSPI_DATASIZE_26BIT (25UL << DSPI_CR2_DS_Pos)
182 #define LL_DSPI_DATASIZE_27BIT (26UL << DSPI_CR2_DS_Pos)
183 #define LL_DSPI_DATASIZE_28BIT (27UL << DSPI_CR2_DS_Pos)
184 #define LL_DSPI_DATASIZE_29BIT (28UL << DSPI_CR2_DS_Pos)
185 #define LL_DSPI_DATASIZE_30BIT (29UL << DSPI_CR2_DS_Pos)
186 #define LL_DSPI_DATASIZE_31BIT (30UL << DSPI_CR2_DS_Pos)
187 #define LL_DSPI_DATASIZE_32BIT (31UL << DSPI_CR2_DS_Pos)
193 #define LL_DSPI_BIDIMODE_2L_UNBID 0x00000000UL
194 #define LL_DSPI_BIDIMODE_1L_BID DSPI_CR1_BIDIDE
200 #define LL_DSPI_2L_FULL_DUPLEX 0x00000000UL
201 #define LL_DSPI_2L_SIMPLEX_RX DSPI_CR1_RXONLY
207 #define LL_DSPI_1L_SIMPLEX_RX 0x00000000UL
208 #define LL_DSPI_1L_SIMPLEX_TX DSPI_CR1_BIDIOE
214 #define LL_DSPI_BAUD_RATE_2P1PCLK (0x0 << DSPI_CR1_BAUD_Pos)
215 #define LL_DSPI_BAUD_RATE_4P1PCLK (0x1 << DSPI_CR1_BAUD_Pos)
216 #define LL_DSPI_BAUD_RATE_8P1PCLK (0x2 << DSPI_CR1_BAUD_Pos)
217 #define LL_DSPI_BAUD_RATE_16P1PCLK (0x3 << DSPI_CR1_BAUD_Pos)
218 #define LL_DSPI_BAUD_RATE_32P1PCLK (0x4 << DSPI_CR1_BAUD_Pos)
219 #define LL_DSPI_BAUD_RATE_64P1PCLK (0x5 << DSPI_CR1_BAUD_Pos)
220 #define LL_DSPI_BAUD_RATE_128P1PCLK (0x6 << DSPI_CR1_BAUD_Pos)
221 #define LL_DSPI_BAUD_RATE_256PCLK (0x7 << DSPI_CR1_BAUD_Pos)
227 #define LL_DSPI_SCPHA_1EDGE 0x00000000UL
228 #define LL_DSPI_SCPHA_2EDGE (DSPI_CR1_CPHA)
234 #define LL_DSPI_SCPOL_LOW 0x00000000UL
235 #define LL_DSPI_SCPOL_HIGH (DSPI_CR1_CPOL)
241 #define LL_DSPI_DMA_TX_DIS 0x00000000UL
242 #define LL_DSPI_DMA_TX_EN DSPI_CR2_TXDMAEN
244 #define LL_DSPI_DMA_RX_DIS 0x00000000UL
245 #define LL_DSPI_DMA_RX_EN DSPI_CR2_RXDMAEN
251 #define LL_DSPI_DMA_LTX_EVEN 0x00000000UL
252 #define LL_DSPI_DMA_LTX_ODD DSPI_CR2_LDMA_TX
254 #define LL_DSPI_DMA_LRX_EVEN 0x00000000UL
255 #define LL_DSPI_DMA_LRX_ODD DSPI_CR2_LDMA_RX
261 #define LL_DSPI_FRXTH_1P2 DSPI_CR1_FIFOTH_8
262 #define LL_DSPI_FRXTH_1P4 DSPI_CR1_FIFOTH_4
263 #define LL_DSPI_FRXTH_1P8 DSPI_CR1_FIFOTH_2
264 #define LL_DSPI_FRXTH_1P16 DSPI_CR1_FIFOTH_1
270 #define LL_DSPI_DCX_CMD 0x00000000UL
271 #define LL_DSPI_DCX_DATA (DSPI_MODE_DCX)
281 #define LL_DSPI_DEFAULT_CONFIG \
283 .transmit_format = LL_DSPI_TF_MSB_FIRST, \
284 .data_size = LL_DSPI_DATASIZE_8BIT, \
285 .dspi_mode = LL_DSPI_PROT_MODE_4W1L, \
286 .baud_rate = LL_DSPI_BAUD_RATE_8P1PCLK, \
309 #define LL_DSPI_WriteReg(__instance__, __REG__, __VALUE__) WRITE_REG(__instance__->__REG__, (__VALUE__))
317 #define LL_DSPI_ReadReg(__instance__, __REG__) READ_REG(__instance__->__REG__)
344 __STATIC_INLINE
void ll_dspi_enable(dspi_regs_t *DSPIx)
346 SET_BITS(DSPIx->CTRL1, DSPI_CR1_EN);
360 __STATIC_INLINE
void ll_dspi_disable(dspi_regs_t *DSPIx)
362 CLEAR_BITS(DSPIx->CTRL1, DSPI_CR1_EN);
375 __STATIC_INLINE uint32_t ll_dspi_is_enabled(dspi_regs_t *DSPIx)
377 return (READ_BITS(DSPIx->CTRL1, DSPI_CR1_EN) == (DSPI_CR1_EN));
395 __STATIC_INLINE
void ll_dspi_set_clock_polarity(dspi_regs_t *DSPIx, uint32_t clock_polarity)
397 MODIFY_REG(DSPIx->CTRL1, DSPI_CR1_CPOL, clock_polarity);
412 __STATIC_INLINE uint32_t ll_dspi_get_clock_polarity(dspi_regs_t *DSPIx)
414 return (uint32_t)(READ_BITS(DSPIx->CTRL1, DSPI_CR1_CPOL));
431 __STATIC_INLINE
void ll_dspi_set_clock_phase(dspi_regs_t *DSPIx, uint32_t clock_phase)
433 MODIFY_REG(DSPIx->CTRL1, DSPI_CR1_CPHA, clock_phase);
448 __STATIC_INLINE uint32_t ll_dspi_get_clock_phase(dspi_regs_t *DSPIx)
450 return (uint32_t)(READ_BITS(DSPIx->CTRL1, DSPI_CR1_CPHA));
467 __STATIC_INLINE
void ll_dspi_set_frame_format(dspi_regs_t *DSPIx, uint32_t frf)
469 MODIFY_REG(DSPIx->CTRL1, DSPI_CR1_LSBFIRST, frf);
485 __STATIC_INLINE uint32_t ll_dspi_get_frame_format(dspi_regs_t *DSPIx)
487 return (uint32_t)(READ_BITS(DSPIx->CTRL1, DSPI_CR1_LSBFIRST));
530 __STATIC_INLINE
void ll_dspi_set_data_size(dspi_regs_t *DSPIx, uint32_t size)
532 MODIFY_REG(DSPIx->CTRL2, DSPI_CR2_DS, size);
574 __STATIC_INLINE uint32_t ll_dspi_get_data_size(dspi_regs_t *DSPIx)
576 return (uint32_t)(READ_BITS(DSPIx->CTRL2, DSPI_CR2_DS));
599 __STATIC_INLINE
void ll_dspi_set_baud_rate(dspi_regs_t *DSPIx, uint32_t baud_rate)
601 MODIFY_REG(DSPIx->CTRL1, DSPI_CR1_BAUD, baud_rate);
622 __STATIC_INLINE uint32_t ll_dspi_get_baud_rate(dspi_regs_t *DSPIx)
624 return (uint32_t)(READ_BITS(DSPIx->CTRL1, DSPI_CR1_BAUD));
640 __STATIC_INLINE
void ll_dspi_set_bidirectional_mode(dspi_regs_t *DSPIx, uint32_t bid_mode)
642 MODIFY_REG(DSPIx->CTRL1, DSPI_CR1_BIDIDE, bid_mode);
657 __STATIC_INLINE uint32_t ll_dspi_get_bidirectional_mode(dspi_regs_t *DSPIx)
659 return (uint32_t)(READ_BITS(DSPIx->CTRL1, DSPI_CR1_BIDIDE));
675 __STATIC_INLINE
void ll_dspi_set_transfer_direction_bidirectional(dspi_regs_t *DSPIx, uint32_t transfer_direction)
677 MODIFY_REG(DSPIx->CTRL1, DSPI_CR1_BIDIOE, transfer_direction);
692 __STATIC_INLINE uint32_t ll_dspi_get_transfer_direction_bidirectional(dspi_regs_t *DSPIx)
694 return (uint32_t)(READ_BITS(DSPIx->CTRL1, DSPI_CR1_BIDIOE));
710 __STATIC_INLINE
void ll_dspi_set_transfer_direction_unbidirectional(dspi_regs_t *DSPIx, uint32_t transfer_direction)
712 MODIFY_REG(DSPIx->CTRL1, DSPI_CR1_RXONLY, transfer_direction);
727 __STATIC_INLINE uint32_t ll_dspi_get_transfer_direction_unbidirectional(dspi_regs_t *DSPIx)
729 return (uint32_t)(READ_BITS(DSPIx->CTRL1, DSPI_CR1_RXONLY));
747 __STATIC_INLINE
void ll_dspi_set_rx_fifo_threshold(dspi_regs_t *DSPIx, uint32_t threshold)
749 MODIFY_REG(DSPIx->CTRL1, DSPI_CR1_FIFOTH, threshold);
766 __STATIC_INLINE uint32_t ll_dspi_get_rx_fifo_threshold(dspi_regs_t *DSPIx)
768 return (uint32_t)(READ_BITS(DSPIx->CTRL1, DSPI_CR1_FIFOTH));
780 __STATIC_INLINE
void ll_dspi_flush_fifo(dspi_regs_t *DSPIx)
782 SET_BITS(DSPIx->CTRL1, DSPI_CR1_REFIFO);
783 CLEAR_BITS(DSPIx->CTRL1, DSPI_CR1_REFIFO);
795 __STATIC_INLINE
void ll_dspi_master_select(dspi_regs_t *DSPIx)
797 SET_BITS(DSPIx->CTRL1, DSPI_CR1_MSTR);
816 __STATIC_INLINE
void ll_dspi_set_last_dma_tx_packing(dspi_regs_t *DSPIx, uint32_t bid_mode)
818 MODIFY_REG(DSPIx->CTRL1, DSPI_CR2_LDMA_TX, bid_mode);
837 __STATIC_INLINE
void ll_dspi_set_last_dma_rx_packing(dspi_regs_t *DSPIx, uint32_t bid_mode)
839 MODIFY_REG(DSPIx->CTRL2, DSPI_CR2_LDMA_RX, bid_mode);
852 __STATIC_INLINE
void ll_dspi_enable_dma_tx(dspi_regs_t *DSPIx)
854 SET_BITS(DSPIx->CTRL2, DSPI_CR2_TXDMAEN);
867 __STATIC_INLINE
void ll_dspi_disable_dma_tx(dspi_regs_t *DSPIx)
869 CLEAR_BITS(DSPIx->CTRL2, DSPI_CR2_TXDMAEN);
882 __STATIC_INLINE uint32_t ll_dspi_is_enabled_dma_tx(dspi_regs_t *DSPIx)
884 return (READ_BITS(DSPIx->CTRL2, DSPI_CR2_TXDMAEN) == (DSPI_CR2_TXDMAEN));
897 __STATIC_INLINE
void ll_dspi_enable_dma_rx(dspi_regs_t *DSPIx)
899 SET_BITS(DSPIx->CTRL2, DSPI_CR2_RXDMAEN);
912 __STATIC_INLINE
void ll_dspi_disable_dma_rx(dspi_regs_t *DSPIx)
914 CLEAR_BITS(DSPIx->CTRL2, DSPI_CR2_RXDMAEN);
927 __STATIC_INLINE uint32_t ll_dspi_is_enabled_dma_rx(dspi_regs_t *DSPIx)
929 return (READ_BITS(DSPIx->CTRL2, DSPI_CR2_RXDMAEN) == (DSPI_CR2_RXDMAEN));
945 __STATIC_INLINE
void ll_dspi_set_dcx(dspi_regs_t *DSPIx, uint32_t dcx)
947 MODIFY_REG(DSPIx->MODE, DSPI_MODE_DCX, dcx);
965 __STATIC_INLINE
void ll_dspi_set_mode(dspi_regs_t *DSPIx, uint32_t mode)
967 MODIFY_REG(DSPIx->MODE, DSPI_MODE_SPIMODE, mode);
984 __STATIC_INLINE uint32_t ll_dspi_get_mode(dspi_regs_t *DSPIx)
986 return (READ_BITS(DSPIx->CTRL2, DSPI_MODE_SPIMODE));
999 __STATIC_INLINE
void ll_dspi_ss_out_enable(dspi_regs_t *DSPIx)
1001 SET_BITS(DSPIx->CTRL2, DSPI_CR2_SSOE);
1019 __STATIC_INLINE
void ll_dspi_enable_it(dspi_regs_t *DSPIx, uint32_t mask)
1021 SET_BITS(DSPIx->CTRL2, mask);
1039 __STATIC_INLINE
void ll_dspi_disable_it(dspi_regs_t *DSPIx, uint32_t mask)
1041 CLEAR_BITS(DSPIx->CTRL2, mask);
1058 __STATIC_INLINE uint32_t ll_dspi_is_enabled_it(dspi_regs_t *DSPIx, uint32_t mask)
1060 return (READ_BITS(DSPIx->CTRL2, mask) == mask);
1079 __STATIC_INLINE uint32_t ll_dspi_get_status(dspi_regs_t *DSPIx)
1081 return (uint32_t)(READ_REG(DSPIx->STAT) & LL_DSPI_SR_ALL);
1106 __STATIC_INLINE uint32_t ll_dspi_is_active_flag(dspi_regs_t *DSPIx, uint32_t flag)
1108 return (READ_BITS(DSPIx->STAT, flag) == (flag));
1127 __STATIC_INLINE uint32_t ll_dspi_get_it_flag(dspi_regs_t *DSPIx)
1129 return (uint32_t)(READ_REG(DSPIx->STAT) & LL_DSPI_SR_ALL);
1154 __STATIC_INLINE uint32_t ll_dspi_is_it_flag(dspi_regs_t *DSPIx, uint32_t flag)
1156 return (READ_BITS(DSPIx->STAT, flag) == flag);
1171 error_status_t ll_dspi_deinit(dspi_regs_t *DSPIx);
1183 error_status_t ll_dspi_init(dspi_regs_t *DSPIx, ll_dspi_init_t *p_dspi_init);
1191 void ll_dspi_struct_init(ll_dspi_init_t *p_dspi_init);