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 {
50 typedef enum {
59 typedef enum {
69 typedef enum {
73 } lobs_burst_t;
79 typedef enum {
88 typedef enum {
100 typedef enum {
103 } lobs_cmp_mode_t;
109 typedef enum {
123 typedef enum {
136 typedef struct {
139  uint32_t start_addr;
140  uint32_t end_addr;
147 typedef struct {
150  uint8_t sample_sig_bit[4];
151  bool sample_sig_en[4];
158 typedef struct {
163  uint32_t cmp_counter;
164  uint8_t cmp_sig_bit[4];
165  bool cmp_sig_en[4];
166  bool cmp_golden_value[4];
173 typedef struct {
174  uint8_t header;
175  uint8_t cnt_L;
176  uint8_t cnt_M;
177  uint8_t cnt_H;
178  union {
179  uint32_t u32_data[3];
180  struct {
181  uint32_t pin00_do : 1;
182  uint32_t pin00_oe : 1;
183  uint32_t pin00_di : 1;
184  uint32_t pin01_do : 1;
185  uint32_t pin01_oe : 1;
186  uint32_t pin01_di : 1;
187  uint32_t pin02_do : 1;
188  uint32_t pin02_oe : 1;
189  uint32_t pin02_di : 1;
190  uint32_t pin03_do : 1;
191  uint32_t pin03_oe : 1;
192  uint32_t pin03_di : 1;
193  uint32_t pin04_do : 1;
194  uint32_t pin04_oe : 1;
195  uint32_t pin04_di : 1;
196  uint32_t pin05_do : 1;
197  uint32_t pin05_oe : 1;
198  uint32_t pin05_di : 1;
199  uint32_t pin06_do : 1;
200  uint32_t pin06_oe : 1;
201  uint32_t pin06_di : 1;
202  uint32_t pin07_do : 1;
203  uint32_t pin07_oe : 1;
204  uint32_t pin07_di : 1;
205  uint32_t pin08_do : 1;
206  uint32_t pin08_oe : 1;
207  uint32_t pin08_di : 1;
208  uint32_t pin09_do : 1;
209  uint32_t pin09_oe : 1;
210  uint32_t pin09_di : 1;
211  uint32_t pin10_do : 1;
212  uint32_t pin10_oe : 1;
213 
214  uint32_t pin10_di : 1;
215  uint32_t pin11_do : 1;
216  uint32_t pin11_oe : 1;
217  uint32_t pin11_di : 1;
218  uint32_t pin12_do : 1;
219  uint32_t pin12_oe : 1;
220  uint32_t pin12_di : 1;
221  uint32_t pin13_do : 1;
222  uint32_t pin13_oe : 1;
223  uint32_t pin13_di : 1;
224  uint32_t pin14_do : 1;
225  uint32_t pin14_oe : 1;
226  uint32_t pin14_di : 1;
227  uint32_t pin15_do : 1;
228  uint32_t pin15_oe : 1;
229  uint32_t pin15_di : 1;
230  uint32_t pin16_do : 1;
231  uint32_t pin16_oe : 1;
232  uint32_t pin16_di : 1;
233  uint32_t pin17_do : 1;
234  uint32_t pin17_oe : 1;
235  uint32_t pin17_di : 1;
236  uint32_t pin18_do : 1;
237  uint32_t pin18_oe : 1;
238  uint32_t pin18_di : 1;
239  uint32_t pin19_do : 1;
240  uint32_t pin19_oe : 1;
241  uint32_t pin19_di : 1;
242  uint32_t pin20_do : 1;
243  uint32_t pin20_oe : 1;
244  uint32_t pin20_di : 1;
245  uint32_t pin21_do : 1;
246 
247  uint32_t pin21_oe : 1;
248  uint32_t pin21_di : 1;
249  uint32_t pin22_do : 1;
250  uint32_t pin22_oe : 1;
251  uint32_t pin22_di : 1;
252  uint32_t pin23_do : 1;
253  uint32_t pin23_oe : 1;
254  uint32_t pin23_di : 1;
255  uint32_t pin24_do : 1;
256  uint32_t pin24_oe : 1;
257  uint32_t pin24_di : 1;
258  uint32_t pin25_do : 1;
259  uint32_t pin25_oe : 1;
260  uint32_t pin25_di : 1;
261  uint32_t pin26_do : 1;
262  uint32_t pin26_oe : 1;
263  uint32_t pin26_di : 1;
264  uint32_t pin27_do : 1;
265  uint32_t pin27_oe : 1;
266  uint32_t pin27_di : 1;
267  uint32_t pin28_do : 1;
268  uint32_t pin28_oe : 1;
269  uint32_t pin28_di : 1;
270  uint32_t pin29_do : 1;
271  uint32_t pin29_oe : 1;
272  uint32_t pin29_di : 1;
273  uint32_t pin30_do : 1;
274  uint32_t pin30_oe : 1;
275  uint32_t pin30_di : 1;
276  uint32_t pin31_do : 1;
277  uint32_t pin31_oe : 1;
278  uint32_t pin31_di : 1;
279  } str_data;
280  } trace_data;
283 #ifdef __cplusplus
284 extern "C" {
285 #endif
286 
292 static inline void lobs_unlock(LOBS_Type *lobs)
293 {
294  lobs->LAR = LOBS_UNLOCK_KEY;
295 }
296 
302 static inline void lobs_lock(LOBS_Type *lobs)
303 {
304  lobs->LAR = 0;
305 }
306 
313 static inline void lobs_set_enable(LOBS_Type *lobs, bool enable)
314 {
315  lobs->CTRL = (lobs->CTRL & ~LOBS_CTRL_RUN_MASK) | LOBS_CTRL_RUN_SET(enable);
316 }
317 
324 static inline void lobs_set_pre_trig_enable(LOBS_Type *lobs, bool enable)
325 {
327 }
328 
336 static inline void lobs_set_state_enable(LOBS_Type *lobs, lobs_state_sel_t state, bool enable)
337 {
338  lobs->STATE[state].ACTION = (lobs->STATE[state].ACTION & ~LOBS_STATE_ACTION_TRACE_MASK) | LOBS_STATE_ACTION_TRACE_SET(enable);
339 }
340 
348 static inline uint32_t lobs_get_final_address(LOBS_Type *lobs)
349 {
350  return lobs->FINALADDR;
351 }
352 
360 static inline bool lobs_is_trace_finish(LOBS_Type *lobs)
361 {
362  return (LOBS_CTSR_FINALSTATE_GET(lobs->CTSR) != 0) ? true : false;
363 }
364 
371 static inline void lobs_clear_fifo_overflow_flag(LOBS_Type *lobs)
372 {
374 }
375 
381 void lobs_deinit(LOBS_Type *lobs);
382 
389 void lobs_ctrl_config(LOBS_Type *lobs, lobs_ctrl_config_t *config);
390 
399 
408 
409 #ifdef __cplusplus
410 }
411 #endif
415 #endif /* HPM_LOBS_DRV_H */
lobs_next_state_t
next state
Definition: hpm_lobs_drv.h:123
lobs_burst_t
burst selection
Definition: hpm_lobs_drv.h:69
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:88
static bool lobs_is_trace_finish(LOBS_Type *lobs)
check lobs trace finish
Definition: hpm_lobs_drv.h:360
static void lobs_set_enable(LOBS_Type *lobs, bool enable)
set lobs enable or disable
Definition: hpm_lobs_drv.h:313
static void lobs_set_pre_trig_enable(LOBS_Type *lobs, bool enable)
set lobs pre-trig enable or disable
Definition: hpm_lobs_drv.h:324
lobs_cmp_mode_t
compare mode
Definition: hpm_lobs_drv.h:100
lobs_two_group_sel_t
two group selection
Definition: hpm_lobs_drv.h:79
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:66
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:336
lobs_sample_rate_t
sample rate selection
Definition: hpm_lobs_drv.h:59
lobs_signal_group_t
signal group number
Definition: hpm_lobs_drv.h:32
lobs_state_chg_condition_t
compare condition
Definition: hpm_lobs_drv.h:109
lobs_group_mode_t
group mode selection
Definition: hpm_lobs_drv.h:50
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:348
static void lobs_clear_fifo_overflow_flag(LOBS_Type *lobs)
clear lobs fifo overflow flag
Definition: hpm_lobs_drv.h:371
#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:292
static void lobs_lock(LOBS_Type *lobs)
set lobs lock
Definition: hpm_lobs_drv.h:302
@ lobs_next_state_finish
Definition: hpm_lobs_drv.h:124
@ lobs_next_state_4
Definition: hpm_lobs_drv.h:129
@ lobs_next_state_0
Definition: hpm_lobs_drv.h:125
@ lobs_next_state_1
Definition: hpm_lobs_drv.h:126
@ lobs_next_state_2
Definition: hpm_lobs_drv.h:127
@ lobs_next_state_3
Definition: hpm_lobs_drv.h:128
@ lobs_burst_8
Definition: hpm_lobs_drv.h:71
@ lobs_burst_4
Definition: hpm_lobs_drv.h:70
@ lobs_burst_16
Definition: hpm_lobs_drv.h:72
@ lobs_state_2
Definition: hpm_lobs_drv.h:91
@ lobs_state_3
Definition: hpm_lobs_drv.h:92
@ lobs_state_0
Definition: hpm_lobs_drv.h:89
@ lobs_state_4
Definition: hpm_lobs_drv.h:93
@ lobs_state_1
Definition: hpm_lobs_drv.h:90
@ lobs_sig_cmp_mode
Definition: hpm_lobs_drv.h:101
@ lobs_cnt_cmp_mode
Definition: hpm_lobs_drv.h:102
@ lobs_two_group_1
Definition: hpm_lobs_drv.h:80
@ lobs_two_group_2
Definition: hpm_lobs_drv.h:81
@ lobs_sample_1_per_6
Definition: hpm_lobs_drv.h:61
@ lobs_sample_1_per_5
Definition: hpm_lobs_drv.h:60
@ lobs_sample_1_per_7
Definition: hpm_lobs_drv.h:62
@ lobs_signal_group_PV
Definition: hpm_lobs_drv.h:39
@ lobs_signal_group_PW
Definition: hpm_lobs_drv.h:40
@ lobs_signal_group_PD
Definition: hpm_lobs_drv.h:36
@ lobs_signal_group_PZ
Definition: hpm_lobs_drv.h:43
@ lobs_signal_group_PY
Definition: hpm_lobs_drv.h:42
@ lobs_signal_group_PA
Definition: hpm_lobs_drv.h:33
@ lobs_signal_group_PB
Definition: hpm_lobs_drv.h:34
@ lobs_signal_group_PX
Definition: hpm_lobs_drv.h:41
@ lobs_signal_group_PF
Definition: hpm_lobs_drv.h:38
@ lobs_signal_group_PC
Definition: hpm_lobs_drv.h:35
@ lobs_signal_group_PE
Definition: hpm_lobs_drv.h:37
@ lobs_sig_greater_equal_golden
Definition: hpm_lobs_drv.h:113
@ lobs_sig_less_golden
Definition: hpm_lobs_drv.h:115
@ lobs_sig_not_equal_golden
Definition: hpm_lobs_drv.h:114
@ lobs_sig_equal_golden
Definition: hpm_lobs_drv.h:111
@ lobs_sig_greater_golden
Definition: hpm_lobs_drv.h:112
@ lobs_sig_less_equal_golden
Definition: hpm_lobs_drv.h:116
@ lobs_cnt_matched
Definition: hpm_lobs_drv.h:110
@ lobs_two_group_8_bits
Definition: hpm_lobs_drv.h:52
@ lobs_one_group_128_bits
Definition: hpm_lobs_drv.h:51
#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
__R uint32_t CTSR
Definition: hpm_lobs_regs.h:20
__RW uint32_t PTACTION
Definition: hpm_lobs_regs.h:16
struct LOBS_Type::@680 STATE[5]
__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:136
uint32_t start_addr
Definition: hpm_lobs_drv.h:139
lobs_sample_rate_t sample_rate
Definition: hpm_lobs_drv.h:138
uint32_t end_addr
Definition: hpm_lobs_drv.h:140
lobs_group_mode_t group_mode
Definition: hpm_lobs_drv.h:137
two group mode config structure
Definition: hpm_lobs_drv.h:158
lobs_state_chg_condition_t state_chg_condition
Definition: hpm_lobs_drv.h:161
uint32_t cmp_counter
Definition: hpm_lobs_drv.h:163
lobs_cmp_mode_t cmp_mode
Definition: hpm_lobs_drv.h:160
lobs_next_state_t next_state
Definition: hpm_lobs_drv.h:162
lobs_signal_group_t sig_group_num
Definition: hpm_lobs_drv.h:159
trace data structure
Definition: hpm_lobs_drv.h:173
uint32_t pin14_oe
Definition: hpm_lobs_drv.h:225
uint32_t pin00_oe
Definition: hpm_lobs_drv.h:182
uint32_t pin18_oe
Definition: hpm_lobs_drv.h:237
uint32_t pin08_do
Definition: hpm_lobs_drv.h:205
uint32_t pin09_oe
Definition: hpm_lobs_drv.h:209
uint32_t pin28_oe
Definition: hpm_lobs_drv.h:268
uint32_t pin19_oe
Definition: hpm_lobs_drv.h:240
uint32_t pin13_di
Definition: hpm_lobs_drv.h:223
uint32_t pin28_di
Definition: hpm_lobs_drv.h:269
uint32_t pin31_di
Definition: hpm_lobs_drv.h:278
uint32_t pin16_do
Definition: hpm_lobs_drv.h:230
uint32_t pin13_oe
Definition: hpm_lobs_drv.h:222
uint32_t pin08_di
Definition: hpm_lobs_drv.h:207
uint32_t pin02_do
Definition: hpm_lobs_drv.h:187
uint32_t pin29_oe
Definition: hpm_lobs_drv.h:271
uint32_t pin24_do
Definition: hpm_lobs_drv.h:255
uint32_t pin25_di
Definition: hpm_lobs_drv.h:260
uint32_t pin05_oe
Definition: hpm_lobs_drv.h:197
uint32_t pin10_do
Definition: hpm_lobs_drv.h:211
uint32_t pin17_do
Definition: hpm_lobs_drv.h:233
uint32_t pin20_oe
Definition: hpm_lobs_drv.h:243
uint32_t pin16_oe
Definition: hpm_lobs_drv.h:231
uint32_t pin19_di
Definition: hpm_lobs_drv.h:241
uint32_t pin04_oe
Definition: hpm_lobs_drv.h:194
uint32_t pin26_di
Definition: hpm_lobs_drv.h:263
uint32_t pin16_di
Definition: hpm_lobs_drv.h:232
uint32_t pin30_di
Definition: hpm_lobs_drv.h:275
uint32_t pin12_oe
Definition: hpm_lobs_drv.h:219
uint32_t pin22_di
Definition: hpm_lobs_drv.h:251
uint32_t pin24_oe
Definition: hpm_lobs_drv.h:256
uint32_t pin25_do
Definition: hpm_lobs_drv.h:258
uint32_t pin21_do
Definition: hpm_lobs_drv.h:245
uint32_t pin31_do
Definition: hpm_lobs_drv.h:276
uint32_t pin21_oe
Definition: hpm_lobs_drv.h:247
uint32_t pin19_do
Definition: hpm_lobs_drv.h:239
uint32_t pin28_do
Definition: hpm_lobs_drv.h:267
uint32_t pin26_oe
Definition: hpm_lobs_drv.h:262
uint32_t pin06_do
Definition: hpm_lobs_drv.h:199
uint32_t pin17_oe
Definition: hpm_lobs_drv.h:234
uint32_t pin06_di
Definition: hpm_lobs_drv.h:201
uint32_t pin27_di
Definition: hpm_lobs_drv.h:266
uint32_t pin22_oe
Definition: hpm_lobs_drv.h:250
uint8_t cnt_H
Definition: hpm_lobs_drv.h:177
uint32_t pin10_di
Definition: hpm_lobs_drv.h:214
uint32_t pin25_oe
Definition: hpm_lobs_drv.h:259
uint32_t pin29_di
Definition: hpm_lobs_drv.h:272
uint32_t pin23_oe
Definition: hpm_lobs_drv.h:253
uint32_t pin23_do
Definition: hpm_lobs_drv.h:252
uint32_t pin05_do
Definition: hpm_lobs_drv.h:196
uint32_t pin18_do
Definition: hpm_lobs_drv.h:236
uint8_t header
Definition: hpm_lobs_drv.h:174
uint32_t pin07_di
Definition: hpm_lobs_drv.h:204
uint32_t pin24_di
Definition: hpm_lobs_drv.h:257
uint32_t pin26_do
Definition: hpm_lobs_drv.h:261
uint32_t pin03_oe
Definition: hpm_lobs_drv.h:191
uint32_t pin11_di
Definition: hpm_lobs_drv.h:217
uint32_t pin05_di
Definition: hpm_lobs_drv.h:198
uint32_t pin11_oe
Definition: hpm_lobs_drv.h:216
uint32_t pin01_oe
Definition: hpm_lobs_drv.h:185
uint32_t pin08_oe
Definition: hpm_lobs_drv.h:206
uint32_t pin31_oe
Definition: hpm_lobs_drv.h:277
uint32_t pin01_do
Definition: hpm_lobs_drv.h:184
uint32_t pin22_do
Definition: hpm_lobs_drv.h:249
uint32_t pin07_oe
Definition: hpm_lobs_drv.h:203
uint32_t pin00_do
Definition: hpm_lobs_drv.h:181
uint32_t pin11_do
Definition: hpm_lobs_drv.h:215
uint32_t pin15_oe
Definition: hpm_lobs_drv.h:228
uint32_t pin09_di
Definition: hpm_lobs_drv.h:210
uint32_t pin07_do
Definition: hpm_lobs_drv.h:202
uint32_t pin27_do
Definition: hpm_lobs_drv.h:264
uint32_t pin23_di
Definition: hpm_lobs_drv.h:254
uint32_t pin18_di
Definition: hpm_lobs_drv.h:238
uint32_t pin12_di
Definition: hpm_lobs_drv.h:220
uint32_t pin17_di
Definition: hpm_lobs_drv.h:235
uint32_t pin03_do
Definition: hpm_lobs_drv.h:190
uint32_t pin06_oe
Definition: hpm_lobs_drv.h:200
uint32_t pin20_do
Definition: hpm_lobs_drv.h:242
uint32_t pin14_di
Definition: hpm_lobs_drv.h:226
uint32_t pin10_oe
Definition: hpm_lobs_drv.h:212
uint32_t pin27_oe
Definition: hpm_lobs_drv.h:265
uint32_t pin01_di
Definition: hpm_lobs_drv.h:186
uint32_t pin15_di
Definition: hpm_lobs_drv.h:229
uint32_t pin21_di
Definition: hpm_lobs_drv.h:248
uint8_t cnt_L
Definition: hpm_lobs_drv.h:175
uint32_t pin04_do
Definition: hpm_lobs_drv.h:193
uint32_t pin15_do
Definition: hpm_lobs_drv.h:227
uint32_t pin00_di
Definition: hpm_lobs_drv.h:183
uint32_t pin30_oe
Definition: hpm_lobs_drv.h:274
uint32_t pin29_do
Definition: hpm_lobs_drv.h:270
uint32_t pin09_do
Definition: hpm_lobs_drv.h:208
uint32_t pin04_di
Definition: hpm_lobs_drv.h:195
uint32_t pin02_di
Definition: hpm_lobs_drv.h:189
uint32_t pin13_do
Definition: hpm_lobs_drv.h:221
uint32_t pin03_di
Definition: hpm_lobs_drv.h:192
uint8_t cnt_M
Definition: hpm_lobs_drv.h:176
uint32_t pin20_di
Definition: hpm_lobs_drv.h:244
uint32_t pin12_do
Definition: hpm_lobs_drv.h:218
uint32_t pin30_do
Definition: hpm_lobs_drv.h:273
uint32_t pin14_do
Definition: hpm_lobs_drv.h:224
uint32_t pin02_oe
Definition: hpm_lobs_drv.h:188
two group mode config structure
Definition: hpm_lobs_drv.h:147
bool group_enable
Definition: hpm_lobs_drv.h:148
lobs_signal_group_t sig_group_num
Definition: hpm_lobs_drv.h:149