SmartSnippets DA1459x SDK
hw_spi.h
Go to the documentation of this file.
1 
42 #ifndef HW_SPI_H_
43 #define HW_SPI_H_
44 
45 
46 #if dg_configUSE_HW_SPI
47 
48 #include <stdint.h>
49 #include "sdk_defs.h"
50 #include "hw_gpio.h"
51 
52 /* SPI Base Address */
53 #define SBA(id) ((SPI_Type *)id)
54 
55 typedef void (*hw_spi_tx_callback)(void *user_data, uint16_t transferred);
56 
61 #define HW_SPI1 ((void *)SPI_BASE)
62 #ifdef SPI2
63 #define HW_SPI2 ((void *)SPI2_BASE)
64 #endif
65 #ifdef SPI3
66 #define HW_SPI3 ((void *)SPI3_BASE)
67 #endif
68 typedef void * HW_SPI_ID;
69 
70 /*
71  * OPTIMIZATION DEFINITIONS
72  **
73  */
74 
81 #define HW_SPI_DMA_SUPPORT dg_configSPI_DMA_SUPPORT
82 
90 #ifndef HW_SPI1_USE_FIXED_WORD_SIZE
91 #define HW_SPI1_USE_FIXED_WORD_SIZE (0)
92 #endif
93 
94 #ifdef HW_SPI2
95 
102 #ifndef HW_SPI2_USE_FIXED_WORD_SIZE
103 #define HW_SPI2_USE_FIXED_WORD_SIZE (0)
104 #endif
105 #endif
106 
107 #ifdef HW_SPI3
108 
115 #ifndef HW_SPI3_USE_FIXED_WORD_SIZE
116 #define HW_SPI3_USE_FIXED_WORD_SIZE (0)
117 #endif
118 #endif
119 
120 #if HW_SPI1_USE_FIXED_WORD_SIZE == 1
121 
127 #ifndef HW_SPI1_FIXED_WORD_SIZE
128 #error "HW_SPI1_FIXED_WORD_SIZE must be defined when HW_SPI1_USE_FIXED_WORD_SIZE is set!"
129 #endif
130 #endif
131 
132 #ifdef HW_SPI2
133 #if HW_SPI2_USE_FIXED_WORD_SIZE == 1
134 
140 #ifndef HW_SPI2_FIXED_WORD_SIZE
141 #error "HW_SPI2_FIXED_WORD_SIZE must be defined when HW_SPI2_USE_FIXED_WORD_SIZE is set!"
142 #endif
143 #endif
144 #endif
145 
146 #ifdef HW_SPI3
147 #if HW_SPI3_USE_FIXED_WORD_SIZE == 1
148 
154 #ifndef HW_SPI3_FIXED_WORD_SIZE
155 #error "HW_SPI3_FIXED_WORD_SIZE must be defined when HW_SPI3_USE_FIXED_WORD_SIZE is set!"
156 #endif
157 #endif
158 #endif
159 
160 /*
161  * ENUMERATION DEFINITIONS
162  **
163  */
164 
173 typedef enum {
203 } HW_SPI_WORD;
204 
213 typedef enum {
214  HW_SPI_MODE_MASTER,
215  HW_SPI_MODE_SLAVE,
216 } HW_SPI_MODE;
217 
224 typedef enum {
234 
239 typedef enum {
240  HW_SPI_MINT_DISABLE,
241  HW_SPI_MINT_ENABLE,
242 } HW_SPI_MINT;
243 
251 typedef uint8_t HW_SPI_FREQ;
252 
257 typedef enum {
262 
267 typedef enum {
273 
280 typedef enum {
287 
292 typedef enum {
294  HW_SPI_FIFO_RX_ONLY = REG_MSK(SPI, SPI_CTRL_REG, SPI_RX_EN),
295  HW_SPI_FIFO_TX_ONLY = REG_MSK(SPI, SPI_CTRL_REG, SPI_TX_EN),
296  HW_SPI_FIFO_RX_TX = REG_MSK(SPI, SPI_CTRL_REG, SPI_RX_EN) |
297  REG_MSK(SPI, SPI_CTRL_REG, SPI_TX_EN)
298 } HW_SPI_FIFO;
299 
304 typedef struct
305 {
306  HW_GPIO_PORT port;
307  HW_GPIO_PIN pin;
308 } SPI_Pad;
309 
310 #if (HW_SPI_DMA_SUPPORT == 1)
311 #include "hw_dma.h"
312 
319 typedef hw_dma_periph_prio_t hw_spi_dma_prio_t;
320 #endif /* HW_SPI_DMA_SUPPORT */
321 
326 typedef struct
327 {
334  uint8_t disabled;
338  bool swap_bytes;
339  bool select_divn;
340 #if (HW_SPI_DMA_SUPPORT == 1)
341  uint8_t use_dma;
342  HW_DMA_CHANNEL rx_dma_channel;
343  HW_DMA_CHANNEL tx_dma_channel;
344  hw_spi_dma_prio_t dma_prio;
345 #endif /* HW_SPI_DMA_SUPPORT */
347 
348 //===================== Read/Write functions ===================================
349 
361 #define HW_SPI_REG_SETF(id, reg, field, val) \
362  SBA(id)->reg = ((SBA(id)->reg & ~(SPI_##reg##_##field##_Msk)) | \
363  ((SPI_##reg##_##field##_Msk) & ((val) << (SPI_##reg##_##field##_Pos))))
364 
375 #define HW_SPI_REG_GETF(id, reg, field) \
376  ((SBA(id)->reg & (SPI_##reg##_##field##_Msk)) >> (SPI_##reg##_##field##_Pos))
377 
386 #define HW_SPI_REG_SET_FIELD(reg, field, var, val) \
387  REG_SET_FIELD(SPI, reg##_REG, field, var, val)
388 
400 #define HW_SPI_ASSERT(id) \
401  do { \
402  ASSERT_WARNING(REG_GETF(CRG_COM, CLK_COM_REG, SPI_ENABLE) == true); \
403  } while (0);
404 
420 __STATIC_INLINE uint16_t hw_spi_fifo_read16(HW_SPI_ID id)
421 {
422  // Read data from the SPI RX register or RX FIFO
423  return (uint16_t) SBA(id)->SPI_FIFO_READ_REG;
424 }
425 
440 __STATIC_INLINE void hw_spi_fifo_write16(HW_SPI_ID id, uint16_t data)
441 {
442  SBA(id)->SPI_FIFO_WRITE_REG = data;
443 }
444 
460 __STATIC_INLINE uint8_t hw_spi_fifo_read8(HW_SPI_ID id)
461 {
462  // Read byte from the SPI RX register or RX FIFO
463  return (uint8_t) SBA(id)->SPI_FIFO_READ_REG;
464 }
465 
480 __STATIC_INLINE void hw_spi_fifo_write8(HW_SPI_ID id, uint8_t data)
481 {
482  // Write byte to the SPI TX register or TX FIFO
483  SBA(id)->SPI_FIFO_WRITE_REG = data;
484 }
485 
501 __STATIC_INLINE uint32_t hw_spi_fifo_read32(HW_SPI_ID id)
502 {
503  return SBA(id)->SPI_FIFO_READ_REG;
504 }
505 
520 __STATIC_INLINE void hw_spi_fifo_write32(HW_SPI_ID id, uint32_t data)
521 {
522  SBA(id)->SPI_FIFO_WRITE_REG = data;
523 }
524 
543 uint16_t hw_spi_writeread(HW_SPI_ID id, uint16_t val);
544 
563 uint32_t hw_spi_writeread32(HW_SPI_ID id, uint32_t val);
564 
589 void hw_spi_writeread_buf(HW_SPI_ID id, const uint8_t *out_buf, uint8_t *in_buf, uint16_t len,
590  hw_spi_tx_callback cb, void *user_data);
591 
644 void hw_spi_write_buf(HW_SPI_ID id, const uint8_t *out_buf, uint16_t len,
645  hw_spi_tx_callback cb, void *user_data);
646 
677 void hw_spi_read_buf(HW_SPI_ID id, uint8_t *in_buf, uint16_t len,
678  hw_spi_tx_callback cb, void *user_data);
679 
687 __STATIC_INLINE HW_SPI_FIFO_TL hw_spi_get_fifo_depth_in_bytes(const HW_SPI_ID id)
688 {
689  return HW_SPI_FIFO_LEVEL4;
690 }
691 
692 /*
693  * Low Level Register Access Functions
694  **
695  */
696 
697 /***************** SPI_CTRL_REG Functions *****************/
698 
706 __STATIC_INLINE void hw_spi_set_ctrl_reg(HW_SPI_ID id, uint32_t val)
707 {
708  SBA(id)->SPI_CTRL_REG = val;
709 }
710 
719 __STATIC_INLINE uint32_t hw_spi_get_ctrl_reg(HW_SPI_ID id)
720 {
721  return SBA(id)->SPI_CTRL_REG;
722 }
723 
730 __STATIC_INLINE void hw_spi_set_ctrl_reg_clear_enable(HW_SPI_ID id)
731 {
732  uint32_t ctrl = hw_spi_get_ctrl_reg(id);
733 
734  HW_SPI_REG_SET_FIELD(SPI_CTRL, SPI_EN, ctrl, 0);
735  HW_SPI_REG_SET_FIELD(SPI_CTRL, SPI_TX_EN, ctrl, 0);
736  HW_SPI_REG_SET_FIELD(SPI_CTRL, SPI_RX_EN, ctrl, 0);
737  HW_SPI_REG_SET_FIELD(SPI_CTRL, SPI_DMA_TX_EN, ctrl, 0);
738  HW_SPI_REG_SET_FIELD(SPI_CTRL, SPI_DMA_RX_EN, ctrl, 0);
739 
740  hw_spi_set_ctrl_reg(id, ctrl);
741 }
742 
750 __STATIC_INLINE void hw_spi_set_ctrl_reg_spi_en(HW_SPI_ID id, bool spi_enable)
751 {
752  HW_SPI_REG_SETF(id, SPI_CTRL_REG, SPI_EN, spi_enable);
753 }
754 
763 __STATIC_INLINE bool hw_spi_get_ctrl_reg_spi_en(HW_SPI_ID id)
764 {
765  return (bool) HW_SPI_REG_GETF(id, SPI_CTRL_REG, SPI_EN);
766 }
767 
776 __STATIC_INLINE void hw_spi_set_ctrl_reg_tx_en(HW_SPI_ID id, bool spi_tx_enable)
777 {
778  HW_SPI_REG_SETF(id, SPI_CTRL_REG, SPI_TX_EN, spi_tx_enable);
779 }
780 
789 __STATIC_INLINE bool hw_spi_get_ctrl_reg_tx_en(HW_SPI_ID id)
790 {
791  return (bool) HW_SPI_REG_GETF(id, SPI_CTRL_REG, SPI_TX_EN);
792 }
793 
802 __STATIC_INLINE void hw_spi_set_ctrl_reg_rx_en(HW_SPI_ID id, bool spi_rx_enable)
803 {
804  HW_SPI_REG_SETF(id, SPI_CTRL_REG, SPI_RX_EN, spi_rx_enable);
805 }
806 
815 __STATIC_INLINE bool hw_spi_get_ctrl_reg_rx_en(HW_SPI_ID id)
816 {
817  return (bool) HW_SPI_REG_GETF(id, SPI_CTRL_REG, SPI_RX_EN);
818 }
819 
828 __STATIC_INLINE void hw_spi_set_ctrl_reg_dma_tx_en(HW_SPI_ID id, bool spi_dma_tx_enable)
829 {
830  HW_SPI_REG_SETF(id, SPI_CTRL_REG, SPI_DMA_TX_EN, spi_dma_tx_enable);
831 }
832 
841 __STATIC_INLINE bool hw_spi_get_ctrl_reg_dma_tx_en(HW_SPI_ID id)
842 {
843  return (bool) HW_SPI_REG_GETF(id, SPI_CTRL_REG, SPI_DMA_TX_EN);
844 }
845 
854 __STATIC_INLINE void hw_spi_set_ctrl_reg_dma_rx_en(HW_SPI_ID id, bool spi_dma_rx_enable)
855 {
856  HW_SPI_REG_SETF(id, SPI_CTRL_REG, SPI_DMA_RX_EN, spi_dma_rx_enable);
857 }
858 
867 __STATIC_INLINE bool hw_spi_get_ctrl_reg_dma_rx_en(HW_SPI_ID id)
868 {
869  return (bool) HW_SPI_REG_GETF(id, SPI_CTRL_REG, SPI_DMA_RX_EN);
870 }
871 
880 __STATIC_INLINE void hw_spi_set_ctrl_reg_fifo_reset(HW_SPI_ID id, bool spi_fifo_reset)
881 {
882  HW_SPI_REG_SETF(id, SPI_CTRL_REG, SPI_FIFO_RESET, spi_fifo_reset);
883 }
884 
893 __STATIC_INLINE bool hw_spi_get_ctrl_reg_fifo_reset(HW_SPI_ID id)
894 {
895  return (bool) HW_SPI_REG_GETF(id, SPI_CTRL_REG, SPI_FIFO_RESET);
896 }
897 
906 __STATIC_INLINE void hw_spi_set_ctrl_reg_capture_next_edge(HW_SPI_ID id, HW_SPI_MASTER_EDGE_CAPTURE capture_next_edge)
907 {
908  HW_SPI_REG_SETF(id, SPI_CTRL_REG, SPI_CAPTURE_AT_NEXT_EDGE, capture_next_edge);
909 }
910 
920 {
921  return (HW_SPI_MASTER_EDGE_CAPTURE) HW_SPI_REG_GETF(id, SPI_CTRL_REG, SPI_CAPTURE_AT_NEXT_EDGE);
922 }
923 
939 __STATIC_INLINE void hw_spi_set_ctrl_reg_swap_bytes(HW_SPI_ID id, bool swap_bytes)
940 {
941  HW_SPI_REG_SETF(id, SPI_CTRL_REG, SPI_SWAP_BYTES, swap_bytes);
942 }
943 
952 __STATIC_INLINE bool hw_spi_get_ctrl_reg_swap_bytes(HW_SPI_ID id)
953 {
954  return (bool) HW_SPI_REG_GETF(id, SPI_CTRL_REG, SPI_SWAP_BYTES);
955 }
956 
957 /***************** SPI_CONFIG_REG Functions *****************/
958 
967 __STATIC_INLINE void hw_spi_set_config_reg(HW_SPI_ID id, uint32_t spi_config_reg)
968 {
969  SBA(id)->SPI_CONFIG_REG = spi_config_reg;
970 }
971 
980 __STATIC_INLINE uint32_t hw_spi_get_config_reg(HW_SPI_ID id)
981 {
982  return SBA(id)->SPI_CONFIG_REG;
983 }
984 
993 __STATIC_INLINE void hw_spi_set_config_reg_spi_mode(HW_SPI_ID id, HW_SPI_MODE_CPOL_CPHA spi_cp)
994 {
995  HW_SPI_REG_SETF(id, SPI_CONFIG_REG, SPI_MODE, spi_cp);
996 }
997 
1007 {
1008  return (HW_SPI_MODE_CPOL_CPHA) HW_SPI_REG_GETF(id, SPI_CONFIG_REG, SPI_MODE);
1009 }
1010 
1019 __STATIC_INLINE void hw_spi_set_config_reg_word_len(HW_SPI_ID id, HW_SPI_WORD spi_wsz)
1020 {
1021  HW_SPI_REG_SETF(id, SPI_CONFIG_REG, SPI_WORD_LENGTH, spi_wsz);
1022 }
1023 
1032 __STATIC_INLINE HW_SPI_WORD hw_spi_get_config_reg_word_len(HW_SPI_ID id)
1033 {
1034  return (HW_SPI_WORD) HW_SPI_REG_GETF(id, SPI_CONFIG_REG, SPI_WORD_LENGTH);
1035 }
1036 
1045 __STATIC_INLINE void hw_spi_set_config_reg_slave_en(HW_SPI_ID id, HW_SPI_MODE spi_ms)
1046 {
1047  HW_SPI_REG_SETF(id, SPI_CONFIG_REG, SPI_SLAVE_EN, spi_ms);
1048 }
1049 
1058 __STATIC_INLINE HW_SPI_MODE hw_spi_get_config_reg_slave_en(HW_SPI_ID id)
1059 {
1060  return (HW_SPI_MODE) HW_SPI_REG_GETF(id, SPI_CONFIG_REG, SPI_SLAVE_EN);
1061 }
1062 
1063 /***************** SPI_CLOCK_REG Functions *****************/
1064 
1073 __STATIC_INLINE bool hw_spi_get_clock_en(const HW_SPI_ID id)
1074 {
1075  return (bool) REG_GETF(CRG_COM, CLK_COM_REG, SPI_ENABLE);
1076 }
1077 
1086 __STATIC_INLINE void hw_spi_set_clock_reg(HW_SPI_ID id, uint8_t spi_clock_reg)
1087 {
1088  SBA(id)->SPI_CLOCK_REG = spi_clock_reg;
1089 }
1090 
1099 __STATIC_INLINE uint8_t hw_spi_get_clock_reg(HW_SPI_ID id)
1100 {
1101  return SBA(id)->SPI_CLOCK_REG;
1102 }
1103 
1115 __STATIC_INLINE void hw_spi_set_clock_reg_clk_div(HW_SPI_ID id, HW_SPI_FREQ spi_clk_div)
1116 {
1117  ASSERT_WARNING(spi_clk_div <= SPI_SPI_CLOCK_REG_SPI_CLK_DIV_Msk);
1118  HW_SPI_REG_SETF(id, SPI_CLOCK_REG, SPI_CLK_DIV, spi_clk_div);
1119 }
1120 
1129 __STATIC_INLINE HW_SPI_FREQ hw_spi_get_clock_reg_clk_div(HW_SPI_ID id)
1130 {
1131  return (HW_SPI_FREQ) HW_SPI_REG_GETF(id, SPI_CLOCK_REG, SPI_CLK_DIV);
1132 }
1133 
1134 /***************** SPI_FIFO_CONFIG_REG Functions *****************/
1135 
1143 __STATIC_INLINE void hw_spi_set_fifo_config_reg(HW_SPI_ID id, uint8_t val)
1144 {
1145  SBA(id)->SPI_FIFO_CONFIG_REG = val;
1146 }
1147 
1156 __STATIC_INLINE uint32_t hw_spi_get_fifo_config_reg(HW_SPI_ID id)
1157 {
1158  return SBA(id)->SPI_FIFO_CONFIG_REG;
1159 }
1160 
1172 __STATIC_INLINE void hw_spi_set_fifo_config_reg_tx_tl(HW_SPI_ID id, HW_SPI_FIFO_TL spi_tx_tl)
1173 {
1174  ASSERT_WARNING(spi_tx_tl <= hw_spi_get_fifo_depth_in_bytes(id));
1175  HW_SPI_REG_SETF(id, SPI_FIFO_CONFIG_REG, SPI_TX_TL, spi_tx_tl);
1176 }
1177 
1187 {
1188  return (HW_SPI_FIFO_TL) HW_SPI_REG_GETF(id, SPI_FIFO_CONFIG_REG, SPI_TX_TL);
1189 }
1190 
1202 __STATIC_INLINE void hw_spi_set_fifo_config_reg_rx_tl(HW_SPI_ID id, HW_SPI_FIFO_TL spi_rx_tl)
1203 {
1204  ASSERT_WARNING(spi_rx_tl < hw_spi_get_fifo_depth_in_bytes(id));
1205  HW_SPI_REG_SETF(id, SPI_FIFO_CONFIG_REG, SPI_RX_TL, spi_rx_tl);
1206 }
1207 
1217 {
1218  return (HW_SPI_FIFO_TL) HW_SPI_REG_GETF(id, SPI_FIFO_CONFIG_REG, SPI_RX_TL);
1219 }
1220 
1221 
1222 /***************** SPI_IRQ_MASK_REG Functions *****************/
1231 __STATIC_INLINE void hw_spi_set_irq_mask_reg_tx_empty_en(HW_SPI_ID id, HW_SPI_MINT irq_tx_empty_en)
1232 {
1233  HW_SPI_REG_SETF(id, SPI_IRQ_MASK_REG, SPI_IRQ_MASK_TX_EMPTY, irq_tx_empty_en);
1234 }
1235 
1245 {
1246  return (HW_SPI_MINT) HW_SPI_REG_GETF(id, SPI_IRQ_MASK_REG, SPI_IRQ_MASK_TX_EMPTY);
1247 }
1248 
1257 __STATIC_INLINE void hw_spi_set_irq_mask_reg_rx_full_en(HW_SPI_ID id, HW_SPI_MINT irq_rx_full_en)
1258 {
1259  HW_SPI_REG_SETF(id, SPI_IRQ_MASK_REG, SPI_IRQ_MASK_RX_FULL, irq_rx_full_en);
1260 }
1261 
1271 {
1272  return (HW_SPI_MINT) HW_SPI_REG_GETF(id, SPI_IRQ_MASK_REG, SPI_IRQ_MASK_RX_FULL);
1273 }
1274 
1275 
1276 /***************** SPI_STATUS_REG Functions *****************/
1277 
1286 __STATIC_INLINE bool hw_spi_get_status_reg_tx_fifo_empty(HW_SPI_ID id)
1287 {
1288  return (bool) HW_SPI_REG_GETF(id, SPI_STATUS_REG, SPI_STATUS_TX_EMPTY);
1289 }
1290 
1299 __STATIC_INLINE bool hw_spi_get_status_reg_rx_fifo_full(HW_SPI_ID id)
1300 {
1301  return (bool) HW_SPI_REG_GETF(id, SPI_STATUS_REG, SPI_STATUS_RX_FULL);
1302 }
1303 
1304 
1305 /***************** SPI_FIFO_STATUS_REG Functions *****************/
1306 
1315 __STATIC_INLINE uint16_t hw_spi_get_fifo_status_reg(HW_SPI_ID id)
1316 {
1317  return SBA(id)->SPI_FIFO_STATUS_REG;
1318 }
1319 
1329 __STATIC_INLINE bool hw_spi_get_fifo_status_reg_transaction_active(HW_SPI_ID id)
1330 {
1331  return (bool) HW_SPI_REG_GETF(id, SPI_FIFO_STATUS_REG, SPI_TRANSACTION_ACTIVE);
1332 }
1333 
1342 __STATIC_INLINE uint8_t hw_spi_get_fifo_status_reg_tx_fifo_level(HW_SPI_ID id)
1343 {
1344  return (uint8_t) HW_SPI_REG_GETF(id, SPI_FIFO_STATUS_REG, SPI_TX_FIFO_LEVEL);
1345 }
1346 
1357 __STATIC_INLINE bool hw_spi_get_fifo_status_reg_rx_empty(HW_SPI_ID id)
1358 {
1359  return (bool) HW_SPI_REG_GETF(id, SPI_FIFO_STATUS_REG, SPI_STATUS_RX_EMPTY);
1360 }
1361 
1370 __STATIC_INLINE uint8_t hw_spi_get_fifo_status_reg_rx_fifo_level(HW_SPI_ID id)
1371 {
1372  return (uint8_t) HW_SPI_REG_GETF(id, SPI_FIFO_STATUS_REG, SPI_RX_FIFO_LEVEL);
1373 }
1374 
1384 __STATIC_INLINE uint8_t hw_spi_get_fifo_status_reg_rx_fifo_overflow(HW_SPI_ID id)
1385 {
1386  return (uint8_t) HW_SPI_REG_GETF(id, SPI_FIFO_STATUS_REG, SPI_RX_FIFO_OVFL);
1387 }
1388 
1389 
1390 /***************** SPI_FIFO_READ_REG Functions *****************/
1391 
1400 __STATIC_INLINE uint32_t hw_spi_get_fifo_read_reg(HW_SPI_ID id)
1401 {
1402  return SBA(id)->SPI_FIFO_READ_REG;
1403 }
1404 
1405 
1406 /***************** SPI_FIFO_WRITE_REG Functions *****************/
1407 
1416 __STATIC_INLINE void hw_spi_set_fifo_write_reg(HW_SPI_ID id, uint32_t tx_data)
1417 {
1418  SBA(id)->SPI_FIFO_WRITE_REG = tx_data;
1419 }
1420 
1421 
1422 /***************** SPI_CS_CONFIG_REG Functions *****************/
1423 
1432 __STATIC_INLINE void hw_spi_set_cs_config_reg_mode(HW_SPI_ID id, HW_SPI_CS_MODE cs_mode)
1433 {
1434  SBA(id)->SPI_CS_CONFIG_REG = cs_mode;
1435 }
1436 
1445 __STATIC_INLINE HW_SPI_CS_MODE hw_spi_get_cs_config_reg_mode(HW_SPI_ID id)
1446 {
1447  return (HW_SPI_CS_MODE) SBA(id)->SPI_CS_CONFIG_REG;
1448 }
1449 
1450 
1451 /***************** SPI_TXBUFFER_FORCE_REG Functions *****************/
1452 
1465 __STATIC_INLINE void hw_spi_set_txbuffer_force_reg(HW_SPI_ID id, uint32_t tx_data)
1466 {
1467  SBA(id)->SPI_TXBUFFER_FORCE_REG = tx_data;
1468 }
1469 
1470 
1471 //============== Interrupt handling ============================================
1478 __STATIC_INLINE void hw_spi_enable_interrupt(HW_SPI_ID id)
1479 {
1480  uint32_t tmp = SBA(id)->SPI_IRQ_MASK_REG;
1481  if (hw_spi_get_ctrl_reg_tx_en(id) == true) {
1482  HW_SPI_REG_SET_FIELD(SPI_IRQ_MASK, SPI_IRQ_MASK_TX_EMPTY, tmp, HW_SPI_MINT_ENABLE);
1483  }
1484  if (hw_spi_get_ctrl_reg_rx_en(id) == true) {
1485  HW_SPI_REG_SET_FIELD(SPI_IRQ_MASK, SPI_IRQ_MASK_RX_FULL, tmp, HW_SPI_MINT_ENABLE);
1486  }
1487  SBA(id)->SPI_IRQ_MASK_REG = tmp;
1488 }
1489 
1496 __STATIC_INLINE void hw_spi_disable_interrupt(HW_SPI_ID id)
1497 {
1498  uint32_t tmp = SBA(id)->SPI_IRQ_MASK_REG;
1499  HW_SPI_REG_SET_FIELD(SPI_IRQ_MASK, SPI_IRQ_MASK_RX_FULL, tmp, HW_SPI_MINT_DISABLE);
1500  HW_SPI_REG_SET_FIELD(SPI_IRQ_MASK, SPI_IRQ_MASK_TX_EMPTY, tmp, HW_SPI_MINT_DISABLE);
1501  SBA(id)->SPI_IRQ_MASK_REG = tmp;
1502 }
1503 
1512 __STATIC_INLINE HW_SPI_MINT hw_spi_is_interrupt_enabled(HW_SPI_ID id)
1513 {
1515 }
1516 
1517 
1518 //==================== Configuration functions =================================
1519 
1530 __STATIC_INLINE void hw_spi_enable(HW_SPI_ID id, uint8_t on)
1531 {
1532  if (on) {
1533  hw_spi_set_ctrl_reg_spi_en(id, true);
1534  } else {
1535  hw_spi_set_ctrl_reg_spi_en(id, false);
1536  }
1537 }
1538 
1549 __STATIC_INLINE uint8_t hw_spi_is_enabled(HW_SPI_ID id)
1550 {
1551  return hw_spi_get_ctrl_reg_spi_en(id);
1552 }
1553 
1563 __STATIC_INLINE void hw_spi_set_clock_freq(HW_SPI_ID id, HW_SPI_FREQ freq)
1564 {
1565  hw_spi_set_clock_reg_clk_div(id, freq);
1566 }
1567 
1578 __STATIC_INLINE HW_SPI_FREQ hw_spi_get_clock_freq(HW_SPI_ID id)
1579 {
1580  return hw_spi_get_clock_reg_clk_div(id);
1581 }
1582 
1583 
1592 __STATIC_INLINE void hw_spi_set_mode(HW_SPI_ID id, HW_SPI_MODE smn)
1593 {
1595 }
1596 
1605 __STATIC_INLINE HW_SPI_MODE hw_spi_is_slave(HW_SPI_ID id)
1606 {
1607  return hw_spi_get_config_reg_slave_en(id);
1608 }
1609 
1617 __STATIC_INLINE void hw_spi_set_word_size(HW_SPI_ID id, HW_SPI_WORD word)
1618 {
1620 }
1621 
1630 __STATIC_INLINE HW_SPI_WORD hw_spi_get_word_size(HW_SPI_ID id)
1631 {
1632 #if HW_SPI1_USE_FIXED_WORD_SIZE == 1
1633  return (HW_SPI1_FIXED_WORD_SIZE);
1634 #else
1635  // Get value of SPI master/slave mode from SPI control register
1636  return hw_spi_get_config_reg_word_len(id);
1637 #endif
1638 }
1639 
1650 __STATIC_INLINE uint32_t hw_spi_get_memory_word_size(HW_SPI_ID id)
1651 {
1652  // Register Value = 3..31 -> Actual Wordsize = 4..32bits
1653  // E.g. Register Value = 3..7bits => Actual Wordsize = 4..8bits => Mem_wsz = 1Byte
1654  uint32_t mem_wsz = (hw_spi_get_word_size(id)>>3) + 1;
1655  if (mem_wsz == 3) {
1656  mem_wsz++;
1657  }
1658  return mem_wsz;
1659 }
1660 
1661 
1672 __STATIC_INLINE bool hw_spi_is_tx_fifo_full(HW_SPI_ID id)
1673 {
1674  return (bool) HW_SPI_REG_GETF(id, SPI_FIFO_STATUS_REG, SPI_STATUS_TX_FULL);
1675 }
1676 
1677 
1689 void hw_spi_init_clk_reg(const HW_SPI_ID id, bool select_divn);
1690 
1699 void hw_spi_deinit_clk_reg(const HW_SPI_ID id);
1700 
1710 void hw_spi_init(HW_SPI_ID id, const hw_spi_config_t *cfg);
1711 
1712 //=========================== CS handling functions ============================
1722 void hw_spi_set_cs_pad(HW_SPI_ID id, const SPI_Pad *pad, HW_SPI_CS_MODE cs_mode, bool validate);
1723 
1732 void hw_spi_set_cs_low(HW_SPI_ID id);
1733 
1742 void hw_spi_set_cs_high(HW_SPI_ID id);
1743 
1744 
1745 //=========================== FIFO control functions ===========================
1746 
1754 void hw_spi_set_fifo_mode(HW_SPI_ID id, HW_SPI_FIFO mode);
1755 
1764 HW_SPI_FIFO hw_spi_get_fifo_mode(HW_SPI_ID id);
1765 
1782 
1783 #if (HW_SPI_DMA_SUPPORT == 1)
1784 //=========================== DMA control functions ============================
1785 
1797 void hw_spi_configure_dma_channels(HW_SPI_ID id, HW_DMA_CHANNEL rx_channel, const hw_spi_dma_prio_t *prio);
1798 
1799 #endif /* HW_SPI_DMA_SUPPORT */
1800 
1801 //=========================== Other functions ============================
1802 
1813 __STATIC_INLINE uint8_t hw_spi_is_busy(HW_SPI_ID id)
1814 {
1815  // Get the value of the SPI BUSY bit from the secondary SPI control register
1817 }
1818 
1827 __STATIC_INLINE void hw_spi_wait_while_busy(HW_SPI_ID id)
1828 {
1829  while (hw_spi_is_busy(id));
1830 }
1831 
1839 void hw_spi_deinit(HW_SPI_ID id);
1840 
1848 bool hw_spi_is_occupied(const HW_SPI_ID id);
1849 
1850 
1851 #endif /* dg_configUSE_HW_SPI */
1852 #endif /* HW_SPI_H_ */
1853 
hw_spi_get_config_reg_spi_mode
__STATIC_INLINE HW_SPI_MODE_CPOL_CPHA hw_spi_get_config_reg_spi_mode(HW_SPI_ID id)
Get SPI_MODE from Configuration Register.
Definition: hw_spi.h:1006
hw_spi_set_config_reg_spi_mode
__STATIC_INLINE void hw_spi_set_config_reg_spi_mode(HW_SPI_ID id, HW_SPI_MODE_CPOL_CPHA spi_cp)
Set SPI_MODE in Configuration Register.
Definition: hw_spi.h:993
hw_spi_get_fifo_status_reg_transaction_active
__STATIC_INLINE bool hw_spi_get_fifo_status_reg_transaction_active(HW_SPI_ID id)
Get SPI transaction status from Status Register.
Definition: hw_spi.h:1329
hw_dma.h
Definition of API for the DMA Low Level Driver.
hw_spi_disable_interrupt
__STATIC_INLINE void hw_spi_disable_interrupt(HW_SPI_ID id)
Disables the SPI maskable interrupt (MINT) to the CPU.
Definition: hw_spi.h:1496
HW_SPI_FIFO_NONE
Definition: hw_spi.h:293
SPI_Pad
SPI chip-select pin definition.
Definition: hw_spi.h:304
HW_SPI_WORD_31BIT
Definition: hw_spi.h:201
hw_spi_set_clock_freq
__STATIC_INLINE void hw_spi_set_clock_freq(HW_SPI_ID id, HW_SPI_FREQ freq)
Set SPI source clock's divider for the selected SPI clock frequency.
Definition: hw_spi.h:1563
hw_spi_fifo_write32
__STATIC_INLINE void hw_spi_fifo_write32(HW_SPI_ID id, uint32_t data)
Write 4 to 32-bits to TX FIFO.
Definition: hw_spi.h:520
hw_spi_set_clock_reg
__STATIC_INLINE void hw_spi_set_clock_reg(HW_SPI_ID id, uint8_t spi_clock_reg)
Set SPI Clock Register Value.
Definition: hw_spi.h:1086
hw_spi_set_txbuffer_force_reg
__STATIC_INLINE void hw_spi_set_txbuffer_force_reg(HW_SPI_ID id, uint32_t tx_data)
Write SPI_TXBUFFER_FORCE_REG Register.
Definition: hw_spi.h:1465
HW_SPI_WORD_17BIT
Definition: hw_spi.h:187
HW_SPI_WORD_5BIT
Definition: hw_spi.h:175
HW_SPI_WORD_6BIT
Definition: hw_spi.h:176
hw_spi_get_fifo_config_reg_rx_tl
__STATIC_INLINE HW_SPI_FIFO_TL hw_spi_get_fifo_config_reg_rx_tl(HW_SPI_ID id)
Get SPI_RX_TL from FIFO Configuration Register.
Definition: hw_spi.h:1216
hw_spi_read_buf
void hw_spi_read_buf(HW_SPI_ID id, uint8_t *in_buf, uint16_t len, hw_spi_tx_callback cb, void *user_data)
Reads array of bytes through SPI.
hw_spi_set_fifo_mode
void hw_spi_set_fifo_mode(HW_SPI_ID id, HW_SPI_FIFO mode)
Set SPI FIFO mode.
hw_spi_config_t
SPI configuration.
Definition: hw_spi.h:326
hw_spi_get_clock_en
__STATIC_INLINE bool hw_spi_get_clock_en(const HW_SPI_ID id)
Check if the SPI clock is enabled.
Definition: hw_spi.h:1073
hw_spi_config_t::cs_pad
SPI_Pad cs_pad
Definition: hw_spi.h:328
HW_SPI_WORD_4BIT
Definition: hw_spi.h:174
hw_spi_get_fifo_status_reg
__STATIC_INLINE uint16_t hw_spi_get_fifo_status_reg(HW_SPI_ID id)
Get SPI FIFO status.
Definition: hw_spi.h:1315
hw_spi_set_ctrl_reg_rx_en
__STATIC_INLINE void hw_spi_set_ctrl_reg_rx_en(HW_SPI_ID id, bool spi_rx_enable)
Set SPI_RX_EN in Control Register.
Definition: hw_spi.h:802
HW_SPI_WORD_20BIT
Definition: hw_spi.h:190
hw_spi_get_fifo_config_reg_tx_tl
__STATIC_INLINE HW_SPI_FIFO_TL hw_spi_get_fifo_config_reg_tx_tl(HW_SPI_ID id)
Get SPI_TX_TL from FIFO Configuration Register.
Definition: hw_spi.h:1186
HW_SPI_REG_SET_FIELD
#define HW_SPI_REG_SET_FIELD(reg, field, var, val)
Sets a field value of an SPI register. Aimed to be used with local variables.
Definition: hw_spi.h:386
HW_SPI_WORD_23BIT
Definition: hw_spi.h:193
hw_spi_get_ctrl_reg_spi_en
__STATIC_INLINE bool hw_spi_get_ctrl_reg_spi_en(HW_SPI_ID id)
Get SPI_EN from Control Register.
Definition: hw_spi.h:763
HW_SPI_WORD_7BIT
Definition: hw_spi.h:177
hw_spi_set_ctrl_reg_swap_bytes
__STATIC_INLINE void hw_spi_set_ctrl_reg_swap_bytes(HW_SPI_ID id, bool swap_bytes)
Set SPI_SWAP_BYTES in Control Register.
Definition: hw_spi.h:939
hw_spi_get_fifo_status_reg_rx_fifo_level
__STATIC_INLINE uint8_t hw_spi_get_fifo_status_reg_rx_fifo_level(HW_SPI_ID id)
Get SPI RX FIFO level from FIFO Status Register.
Definition: hw_spi.h:1370
hw_spi_set_ctrl_reg
__STATIC_INLINE void hw_spi_set_ctrl_reg(HW_SPI_ID id, uint32_t val)
Set SPI Control Register Value.
Definition: hw_spi.h:706
hw_spi_get_ctrl_reg_fifo_reset
__STATIC_INLINE bool hw_spi_get_ctrl_reg_fifo_reset(HW_SPI_ID id)
Get SPI_FIFO_RESET from Control Register.
Definition: hw_spi.h:893
HW_SPI_WORD_8BIT
Definition: hw_spi.h:178
HW_SPI_WORD_19BIT
Definition: hw_spi.h:189
HW_SPI_WORD_18BIT
Definition: hw_spi.h:188
HW_SPI_CP_MODE_0
Definition: hw_spi.h:225
hw_spi_init_clk_reg
void hw_spi_init_clk_reg(const HW_SPI_ID id, bool select_divn)
Initialize peripheral divider register - select clock source and enable SPI clock.
hw_spi_set_ctrl_reg_tx_en
__STATIC_INLINE void hw_spi_set_ctrl_reg_tx_en(HW_SPI_ID id, bool spi_tx_enable)
Set SPI_TX_EN in Control Register.
Definition: hw_spi.h:776
hw_spi_set_cs_config_reg_mode
__STATIC_INLINE void hw_spi_set_cs_config_reg_mode(HW_SPI_ID id, HW_SPI_CS_MODE cs_mode)
Set CS output in master mode.
Definition: hw_spi.h:1432
sdk_defs.h
Central include header file with platform definitions.
hw_spi_get_fifo_status_reg_rx_fifo_overflow
__STATIC_INLINE uint8_t hw_spi_get_fifo_status_reg_rx_fifo_overflow(HW_SPI_ID id)
Get SPI RX FIFO overflow status from FIFO Status Register.
Definition: hw_spi.h:1384
HW_SPI_FIFO_TL
HW_SPI_FIFO_TL
Define the SPI RX/TX FIFO threshold level in bytes.
Definition: hw_spi.h:280
hw_spi_fifo_read8
__STATIC_INLINE uint8_t hw_spi_fifo_read8(HW_SPI_ID id)
Read 4 to 8-bits from RX FIFO.
Definition: hw_spi.h:460
hw_dma_periph_prio_t
DMA peripherals priority structure.
Definition: hw_dma.h:275
hw_spi_get_fifo_depth_in_bytes
__STATIC_INLINE HW_SPI_FIFO_TL hw_spi_get_fifo_depth_in_bytes(const HW_SPI_ID id)
Get SPI fifo depth in bytes.
Definition: hw_spi.h:687
hw_spi_deinit_clk_reg
void hw_spi_deinit_clk_reg(const HW_SPI_ID id)
De-initialize peripheral divider register - disable SPI clock.
HW_SPI_WORD_26BIT
Definition: hw_spi.h:196
hw_spi_deinit
void hw_spi_deinit(HW_SPI_ID id)
Disables SPI controller.
hw_spi_get_cs_config_reg_mode
__STATIC_INLINE HW_SPI_CS_MODE hw_spi_get_cs_config_reg_mode(HW_SPI_ID id)
Get CS output in master mode.
Definition: hw_spi.h:1445
hw_spi_set_irq_mask_reg_rx_full_en
__STATIC_INLINE void hw_spi_set_irq_mask_reg_rx_full_en(HW_SPI_ID id, HW_SPI_MINT irq_rx_full_en)
Set SPI_IRQ_MASK_RX_FULL in IRQ Mask Register.
Definition: hw_spi.h:1257
hw_spi_wait_while_busy
__STATIC_INLINE void hw_spi_wait_while_busy(HW_SPI_ID id)
Wait till SPI is not busy.
Definition: hw_spi.h:1827
hw_spi_set_config_reg_slave_en
__STATIC_INLINE void hw_spi_set_config_reg_slave_en(HW_SPI_ID id, HW_SPI_MODE spi_ms)
Set SPI_SLAVE_EN in Configuration Register.
Definition: hw_spi.h:1045
HW_SPI_CS_MODE
HW_SPI_CS_MODE
Control the CS output in master mode.
Definition: hw_spi.h:267
hw_spi_set_ctrl_reg_dma_rx_en
__STATIC_INLINE void hw_spi_set_ctrl_reg_dma_rx_en(HW_SPI_ID id, bool spi_dma_rx_enable)
Set SPI_DMA_RX_EN in Control Register.
Definition: hw_spi.h:854
hw_spi_set_ctrl_reg_fifo_reset
__STATIC_INLINE void hw_spi_set_ctrl_reg_fifo_reset(HW_SPI_ID id, bool spi_fifo_reset)
Set SPI_FIFO_RESET in Control Register.
Definition: hw_spi.h:880
hw_spi_set_ctrl_reg_capture_next_edge
__STATIC_INLINE void hw_spi_set_ctrl_reg_capture_next_edge(HW_SPI_ID id, HW_SPI_MASTER_EDGE_CAPTURE capture_next_edge)
Set SPI_CAPTURE_AT_NEXT_EDGE in Control Register.
Definition: hw_spi.h:906
hw_spi_init
void hw_spi_init(HW_SPI_ID id, const hw_spi_config_t *cfg)
Initialize the SPI module.
hw_spi_get_config_reg
__STATIC_INLINE uint32_t hw_spi_get_config_reg(HW_SPI_ID id)
Get SPI Configuration Register Value.
Definition: hw_spi.h:980
hw_spi_change_fifo_mode
HW_SPI_FIFO hw_spi_change_fifo_mode(HW_SPI_ID id, HW_SPI_FIFO mode)
Change SPI FIFO mode.
HW_GPIO_PIN
HW_GPIO_PIN
GPIO pin number.
Definition: hw_gpio.h:106
hw_spi_config_t::select_divn
bool select_divn
Definition: hw_spi.h:339
HW_SPI_FIFO_LEVEL4
Definition: hw_spi.h:285
hw_spi_get_fifo_mode
HW_SPI_FIFO hw_spi_get_fifo_mode(HW_SPI_ID id)
Get SPI FIFO mode.
hw_spi_get_clock_reg_clk_div
__STATIC_INLINE HW_SPI_FREQ hw_spi_get_clock_reg_clk_div(HW_SPI_ID id)
Get SPI_CLK_DIV from Configuration Register.
Definition: hw_spi.h:1129
HW_SPI_FIFO_RX_ONLY
Definition: hw_spi.h:294
hw_spi_config_t::cpol_cpha_mode
HW_SPI_MODE_CPOL_CPHA cpol_cpha_mode
Definition: hw_spi.h:331
hw_spi_config_t::fifo_mode
HW_SPI_FIFO fifo_mode
Definition: hw_spi.h:333
hw_spi_fifo_write8
__STATIC_INLINE void hw_spi_fifo_write8(HW_SPI_ID id, uint8_t data)
Write 4 to 8-bits to TX FIFO.
Definition: hw_spi.h:480
hw_spi_fifo_read16
__STATIC_INLINE uint16_t hw_spi_fifo_read16(HW_SPI_ID id)
Read 4 to 16-bits from RX FIFO.
Definition: hw_spi.h:420
HW_GPIO_PORT
HW_GPIO_PORT
GPIO port number.
Definition: hw_gpio.h:96
HW_DMA_CHANNEL
HW_DMA_CHANNEL
DMA channel number.
Definition: hw_dma.h:62
HW_SPI_MODE
HW_SPI_MODE
Master/slave mode.
Definition: hw_spi.h:213
hw_spi_set_cs_low
void hw_spi_set_cs_low(HW_SPI_ID id)
Set SPI CS low.
hw_spi_get_irq_mask_reg_rx_full_en
__STATIC_INLINE HW_SPI_MINT hw_spi_get_irq_mask_reg_rx_full_en(HW_SPI_ID id)
Get SPI_IRQ_MASK_RX_FULL from IRQ Mask Register.
Definition: hw_spi.h:1270
hw_spi_set_mode
__STATIC_INLINE void hw_spi_set_mode(HW_SPI_ID id, HW_SPI_MODE smn)
Set SPI master/slave mode.
Definition: hw_spi.h:1592
HW_SPI_WORD_22BIT
Definition: hw_spi.h:192
hw_spi_set_fifo_config_reg
__STATIC_INLINE void hw_spi_set_fifo_config_reg(HW_SPI_ID id, uint8_t val)
Set SPI FIFO Configuration Register Value.
Definition: hw_spi.h:1143
hw_spi_set_fifo_write_reg
__STATIC_INLINE void hw_spi_set_fifo_write_reg(HW_SPI_ID id, uint32_t tx_data)
Write to TX FIFO. Write access is permitted only if SPI_TX_FIFO_FULL is 0.
Definition: hw_spi.h:1416
hw_spi_get_ctrl_reg_rx_en
__STATIC_INLINE bool hw_spi_get_ctrl_reg_rx_en(HW_SPI_ID id)
Get SPI_RX_EN from Control Register.
Definition: hw_spi.h:815
hw_spi_writeread32
uint32_t hw_spi_writeread32(HW_SPI_ID id, uint32_t val)
Writes/reads 4 to 32 bits to the SPI.
HW_SPI_WORD_30BIT
Definition: hw_spi.h:200
hw_spi_set_fifo_config_reg_tx_tl
__STATIC_INLINE void hw_spi_set_fifo_config_reg_tx_tl(HW_SPI_ID id, HW_SPI_FIFO_TL spi_tx_tl)
Set SPI_TX_TL in FIFO Configuration Register.
Definition: hw_spi.h:1172
hw_spi_get_ctrl_reg_dma_rx_en
__STATIC_INLINE bool hw_spi_get_ctrl_reg_dma_rx_en(HW_SPI_ID id)
Get SPI_DMA_RX_EN from Control Register.
Definition: hw_spi.h:867
HW_SPI_WORD_15BIT
Definition: hw_spi.h:185
hw_spi_enable_interrupt
__STATIC_INLINE void hw_spi_enable_interrupt(HW_SPI_ID id)
Enables the SPI maskable interrupt (MINT) to the CPU.
Definition: hw_spi.h:1478
HW_SPI_WORD_27BIT
Definition: hw_spi.h:197
HW_SPI_FIFO_LEVEL1
Definition: hw_spi.h:282
hw_spi_config_t::disabled
uint8_t disabled
Definition: hw_spi.h:334
hw_spi_get_status_reg_rx_fifo_full
__STATIC_INLINE bool hw_spi_get_status_reg_rx_fifo_full(HW_SPI_ID id)
Get SPI RX FIFO Full status from Status Register.
Definition: hw_spi.h:1299
HW_SPI_FREQ
uint8_t HW_SPI_FREQ
Source clock's divider for the selected SPI clock frequency.
Definition: hw_spi.h:251
HW_SPI_CP_MODE_3
Definition: hw_spi.h:231
HW_SPI_WORD_24BIT
Definition: hw_spi.h:194
HW_SPI_WORD_28BIT
Definition: hw_spi.h:198
HW_SPI_MODE_CPOL_CPHA
HW_SPI_MODE_CPOL_CPHA
Defines the SPI mode Clock Polarity and Clock Phase (CPOL, CPHA)
Definition: hw_spi.h:224
REG_MSK
#define REG_MSK(base, reg, field)
Access register field mask.
Definition: sdk_defs.h:583
mode
HW_GPIO_MODE mode
Definition: hw_gpio.h:211
hw_spi_get_ctrl_reg_capture_next_edge
__STATIC_INLINE HW_SPI_MASTER_EDGE_CAPTURE hw_spi_get_ctrl_reg_capture_next_edge(HW_SPI_ID id)
Get SPI_CAPTURE_AT_NEXT_EDGE from Control Register.
Definition: hw_spi.h:919
HW_SPI_WORD_25BIT
Definition: hw_spi.h:195
hw_spi_set_ctrl_reg_dma_tx_en
__STATIC_INLINE void hw_spi_set_ctrl_reg_dma_tx_en(HW_SPI_ID id, bool spi_dma_tx_enable)
Set SPI_DMA_TX_EN in Control Register.
Definition: hw_spi.h:828
HW_SPI_WORD
HW_SPI_WORD
Word length.
Definition: hw_spi.h:173
HW_SPI_CP_MODE_2
Definition: hw_spi.h:229
hw_spi_fifo_read32
__STATIC_INLINE uint32_t hw_spi_fifo_read32(HW_SPI_ID id)
Read 4 to 32-bits from RX FIFO.
Definition: hw_spi.h:501
hw_spi_set_clock_reg_clk_div
__STATIC_INLINE void hw_spi_set_clock_reg_clk_div(HW_SPI_ID id, HW_SPI_FREQ spi_clk_div)
Set SPI_CLK_DIV in Clock Register Applicable only in master mode. Defines the spi clock frequency in ...
Definition: hw_spi.h:1115
hw_spi_enable
__STATIC_INLINE void hw_spi_enable(HW_SPI_ID id, uint8_t on)
Switch the SPI module on and off.
Definition: hw_spi.h:1530
hw_spi_get_irq_mask_reg_tx_empty_en
__STATIC_INLINE HW_SPI_MINT hw_spi_get_irq_mask_reg_tx_empty_en(HW_SPI_ID id)
Get SPI_IRQ_MASK_TX_EMPTY from IRQ Mask Register.
Definition: hw_spi.h:1244
HW_SPI_MINT
HW_SPI_MINT
Disable/enable interrupts to the CPU.
Definition: hw_spi.h:239
hw_spi_is_tx_fifo_full
__STATIC_INLINE bool hw_spi_is_tx_fifo_full(HW_SPI_ID id)
Get the value of the SPI TX FIFO full bit.
Definition: hw_spi.h:1672
hw_spi_config_t::word_mode
HW_SPI_WORD word_mode
Definition: hw_spi.h:329
hw_spi_get_ctrl_reg
__STATIC_INLINE uint32_t hw_spi_get_ctrl_reg(HW_SPI_ID id)
Get SPI Control Register Value.
Definition: hw_spi.h:719
HW_SPI_WORD_29BIT
Definition: hw_spi.h:199
HW_SPI_FIFO_LEVEL0
Definition: hw_spi.h:281
HW_SPI_WORD_32BIT
Definition: hw_spi.h:202
hw_spi_get_ctrl_reg_swap_bytes
__STATIC_INLINE bool hw_spi_get_ctrl_reg_swap_bytes(HW_SPI_ID id)
Get SPI_SWAP_BYTES from Control Register.
Definition: hw_spi.h:952
hw_spi_config_t::spi_cs
HW_SPI_CS_MODE spi_cs
Definition: hw_spi.h:335
hw_spi_get_clock_reg
__STATIC_INLINE uint8_t hw_spi_get_clock_reg(HW_SPI_ID id)
Get SPI Clock Register Value.
Definition: hw_spi.h:1099
HW_SPI_CS_0
Definition: hw_spi.h:269
hw_spi_set_ctrl_reg_clear_enable
__STATIC_INLINE void hw_spi_set_ctrl_reg_clear_enable(HW_SPI_ID id)
Set SPI Control Register Value to clear SPI enable.
Definition: hw_spi.h:730
hw_gpio.h
Definition of API for the GPIO Low Level Driver.
hw_spi_set_cs_pad
void hw_spi_set_cs_pad(HW_SPI_ID id, const SPI_Pad *pad, HW_SPI_CS_MODE cs_mode, bool validate)
Set SPI GPIO Chip Select (CS) Pad.
hw_spi_get_fifo_read_reg
__STATIC_INLINE uint32_t hw_spi_get_fifo_read_reg(HW_SPI_ID id)
Read RX FIFO. Read access is permitted only if SPI_RX_FIFO_EMPTY = 0.
Definition: hw_spi.h:1400
HW_SPI_MASTER_EDGE_CAPTURE_NEXT
Definition: hw_spi.h:259
hw_spi_write_buf
void hw_spi_write_buf(HW_SPI_ID id, const uint8_t *out_buf, uint16_t len, hw_spi_tx_callback cb, void *user_data)
Write array of bytes to SPI.
hw_spi_config_t::rx_tl
HW_SPI_FIFO_TL rx_tl
Definition: hw_spi.h:336
HW_SPI_WORD_10BIT
Definition: hw_spi.h:180
hw_spi_config_t::swap_bytes
bool swap_bytes
Definition: hw_spi.h:338
HW_SPI_REG_GETF
#define HW_SPI_REG_GETF(id, reg, field)
Get the value of an SPI register field.
Definition: hw_spi.h:375
SPI_SPI_CLOCK_REG_SPI_CLK_DIV_Msk
#define SPI_SPI_CLOCK_REG_SPI_CLK_DIV_Msk
Definition: DA1459x-00.h:4653
HW_SPI_FIFO_TX_ONLY
Definition: hw_spi.h:295
REG_GETF
#define REG_GETF(base, reg, field)
Return the value of a register field.
Definition: sdk_defs.h:711
hw_spi_is_occupied
bool hw_spi_is_occupied(const HW_SPI_ID id)
get SPI transaction status
HW_SPI_WORD_11BIT
Definition: hw_spi.h:181
HW_SPI_FIFO_RX_TX
Definition: hw_spi.h:296
HW_SPI_CP_MODE_1
Definition: hw_spi.h:227
hw_spi_get_ctrl_reg_tx_en
__STATIC_INLINE bool hw_spi_get_ctrl_reg_tx_en(HW_SPI_ID id)
Get SPI_TX_EN from Control Register.
Definition: hw_spi.h:789
hw_spi_get_fifo_status_reg_tx_fifo_level
__STATIC_INLINE uint8_t hw_spi_get_fifo_status_reg_tx_fifo_level(HW_SPI_ID id)
Get SPI TX FIFO level from FIFO Status Register.
Definition: hw_spi.h:1342
HW_SPI_FIFO_LEVEL3
Definition: hw_spi.h:284
hw_spi_is_enabled
__STATIC_INLINE uint8_t hw_spi_is_enabled(HW_SPI_ID id)
Get the on/off status of the SPI module.
Definition: hw_spi.h:1549
HW_SPI_CS_NONE
Definition: hw_spi.h:268
hw_spi_set_ctrl_reg_spi_en
__STATIC_INLINE void hw_spi_set_ctrl_reg_spi_en(HW_SPI_ID id, bool spi_enable)
Set SPI_EN in Control Register.
Definition: hw_spi.h:750
hw_spi_get_memory_word_size
__STATIC_INLINE uint32_t hw_spi_get_memory_word_size(HW_SPI_ID id)
Get the SPI word size.
Definition: hw_spi.h:1650
hw_spi_config_t::smn_role
HW_SPI_MODE smn_role
Definition: hw_spi.h:330
hw_spi_set_irq_mask_reg_tx_empty_en
__STATIC_INLINE void hw_spi_set_irq_mask_reg_tx_empty_en(HW_SPI_ID id, HW_SPI_MINT irq_tx_empty_en)
Set SPI_IRQ_MASK_TX_EMPTY in IRQ Mask Register.
Definition: hw_spi.h:1231
HW_SPI_WORD_14BIT
Definition: hw_spi.h:184
hw_spi_set_cs_high
void hw_spi_set_cs_high(HW_SPI_ID id)
Set SPI CS high.
hw_spi_config_t::xtal_freq
HW_SPI_FREQ xtal_freq
Definition: hw_spi.h:332
hw_spi_config_t::tx_tl
HW_SPI_FIFO_TL tx_tl
Definition: hw_spi.h:337
HW_SPI_WORD_16BIT
Definition: hw_spi.h:186
hw_spi_set_config_reg
__STATIC_INLINE void hw_spi_set_config_reg(HW_SPI_ID id, uint32_t spi_config_reg)
Set SPI Configuration Register Value.
Definition: hw_spi.h:967
hw_spi_get_fifo_status_reg_rx_empty
__STATIC_INLINE bool hw_spi_get_fifo_status_reg_rx_empty(HW_SPI_ID id)
Get SPI RX FIFO Empty status from FIFO Status Register.
Definition: hw_spi.h:1357
hw_spi_writeread
uint16_t hw_spi_writeread(HW_SPI_ID id, uint16_t val)
Writes/reads 4 to 16 bits to the SPI.
hw_spi_get_word_size
__STATIC_INLINE HW_SPI_WORD hw_spi_get_word_size(HW_SPI_ID id)
Get the SPI word mode.
Definition: hw_spi.h:1630
hw_spi_is_busy
__STATIC_INLINE uint8_t hw_spi_is_busy(HW_SPI_ID id)
Get SPI busy status in master mode.
Definition: hw_spi.h:1813
hw_spi_set_config_reg_word_len
__STATIC_INLINE void hw_spi_set_config_reg_word_len(HW_SPI_ID id, HW_SPI_WORD spi_wsz)
Set SPI_WORD_LENGTH in Configuration Register.
Definition: hw_spi.h:1019
hw_spi_get_fifo_config_reg
__STATIC_INLINE uint32_t hw_spi_get_fifo_config_reg(HW_SPI_ID id)
Get SPI FIFO Configuration Register Value.
Definition: hw_spi.h:1156
hw_spi_get_config_reg_slave_en
__STATIC_INLINE HW_SPI_MODE hw_spi_get_config_reg_slave_en(HW_SPI_ID id)
Get SPI Master/Slave mode from Configuration Register.
Definition: hw_spi.h:1058
HW_SPI_WORD_21BIT
Definition: hw_spi.h:191
hw_spi_get_clock_freq
__STATIC_INLINE HW_SPI_FREQ hw_spi_get_clock_freq(HW_SPI_ID id)
Get SPI source clock's divider for the selected SPI clock frequency.
Definition: hw_spi.h:1578
HW_SPI_CS_1
Definition: hw_spi.h:270
hw_spi_get_config_reg_word_len
__STATIC_INLINE HW_SPI_WORD hw_spi_get_config_reg_word_len(HW_SPI_ID id)
Get SPI_WORD_LENGTH from Configuration Register.
Definition: hw_spi.h:1032
hw_spi_set_fifo_config_reg_rx_tl
__STATIC_INLINE void hw_spi_set_fifo_config_reg_rx_tl(HW_SPI_ID id, HW_SPI_FIFO_TL spi_rx_tl)
Set SPI_RX_TL in FIFO Configuration Register.
Definition: hw_spi.h:1202
HW_SPI_FIFO
HW_SPI_FIFO
FIFO mode.
Definition: hw_spi.h:292
hw_spi_is_interrupt_enabled
__STATIC_INLINE HW_SPI_MINT hw_spi_is_interrupt_enabled(HW_SPI_ID id)
Get the status of the SPI maskable interrupt (MINT) to the CPU.
Definition: hw_spi.h:1512
hw_spi_fifo_write16
__STATIC_INLINE void hw_spi_fifo_write16(HW_SPI_ID id, uint16_t data)
Write 4 to 16-bits to TX FIFO.
Definition: hw_spi.h:440
HW_SPI_CS_GPIO
Definition: hw_spi.h:271
HW_SPI_MASTER_EDGE_CAPTURE
HW_SPI_MASTER_EDGE_CAPTURE
Define the SPI master edge capture type.
Definition: hw_spi.h:257
hw_spi_is_slave
__STATIC_INLINE HW_SPI_MODE hw_spi_is_slave(HW_SPI_ID id)
Get the SPI master/slave mode.
Definition: hw_spi.h:1605
hw_spi_set_word_size
__STATIC_INLINE void hw_spi_set_word_size(HW_SPI_ID id, HW_SPI_WORD word)
Set SPI word mode.
Definition: hw_spi.h:1617
hw_spi_writeread_buf
void hw_spi_writeread_buf(HW_SPI_ID id, const uint8_t *out_buf, uint8_t *in_buf, uint16_t len, hw_spi_tx_callback cb, void *user_data)
Write and reads array of bytes through SPI.
HW_SPI_REG_SETF
#define HW_SPI_REG_SETF(id, reg, field, val)
Write a value to an SPI register field.
Definition: hw_spi.h:361
hw_spi_get_ctrl_reg_dma_tx_en
__STATIC_INLINE bool hw_spi_get_ctrl_reg_dma_tx_en(HW_SPI_ID id)
Get SPI_DMA_TX_EN from Control Register.
Definition: hw_spi.h:841
hw_spi_get_status_reg_tx_fifo_empty
__STATIC_INLINE bool hw_spi_get_status_reg_tx_fifo_empty(HW_SPI_ID id)
Get SPI TX FIFO Empty status from Status Register.
Definition: hw_spi.h:1286
HW_SPI_WORD_13BIT
Definition: hw_spi.h:183
HW_SPI_FIFO_LEVEL2
Definition: hw_spi.h:283
HW_SPI_MASTER_EDGE_CAPTURE_CURRENT
Definition: hw_spi.h:258
HW_SPI_WORD_12BIT
Definition: hw_spi.h:182
HW_SPI_WORD_9BIT
Definition: hw_spi.h:179