HPM SDK
HPMicro Software Development Kit
hpm_spi_drv.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2021-2025 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #ifndef HPM_SPI_DRV_H
9 #define HPM_SPI_DRV_H
10 #include "hpm_common.h"
11 #include "hpm_spi_regs.h"
12 #include "hpm_soc_feature.h"
13 
24 typedef enum {
28 
32 typedef enum {
39 #if defined(HPM_IP_FEATURE_SPI_CS_EDGE_DETECT_FOR_SLAVE) && (HPM_IP_FEATURE_SPI_CS_EDGE_DETECT_FOR_SLAVE == 1)
40  spi_slave_cs_edge_falling_int = SPI_INTREN_CS_NEGEN_MASK,
41  spi_slave_cs_edge_rising_int = SPI_INTREN_CS_POSEN_MASK,
42 #endif
44 
48 typedef enum {
52 
56 typedef enum {
60 
64 typedef enum {
68 
72 typedef enum {
78 
82 typedef enum {
100 
104 typedef enum {
108 
112 typedef enum {
124 
128 typedef enum {
133 
137 typedef enum {
141 
145 typedef enum {
151 
152 typedef enum {
156 
160 typedef enum {
166 
170 typedef struct {
172  uint32_t sclk_freq_in_hz;
173  uint8_t cs2sclk;
174  uint8_t csht;
176 
180 typedef struct {
183 
187 typedef struct {
190 
194 typedef struct {
198  bool lsb;
199  uint8_t mode;
200  uint8_t cpol;
201  uint8_t cpha;
203 
207 typedef struct {
211 
215 typedef struct {
218  uint8_t addr_phase_fmt;
220  uint8_t token_value;
222 
226 typedef struct {
229 
233 typedef struct {
236  uint8_t trans_mode;
237  uint8_t data_phase_fmt;
238  uint8_t dummy_cnt;
239 #if defined(HPM_IP_FEATURE_SPI_CS_SELECT) && (HPM_IP_FEATURE_SPI_CS_SELECT == 1)
240  uint8_t cs_index;
241 #endif
247 typedef struct {
252 
253 #if defined(HPM_IP_FEATURE_SPI_CS_SELECT) && (HPM_IP_FEATURE_SPI_CS_SELECT == 1)
254 typedef enum {
255  spi_cs_0 = 1,
256  spi_cs_1 = 2,
257  spi_cs_2 = 4,
258  spi_cs_3 = 8,
260 #endif
261 
262 typedef enum {
268 
269 #if defined(HPM_IP_FEATURE_SPI_SUPPORT_DIRECTIO) && (HPM_IP_FEATURE_SPI_SUPPORT_DIRECTIO == 1)
270 typedef enum {
271  hold_pin = 0,
276  cs_pin
278 
279 #endif
280 
284 enum {
286 };
287 
288 #if defined(__cplusplus)
289 extern "C" {
290 #endif /* __cplusplus */
291 
298 
305 
312 
319 
326 
335 
342 void spi_format_init(SPI_Type *ptr, spi_format_config_t *config);
343 
358  spi_control_config_t *config,
359  uint8_t *cmd, uint32_t *addr,
360  uint8_t *wbuff, uint32_t wcount, uint8_t *rbuff, uint32_t rcount);
361 
376  spi_control_config_t *config,
377  uint8_t *cmd, uint32_t *addr,
378  uint32_t wcount, uint32_t rcount);
379 
389 
399 
408 static inline void spi_set_tx_fifo_threshold(SPI_Type *ptr, uint32_t threshold)
409 {
410  ptr->CTRL = (ptr->CTRL & ~SPI_CTRL_TXTHRES_MASK) | SPI_CTRL_TXTHRES_SET(threshold);
411 }
412 
421 static inline void spi_set_rx_fifo_threshold(SPI_Type *ptr, uint32_t threshold)
422 {
423  ptr->CTRL = (ptr->CTRL & ~SPI_CTRL_RXTHRES_MASK) | SPI_CTRL_RXTHRES_SET(threshold);
424 }
425 
434 static inline void spi_enable_dma(SPI_Type *ptr, uint32_t mask)
435 {
436  ptr->CTRL |= mask;
437 }
438 
447 static inline void spi_disable_dma(SPI_Type *ptr, uint32_t mask)
448 {
449  ptr->CTRL &= ~mask;
450 }
451 
460 static inline uint32_t spi_get_interrupt_status(SPI_Type *ptr)
461 {
462  return ptr->INTRST;
463 }
464 
474 static inline void spi_clear_interrupt_status(SPI_Type *ptr, uint32_t mask)
475 {
476  /* write 1 to clear */
477  ptr->INTRST = mask;
478 }
479 
488 static inline void spi_enable_interrupt(SPI_Type *ptr, uint32_t mask)
489 {
490  ptr->INTREN |= mask;
491 }
492 
501 static inline void spi_disable_interrupt(SPI_Type *ptr, uint32_t mask)
502 {
503  ptr->INTREN &= ~mask;
504 }
505 
520 hpm_stat_t spi_write_read_data(SPI_Type *ptr, uint8_t data_len_in_bytes, uint8_t *wbuff, uint32_t wcount, uint8_t *rbuff, uint32_t rcount);
521 
533 hpm_stat_t spi_read_data(SPI_Type *ptr, uint8_t data_len_in_bytes, uint8_t *buff, uint32_t count);
534 
546 hpm_stat_t spi_write_data(SPI_Type *ptr, uint8_t data_len_in_bytes, uint8_t *buff, uint32_t count);
547 
560 
573 
586 
596 hpm_stat_t spi_control_init(SPI_Type *ptr, spi_control_config_t *config, uint32_t wcount, uint32_t rcount);
597 
604 static inline uint8_t spi_get_data_length_in_bits(SPI_Type *ptr)
605 {
607 }
608 
615 static inline uint8_t spi_get_data_length_in_bytes(SPI_Type *ptr)
616 {
617  return ((spi_get_data_length_in_bits(ptr) + 7U) / 8U);
618 }
619 
626 static inline bool spi_is_active(SPI_Type *ptr)
627 {
628  return ((ptr->STATUS & SPI_STATUS_SPIACTIVE_MASK) == SPI_STATUS_SPIACTIVE_MASK) ? true : false;
629 }
630 
636 static inline void spi_enable_tx_dma(SPI_Type *ptr)
637 {
638  ptr->CTRL |= SPI_CTRL_TXDMAEN_MASK;
639 }
640 
646 static inline void spi_disable_tx_dma(SPI_Type *ptr)
647 {
648  ptr->CTRL &= ~SPI_CTRL_TXDMAEN_MASK;
649 }
650 
656 static inline void spi_enable_rx_dma(SPI_Type *ptr)
657 {
658  ptr->CTRL |= SPI_CTRL_RXDMAEN_MASK;
659 }
660 
666 static inline void spi_disable_rx_dma(SPI_Type *ptr)
667 {
668  ptr->CTRL &= ~SPI_CTRL_RXDMAEN_MASK;
669 }
670 
677 static inline uint32_t spi_slave_get_sent_data_count(SPI_Type *ptr)
678 {
679 #if defined(HPM_IP_FEATURE_SPI_NEW_TRANS_COUNT) && (HPM_IP_FEATURE_SPI_NEW_TRANS_COUNT == 1)
680  return ptr->SLVDATAWCNT;
681 #else
682  return SPI_SLVDATACNT_WCNT_GET(ptr->SLVDATACNT);
683 #endif
684 }
685 
692 static inline uint32_t spi_slave_get_received_data_count(SPI_Type *ptr)
693 {
694 #if defined(HPM_IP_FEATURE_SPI_NEW_TRANS_COUNT) && (HPM_IP_FEATURE_SPI_NEW_TRANS_COUNT == 1)
695  return ptr->SLVDATARCNT;
696 #else
697  return SPI_SLVDATACNT_RCNT_GET(ptr->SLVDATACNT);
698 #endif
699 }
700 
707 static inline void spi_set_clock_phase(SPI_Type *ptr, spi_sclk_sampling_clk_edges_t clock_phase)
708 {
709  ptr->TRANSFMT = (ptr->TRANSFMT & ~SPI_TRANSFMT_CPHA_MASK) | SPI_TRANSFMT_CPHA_SET(clock_phase);
710 }
711 
719 {
721 }
722 
729 static inline void spi_set_clock_polarity(SPI_Type *ptr, spi_sclk_idle_state_t clock_polarity)
730 {
731  ptr->TRANSFMT = (ptr->TRANSFMT & ~SPI_TRANSFMT_CPOL_MASK) | SPI_TRANSFMT_CPOL_SET(clock_polarity);
732 }
733 
741 {
743 }
744 
752 static inline hpm_stat_t spi_set_data_bits(SPI_Type *ptr, uint8_t nbits)
753 {
754  if (nbits > 32) {
756  } else {
758  return status_success;
759  }
760 }
761 
767 static inline void spi_transmit_fifo_reset(SPI_Type *ptr)
768 {
770 }
771 
777 static inline void spi_receive_fifo_reset(SPI_Type *ptr)
778 {
780 }
781 
787 static inline void spi_reset(SPI_Type *ptr)
788 {
789  ptr->CTRL |= SPI_CTRL_SPIRST_MASK;
790 }
791 
798 static inline void spi_set_address_len(SPI_Type *ptr, spi_address_len_t addrlen)
799 {
801 }
802 
808 static inline void spi_enable_data_merge(SPI_Type *ptr)
809 {
811 }
812 
818 static inline void spi_disable_data_merge(SPI_Type *ptr)
819 {
821 }
822 
823 #if defined(HPM_IP_FEATURE_SPI_SUPPORT_DIRECTIO) && (HPM_IP_FEATURE_SPI_SUPPORT_DIRECTIO == 1)
833 
841 
850 
860 
868 static inline void spi_enable_directio(SPI_Type *ptr)
869 {
871 }
872 
878 static inline void spi_disable_directio(SPI_Type *ptr)
879 {
881 }
882 
890 static inline uint8_t spi_get_directio_enable_status(SPI_Type *ptr)
891 {
893 }
894 
895 #endif
896 
904 static inline uint8_t spi_get_rx_fifo_valid_data_size(SPI_Type *ptr)
905 {
906  uint32_t status = ptr->STATUS;
907  return ((SPI_STATUS_RXNUM_7_6_GET(status) << 6) | SPI_STATUS_RXNUM_5_0_GET(status));
908 }
909 
917 static inline uint8_t spi_get_tx_fifo_valid_data_size(SPI_Type *ptr)
918 {
919  uint32_t status = ptr->STATUS;
920  return ((SPI_STATUS_TXNUM_7_6_GET(status) << 6) | SPI_STATUS_TXNUM_5_0_GET(status));
921 }
922 
930 static inline uint8_t spi_get_rx_fifo_size(SPI_Type *ptr)
931 {
932  uint8_t size = SPI_CONFIG_RXFIFOSIZE_GET(ptr->CONFIG);
933  return (2 << size);
934 }
935 
943 static inline uint8_t spi_get_tx_fifo_size(SPI_Type *ptr)
944 {
945  uint8_t size = SPI_CONFIG_TXFIFOSIZE_GET(ptr->CONFIG);
946  return (2 << size);
947 }
948 
955 static inline void spi_slave_enable_data_only(SPI_Type *ptr)
956 {
958 }
959 
965 static inline void spi_slave_disable_data_only(SPI_Type *ptr)
966 {
968 }
969 
976 {
978 }
979 
986 {
988 }
989 
996 {
998 }
999 
1006 {
1008 }
1009 
1017 {
1019 }
1020 
1027 static inline void spi_set_transfer_mode(SPI_Type *ptr, spi_trans_mode_t mode)
1028 {
1030 }
1031 
1038 {
1040 }
1041 
1048 {
1050 }
1051 
1058 static inline void spi_set_write_data_count(SPI_Type *ptr, uint32_t count)
1059 {
1060 #if defined(HPM_IP_FEATURE_SPI_NEW_TRANS_COUNT) && (HPM_IP_FEATURE_SPI_NEW_TRANS_COUNT == 1)
1061  ptr->WR_TRANS_CNT = (count - 1);
1062 #else
1064 #endif
1065 }
1066 
1073 static inline void spi_set_read_data_count(SPI_Type *ptr, uint32_t count)
1074 {
1075 #if defined(HPM_IP_FEATURE_SPI_NEW_TRANS_COUNT) && (HPM_IP_FEATURE_SPI_NEW_TRANS_COUNT == 1)
1076  ptr->RD_TRANS_CNT = (count - 1);
1077 #else
1079 #endif
1080 }
1081 
1089 {
1091 }
1092 
1099 static inline void spi_set_dummy_count(SPI_Type *ptr, spi_dummy_count_t count)
1100 {
1102 }
1103 
1111 {
1112  ptr->TIMING = (ptr->TIMING & ~SPI_TIMING_CS2SCLK_MASK) | SPI_TIMING_CS2SCLK_SET(duration);
1113 }
1114 
1122 {
1124 }
1125 
1132 static inline void spi_master_set_csht_timing(SPI_Type *ptr, spi_csht_duration_t duration)
1133 {
1134  ptr->TIMING = (ptr->TIMING & ~SPI_TIMING_CSHT_MASK) | SPI_TIMING_CSHT_SET(duration);
1135 }
1136 
1144 {
1146 }
1147 
1154 static inline void spi_master_set_sclk_div(SPI_Type *ptr, uint8_t div)
1155 {
1157 }
1158 
1166 static inline uint8_t spi_master_get_sclk_div(SPI_Type *ptr)
1167 {
1168  return SPI_TIMING_SCLK_DIV_GET(ptr->TIMING);
1169 }
1170 
1179 static inline void spi_slave_set_user_status(SPI_Type *ptr, uint16_t user_status)
1180 {
1181  ptr->SLVST = (ptr->SLVST & ~SPI_SLVST_USR_STATUS_MASK) | SPI_SLVST_USR_STATUS_SET(user_status);
1182 }
1183 
1191 {
1193 }
1194 
1203 {
1205 }
1206 
1213 static inline void spi_set_shift_direction(SPI_Type *ptr, spi_shift_direction_t shift_direction)
1214 {
1215  ptr->TRANSFMT = (ptr->TRANSFMT & ~SPI_TRANSFMT_LSB_MASK) | SPI_TRANSFMT_LSB_SET(shift_direction);
1216 }
1217 
1225 {
1227 }
1228 
1229 #if defined(HPM_IP_FEATURE_SPI_DMA_TX_REQ_AFTER_CMD_FO_MASTER) && (HPM_IP_FEATURE_SPI_DMA_TX_REQ_AFTER_CMD_FO_MASTER == 1)
1235 static inline void spi_master_enable_tx_dma_request_after_cmd_write(SPI_Type *ptr)
1236 {
1237  ptr->CTRL |= SPI_CTRL_CMD_OP_MASK;
1238 }
1239 
1245 static inline void spi_master_disable_tx_dma_request_after_cmd_write(SPI_Type *ptr)
1246 {
1247  ptr->CTRL &= ~SPI_CTRL_CMD_OP_MASK;
1248 }
1249 #endif
1250 
1251 #if defined(HPM_IP_FEATURE_SPI_CS_SELECT) && (HPM_IP_FEATURE_SPI_CS_SELECT == 1)
1252 
1261 {
1262  ptr->CTRL = (ptr->CTRL & ~SPI_CTRL_CS_EN_MASK) | SPI_CTRL_CS_EN_SET(cs);
1263 }
1264 
1265 #endif
1266 
1275 hpm_stat_t spi_poll_reset_complete(SPI_Type *ptr, spi_reset_mask_t reset_mask, uint32_t retry);
1276 
1281 #if defined(__cplusplus)
1282 }
1283 #endif /* __cplusplus */
1284 #endif /* HPM_SPI_DRV_H */
#define SPI_STATUS_SPIACTIVE_MASK
Definition: hpm_spi_regs.h:712
#define SPI_TRANSCTRL_DUALQUAD_SET(x)
Definition: hpm_spi_regs.h:437
#define SPI_TRANSCTRL_DUMMYCNT_MASK
Definition: hpm_spi_regs.h:488
#define SPI_TIMING_CSHT_SET(x)
Definition: hpm_spi_regs.h:877
#define SPI_TRANSCTRL_TRANSMODE_SET(x)
Definition: hpm_spi_regs.h:423
#define SPI_CONFIG_TXFIFOSIZE_GET(x)
Definition: hpm_spi_regs.h:1013
#define SPI_SLVST_USR_STATUS_SET(x)
Definition: hpm_spi_regs.h:931
#define SPI_CTRL_RXDMAEN_MASK
Definition: hpm_spi_regs.h:592
#define SPI_STATUS_TXNUM_7_6_GET(x)
Definition: hpm_spi_regs.h:638
#define SPI_INTREN_RXFIFOORINTEN_MASK
Definition: hpm_spi_regs.h:782
#define SPI_TRANSCTRL_ADDRFMT_SET(x)
Definition: hpm_spi_regs.h:401
#define SPI_STATUS_RXNUM_7_6_GET(x)
Definition: hpm_spi_regs.h:647
#define SPI_CTRL_RXFIFORST_MASK
Definition: hpm_spi_regs.h:614
#define SPI_CTRL_TXFIFORST_MASK
Definition: hpm_spi_regs.h:603
#define SPI_SLVDATACNT_RCNT_GET(x)
Definition: hpm_spi_regs.h:951
#define SPI_TRANSCTRL_DUALQUAD_MASK
Definition: hpm_spi_regs.h:435
#define SPI_TIMING_SCLK_DIV_GET(x)
Definition: hpm_spi_regs.h:890
#define SPI_TRANSFMT_LSB_SET(x)
Definition: hpm_spi_regs.h:128
#define SPI_TIMING_CSHT_GET(x)
Definition: hpm_spi_regs.h:878
#define SPI_TIMING_CS2SCLK_MASK
Definition: hpm_spi_regs.h:864
#define SPI_TRANSCTRL_CMDEN_MASK
Definition: hpm_spi_regs.h:375
#define SPI_TRANSCTRL_RDTRANCNT_MASK
Definition: hpm_spi_regs.h:502
#define SPI_CTRL_CS_EN_MASK
Definition: hpm_spi_regs.h:550
#define SPI_INTREN_RXFIFOINTEN_MASK
Definition: hpm_spi_regs.h:758
#define SPI_INTREN_SLVCMDEN_MASK
Definition: hpm_spi_regs.h:724
#define SPI_INTREN_ENDINTEN_MASK
Definition: hpm_spi_regs.h:736
#define SPI_STATUS_RXNUM_5_0_GET(x)
Definition: hpm_spi_regs.h:701
#define SPI_CTRL_RXTHRES_SET(x)
Definition: hpm_spi_regs.h:574
#define SPI_TRANSCTRL_ADDRFMT_MASK
Definition: hpm_spi_regs.h:399
#define SPI_TRANSCTRL_TOKENVALUE_MASK
Definition: hpm_spi_regs.h:475
#define SPI_TIMING_CSHT_MASK
Definition: hpm_spi_regs.h:875
#define SPI_STATUS_TXNUM_5_0_GET(x)
Definition: hpm_spi_regs.h:674
#define SPI_TRANSCTRL_WRTRANCNT_MASK
Definition: hpm_spi_regs.h:462
#define SPI_CONFIG_RXFIFOSIZE_GET(x)
Definition: hpm_spi_regs.h:1029
#define SPI_TRANSFMT_ADDRLEN_SET(x)
Definition: hpm_spi_regs.h:81
#define SPI_TIMING_CS2SCLK_GET(x)
Definition: hpm_spi_regs.h:867
#define SPI_TIMING_SCLK_DIV_SET(x)
Definition: hpm_spi_regs.h:889
#define SPI_TRANSFMT_CPHA_MASK
Definition: hpm_spi_regs.h:162
#define SPI_TRANSFMT_DATALEN_SET(x)
Definition: hpm_spi_regs.h:92
#define SPI_TRANSFMT_CPOL_MASK
Definition: hpm_spi_regs.h:150
#define SPI_INTREN_TXFIFOINTEN_MASK
Definition: hpm_spi_regs.h:747
#define SPI_TIMING_CS2SCLK_SET(x)
Definition: hpm_spi_regs.h:866
#define SPI_CTRL_TXDMAEN_MASK
Definition: hpm_spi_regs.h:582
#define SPI_SLVDATACNT_WCNT_GET(x)
Definition: hpm_spi_regs.h:942
#define SPI_DIRECTIO_DIRECTIOEN_MASK
Definition: hpm_spi_regs.h:175
#define SPI_TRANSFMT_ADDRLEN_MASK
Definition: hpm_spi_regs.h:79
#define SPI_TRANSCTRL_TOKENEN_MASK
Definition: hpm_spi_regs.h:448
#define SPI_CTRL_TXTHRES_MASK
Definition: hpm_spi_regs.h:561
#define SPI_CTRL_SPIRST_MASK
Definition: hpm_spi_regs.h:625
#define SPI_CTRL_CS_EN_SET(x)
Definition: hpm_spi_regs.h:552
#define SPI_TRANSFMT_CPOL_GET(x)
Definition: hpm_spi_regs.h:153
#define SPI_TRANSCTRL_TRANSMODE_MASK
Definition: hpm_spi_regs.h:421
#define SPI_TRANSFMT_CPOL_SET(x)
Definition: hpm_spi_regs.h:152
#define SPI_TRANSCTRL_SLVDATAONLY_MASK
Definition: hpm_spi_regs.h:363
#define SPI_TRANSCTRL_ADDREN_MASK
Definition: hpm_spi_regs.h:387
#define SPI_TRANSCTRL_DUALQUAD_GET(x)
Definition: hpm_spi_regs.h:438
#define SPI_CTRL_TXTHRES_SET(x)
Definition: hpm_spi_regs.h:563
#define SPI_TRANSFMT_DATAMERGE_MASK
Definition: hpm_spi_regs.h:102
#define SPI_DIRECTIO_DIRECTIOEN_GET(x)
Definition: hpm_spi_regs.h:178
#define SPI_TRANSFMT_CPHA_SET(x)
Definition: hpm_spi_regs.h:164
#define SPI_TRANSCTRL_DUMMYCNT_SET(x)
Definition: hpm_spi_regs.h:490
#define SPI_TRANSCTRL_WRTRANCNT_SET(x)
Definition: hpm_spi_regs.h:464
#define SPI_TRANSCTRL_RDTRANCNT_SET(x)
Definition: hpm_spi_regs.h:504
#define SPI_TIMING_SCLK_DIV_MASK
Definition: hpm_spi_regs.h:887
#define SPI_INTREN_TXFIFOURINTEN_MASK
Definition: hpm_spi_regs.h:770
#define SPI_TRANSFMT_CPHA_GET(x)
Definition: hpm_spi_regs.h:165
#define SPI_TRANSFMT_LSB_GET(x)
Definition: hpm_spi_regs.h:129
#define SPI_TRANSFMT_DATALEN_SHIFT
Definition: hpm_spi_regs.h:91
#define SPI_TRANSFMT_LSB_MASK
Definition: hpm_spi_regs.h:126
#define SPI_SLVST_USR_STATUS_MASK
Definition: hpm_spi_regs.h:929
#define SPI_TRANSFMT_DATALEN_MASK
Definition: hpm_spi_regs.h:90
#define SPI_TRANSCTRL_TOKENVALUE_SET(x)
Definition: hpm_spi_regs.h:477
#define SPI_CTRL_RXTHRES_MASK
Definition: hpm_spi_regs.h:572
#define SPI_INTREN_CS_NEGEN_MASK
Definition: hpm_spi_regs.h:734
#define SPI_CTRL_CMD_OP_MASK
Definition: hpm_spi_regs.h:552
#define SPI_INTREN_CS_POSEN_MASK
Definition: hpm_spi_regs.h:745
uint32_t hpm_stat_t
Definition: hpm_common.h:135
#define MAKE_STATUS(group, code)
Definition: hpm_common.h:144
@ status_invalid_argument
Definition: hpm_common.h:191
@ status_success
Definition: hpm_common.h:189
@ status_group_spi
Definition: hpm_common.h:150
static void size
Definition: hpm_math.h:6938
static bool spi_is_active(SPI_Type *ptr)
SPI get active status.
Definition: hpm_spi_drv.h:626
spi_addr_phase_format_t
spi address phase format
Definition: hpm_spi_drv.h:104
void spi_slave_get_default_control_config(spi_control_config_t *config)
spi slave get default control config
Definition: hpm_spi_drv.c:335
static uint8_t spi_get_tx_fifo_valid_data_size(SPI_Type *ptr)
Get valid data size in transmit FIFO.
Definition: hpm_spi_drv.h:917
static void spi_set_address_len(SPI_Type *ptr, spi_address_len_t addrlen)
set spi the length of address
Definition: hpm_spi_drv.h:798
static void spi_master_enable_command_phase(SPI_Type *ptr)
SPI master enable command phase.
Definition: hpm_spi_drv.h:975
hpm_stat_t spi_wait_for_idle_status(SPI_Type *ptr)
spi wait for idle status
Definition: hpm_spi_drv.c:16
static void spi_set_clock_polarity(SPI_Type *ptr, spi_sclk_idle_state_t clock_polarity)
set spi clock polarity
Definition: hpm_spi_drv.h:729
static void spi_master_enable_token_transfer(SPI_Type *ptr)
SPI master enable token transfer.
Definition: hpm_spi_drv.h:1037
static uint8_t spi_get_directio_enable_status(SPI_Type *ptr)
get whether spi directio function is enabled
Definition: hpm_spi_drv.h:890
static void spi_master_enable_cs_select(SPI_Type *ptr, spi_cs_index_t cs)
SPI master enable CS select.
Definition: hpm_spi_drv.h:1260
void spi_master_get_default_control_config(spi_control_config_t *config)
spi master get default control config
Definition: hpm_spi_drv.c:318
spi_reset_mask_t
SPI reset mask enumeration.
Definition: hpm_spi_drv.h:160
static spi_sclk_idle_state_t spi_get_clock_polarity(SPI_Type *ptr)
get spi clock phase
Definition: hpm_spi_drv.h:740
spi_dma_enable_t
spi dma enable
Definition: hpm_spi_drv.h:24
spi_address_len_t
Definition: hpm_spi_drv.h:262
static void spi_master_disable_token_transfer(SPI_Type *ptr)
SPI master disable token transfer.
Definition: hpm_spi_drv.h:1047
hpm_stat_t spi_setup_dma_transfer(SPI_Type *ptr, spi_control_config_t *config, uint8_t *cmd, uint32_t *addr, uint32_t wcount, uint32_t rcount)
spi setup dma transfer
Definition: hpm_spi_drv.c:505
void spi_master_get_default_format_config(spi_format_config_t *config)
spi master get default format config
Definition: hpm_spi_drv.c:295
hpm_stat_t spi_wait_for_busy_status(SPI_Type *ptr)
spi wait for busy status
Definition: hpm_spi_drv.c:36
void spi_master_get_default_timing_config(spi_timing_config_t *config)
spi master get default timing config
Definition: hpm_spi_drv.c:289
spi_cs2sclk_duration_t
spi cs to sclk edge duration
Definition: hpm_spi_drv.h:72
static void spi_enable_directio(SPI_Type *ptr)
Enable SPI directIO control function.
Definition: hpm_spi_drv.h:868
spi_csht_duration_t
spi cs high level duration
Definition: hpm_spi_drv.h:82
static void spi_disable_tx_dma(SPI_Type *ptr)
SPI disable tx dma.
Definition: hpm_spi_drv.h:646
static void spi_disable_dma(SPI_Type *ptr, uint32_t mask)
Disables the SPI DMA request.
Definition: hpm_spi_drv.h:447
uint8_t spi_directio_read(SPI_Type *ptr, spi_directio_pin_t pin)
Read specified pin level for spi directio.
Definition: hpm_spi_drv.c:640
static void spi_set_dummy_count(SPI_Type *ptr, spi_dummy_count_t count)
SPI master set dummy data count.
Definition: hpm_spi_drv.h:1099
static uint32_t spi_slave_get_received_data_count(SPI_Type *ptr)
SPI slave get received data count.
Definition: hpm_spi_drv.h:692
static void spi_slave_enable_data_only(SPI_Type *ptr)
SPI slave enable only date mode.
Definition: hpm_spi_drv.h:955
hpm_stat_t spi_write_data(SPI_Type *ptr, uint8_t data_len_in_bytes, uint8_t *buff, uint32_t count)
spi write data
Definition: hpm_spi_drv.c:118
static void spi_master_set_token_value(SPI_Type *ptr, spi_token_value_t value)
SPI master set the value of the one-byte special token following the address phase for SPI read trans...
Definition: hpm_spi_drv.h:1088
spi_cs_index_t
Definition: hpm_spi_drv.h:254
hpm_stat_t spi_directio_enable_output(SPI_Type *ptr, spi_directio_pin_t pin)
enable specific pin output for spi directio
Definition: hpm_spi_drv.c:553
static void spi_master_disable_command_phase(SPI_Type *ptr)
SPI master disable command phase.
Definition: hpm_spi_drv.h:985
void spi_slave_get_default_format_config(spi_format_config_t *config)
spi slave get default format config
Definition: hpm_spi_drv.c:307
static void spi_master_set_data_phase_format(SPI_Type *ptr, spi_data_phase_format_t format)
SPI master set data phase format.
Definition: hpm_spi_drv.h:1190
static void spi_transmit_fifo_reset(SPI_Type *ptr)
SPI transmit fifo reset.
Definition: hpm_spi_drv.h:767
hpm_stat_t spi_master_timing_init(SPI_Type *ptr, spi_timing_config_t *config)
spi master timing initialization
Definition: hpm_spi_drv.c:348
static void spi_slave_set_user_status(SPI_Type *ptr, uint16_t user_status)
SPI slave set the user defined status flags.
Definition: hpm_spi_drv.h:1179
static void spi_reset(SPI_Type *ptr)
SPI reset.
Definition: hpm_spi_drv.h:787
static void spi_set_write_data_count(SPI_Type *ptr, uint32_t count)
SPI master set transfer count for write data.
Definition: hpm_spi_drv.h:1058
hpm_stat_t spi_directio_write(SPI_Type *ptr, spi_directio_pin_t pin, bool high)
write specified pin level for spi directio
Definition: hpm_spi_drv.c:611
hpm_stat_t spi_transfer(SPI_Type *ptr, spi_control_config_t *config, uint8_t *cmd, uint32_t *addr, uint8_t *wbuff, uint32_t wcount, uint8_t *rbuff, uint32_t rcount)
spi transfer
Definition: hpm_spi_drv.c:434
static void spi_enable_rx_dma(SPI_Type *ptr)
SPI enable rx dma.
Definition: hpm_spi_drv.h:656
static void spi_set_clock_phase(SPI_Type *ptr, spi_sclk_sampling_clk_edges_t clock_phase)
set spi clock phase
Definition: hpm_spi_drv.h:707
static void spi_slave_disable_data_only(SPI_Type *ptr)
SPI slave disable only date mode.
Definition: hpm_spi_drv.h:965
static void spi_enable_dma(SPI_Type *ptr, uint32_t mask)
Enables the SPI DMA request.
Definition: hpm_spi_drv.h:434
static void spi_set_read_data_count(SPI_Type *ptr, uint32_t count)
SPI master set transfer count for read data.
Definition: hpm_spi_drv.h:1073
void spi_format_init(SPI_Type *ptr, spi_format_config_t *config)
spi format initialization
Definition: hpm_spi_drv.c:376
spi_directio_pin_t
Definition: hpm_spi_drv.h:270
static uint32_t spi_get_interrupt_status(SPI_Type *ptr)
Get the SPI interrupt status.
Definition: hpm_spi_drv.h:460
hpm_stat_t spi_poll_reset_complete(SPI_Type *ptr, spi_reset_mask_t reset_mask, uint32_t retry)
spi poll reset complete
Definition: hpm_spi_drv.c:56
static spi_sclk_sampling_clk_edges_t spi_get_clock_phase(SPI_Type *ptr)
get spi clock phase
Definition: hpm_spi_drv.h:718
static void spi_master_disable_address_phase(SPI_Type *ptr)
SPI master disable address phase.
Definition: hpm_spi_drv.h:1005
static uint8_t spi_get_rx_fifo_valid_data_size(SPI_Type *ptr)
Get valid data size in receive FIFO.
Definition: hpm_spi_drv.h:904
spi_interrupt_t
spi interrupt mask
Definition: hpm_spi_drv.h:32
hpm_stat_t spi_read_data(SPI_Type *ptr, uint8_t data_len_in_bytes, uint8_t *buff, uint32_t count)
spi read data
Definition: hpm_spi_drv.c:163
hpm_stat_t spi_read_command(SPI_Type *ptr, spi_mode_selection_t mode, spi_control_config_t *config, uint8_t *cmd)
spi read command
Definition: hpm_spi_drv.c:90
static void spi_master_set_address_phase_format(SPI_Type *ptr, spi_addr_phase_format_t format)
SPI master set address phase format.
Definition: hpm_spi_drv.h:1016
static void spi_enable_data_merge(SPI_Type *ptr)
Enable SPI data merge.
Definition: hpm_spi_drv.h:808
static void spi_clear_interrupt_status(SPI_Type *ptr, uint32_t mask)
Clear the SPI interrupt status.
Definition: hpm_spi_drv.h:474
static uint32_t spi_slave_get_sent_data_count(SPI_Type *ptr)
SPI slave get sent data count.
Definition: hpm_spi_drv.h:677
spi_mode_selection_t
spi mode selection
Definition: hpm_spi_drv.h:48
static void spi_set_shift_direction(SPI_Type *ptr, spi_shift_direction_t shift_direction)
set spi shift direction
Definition: hpm_spi_drv.h:1213
static void spi_receive_fifo_reset(SPI_Type *ptr)
SPI receive fifo reset.
Definition: hpm_spi_drv.h:777
spi_sclk_idle_state_t
spi clock polarity
Definition: hpm_spi_drv.h:56
static uint8_t spi_get_rx_fifo_size(SPI_Type *ptr)
Get SPI RXFIFO size.
Definition: hpm_spi_drv.h:930
static hpm_stat_t spi_set_data_bits(SPI_Type *ptr, uint8_t nbits)
set spi the length of each data unit in bits
Definition: hpm_spi_drv.h:752
static void spi_master_set_csht_timing(SPI_Type *ptr, spi_csht_duration_t duration)
SPI master set the minimum time that SPI CS should stay HIGH.
Definition: hpm_spi_drv.h:1132
spi_shift_direction_t
Definition: hpm_spi_drv.h:152
static spi_shift_direction_t spi_get_shift_direction(SPI_Type *ptr)
get spi shift direction
Definition: hpm_spi_drv.h:1224
static spi_data_phase_format_t spi_master_get_data_phase_format(SPI_Type *ptr)
SPI master get data phase format.
Definition: hpm_spi_drv.h:1202
spi_sclk_sampling_clk_edges_t
spi clock phase
Definition: hpm_spi_drv.h:64
hpm_stat_t spi_write_read_data(SPI_Type *ptr, uint8_t data_len_in_bytes, uint8_t *wbuff, uint32_t wcount, uint8_t *rbuff, uint32_t rcount)
spi write and read data
Definition: hpm_spi_drv.c:211
spi_token_value_t
spi token value
Definition: hpm_spi_drv.h:137
spi_dummy_count_t
spi dummy count
Definition: hpm_spi_drv.h:145
static void spi_enable_tx_dma(SPI_Type *ptr)
SPI enable tx dma.
Definition: hpm_spi_drv.h:636
static void spi_set_rx_fifo_threshold(SPI_Type *ptr, uint32_t threshold)
SPI set RX FIFO threshold.
Definition: hpm_spi_drv.h:421
static void spi_disable_directio(SPI_Type *ptr)
Disable SPI directIO control function.
Definition: hpm_spi_drv.h:878
static uint8_t spi_get_tx_fifo_size(SPI_Type *ptr)
Get SPI TXFIFO size.
Definition: hpm_spi_drv.h:943
static void spi_enable_interrupt(SPI_Type *ptr, uint32_t mask)
Enables the SPI interrupt.
Definition: hpm_spi_drv.h:488
static uint8_t spi_get_data_length_in_bytes(SPI_Type *ptr)
Get the SPI data length in bytes.
Definition: hpm_spi_drv.h:615
static void spi_master_set_sclk_div(SPI_Type *ptr, uint8_t div)
SPI master set the clock frequency ratio between the clock source and SPI SCLK.
Definition: hpm_spi_drv.h:1154
hpm_stat_t spi_write_command(SPI_Type *ptr, spi_mode_selection_t mode, spi_control_config_t *config, uint8_t *cmd)
spi write command
Definition: hpm_spi_drv.c:74
static uint8_t spi_master_get_sclk_div(SPI_Type *ptr)
SPI master get the clock frequency ratio between the clock source and SPI SCLK.
Definition: hpm_spi_drv.h:1166
static void spi_disable_data_merge(SPI_Type *ptr)
Disable SPI data merge.
Definition: hpm_spi_drv.h:818
hpm_stat_t spi_write_address(SPI_Type *ptr, spi_mode_selection_t mode, spi_control_config_t *config, uint32_t *addr)
spi write address
Definition: hpm_spi_drv.c:104
hpm_stat_t spi_control_init(SPI_Type *ptr, spi_control_config_t *config, uint32_t wcount, uint32_t rcount)
spi control initialization
Definition: hpm_spi_drv.c:388
spi_trans_mode_t
spi transfer mode
Definition: hpm_spi_drv.h:112
static spi_csht_duration_t spi_master_get_csht_timing(SPI_Type *ptr)
SPI master get the minimum time that SPI CS should stay HIGH.
Definition: hpm_spi_drv.h:1143
hpm_stat_t spi_directio_disable_output(SPI_Type *ptr, spi_directio_pin_t pin)
disable specific pin output for spi directio
Definition: hpm_spi_drv.c:582
static void spi_master_enable_address_phase(SPI_Type *ptr)
SPI master enable address phase.
Definition: hpm_spi_drv.h:995
static uint8_t spi_get_data_length_in_bits(SPI_Type *ptr)
Get the SPI data length in bits.
Definition: hpm_spi_drv.h:604
static void spi_set_transfer_mode(SPI_Type *ptr, spi_trans_mode_t mode)
SPI master set transfer mode.
Definition: hpm_spi_drv.h:1027
static void spi_master_set_cs2sclk_timing(SPI_Type *ptr, spi_cs2sclk_duration_t duration)
SPI master set the minimum time between the edges of SPI CS and the edges of SCLK.
Definition: hpm_spi_drv.h:1110
static spi_cs2sclk_duration_t spi_master_get_cs2sclk_timing(SPI_Type *ptr)
SPI master get the minimum time between the edges of SPI CS and the edges of SCLK.
Definition: hpm_spi_drv.h:1121
static void spi_disable_rx_dma(SPI_Type *ptr)
SPI disable rx dma.
Definition: hpm_spi_drv.h:666
static void spi_set_tx_fifo_threshold(SPI_Type *ptr, uint32_t threshold)
SPI set TX FIFO threshold.
Definition: hpm_spi_drv.h:408
static void spi_disable_interrupt(SPI_Type *ptr, uint32_t mask)
Disables the SPI interrupt.
Definition: hpm_spi_drv.h:501
spi_data_phase_format_t
spi data phase format
Definition: hpm_spi_drv.h:128
@ spi_address_phase_format_single_io_mode
Definition: hpm_spi_drv.h:105
@ spi_address_phase_format_dualquad_io_mode
Definition: hpm_spi_drv.h:106
@ spi_reset_rx_fifo
Definition: hpm_spi_drv.h:162
@ spi_reset_tx_fifo
Definition: hpm_spi_drv.h:161
@ spi_reset_all
Definition: hpm_spi_drv.h:164
@ spi_reset_spi
Definition: hpm_spi_drv.h:163
@ spi_tx_dma_enable
Definition: hpm_spi_drv.h:25
@ spi_rx_dma_enable
Definition: hpm_spi_drv.h:26
@ addrlen_24bit
Definition: hpm_spi_drv.h:265
@ addrlen_8bit
Definition: hpm_spi_drv.h:263
@ addrlen_16bit
Definition: hpm_spi_drv.h:264
@ addrlen_32bit
Definition: hpm_spi_drv.h:266
@ spi_cs2sclk_half_sclk_3
Definition: hpm_spi_drv.h:75
@ spi_cs2sclk_half_sclk_4
Definition: hpm_spi_drv.h:76
@ spi_cs2sclk_half_sclk_2
Definition: hpm_spi_drv.h:74
@ spi_cs2sclk_half_sclk_1
Definition: hpm_spi_drv.h:73
@ spi_csht_half_sclk_7
Definition: hpm_spi_drv.h:89
@ spi_csht_half_sclk_12
Definition: hpm_spi_drv.h:94
@ spi_csht_half_sclk_16
Definition: hpm_spi_drv.h:98
@ spi_csht_half_sclk_13
Definition: hpm_spi_drv.h:95
@ spi_csht_half_sclk_3
Definition: hpm_spi_drv.h:85
@ spi_csht_half_sclk_14
Definition: hpm_spi_drv.h:96
@ spi_csht_half_sclk_2
Definition: hpm_spi_drv.h:84
@ spi_csht_half_sclk_11
Definition: hpm_spi_drv.h:93
@ spi_csht_half_sclk_9
Definition: hpm_spi_drv.h:91
@ spi_csht_half_sclk_10
Definition: hpm_spi_drv.h:92
@ spi_csht_half_sclk_15
Definition: hpm_spi_drv.h:97
@ spi_csht_half_sclk_8
Definition: hpm_spi_drv.h:90
@ spi_csht_half_sclk_1
Definition: hpm_spi_drv.h:83
@ spi_csht_half_sclk_6
Definition: hpm_spi_drv.h:88
@ spi_csht_half_sclk_5
Definition: hpm_spi_drv.h:87
@ spi_csht_half_sclk_4
Definition: hpm_spi_drv.h:86
@ spi_cs_0
Definition: hpm_spi_drv.h:255
@ spi_cs_2
Definition: hpm_spi_drv.h:257
@ spi_cs_3
Definition: hpm_spi_drv.h:258
@ spi_cs_1
Definition: hpm_spi_drv.h:256
@ mosi_pin
Definition: hpm_spi_drv.h:274
@ sclk_pin
Definition: hpm_spi_drv.h:275
@ cs_pin
Definition: hpm_spi_drv.h:276
@ hold_pin
Definition: hpm_spi_drv.h:271
@ miso_pin
Definition: hpm_spi_drv.h:273
@ wp_pin
Definition: hpm_spi_drv.h:272
@ spi_tx_fifo_threshold_int
Definition: hpm_spi_drv.h:36
@ spi_tx_fifo_underflow_int
Definition: hpm_spi_drv.h:34
@ spi_rx_fifo_overflow_int
Definition: hpm_spi_drv.h:33
@ spi_rx_fifo_threshold_int
Definition: hpm_spi_drv.h:35
@ spi_slave_cmd_int
Definition: hpm_spi_drv.h:38
@ spi_end_int
Definition: hpm_spi_drv.h:37
@ spi_slave_mode
Definition: hpm_spi_drv.h:50
@ spi_master_mode
Definition: hpm_spi_drv.h:49
@ spi_sclk_low_idle
Definition: hpm_spi_drv.h:57
@ spi_sclk_high_idle
Definition: hpm_spi_drv.h:58
@ spi_msb_first
Definition: hpm_spi_drv.h:153
@ spi_lsb_first
Definition: hpm_spi_drv.h:154
@ spi_sclk_sampling_odd_clk_edges
Definition: hpm_spi_drv.h:65
@ spi_sclk_sampling_even_clk_edges
Definition: hpm_spi_drv.h:66
@ status_spi_master_busy
Definition: hpm_spi_drv.h:285
@ spi_token_value_0x00
Definition: hpm_spi_drv.h:138
@ spi_token_value_0x69
Definition: hpm_spi_drv.h:139
@ spi_dummy_count_3
Definition: hpm_spi_drv.h:148
@ spi_dummy_count_2
Definition: hpm_spi_drv.h:147
@ spi_dummy_count_1
Definition: hpm_spi_drv.h:146
@ spi_dummy_count_4
Definition: hpm_spi_drv.h:149
@ spi_trans_dummy_write
Definition: hpm_spi_drv.h:121
@ spi_trans_read_only
Definition: hpm_spi_drv.h:115
@ spi_trans_write_dummy_read
Definition: hpm_spi_drv.h:118
@ spi_trans_write_only
Definition: hpm_spi_drv.h:114
@ spi_trans_write_read
Definition: hpm_spi_drv.h:116
@ spi_trans_read_write
Definition: hpm_spi_drv.h:117
@ spi_trans_dummy_read
Definition: hpm_spi_drv.h:122
@ spi_trans_read_dummy_write
Definition: hpm_spi_drv.h:119
@ spi_trans_no_data
Definition: hpm_spi_drv.h:120
@ spi_trans_write_read_together
Definition: hpm_spi_drv.h:113
@ spi_quad_io_mode
Definition: hpm_spi_drv.h:131
@ spi_dual_io_mode
Definition: hpm_spi_drv.h:130
@ spi_single_io_mode
Definition: hpm_spi_drv.h:129
Definition: hpm_spi_regs.h:12
__RW uint32_t TRANSCTRL
Definition: hpm_spi_regs.h:20
__R uint32_t SLVDATACNT
Definition: hpm_spi_regs.h:31
__RW uint32_t SLVST
Definition: hpm_spi_regs.h:30
__RW uint32_t TRANSFMT
Definition: hpm_spi_regs.h:17
__RW uint32_t CTRL
Definition: hpm_spi_regs.h:24
__R uint32_t CONFIG
Definition: hpm_spi_regs.h:35
__RW uint32_t INTREN
Definition: hpm_spi_regs.h:26
__RW uint32_t WR_TRANS_CNT
Definition: hpm_spi_regs.h:14
__W uint32_t INTRST
Definition: hpm_spi_regs.h:27
__RW uint32_t RD_TRANS_CNT
Definition: hpm_spi_regs.h:15
__R uint32_t SLVDATAWCNT
Definition: hpm_spi_regs.h:32
__R uint32_t STATUS
Definition: hpm_spi_regs.h:25
__R uint32_t SLVDATARCNT
Definition: hpm_spi_regs.h:33
__RW uint32_t TIMING
Definition: hpm_spi_regs.h:28
__RW uint32_t DIRECTIO
Definition: hpm_spi_regs.h:18
spi common transfer control config structure
Definition: hpm_spi_drv.h:233
uint8_t dummy_cnt
Definition: hpm_spi_drv.h:238
bool tx_dma_enable
Definition: hpm_spi_drv.h:234
uint8_t cs_index
Definition: hpm_spi_drv.h:240
bool rx_dma_enable
Definition: hpm_spi_drv.h:235
uint8_t data_phase_fmt
Definition: hpm_spi_drv.h:237
uint8_t trans_mode
Definition: hpm_spi_drv.h:236
spi common format config structure
Definition: hpm_spi_drv.h:194
uint8_t mode
Definition: hpm_spi_drv.h:199
uint8_t cpol
Definition: hpm_spi_drv.h:200
uint8_t cpha
Definition: hpm_spi_drv.h:201
bool lsb
Definition: hpm_spi_drv.h:198
bool mosi_bidir
Definition: hpm_spi_drv.h:197
uint8_t data_len_in_bits
Definition: hpm_spi_drv.h:195
bool data_merge
Definition: hpm_spi_drv.h:196
spi control config structure
Definition: hpm_spi_drv.h:247
spi_slave_control_config_t slave_config
Definition: hpm_spi_drv.h:249
spi_master_control_config_t master_config
Definition: hpm_spi_drv.h:248
spi_common_control_config_t common_config
Definition: hpm_spi_drv.h:250
spi format config structure
Definition: hpm_spi_drv.h:207
spi_master_format_config_t master_config
Definition: hpm_spi_drv.h:208
spi_common_format_config_t common_config
Definition: hpm_spi_drv.h:209
spi master transfer control config structure
Definition: hpm_spi_drv.h:215
uint8_t token_value
Definition: hpm_spi_drv.h:220
uint8_t addr_phase_fmt
Definition: hpm_spi_drv.h:218
bool token_enable
Definition: hpm_spi_drv.h:219
bool addr_enable
Definition: hpm_spi_drv.h:217
bool cmd_enable
Definition: hpm_spi_drv.h:216
spi master transfer format config structure
Definition: hpm_spi_drv.h:187
uint8_t addr_len_in_bytes
Definition: hpm_spi_drv.h:188
spi master interface timing config structure
Definition: hpm_spi_drv.h:170
uint32_t sclk_freq_in_hz
Definition: hpm_spi_drv.h:172
uint8_t csht
Definition: hpm_spi_drv.h:174
uint8_t cs2sclk
Definition: hpm_spi_drv.h:173
uint32_t clk_src_freq_in_hz
Definition: hpm_spi_drv.h:171
spi slave transfer control config structure
Definition: hpm_spi_drv.h:226
bool slave_data_only
Definition: hpm_spi_drv.h:227
spi interface timing config structure
Definition: hpm_spi_drv.h:180
spi_master_timing_config_t master_config
Definition: hpm_spi_drv.h:181