HPM SDK
HPMicro Software Development Kit
hpm_sdxc_soc_drv.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2021-2023 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #ifndef HPM_SDXC_SOC_DRV_H
9 #define HPM_SDXC_SOC_DRV_H
10 
11 #include "hpm_soc.h"
12 #include "hpm_sdxc_regs.h"
13 
14 #if defined(__cplusplus)
15 extern "C" {
16 #endif
17 
18 
19 static inline void sdxc_enable_tm_clock(SDXC_Type *base)
20 {
22 }
23 
24 static inline void sdxc_enable_freq_selection(SDXC_Type *base)
25 {
27 }
28 
29 static inline void sdxc_disable_freq_selection(SDXC_Type *base)
30 {
32 }
33 
34 static inline void sdxc_set_clock_divider(SDXC_Type *base, uint32_t div)
35 {
36  base->MISC_CTRL0 =
39 }
40 
41 static inline uint32_t sdxc_get_clock_divider(SDXC_Type *base)
42 {
43  return (1U + SDXC_MISC_CTRL0_FREQ_SEL_SW_GET(base->MISC_CTRL0));
44 }
45 
49 static inline void sdxc_wait_card_active(SDXC_Type *base)
50 {
52 
54 
56  }
57 }
58 
59 static inline void sdxc_enable_inverse_clock(SDXC_Type *base, bool enable)
60 {
61  if (enable) {
63  } else {
65  }
66 }
67 
68 static inline bool sdxc_is_inverse_clock_enabled(SDXC_Type *base)
69 {
70  return ((base->MISC_CTRL0 & SDXC_MISC_CTRL0_CARDCLK_INV_EN_MASK) != 0U);
71 }
72 
73 static inline void sdxc_select_cardclk_delay_source(SDXC_Type *base, bool loopback_from_pad)
74 {
75  if (!loopback_from_pad) {
77  } else {
79  }
80 }
81 
86 static inline void sdxc_set_cardclk_delay_chain(SDXC_Type *base, uint32_t number_of_delaycells)
87 {
88  (void) base;
89  (void) number_of_delaycells;
90 }
91 
98 static inline void sdxc_set_data_strobe_delay(SDXC_Type *base, uint8_t num_of_delaycells)
99 {
100  (void) base;
101  (void) num_of_delaycells;
102 }
103 
104 static inline uint32_t sdxc_get_default_strobe_delay(SDXC_Type *base)
105 {
106  (void) base;
107  return 0;
108 }
109 
110 static inline uint32_t sdxc_get_default_cardclk_delay_chain(SDXC_Type *base, uint32_t clock_freq)
111 {
112  (void) base;
113  uint32_t num_delaycells = 3;
114  if (clock_freq <= 52000000) {
115  num_delaycells = 26;
116  }
117  return num_delaycells;
118 }
119 
120 static inline bool sdxc_is_ddr50_supported(SDXC_Type *base)
121 {
122  (void) base;
123  return false;
124 }
125 
126 
127 #if defined(__cplusplus)
128 }
129 #endif
130 
131 
132 #endif /* HPM_SDXC_SOC_DRV_H */
static void sdxc_enable_freq_selection(SDXC_Type *base)
Definition: hpm_sdxc_soc_drv.h:24
static bool sdxc_is_ddr50_supported(SDXC_Type *base)
Definition: hpm_sdxc_soc_drv.h:120
static void sdxc_set_clock_divider(SDXC_Type *base, uint32_t div)
Definition: hpm_sdxc_soc_drv.h:34
static void sdxc_enable_inverse_clock(SDXC_Type *base, bool enable)
Definition: hpm_sdxc_soc_drv.h:59
static uint32_t sdxc_get_default_strobe_delay(SDXC_Type *base)
Definition: hpm_sdxc_soc_drv.h:104
static uint32_t sdxc_get_clock_divider(SDXC_Type *base)
Definition: hpm_sdxc_soc_drv.h:41
static uint32_t sdxc_get_default_cardclk_delay_chain(SDXC_Type *base, uint32_t clock_freq)
Definition: hpm_sdxc_soc_drv.h:110
static void sdxc_select_cardclk_delay_source(SDXC_Type *base, bool loopback_from_pad)
Definition: hpm_sdxc_soc_drv.h:73
static void sdxc_enable_tm_clock(SDXC_Type *base)
Definition: hpm_sdxc_soc_drv.h:19
static bool sdxc_is_inverse_clock_enabled(SDXC_Type *base)
Definition: hpm_sdxc_soc_drv.h:68
static void sdxc_disable_freq_selection(SDXC_Type *base)
Definition: hpm_sdxc_soc_drv.h:29
static void sdxc_set_cardclk_delay_chain(SDXC_Type *base, uint32_t number_of_delaycells)
Set the Card Clock Delay chain.
Definition: hpm_sdxc_soc_drv.h:86
static void sdxc_wait_card_active(SDXC_Type *base)
Wait at least 74 clocks until card is ready to receive the first command.
Definition: hpm_sdxc_soc_drv.h:49
static void sdxc_set_data_strobe_delay(SDXC_Type *base, uint8_t num_of_delaycells)
Set SDXC data strobe delay chain.
Definition: hpm_sdxc_soc_drv.h:98
#define SDXC_MISC_CTRL0_FREQ_SEL_SW_SET(x)
Definition: hpm_sdxc_regs.h:4350
#define SDXC_MISC_CTRL0_PAD_CLK_SEL_B_MASK
Definition: hpm_sdxc_regs.h:4316
#define SDXC_MISC_CTRL0_FREQ_SEL_SW_MASK
Definition: hpm_sdxc_regs.h:4348
#define SDXC_MISC_CTRL0_FREQ_SEL_SW_EN_MASK
Definition: hpm_sdxc_regs.h:4327
#define SDXC_MISC_CTRL0_TMCLK_EN_MASK
Definition: hpm_sdxc_regs.h:4338
#define SDXC_SYS_CTRL_SD_CLK_EN_MASK
Definition: hpm_sdxc_regs.h:1087
#define SDXC_MISC_CTRL1_CARD_ACTIVE_MASK
Definition: hpm_sdxc_regs.h:4361
#define SDXC_MISC_CTRL0_CARDCLK_INV_EN_MASK
Definition: hpm_sdxc_regs.h:4305
#define SDXC_MISC_CTRL0_FREQ_SEL_SW_GET(x)
Definition: hpm_sdxc_regs.h:4351
#define IS_HPM_BITMASK_SET(val, mask)
Definition: hpm_common.h:61
Definition: hpm_sdxc_regs.h:12
__RW uint32_t MISC_CTRL1
Definition: hpm_sdxc_regs.h:78
__RW uint32_t MISC_CTRL0
Definition: hpm_sdxc_regs.h:77
__RW uint32_t SYS_CTRL
Definition: hpm_sdxc_regs.h:21