HPM SDK
HPMicro Software Development Kit
hpm_vad_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_VAD_DRV_H
9 #define HPM_VAD_DRV_H
10 
11 #include "hpm_common.h"
12 #include "hpm_vad_regs.h"
13 
24 #define VAD_EVENT_VAD (1U << 7)
25 #define VAD_EVENT_FIFO_DATA_AVAILABLE (1U << 6)
26 #define VAD_EVENT_MEMBUF_EMPTY (1U << 5)
27 #define VAD_EVENT_FIFO_OVERFLOW (1U << 4)
28 #define VAD_EVENT_IIR_OVERLOAD (1U << 3)
29 #define VAD_EVENT_IIR_OVERFLOW (1U << 2)
30 #define VAD_EVENT_CIC_OVERLOAD_ERROR (1U << 1)
31 #define VAD_EVENT_CIC_STA_ERROR (1U << 0)
32 
36 typedef struct vad_config {
40  uint8_t capture_delay;
41  uint8_t pdm_half_div;
42  uint8_t fifo_threshold;
43  uint8_t post_scale;
46 
47 #ifdef __cplusplus
48 extern "C" {
49 #endif
50 
57 static inline void vad_set_capture_delay(VAD_Type *ptr, uint8_t delay)
58 {
59  ptr->CTRL = (ptr->CTRL & ~VAD_CTRL_CAPT_DLY_MASK)
60  | VAD_CTRL_CAPT_DLY_SET(delay);
61 }
62 
69 static inline void vad_set_pdm_clock_half_div(VAD_Type *ptr, uint8_t div)
70 {
71  ptr->CTRL = (ptr->CTRL & ~VAD_CTRL_PDM_CLK_HFDIV_MASK)
73 }
74 
81 static inline void vad_enable_irq(VAD_Type *ptr, uint32_t irq_mask)
82 {
83  ptr->CTRL |= irq_mask;
84 }
85 
92 static inline void vad_disable_irq(VAD_Type *ptr, uint32_t irq_mask)
93 {
94  ptr->CTRL &= ~irq_mask;
95 }
96 
102 static inline void vad_disable_buffer(VAD_Type *ptr)
103 {
105 }
106 
112 static inline void vad_enable_buffer(VAD_Type *ptr)
113 {
115 }
116 
123 static inline void vad_set_fifo_threshold(VAD_Type *ptr, uint8_t threshold)
124 {
125  ptr->CTRL = (ptr->CTRL & ~(VAD_CTRL_FIFO_THRSH_MASK))
126  | VAD_CTRL_FIFO_THRSH_SET(threshold);
127 }
128 
134 static inline void vad_enable_pdm_clock_out(VAD_Type *ptr)
135 {
137 }
138 
144 static inline void vad_disable_pdm_clock_out(VAD_Type *ptr)
145 {
147 }
148 
155 static inline void vad_set_pdm_clock_capture_level(VAD_Type *ptr, uint8_t level)
156 {
157  ptr->CTRL = (ptr->CTRL & ~VAD_CTRL_CH_POL_MASK)
158  | VAD_CTRL_CH_POL_SET(level);
159 }
160 
169 static inline void vad_set_channel_number(VAD_Type *ptr, bool two_channels)
170 {
171  ptr->CTRL = (ptr->CTRL & ~VAD_CTRL_CHNUM_MASK)
172  | (two_channels ? VAD_CTRL_CHNUM_MASK : 0);
173 }
174 
181 static inline uint32_t vad_get_status(VAD_Type *ptr)
182 {
183  return ptr->ST;
184 }
185 
192 static inline void vad_clear_status(VAD_Type *ptr, uint32_t mask)
193 {
194  ptr->ST |= mask;
195 }
196 
203 static inline uint32_t vad_get_data(VAD_Type *ptr)
204 {
205  return ptr->OFIFO;
206 }
207 
213 static inline void vad_software_reset(VAD_Type *ptr)
214 {
215  ptr->RUN |= VAD_RUN_SFTRST_MASK;
216  ptr->RUN &= ~VAD_RUN_SFTRST_MASK;
217 }
218 
224 static inline void vad_start(VAD_Type *ptr)
225 {
226  ptr->RUN |= VAD_RUN_VAD_EN_MASK;
227 }
228 
234 static inline void vad_stop(VAD_Type *ptr)
235 {
236  ptr->RUN &= ~VAD_RUN_VAD_EN_MASK;
237 }
238 
245 static inline bool vad_is_running(VAD_Type *ptr)
246 {
247  return ptr->RUN & VAD_RUN_VAD_EN_MASK;
248 }
249 
255 static inline void vad_enable_fifo(VAD_Type *ptr)
256 {
258 }
259 
265 static inline void vad_disable_fifo(VAD_Type *ptr)
266 {
268 }
269 
276 static inline uint32_t vad_get_coef_value(VAD_Type *ptr, uint32_t index)
277 {
278  return ptr->COEF[index];
279 }
280 
287 static inline void vad_set_post_scale(VAD_Type *ptr, uint8_t post_scale)
288 {
290  | VAD_CIC_CFG_POST_SCALE_SET(post_scale);
291 }
292 
300 static inline void vad_set_amplify(VAD_Type *ptr, uint16_t high, uint16_t low)
301 {
304 }
305 
312 void vad_get_default_config(VAD_Type *ptr, vad_config_t *config);
313 
320 void vad_init(VAD_Type *ptr, vad_config_t *config);
321 
327 void vad_reset(VAD_Type *ptr);
328 
333 #ifdef __cplusplus
334 }
335 #endif
336 
337 #endif /* HPM_VAD_DRV_H */
#define VAD_CIC_CFG_POST_SCALE_MASK
Definition: hpm_vad_regs.h:420
#define VAD_CTRL_PDM_CLK_HFDIV_MASK
Definition: hpm_vad_regs.h:49
#define VAD_CTRL_CH_POL_MASK
Definition: hpm_vad_regs.h:179
#define VAD_CTRL_PDM_CLK_OE_MASK
Definition: hpm_vad_regs.h:169
#define VAD_RUN_VAD_EN_MASK
Definition: hpm_vad_regs.h:398
#define VAD_CTRL_PDM_CLK_HFDIV_SET(x)
Definition: hpm_vad_regs.h:51
#define VAD_CTRL_FIFO_THRSH_SET(x)
Definition: hpm_vad_regs.h:151
#define VAD_RUN_SFTRST_MASK
Definition: hpm_vad_regs.h:388
#define VAD_CTRL_CH_POL_SET(x)
Definition: hpm_vad_regs.h:181
#define VAD_CTRL_CAPT_DLY_SET(x)
Definition: hpm_vad_regs.h:37
#define VAD_OFIFO_CTRL_EN_MASK
Definition: hpm_vad_regs.h:409
#define VAD_CTRL_CAPT_DLY_MASK
Definition: hpm_vad_regs.h:35
#define VAD_CTRL_CHNUM_MASK
Definition: hpm_vad_regs.h:189
#define VAD_CIC_CFG_POST_SCALE_SET(x)
Definition: hpm_vad_regs.h:422
#define VAD_CTRL_MEMBUF_DISABLE_MASK
Definition: hpm_vad_regs.h:139
#define VAD_CTRL_FIFO_THRSH_MASK
Definition: hpm_vad_regs.h:149
#define VAD_DEC_CTRL2_AMP_HIGH_SET(x)
Definition: hpm_vad_regs.h:276
#define VAD_DEC_CTRL2_AMP_LOW_SET(x)
Definition: hpm_vad_regs.h:286
static void vad_set_capture_delay(VAD_Type *ptr, uint8_t delay)
set capture deplay cycle
Definition: hpm_vad_drv.h:57
static void vad_set_post_scale(VAD_Type *ptr, uint8_t post_scale)
set ouptput value post scale
Definition: hpm_vad_drv.h:287
void vad_reset(VAD_Type *ptr)
reset
Definition: hpm_vad_drv.c:43
static void vad_stop(VAD_Type *ptr)
stop
Definition: hpm_vad_drv.h:234
void vad_get_default_config(VAD_Type *ptr, vad_config_t *config)
get default config
Definition: hpm_vad_drv.c:10
void vad_init(VAD_Type *ptr, vad_config_t *config)
initialization
Definition: hpm_vad_drv.c:24
static void vad_software_reset(VAD_Type *ptr)
software reset
Definition: hpm_vad_drv.h:213
static void vad_disable_buffer(VAD_Type *ptr)
disable buffer
Definition: hpm_vad_drv.h:102
static void vad_set_fifo_threshold(VAD_Type *ptr, uint8_t threshold)
set fifo threshold
Definition: hpm_vad_drv.h:123
static void vad_start(VAD_Type *ptr)
start
Definition: hpm_vad_drv.h:224
static void vad_disable_irq(VAD_Type *ptr, uint32_t irq_mask)
disable irq
Definition: hpm_vad_drv.h:92
static void vad_clear_status(VAD_Type *ptr, uint32_t mask)
slear status
Definition: hpm_vad_drv.h:192
static uint32_t vad_get_status(VAD_Type *ptr)
get status
Definition: hpm_vad_drv.h:181
static void vad_set_channel_number(VAD_Type *ptr, bool two_channels)
set channel number
Definition: hpm_vad_drv.h:169
struct vad_config vad_config_t
vad config
static uint32_t vad_get_data(VAD_Type *ptr)
get data
Definition: hpm_vad_drv.h:203
static void vad_enable_pdm_clock_out(VAD_Type *ptr)
enable pdm clock out
Definition: hpm_vad_drv.h:134
static void vad_enable_buffer(VAD_Type *ptr)
enable buffer
Definition: hpm_vad_drv.h:112
static void vad_set_amplify(VAD_Type *ptr, uint16_t high, uint16_t low)
set sampling signal amplitude limits
Definition: hpm_vad_drv.h:300
static void vad_disable_fifo(VAD_Type *ptr)
disable fifo
Definition: hpm_vad_drv.h:265
static uint32_t vad_get_coef_value(VAD_Type *ptr, uint32_t index)
get coefficient value
Definition: hpm_vad_drv.h:276
static void vad_enable_irq(VAD_Type *ptr, uint32_t irq_mask)
enable irq
Definition: hpm_vad_drv.h:81
static void vad_enable_fifo(VAD_Type *ptr)
enable fifo
Definition: hpm_vad_drv.h:255
static void vad_set_pdm_clock_half_div(VAD_Type *ptr, uint8_t div)
set pdm clock hald_divider
Definition: hpm_vad_drv.h:69
static void vad_set_pdm_clock_capture_level(VAD_Type *ptr, uint8_t level)
set pdm clock polarity
Definition: hpm_vad_drv.h:155
static void vad_disable_pdm_clock_out(VAD_Type *ptr)
disable pdm clock out
Definition: hpm_vad_drv.h:144
static bool vad_is_running(VAD_Type *ptr)
check whether vad is running
Definition: hpm_vad_drv.h:245
Definition: hpm_vad_regs.h:12
__RW uint32_t CTRL
Definition: hpm_vad_regs.h:13
__RW uint32_t RUN
Definition: hpm_vad_regs.h:21
__RW uint32_t CIC_CFG
Definition: hpm_vad_regs.h:23
__RW uint32_t OFIFO
Definition: hpm_vad_regs.h:20
__RW uint32_t ST
Definition: hpm_vad_regs.h:19
__RW uint32_t OFIFO_CTRL
Definition: hpm_vad_regs.h:22
__RW uint32_t DEC_CTRL2
Definition: hpm_vad_regs.h:17
__R uint32_t COEF[1]
Definition: hpm_vad_regs.h:25
vad config
Definition: hpm_vad_drv.h:36
uint8_t post_scale
Definition: hpm_vad_drv.h:43
bool channel_polarity_high[2]
Definition: hpm_vad_drv.h:44
bool enable_pdm_clock_out
Definition: hpm_vad_drv.h:38
uint8_t capture_delay
Definition: hpm_vad_drv.h:40
uint8_t pdm_half_div
Definition: hpm_vad_drv.h:41
bool enable_buffer
Definition: hpm_vad_drv.h:37
uint8_t fifo_threshold
Definition: hpm_vad_drv.h:42
bool enable_two_channels
Definition: hpm_vad_drv.h:39