HPM SDK
HPMicro Software Development Kit
hpm_lobs_drv.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2024 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #ifndef HPM_LOBS_DRV_H
9 #define HPM_LOBS_DRV_H
10 
11 #include "hpm_common.h"
12 #include "hpm_soc_ip_feature.h"
13 #include "hpm_lobs_regs.h"
14 
22 #define LOBS_UNLOCK_KEY 0xc5acce55u
23 
24 #define LOBS_PIN_DO(x) (x * 3)
25 #define LOBS_PIN_OE(x) (x * 3 + 1)
26 #define LOBS_PIN_DI(x) (x * 3 + 2)
27 
32 typedef enum {
41 typedef enum {
51 typedef enum {
55 } lobs_burst_t;
61 typedef enum {
70 typedef enum {
82 typedef enum {
91 typedef enum {
105 typedef enum {
118 typedef struct {
121  uint32_t start_addr;
122  uint32_t end_addr;
129 typedef struct {
131  uint8_t sig_group_num;
132  uint8_t sample_sig_bit[4];
133  bool sample_sig_en[4];
140 typedef struct {
141  uint8_t sig_group_num;
145  uint32_t cmp_counter;
146  uint8_t cmp_sig_bit[4];
147  bool cmp_sig_en[4];
148  bool cmp_golden_value[4];
151 #ifdef __cplusplus
152 extern "C" {
153 #endif
154 
160 static inline void lobs_unlock(LOBS_Type *lobs)
161 {
162  lobs->LAR = LOBS_UNLOCK_KEY;
163 }
164 
170 static inline void lobs_lock(LOBS_Type *lobs)
171 {
172  lobs->LAR = 0;
173 }
174 
181 static inline void lobs_set_enable(LOBS_Type *lobs, bool enable)
182 {
183  lobs->CTRL = (lobs->CTRL & ~LOBS_CTRL_RUN_MASK) | LOBS_CTRL_RUN_SET(enable);
184 }
185 
192 static inline void lobs_set_pre_trig_enable(LOBS_Type *lobs, bool enable)
193 {
195 }
196 
204 static inline void lobs_set_state_enable(LOBS_Type *lobs, lobs_state_sel_t state, bool enable)
205 {
206  lobs->STATE[state].ACTION = (lobs->STATE[state].ACTION & ~LOBS_STATE_ACTION_TRACE_MASK) | LOBS_STATE_ACTION_TRACE_SET(enable);
207 }
208 
216 static inline uint32_t lobs_get_final_address(LOBS_Type *lobs)
217 {
218  return lobs->FINALADDR;
219 }
220 
228 static inline bool lobs_is_trace_finish(LOBS_Type *lobs)
229 {
230  return (LOBS_CTSR_FINALSTATE_GET(lobs->CTSR) != 0) ? true : false;
231 }
232 
239 static inline void lobs_clear_fifo_overflow_flag(LOBS_Type *lobs)
240 {
242 }
243 
249 void lobs_deinit(LOBS_Type *lobs);
250 
257 void lobs_ctrl_config(LOBS_Type *lobs, lobs_ctrl_config_t *config);
258 
267 
276 
277 #ifdef __cplusplus
278 }
279 #endif
283 #endif /* HPM_LOBS_DRV_H */
lobs_next_state_t
next state
Definition: hpm_lobs_drv.h:105
lobs_burst_t
burst selection
Definition: hpm_lobs_drv.h:51
void lobs_deinit(LOBS_Type *lobs)
lobs deinit
Definition: hpm_lobs_drv.c:11
lobs_state_sel_t
state selection
Definition: hpm_lobs_drv.h:70
static bool lobs_is_trace_finish(LOBS_Type *lobs)
check lobs trace finish
Definition: hpm_lobs_drv.h:228
static void lobs_set_enable(LOBS_Type *lobs, bool enable)
set lobs enable or disable
Definition: hpm_lobs_drv.h:181
static void lobs_set_pre_trig_enable(LOBS_Type *lobs, bool enable)
set lobs pre-trig enable or disable
Definition: hpm_lobs_drv.h:192
lobs_cmp_mode_t
compare mode
Definition: hpm_lobs_drv.h:82
lobs_two_group_sel_t
two group selection
Definition: hpm_lobs_drv.h:61
void lobs_two_group_mode_config(LOBS_Type *lobs, lobs_two_group_sel_t group, lobs_two_group_mode_config_t *config)
lobs two group mode config
Definition: hpm_lobs_drv.c:43
void lobs_state_config(LOBS_Type *lobs, lobs_state_sel_t state, lobs_state_config_t *config)
lobs state config
Definition: hpm_lobs_drv.c:68
static void lobs_set_state_enable(LOBS_Type *lobs, lobs_state_sel_t state, bool enable)
set lobs state enable or disable
Definition: hpm_lobs_drv.h:204
lobs_sample_rate_t
sample rate selection
Definition: hpm_lobs_drv.h:41
lobs_state_chg_condition_t
compare condition
Definition: hpm_lobs_drv.h:91
lobs_group_mode_t
group mode selection
Definition: hpm_lobs_drv.h:32
void lobs_ctrl_config(LOBS_Type *lobs, lobs_ctrl_config_t *config)
lobs control config
Definition: hpm_lobs_drv.c:22
static uint32_t lobs_get_final_address(LOBS_Type *lobs)
get lobs final address
Definition: hpm_lobs_drv.h:216
static void lobs_clear_fifo_overflow_flag(LOBS_Type *lobs)
clear lobs fifo overflow flag
Definition: hpm_lobs_drv.h:239
#define LOBS_UNLOCK_KEY
Definition: hpm_lobs_drv.h:22
static void lobs_unlock(LOBS_Type *lobs)
set lobs unlock
Definition: hpm_lobs_drv.h:160
static void lobs_lock(LOBS_Type *lobs)
set lobs lock
Definition: hpm_lobs_drv.h:170
@ lobs_next_state_finish
Definition: hpm_lobs_drv.h:106
@ lobs_next_state_4
Definition: hpm_lobs_drv.h:111
@ lobs_next_state_0
Definition: hpm_lobs_drv.h:107
@ lobs_next_state_1
Definition: hpm_lobs_drv.h:108
@ lobs_next_state_2
Definition: hpm_lobs_drv.h:109
@ lobs_next_state_3
Definition: hpm_lobs_drv.h:110
@ lobs_burst_8
Definition: hpm_lobs_drv.h:53
@ lobs_burst_4
Definition: hpm_lobs_drv.h:52
@ lobs_burst_16
Definition: hpm_lobs_drv.h:54
@ lobs_state_2
Definition: hpm_lobs_drv.h:73
@ lobs_state_3
Definition: hpm_lobs_drv.h:74
@ lobs_state_0
Definition: hpm_lobs_drv.h:71
@ lobs_state_4
Definition: hpm_lobs_drv.h:75
@ lobs_state_1
Definition: hpm_lobs_drv.h:72
@ lobs_sig_cmp_mode
Definition: hpm_lobs_drv.h:83
@ lobs_cnt_cmp_mode
Definition: hpm_lobs_drv.h:84
@ lobs_two_group_1
Definition: hpm_lobs_drv.h:62
@ lobs_two_group_2
Definition: hpm_lobs_drv.h:63
@ lobs_sample_1_per_6
Definition: hpm_lobs_drv.h:43
@ lobs_sample_1_per_5
Definition: hpm_lobs_drv.h:42
@ lobs_sample_1_per_7
Definition: hpm_lobs_drv.h:44
@ lobs_sig_greater_equal_golden
Definition: hpm_lobs_drv.h:95
@ lobs_sig_less_golden
Definition: hpm_lobs_drv.h:97
@ lobs_sig_not_equal_golden
Definition: hpm_lobs_drv.h:96
@ lobs_sig_equal_golden
Definition: hpm_lobs_drv.h:93
@ lobs_sig_greater_golden
Definition: hpm_lobs_drv.h:94
@ lobs_sig_less_equal_golden
Definition: hpm_lobs_drv.h:98
@ lobs_cnt_matched
Definition: hpm_lobs_drv.h:92
@ lobs_two_group_8_bits
Definition: hpm_lobs_drv.h:34
@ lobs_one_group_128_bits
Definition: hpm_lobs_drv.h:33
#define LOBS_STREAMCTRL_FULL_CLEAR_MASK
Definition: hpm_lobs_regs.h:91
#define LOBS_CTRL_RUN_MASK
Definition: hpm_lobs_regs.h:68
#define LOBS_CTSR_FINALSTATE_GET(x)
Definition: hpm_lobs_regs.h:165
#define LOBS_PTACTION_TRACE_MASK
Definition: hpm_lobs_regs.h:128
#define LOBS_STATE_ACTION_TRACE_MASK
Definition: hpm_lobs_regs.h:467
#define LOBS_STATE_ACTION_TRACE_SET(x)
Definition: hpm_lobs_regs.h:469
#define LOBS_CTRL_RUN_SET(x)
Definition: hpm_lobs_regs.h:70
#define LOBS_PTACTION_TRACE_SET(x)
Definition: hpm_lobs_regs.h:130
Definition: hpm_lobs_regs.h:12
__RW uint32_t LAR
Definition: hpm_lobs_regs.h:56
__RW uint32_t FINALADDR
Definition: hpm_lobs_regs.h:25
struct LOBS_Type::@672 STATE[5]
__R uint32_t CTSR
Definition: hpm_lobs_regs.h:20
__RW uint32_t PTACTION
Definition: hpm_lobs_regs.h:16
__RW uint32_t CTRL
Definition: hpm_lobs_regs.h:13
__RW uint32_t ACTION
Definition: hpm_lobs_regs.h:39
__RW uint32_t STREAMCTRL
Definition: hpm_lobs_regs.h:15
ctrl config structure
Definition: hpm_lobs_drv.h:118
uint32_t start_addr
Definition: hpm_lobs_drv.h:121
lobs_sample_rate_t sample_rate
Definition: hpm_lobs_drv.h:120
uint32_t end_addr
Definition: hpm_lobs_drv.h:122
lobs_group_mode_t group_mode
Definition: hpm_lobs_drv.h:119
two group mode config structure
Definition: hpm_lobs_drv.h:140
lobs_state_chg_condition_t state_chg_condition
Definition: hpm_lobs_drv.h:143
uint32_t cmp_counter
Definition: hpm_lobs_drv.h:145
uint8_t sig_group_num
Definition: hpm_lobs_drv.h:141
lobs_cmp_mode_t cmp_mode
Definition: hpm_lobs_drv.h:142
lobs_next_state_t next_state
Definition: hpm_lobs_drv.h:144
two group mode config structure
Definition: hpm_lobs_drv.h:129
bool group_enable
Definition: hpm_lobs_drv.h:130
uint8_t sig_group_num
Definition: hpm_lobs_drv.h:131