HPM SDK
HPMicro Software Development Kit
hpm_spi_drv.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2021 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_spi_regs.h"
11 #include "hpm_soc_feature.h"
12 
23 typedef enum {
27 
31 typedef enum {
39 
43 typedef enum {
47 
51 typedef enum {
55 
59 typedef enum {
63 
67 typedef enum {
73 
77 typedef enum {
95 
99 typedef enum {
103 
107 typedef enum {
119 
123 typedef enum {
128 
132 typedef enum {
136 
140 typedef enum {
146 
147 typedef enum {
151 
155 typedef struct {
157  uint32_t sclk_freq_in_hz;
158  uint8_t cs2sclk;
159  uint8_t csht;
161 
165 typedef struct {
168 
172 typedef struct {
175 
179 typedef struct {
183  bool lsb;
184  uint8_t mode;
185  uint8_t cpol;
186  uint8_t cpha;
188 
192 typedef struct {
196 
200 typedef struct {
203  uint8_t addr_phase_fmt;
205  uint8_t token_value;
207 
211 typedef struct {
214 
218 typedef struct {
221  uint8_t trans_mode;
222  uint8_t data_phase_fmt;
223  uint8_t dummy_cnt;
224 #if defined(HPM_IP_FEATURE_SPI_CS_SELECT) && (HPM_IP_FEATURE_SPI_CS_SELECT == 1)
225  uint8_t cs_index;
226 #endif
232 typedef struct {
237 
238 #if defined(HPM_IP_FEATURE_SPI_CS_SELECT) && (HPM_IP_FEATURE_SPI_CS_SELECT == 1)
239 typedef enum {
240  spi_cs_0 = 1,
241  spi_cs_1 = 2,
242  spi_cs_2 = 4,
243  spi_cs_3 = 8,
245 #endif
246 
247 typedef enum {
253 
254 #if defined(HPM_IP_FEATURE_SPI_SUPPORT_DIRECTIO) && (HPM_IP_FEATURE_SPI_SUPPORT_DIRECTIO == 1)
255 typedef enum {
256  hold_pin = 0,
261  cs_pin
263 
264 #endif
265 
269 enum {
271 };
272 
273 #if defined(__cplusplus)
274 extern "C" {
275 #endif /* __cplusplus */
276 
283 
290 
297 
304 
311 
320 
327 void spi_format_init(SPI_Type *ptr, spi_format_config_t *config);
328 
343  spi_control_config_t *config,
344  uint8_t *cmd, uint32_t *addr,
345  uint8_t *wbuff, uint32_t wcount, uint8_t *rbuff, uint32_t rcount);
346 
359  spi_control_config_t *config,
360  uint8_t *cmd, uint32_t *addr,
361  uint32_t wcount, uint32_t rcount);
362 
372 
382 
391 static inline void spi_set_tx_fifo_threshold(SPI_Type *ptr, uint32_t threshold)
392 {
393  ptr->CTRL = (ptr->CTRL & ~SPI_CTRL_TXTHRES_MASK) | SPI_CTRL_TXTHRES_SET(threshold);
394 }
395 
404 static inline void spi_set_rx_fifo_threshold(SPI_Type *ptr, uint32_t threshold)
405 {
406  ptr->CTRL = (ptr->CTRL & ~SPI_CTRL_RXTHRES_MASK) | SPI_CTRL_RXTHRES_SET(threshold);
407 }
408 
417 static inline void spi_enable_dma(SPI_Type *ptr, uint32_t mask)
418 {
419  ptr->CTRL |= mask;
420 }
421 
430 static inline void spi_disable_dma(SPI_Type *ptr, uint32_t mask)
431 {
432  ptr->CTRL &= ~mask;
433 }
434 
443 static inline uint32_t spi_get_interrupt_status(SPI_Type *ptr)
444 {
445  return ptr->INTRST;
446 }
447 
457 static inline void spi_clear_interrupt_status(SPI_Type *ptr, uint32_t mask)
458 {
459  /* write 1 to clear */
460  ptr->INTRST = mask;
461 }
462 
471 static inline void spi_enable_interrupt(SPI_Type *ptr, uint32_t mask)
472 {
473  ptr->INTREN |= mask;
474 }
475 
484 static inline void spi_disable_interrupt(SPI_Type *ptr, uint32_t mask)
485 {
486  ptr->INTREN &= ~mask;
487 }
488 
503 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);
504 
516 hpm_stat_t spi_read_data(SPI_Type *ptr, uint8_t data_len_in_bytes, uint8_t *buff, uint32_t count);
517 
529 hpm_stat_t spi_write_data(SPI_Type *ptr, uint8_t data_len_in_bytes, uint8_t *buff, uint32_t count);
530 
543 
556 
569 
579 hpm_stat_t spi_control_init(SPI_Type *ptr, spi_control_config_t *config, uint32_t wcount, uint32_t rcount);
580 
587 static inline uint8_t spi_get_data_length_in_bits(SPI_Type *ptr)
588 {
590 }
591 
598 static inline uint8_t spi_get_data_length_in_bytes(SPI_Type *ptr)
599 {
600  return ((spi_get_data_length_in_bits(ptr) + 7U) / 8U);
601 }
602 
609 static inline bool spi_is_active(SPI_Type *ptr)
610 {
611  return ((ptr->STATUS & SPI_STATUS_SPIACTIVE_MASK) == SPI_STATUS_SPIACTIVE_MASK) ? true : false;
612 }
613 
619 static inline void spi_enable_tx_dma(SPI_Type *ptr)
620 {
621  ptr->CTRL |= SPI_CTRL_TXDMAEN_MASK;
622 }
623 
629 static inline void spi_disable_tx_dma(SPI_Type *ptr)
630 {
631  ptr->CTRL &= ~SPI_CTRL_TXDMAEN_MASK;
632 }
633 
639 static inline void spi_enable_rx_dma(SPI_Type *ptr)
640 {
641  ptr->CTRL |= SPI_CTRL_RXDMAEN_MASK;
642 }
643 
649 static inline void spi_disable_rx_dma(SPI_Type *ptr)
650 {
651  ptr->CTRL &= ~SPI_CTRL_RXDMAEN_MASK;
652 }
653 
660 static inline uint32_t spi_slave_get_sent_data_count(SPI_Type *ptr)
661 {
662 #if defined(HPM_IP_FEATURE_SPI_NEW_TRANS_COUNT) && (HPM_IP_FEATURE_SPI_NEW_TRANS_COUNT == 1)
663  return ptr->SLVDATAWCNT;
664 #else
665  return SPI_SLVDATACNT_WCNT_GET(ptr->SLVDATACNT);
666 #endif
667 }
668 
675 static inline uint32_t spi_slave_get_received_data_count(SPI_Type *ptr)
676 {
677 #if defined(HPM_IP_FEATURE_SPI_NEW_TRANS_COUNT) && (HPM_IP_FEATURE_SPI_NEW_TRANS_COUNT == 1)
678  return ptr->SLVDATARCNT;
679 #else
680  return SPI_SLVDATACNT_RCNT_GET(ptr->SLVDATACNT);
681 #endif
682 }
683 
690 static inline void spi_set_clock_phase(SPI_Type *ptr, spi_sclk_sampling_clk_edges_t clock_phase)
691 {
692  ptr->TRANSFMT = (ptr->TRANSFMT & ~SPI_TRANSFMT_CPHA_MASK) | SPI_TRANSFMT_CPHA_SET(clock_phase);
693 }
694 
702 {
704 }
705 
712 static inline void spi_set_clock_polarity(SPI_Type *ptr, spi_sclk_idle_state_t clock_polarity)
713 {
714  ptr->TRANSFMT = (ptr->TRANSFMT & ~SPI_TRANSFMT_CPOL_MASK) | SPI_TRANSFMT_CPOL_SET(clock_polarity);
715 }
716 
724 {
726 }
727 
735 static inline hpm_stat_t spi_set_data_bits(SPI_Type *ptr, uint8_t nbits)
736 {
737  if (nbits > 32) {
739  } else {
741  return status_success;
742  }
743 }
744 
750 static inline void spi_transmit_fifo_reset(SPI_Type *ptr)
751 {
753 }
754 
760 static inline void spi_receive_fifo_reset(SPI_Type *ptr)
761 {
763 }
764 
770 static inline void spi_reset(SPI_Type *ptr)
771 {
772  ptr->CTRL |= SPI_CTRL_SPIRST_MASK;
773 }
774 
781 static inline void spi_set_address_len(SPI_Type *ptr, spi_address_len_t addrlen)
782 {
784 }
785 
791 static inline void spi_enable_data_merge(SPI_Type *ptr)
792 {
794 }
795 
801 static inline void spi_disable_data_merge(SPI_Type *ptr)
802 {
804 }
805 
806 #if defined(HPM_IP_FEATURE_SPI_SUPPORT_DIRECTIO) && (HPM_IP_FEATURE_SPI_SUPPORT_DIRECTIO == 1)
816 
824 
833 
843 
851 static inline void spi_enable_directio(SPI_Type *ptr)
852 {
854 }
855 
861 static inline void spi_disable_directio(SPI_Type *ptr)
862 {
864 }
865 
873 static inline uint8_t spi_get_directio_enable_status(SPI_Type *ptr)
874 {
876 }
877 
878 #endif
879 
887 static inline uint8_t spi_get_rx_fifo_valid_data_size(SPI_Type *ptr)
888 {
889  return ((SPI_STATUS_RXNUM_7_6_GET(ptr->STATUS) << 6) | SPI_STATUS_RXNUM_5_0_GET(ptr->STATUS));
890 }
891 
899 static inline uint8_t spi_get_tx_fifo_valid_data_size(SPI_Type *ptr)
900 {
901  return ((SPI_STATUS_TXNUM_7_6_GET(ptr->STATUS) << 6) | SPI_STATUS_TXNUM_5_0_GET(ptr->STATUS));
902 }
903 
911 static inline uint8_t spi_get_rx_fifo_size(SPI_Type *ptr)
912 {
913  uint8_t size = SPI_CONFIG_RXFIFOSIZE_GET(ptr->CONFIG);
914  return (2 << size);
915 }
916 
924 static inline uint8_t spi_get_tx_fifo_size(SPI_Type *ptr)
925 {
926  uint8_t size = SPI_CONFIG_TXFIFOSIZE_GET(ptr->CONFIG);
927  return (2 << size);
928 }
929 
936 static inline void spi_slave_enable_data_only(SPI_Type *ptr)
937 {
939 }
940 
946 static inline void spi_slave_disable_data_only(SPI_Type *ptr)
947 {
949 }
950 
957 {
959 }
960 
967 {
969 }
970 
977 {
979 }
980 
987 {
989 }
990 
998 {
1000 }
1001 
1008 static inline void spi_set_transfer_mode(SPI_Type *ptr, spi_trans_mode_t mode)
1009 {
1011 }
1012 
1019 {
1021 }
1022 
1029 {
1031 }
1032 
1039 static inline void spi_set_write_data_count(SPI_Type *ptr, uint32_t count)
1040 {
1041 #if defined(HPM_IP_FEATURE_SPI_NEW_TRANS_COUNT) && (HPM_IP_FEATURE_SPI_NEW_TRANS_COUNT == 1)
1042  ptr->WR_TRANS_CNT = (count - 1);
1043 #else
1045 #endif
1046 }
1047 
1054 static inline void spi_set_read_data_count(SPI_Type *ptr, uint32_t count)
1055 {
1056 #if defined(HPM_IP_FEATURE_SPI_NEW_TRANS_COUNT) && (HPM_IP_FEATURE_SPI_NEW_TRANS_COUNT == 1)
1057  ptr->RD_TRANS_CNT = (count - 1);
1058 #else
1060 #endif
1061 }
1062 
1070 {
1072 }
1073 
1080 static inline void spi_set_dummy_count(SPI_Type *ptr, spi_dummy_count_t count)
1081 {
1083 }
1084 
1092 {
1093  ptr->TIMING = (ptr->TIMING & ~SPI_TIMING_CS2SCLK_MASK) | SPI_TIMING_CS2SCLK_SET(duration);
1094 }
1095 
1103 {
1105 }
1106 
1113 static inline void spi_master_set_csht_timing(SPI_Type *ptr, spi_csht_duration_t duration)
1114 {
1115  ptr->TIMING = (ptr->TIMING & ~SPI_TIMING_CSHT_MASK) | SPI_TIMING_CSHT_SET(duration);
1116 }
1117 
1125 {
1127 }
1128 
1135 static inline void spi_master_set_sclk_div(SPI_Type *ptr, uint8_t div)
1136 {
1138 }
1139 
1147 static inline uint8_t spi_master_get_sclk_div(SPI_Type *ptr)
1148 {
1149  return SPI_TIMING_SCLK_DIV_GET(ptr->TIMING);
1150 }
1151 
1160 static inline void spi_slave_set_user_status(SPI_Type *ptr, uint16_t user_status)
1161 {
1162  ptr->SLVST = (ptr->SLVST & ~SPI_SLVST_USR_STATUS_MASK) | SPI_SLVST_USR_STATUS_SET(user_status);
1163 }
1164 
1172 {
1174 }
1175 
1184 {
1186 }
1187 
1194 static inline void spi_set_shift_direction(SPI_Type *ptr, spi_shift_direction_t shift_direction)
1195 {
1196  ptr->TRANSFMT = (ptr->TRANSFMT & ~SPI_TRANSFMT_LSB_MASK) | SPI_TRANSFMT_LSB_SET(shift_direction);
1197 }
1198 
1206 {
1208 }
1209 
1214 #if defined(__cplusplus)
1215 }
1216 #endif /* __cplusplus */
1217 #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_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_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
uint32_t hpm_stat_t
Definition: hpm_common.h:123
#define MAKE_STATUS(group, code)
Definition: hpm_common.h:132
@ status_invalid_argument
Definition: hpm_common.h:179
@ status_success
Definition: hpm_common.h:177
@ status_group_spi
Definition: hpm_common.h:138
static void size
Definition: hpm_math.h:6899
static bool spi_is_active(SPI_Type *ptr)
SPI get active status.
Definition: hpm_spi_drv.h:609
spi_addr_phase_format_t
spi address phase format
Definition: hpm_spi_drv.h:99
void spi_slave_get_default_control_config(spi_control_config_t *config)
spi slave get default control config
Definition: hpm_spi_drv.c:317
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:899
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:781
static void spi_master_enable_command_phase(SPI_Type *ptr)
SPI master enable command phase.
Definition: hpm_spi_drv.h:956
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:712
static void spi_master_enable_token_transfer(SPI_Type *ptr)
SPI master enable token transfer.
Definition: hpm_spi_drv.h:1018
static uint8_t spi_get_directio_enable_status(SPI_Type *ptr)
get whether spi directio function is enabled
Definition: hpm_spi_drv.h:873
void spi_master_get_default_control_config(spi_control_config_t *config)
spi master get default control config
Definition: hpm_spi_drv.c:300
static spi_sclk_idle_state_t spi_get_clock_polarity(SPI_Type *ptr)
get spi clock phase
Definition: hpm_spi_drv.h:723
spi_dma_enable_t
spi dma enable
Definition: hpm_spi_drv.h:23
spi_address_len_t
Definition: hpm_spi_drv.h:247
static void spi_master_disable_token_transfer(SPI_Type *ptr)
SPI master disable token transfer.
Definition: hpm_spi_drv.h:1028
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:487
void spi_master_get_default_format_config(spi_format_config_t *config)
spi master get default format config
Definition: hpm_spi_drv.c:277
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:271
spi_cs2sclk_duration_t
spi cs to sclk edge duration
Definition: hpm_spi_drv.h:67
static void spi_enable_directio(SPI_Type *ptr)
Enable SPI directIO control function.
Definition: hpm_spi_drv.h:851
spi_csht_duration_t
spi cs high level duration
Definition: hpm_spi_drv.h:77
static void spi_disable_tx_dma(SPI_Type *ptr)
SPI disable tx dma.
Definition: hpm_spi_drv.h:629
static void spi_disable_dma(SPI_Type *ptr, uint32_t mask)
Disables the SPI DMA request.
Definition: hpm_spi_drv.h:430
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:619
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:1080
static uint32_t spi_slave_get_received_data_count(SPI_Type *ptr)
SPI slave get received data count.
Definition: hpm_spi_drv.h:675
static void spi_slave_enable_data_only(SPI_Type *ptr)
SPI slave enable only date mode.
Definition: hpm_spi_drv.h:936
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:100
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:1069
spi_cs_index_t
Definition: hpm_spi_drv.h:239
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:532
static void spi_master_disable_command_phase(SPI_Type *ptr)
SPI master disable command phase.
Definition: hpm_spi_drv.h:966
void spi_slave_get_default_format_config(spi_format_config_t *config)
spi slave get default format config
Definition: hpm_spi_drv.c:289
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:1171
static void spi_transmit_fifo_reset(SPI_Type *ptr)
SPI transmit fifo reset.
Definition: hpm_spi_drv.h:750
hpm_stat_t spi_master_timing_init(SPI_Type *ptr, spi_timing_config_t *config)
spi master timing initialization
Definition: hpm_spi_drv.c:330
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:1160
static void spi_reset(SPI_Type *ptr)
SPI reset.
Definition: hpm_spi_drv.h:770
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:1039
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:590
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:416
static void spi_enable_rx_dma(SPI_Type *ptr)
SPI enable rx dma.
Definition: hpm_spi_drv.h:639
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:690
static void spi_slave_disable_data_only(SPI_Type *ptr)
SPI slave disable only date mode.
Definition: hpm_spi_drv.h:946
static void spi_enable_dma(SPI_Type *ptr, uint32_t mask)
Enables the SPI DMA request.
Definition: hpm_spi_drv.h:417
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:1054
void spi_format_init(SPI_Type *ptr, spi_format_config_t *config)
spi format initialization
Definition: hpm_spi_drv.c:358
spi_directio_pin_t
Definition: hpm_spi_drv.h:255
static uint32_t spi_get_interrupt_status(SPI_Type *ptr)
Get the SPI interrupt status.
Definition: hpm_spi_drv.h:443
static spi_sclk_sampling_clk_edges_t spi_get_clock_phase(SPI_Type *ptr)
get spi clock phase
Definition: hpm_spi_drv.h:701
static void spi_master_disable_address_phase(SPI_Type *ptr)
SPI master disable address phase.
Definition: hpm_spi_drv.h:986
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:887
spi_interrupt_t
spi interrupt mask
Definition: hpm_spi_drv.h:31
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:145
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:72
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:997
static void spi_enable_data_merge(SPI_Type *ptr)
Enable SPI data merge.
Definition: hpm_spi_drv.h:791
static void spi_clear_interrupt_status(SPI_Type *ptr, uint32_t mask)
Clear the SPI interrupt status.
Definition: hpm_spi_drv.h:457
static uint32_t spi_slave_get_sent_data_count(SPI_Type *ptr)
SPI slave get sent data count.
Definition: hpm_spi_drv.h:660
spi_mode_selection_t
spi mode selection
Definition: hpm_spi_drv.h:43
static void spi_set_shift_direction(SPI_Type *ptr, spi_shift_direction_t shift_direction)
set spi shift direction
Definition: hpm_spi_drv.h:1194
static void spi_receive_fifo_reset(SPI_Type *ptr)
SPI receive fifo reset.
Definition: hpm_spi_drv.h:760
spi_sclk_idle_state_t
spi clock polarity
Definition: hpm_spi_drv.h:51
static uint8_t spi_get_rx_fifo_size(SPI_Type *ptr)
Get SPI RXFIFO size.
Definition: hpm_spi_drv.h:911
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:735
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:1113
spi_shift_direction_t
Definition: hpm_spi_drv.h:147
static spi_shift_direction_t spi_get_shift_direction(SPI_Type *ptr)
get spi shift direction
Definition: hpm_spi_drv.h:1205
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:1183
spi_sclk_sampling_clk_edges_t
spi clock phase
Definition: hpm_spi_drv.h:59
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:193
spi_token_value_t
spi token value
Definition: hpm_spi_drv.h:132
spi_dummy_count_t
spi dummy count
Definition: hpm_spi_drv.h:140
static void spi_enable_tx_dma(SPI_Type *ptr)
SPI enable tx dma.
Definition: hpm_spi_drv.h:619
static void spi_set_rx_fifo_threshold(SPI_Type *ptr, uint32_t threshold)
SPI set RX FIFO threshold.
Definition: hpm_spi_drv.h:404
static void spi_disable_directio(SPI_Type *ptr)
Disable SPI directIO control function.
Definition: hpm_spi_drv.h:861
static uint8_t spi_get_tx_fifo_size(SPI_Type *ptr)
Get SPI TXFIFO size.
Definition: hpm_spi_drv.h:924
static void spi_enable_interrupt(SPI_Type *ptr, uint32_t mask)
Enables the SPI interrupt.
Definition: hpm_spi_drv.h:471
static uint8_t spi_get_data_length_in_bytes(SPI_Type *ptr)
Get the SPI data length in bytes.
Definition: hpm_spi_drv.h:598
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:1135
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:56
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:1147
static void spi_disable_data_merge(SPI_Type *ptr)
Disable SPI data merge.
Definition: hpm_spi_drv.h:801
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:86
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:370
spi_trans_mode_t
spi transfer mode
Definition: hpm_spi_drv.h:107
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:1124
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:561
static void spi_master_enable_address_phase(SPI_Type *ptr)
SPI master enable address phase.
Definition: hpm_spi_drv.h:976
static uint8_t spi_get_data_length_in_bits(SPI_Type *ptr)
Get the SPI data length in bits.
Definition: hpm_spi_drv.h:587
static void spi_set_transfer_mode(SPI_Type *ptr, spi_trans_mode_t mode)
SPI master set transfer mode.
Definition: hpm_spi_drv.h:1008
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:1091
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:1102
static void spi_disable_rx_dma(SPI_Type *ptr)
SPI disable rx dma.
Definition: hpm_spi_drv.h:649
static void spi_set_tx_fifo_threshold(SPI_Type *ptr, uint32_t threshold)
SPI set TX FIFO threshold.
Definition: hpm_spi_drv.h:391
static void spi_disable_interrupt(SPI_Type *ptr, uint32_t mask)
Disables the SPI interrupt.
Definition: hpm_spi_drv.h:484
spi_data_phase_format_t
spi data phase format
Definition: hpm_spi_drv.h:123
@ spi_address_phase_format_single_io_mode
Definition: hpm_spi_drv.h:100
@ spi_address_phase_format_dualquad_io_mode
Definition: hpm_spi_drv.h:101
@ spi_tx_dma_enable
Definition: hpm_spi_drv.h:24
@ spi_rx_dma_enable
Definition: hpm_spi_drv.h:25
@ addrlen_24bit
Definition: hpm_spi_drv.h:250
@ addrlen_8bit
Definition: hpm_spi_drv.h:248
@ addrlen_16bit
Definition: hpm_spi_drv.h:249
@ addrlen_32bit
Definition: hpm_spi_drv.h:251
@ spi_cs2sclk_half_sclk_3
Definition: hpm_spi_drv.h:70
@ spi_cs2sclk_half_sclk_4
Definition: hpm_spi_drv.h:71
@ spi_cs2sclk_half_sclk_2
Definition: hpm_spi_drv.h:69
@ spi_cs2sclk_half_sclk_1
Definition: hpm_spi_drv.h:68
@ spi_csht_half_sclk_7
Definition: hpm_spi_drv.h:84
@ spi_csht_half_sclk_12
Definition: hpm_spi_drv.h:89
@ spi_csht_half_sclk_16
Definition: hpm_spi_drv.h:93
@ spi_csht_half_sclk_13
Definition: hpm_spi_drv.h:90
@ spi_csht_half_sclk_3
Definition: hpm_spi_drv.h:80
@ spi_csht_half_sclk_14
Definition: hpm_spi_drv.h:91
@ spi_csht_half_sclk_2
Definition: hpm_spi_drv.h:79
@ spi_csht_half_sclk_11
Definition: hpm_spi_drv.h:88
@ spi_csht_half_sclk_9
Definition: hpm_spi_drv.h:86
@ spi_csht_half_sclk_10
Definition: hpm_spi_drv.h:87
@ spi_csht_half_sclk_15
Definition: hpm_spi_drv.h:92
@ spi_csht_half_sclk_8
Definition: hpm_spi_drv.h:85
@ spi_csht_half_sclk_1
Definition: hpm_spi_drv.h:78
@ spi_csht_half_sclk_6
Definition: hpm_spi_drv.h:83
@ spi_csht_half_sclk_5
Definition: hpm_spi_drv.h:82
@ spi_csht_half_sclk_4
Definition: hpm_spi_drv.h:81
@ spi_cs_0
Definition: hpm_spi_drv.h:240
@ spi_cs_2
Definition: hpm_spi_drv.h:242
@ spi_cs_3
Definition: hpm_spi_drv.h:243
@ spi_cs_1
Definition: hpm_spi_drv.h:241
@ mosi_pin
Definition: hpm_spi_drv.h:259
@ sclk_pin
Definition: hpm_spi_drv.h:260
@ cs_pin
Definition: hpm_spi_drv.h:261
@ hold_pin
Definition: hpm_spi_drv.h:256
@ miso_pin
Definition: hpm_spi_drv.h:258
@ wp_pin
Definition: hpm_spi_drv.h:257
@ status_spi_master_busy
Definition: hpm_spi_drv.h:270
@ spi_tx_fifo_threshold_int
Definition: hpm_spi_drv.h:35
@ spi_tx_fifo_underflow_int
Definition: hpm_spi_drv.h:33
@ spi_rx_fifo_overflow_int
Definition: hpm_spi_drv.h:32
@ spi_rx_fifo_threshold_int
Definition: hpm_spi_drv.h:34
@ spi_slave_cmd_int
Definition: hpm_spi_drv.h:37
@ spi_end_int
Definition: hpm_spi_drv.h:36
@ spi_slave_mode
Definition: hpm_spi_drv.h:45
@ spi_master_mode
Definition: hpm_spi_drv.h:44
@ spi_sclk_low_idle
Definition: hpm_spi_drv.h:52
@ spi_sclk_high_idle
Definition: hpm_spi_drv.h:53
@ lsb_first
Definition: hpm_spi_drv.h:149
@ msb_first
Definition: hpm_spi_drv.h:148
@ spi_sclk_sampling_odd_clk_edges
Definition: hpm_spi_drv.h:60
@ spi_sclk_sampling_even_clk_edges
Definition: hpm_spi_drv.h:61
@ spi_token_value_0x00
Definition: hpm_spi_drv.h:133
@ spi_token_value_0x69
Definition: hpm_spi_drv.h:134
@ spi_dummy_count_3
Definition: hpm_spi_drv.h:143
@ spi_dummy_count_2
Definition: hpm_spi_drv.h:142
@ spi_dummy_count_1
Definition: hpm_spi_drv.h:141
@ spi_dummy_count_4
Definition: hpm_spi_drv.h:144
@ spi_trans_dummy_write
Definition: hpm_spi_drv.h:116
@ spi_trans_read_only
Definition: hpm_spi_drv.h:110
@ spi_trans_write_dummy_read
Definition: hpm_spi_drv.h:113
@ spi_trans_write_only
Definition: hpm_spi_drv.h:109
@ spi_trans_write_read
Definition: hpm_spi_drv.h:111
@ spi_trans_read_write
Definition: hpm_spi_drv.h:112
@ spi_trans_dummy_read
Definition: hpm_spi_drv.h:117
@ spi_trans_read_dummy_write
Definition: hpm_spi_drv.h:114
@ spi_trans_no_data
Definition: hpm_spi_drv.h:115
@ spi_trans_write_read_together
Definition: hpm_spi_drv.h:108
@ spi_quad_io_mode
Definition: hpm_spi_drv.h:126
@ spi_dual_io_mode
Definition: hpm_spi_drv.h:125
@ spi_single_io_mode
Definition: hpm_spi_drv.h:124
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:218
uint8_t dummy_cnt
Definition: hpm_spi_drv.h:223
bool tx_dma_enable
Definition: hpm_spi_drv.h:219
uint8_t cs_index
Definition: hpm_spi_drv.h:225
bool rx_dma_enable
Definition: hpm_spi_drv.h:220
uint8_t data_phase_fmt
Definition: hpm_spi_drv.h:222
uint8_t trans_mode
Definition: hpm_spi_drv.h:221
spi common format config structure
Definition: hpm_spi_drv.h:179
uint8_t mode
Definition: hpm_spi_drv.h:184
uint8_t cpol
Definition: hpm_spi_drv.h:185
uint8_t cpha
Definition: hpm_spi_drv.h:186
bool lsb
Definition: hpm_spi_drv.h:183
bool mosi_bidir
Definition: hpm_spi_drv.h:182
uint8_t data_len_in_bits
Definition: hpm_spi_drv.h:180
bool data_merge
Definition: hpm_spi_drv.h:181
spi control config structure
Definition: hpm_spi_drv.h:232
spi_slave_control_config_t slave_config
Definition: hpm_spi_drv.h:234
spi_master_control_config_t master_config
Definition: hpm_spi_drv.h:233
spi_common_control_config_t common_config
Definition: hpm_spi_drv.h:235
spi format config structure
Definition: hpm_spi_drv.h:192
spi_master_format_config_t master_config
Definition: hpm_spi_drv.h:193
spi_common_format_config_t common_config
Definition: hpm_spi_drv.h:194
spi master transfer control config structure
Definition: hpm_spi_drv.h:200
uint8_t token_value
Definition: hpm_spi_drv.h:205
uint8_t addr_phase_fmt
Definition: hpm_spi_drv.h:203
bool token_enable
Definition: hpm_spi_drv.h:204
bool addr_enable
Definition: hpm_spi_drv.h:202
bool cmd_enable
Definition: hpm_spi_drv.h:201
spi master transfer format config structure
Definition: hpm_spi_drv.h:172
uint8_t addr_len_in_bytes
Definition: hpm_spi_drv.h:173
spi master interface timing config structure
Definition: hpm_spi_drv.h:155
uint32_t sclk_freq_in_hz
Definition: hpm_spi_drv.h:157
uint8_t csht
Definition: hpm_spi_drv.h:159
uint8_t cs2sclk
Definition: hpm_spi_drv.h:158
uint32_t clk_src_freq_in_hz
Definition: hpm_spi_drv.h:156
spi slave transfer control config structure
Definition: hpm_spi_drv.h:211
bool slave_data_only
Definition: hpm_spi_drv.h:212
spi interface timing config structure
Definition: hpm_spi_drv.h:165
spi_master_timing_config_t master_config
Definition: hpm_spi_drv.h:166