HPM SDK
HPMicro Software Development Kit
hpm_eui_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_EUI_DRV_H
9 #define HPM_EUI_DRV_H
10 
11 #include "hpm_common.h"
12 #include "hpm_soc_ip_feature.h"
13 #include "hpm_eui_regs.h"
14 
26 typedef enum {
35 typedef enum {
46 typedef enum {
57 typedef enum {
72 typedef enum {
78 } eui_time_id_t;
84 typedef enum {
85  eui_irq_area_mask = EUI_IRQ_EN_IRQ_AREA_EN_MASK,
86  eui_irq_single_mask = EUI_IRQ_EN_IRQ_SINGLE_EN_MASK,
93 typedef enum {
108 typedef struct {
111  uint16_t clko_freq_khz;
112  uint8_t hold_tm_cnt;
113  uint16_t key_filter_ms;
114  bool di_invert;
115  bool do_invert;
117  bool sh_invert;
118  uint16_t disp_data_invert; /* set by bit */
119  uint8_t scan_invert; /* set by bit */
121  uint16_t dedicate_in_cfg; /* set by bit */
128 typedef struct {
129  uint16_t disp_a_time_ms;
130  uint16_t disp_b_time_ms;
131  uint8_t ab_loop_cnt;
139 typedef union {
140  uint8_t data_8x8[8];
141  uint16_t data_16x4[4];
142  uint8_t data_u8[8];
143  uint32_t data_u32[2];
146 #ifdef __cplusplus
147 extern "C" {
148 #endif
149 
156 static inline void eui_set_enable(EUI_Type *eui, bool enable)
157 {
158  eui->CTRL = (eui->CTRL & ~EUI_CTRL_ENABLE_MASK) | EUI_CTRL_ENABLE_SET(enable);
159 }
160 
167 static inline void eui_set_work_mode(EUI_Type *eui, eui_work_mode_t mode)
168 {
169  eui->CTRL = (eui->CTRL & ~EUI_CTRL_DISP_MODE_MASK) | EUI_CTRL_DISP_MODE_SET(mode);
170 }
171 
179 static inline eui_work_mode_t eui_get_work_mode(EUI_Type *eui)
180 {
181  return (eui_work_mode_t)EUI_CTRL_DISP_MODE_GET(eui->CTRL);
182 }
183 
189 static inline void eui_clear_output_data(EUI_Type *eui)
190 {
191  eui->CTRL |= EUI_CTRL_CLR_OUTPUT_MASK;
192 }
193 
199 static inline void eui_clear_intput_data(EUI_Type *eui)
200 {
201  eui->CTRL |= EUI_CTRL_CLR_DATA_IN_MASK;
202 }
203 
211 static inline void eui_set_data_polarity(EUI_Type *eui, uint16_t disp_data_invert, uint8_t scan_invert)
212 {
213  eui->POL_CFG = (eui->POL_CFG & ~EUI_POL_CFG_DATA_POL_MASK) | EUI_POL_CFG_DATA_POL_SET((disp_data_invert << 8) | scan_invert);
214 }
215 
222 static inline void eui_set_dedicate_disp_data(EUI_Type *eui, uint32_t data)
223 {
224  eui->OUT_CFG = (eui->OUT_CFG & ~EUI_OUT_CFG_DO_VAL_MASK) | EUI_OUT_CFG_DO_VAL_SET(data);
225 }
226 
234 static inline uint16_t eui_get_dedicate_input_data(EUI_Type *eui)
235 {
236  return EUI_IN_CFG_DI_VAL_GET(eui->IN_CFG);
237 }
238 
245 static inline void eui_set_irq_enable(EUI_Type *eui, uint32_t mask)
246 {
247  eui->IRQ_EN |= mask;
248 }
249 
256 static inline void eui_set_irq_disable(EUI_Type *eui, uint32_t mask)
257 {
258  eui->IRQ_EN &= ~mask;
259 }
260 
267 static inline uint32_t eui_get_irq_enable_status(EUI_Type *eui)
268 {
269  return eui->IRQ_EN;
270 }
271 
278 static inline uint32_t eui_get_irq_status(EUI_Type *eui)
279 {
280  return eui->IRQ_STS;
281 }
282 
289 static inline void eui_clear_irq_flag(EUI_Type *eui, uint32_t mask)
290 {
291  eui->IRQ_STS = mask;
292 }
293 
300 void eui_get_default_ctrl_config(EUI_Type *eui, eui_ctrl_config_t *config);
301 
309 void eui_config_ctrl(EUI_Type *eui, uint32_t eui_clk_freq, eui_ctrl_config_t *config);
310 
319 void eui_config_disp(EUI_Type *eui, uint32_t eui_clk_freq, eui_disp_ctrl_idx_t idx, eui_disp_config_t *config);
320 
328 void eui_set_scan_disp_data(EUI_Type *eui, eui_disp_data_idx_t idx, eui_scan_disp_data_t *data);
329 
338 void eui_get_scan_disp_data(EUI_Type *eui, eui_disp_data_idx_t idx, uint32_t *data0, uint32_t *data1);
339 
348 uint16_t eui_get_scan_key_by_row(EUI_Type *eui, uint8_t row);
349 
359 bool eui_get_scan_key_by_row_col(EUI_Type *eui, uint8_t row, uint8_t col);
360 
368 uint32_t eui_get_time(EUI_Type *eui, uint32_t eui_clk_freq, eui_time_id_t id);
369 
370 
371 #ifdef __cplusplus
372 }
373 #endif
377 #endif /* HPM_EUI_DRV_H */
void eui_set_scan_disp_data(EUI_Type *eui, eui_disp_data_idx_t idx, eui_scan_disp_data_t *data)
set eui scan disp data
Definition: hpm_eui_drv.c:114
uint16_t eui_get_scan_key_by_row(EUI_Type *eui, uint8_t row)
get eui scan key value by row
Definition: hpm_eui_drv.c:194
eui_dedicate_output_lines_t
Number of dedicated output lines.
Definition: hpm_eui_drv.h:93
static void eui_clear_irq_flag(EUI_Type *eui, uint32_t mask)
clear irq flag
Definition: hpm_eui_drv.h:289
void eui_config_ctrl(EUI_Type *eui, uint32_t eui_clk_freq, eui_ctrl_config_t *config)
config control structure
Definition: hpm_eui_drv.c:30
static uint32_t eui_get_irq_enable_status(EUI_Type *eui)
get irq enable status
Definition: hpm_eui_drv.h:267
static uint16_t eui_get_dedicate_input_data(EUI_Type *eui)
get dedicate input data
Definition: hpm_eui_drv.h:234
eui_b_disp_format_t
eui b disp date format
Definition: hpm_eui_drv.h:46
eui_disp_data_idx_t
eui disp data index
Definition: hpm_eui_drv.h:57
static void eui_set_irq_disable(EUI_Type *eui, uint32_t mask)
set irq disable
Definition: hpm_eui_drv.h:256
eui_disp_ctrl_idx_t
eui disp control index
Definition: hpm_eui_drv.h:35
static void eui_clear_intput_data(EUI_Type *eui)
clear input data
Definition: hpm_eui_drv.h:199
static uint32_t eui_get_irq_status(EUI_Type *eui)
get irq status
Definition: hpm_eui_drv.h:278
static void eui_set_enable(EUI_Type *eui, bool enable)
set enable
Definition: hpm_eui_drv.h:156
void eui_get_default_ctrl_config(EUI_Type *eui, eui_ctrl_config_t *config)
get default control config structure
Definition: hpm_eui_drv.c:11
static void eui_set_work_mode(EUI_Type *eui, eui_work_mode_t mode)
set work mode
Definition: hpm_eui_drv.h:167
static void eui_set_data_polarity(EUI_Type *eui, uint16_t disp_data_invert, uint8_t scan_invert)
set data polarity and scan polarity
Definition: hpm_eui_drv.h:211
bool eui_get_scan_key_by_row_col(EUI_Type *eui, uint8_t row, uint8_t col)
get eui scan key value by row and column
Definition: hpm_eui_drv.c:231
void eui_config_disp(EUI_Type *eui, uint32_t eui_clk_freq, eui_disp_ctrl_idx_t idx, eui_disp_config_t *config)
config disp structure
Definition: hpm_eui_drv.c:65
uint32_t eui_get_time(EUI_Type *eui, uint32_t eui_clk_freq, eui_time_id_t id)
get time value, unit: us
Definition: hpm_eui_drv.c:241
static eui_work_mode_t eui_get_work_mode(EUI_Type *eui)
get work mode
Definition: hpm_eui_drv.h:179
static void eui_clear_output_data(EUI_Type *eui)
clear output data
Definition: hpm_eui_drv.h:189
eui_irq_mask_t
irq mask
Definition: hpm_eui_drv.h:84
static void eui_set_irq_enable(EUI_Type *eui, uint32_t mask)
set irq enable
Definition: hpm_eui_drv.h:245
void eui_get_scan_disp_data(EUI_Type *eui, eui_disp_data_idx_t idx, uint32_t *data0, uint32_t *data1)
set eui scan disp data
Definition: hpm_eui_drv.c:154
eui_work_mode_t
eui work mode selection
Definition: hpm_eui_drv.h:26
static void eui_set_dedicate_disp_data(EUI_Type *eui, uint32_t data)
set dedicate disp data
Definition: hpm_eui_drv.h:222
eui_time_id_t
eui time id
Definition: hpm_eui_drv.h:72
@ eui_dedicate_output_3_lines
Definition: hpm_eui_drv.h:97
@ eui_dedicate_output_5_lines
Definition: hpm_eui_drv.h:99
@ eui_dedicate_output_6_lines
Definition: hpm_eui_drv.h:100
@ eui_dedicate_output_4_lines
Definition: hpm_eui_drv.h:98
@ eui_dedicate_output_0_line
Definition: hpm_eui_drv.h:94
@ eui_dedicate_output_24_lines
Definition: hpm_eui_drv.h:101
@ eui_dedicate_output_1_line
Definition: hpm_eui_drv.h:95
@ eui_dedicate_output_2_lines
Definition: hpm_eui_drv.h:96
@ eui_b_disp_a_or_b
Definition: hpm_eui_drv.h:49
@ eui_b_disp_a_xor_b
Definition: hpm_eui_drv.h:50
@ eui_b_disp_b
Definition: hpm_eui_drv.h:47
@ eui_b_disp_a_and_b
Definition: hpm_eui_drv.h:48
@ eui_disp_data_idx_f
Definition: hpm_eui_drv.h:63
@ eui_disp_data_idx_h
Definition: hpm_eui_drv.h:65
@ eui_disp_data_idx_d
Definition: hpm_eui_drv.h:61
@ eui_disp_data_idx_g
Definition: hpm_eui_drv.h:64
@ eui_disp_data_idx_b
Definition: hpm_eui_drv.h:59
@ eui_disp_data_idx_a
Definition: hpm_eui_drv.h:58
@ eui_disp_data_idx_e
Definition: hpm_eui_drv.h:62
@ eui_disp_data_idx_c
Definition: hpm_eui_drv.h:60
@ eui_disp_ctrl_idx_ef
Definition: hpm_eui_drv.h:38
@ eui_disp_ctrl_idx_ab
Definition: hpm_eui_drv.h:36
@ eui_disp_ctrl_idx_gh
Definition: hpm_eui_drv.h:39
@ eui_disp_ctrl_idx_cd
Definition: hpm_eui_drv.h:37
@ eui_irq_area_mask
Definition: hpm_eui_drv.h:85
@ eui_irq_single_mask
Definition: hpm_eui_drv.h:86
@ eui_work_mode_16x4
Definition: hpm_eui_drv.h:28
@ eui_work_mode_8x8
Definition: hpm_eui_drv.h:27
@ eui_clko_time
Definition: hpm_eui_drv.h:73
@ eui_disp_time
Definition: hpm_eui_drv.h:76
@ eui_filter_time
Definition: hpm_eui_drv.h:77
@ eui_hold_time
Definition: hpm_eui_drv.h:75
@ eui_slot_time
Definition: hpm_eui_drv.h:74
eui ctrl config structure
Definition: hpm_eui_drv.h:108
eui_work_mode_t work_mode
Definition: hpm_eui_drv.h:109
uint8_t hold_tm_cnt
Definition: hpm_eui_drv.h:112
uint16_t key_filter_ms
Definition: hpm_eui_drv.h:113
uint16_t disp_data_invert
Definition: hpm_eui_drv.h:118
uint16_t dedicate_in_cfg
Definition: hpm_eui_drv.h:121
eui_dedicate_output_lines_t dedicate_out_cfg
Definition: hpm_eui_drv.h:120
bool clk_invert
Definition: hpm_eui_drv.h:116
uint8_t scan_invert
Definition: hpm_eui_drv.h:119
bool do_invert
Definition: hpm_eui_drv.h:115
bool sh_invert
Definition: hpm_eui_drv.h:117
bool di_invert
Definition: hpm_eui_drv.h:114
uint16_t clko_freq_khz
Definition: hpm_eui_drv.h:111
bool colum_loop_mode
Definition: hpm_eui_drv.h:110
eui disp config structure
Definition: hpm_eui_drv.h:128
uint16_t disp_a_time_ms
Definition: hpm_eui_drv.h:129
uint8_t ab_loop_cnt
Definition: hpm_eui_drv.h:131
eui_b_disp_format_t b_data_format
Definition: hpm_eui_drv.h:132
uint16_t disp_b_time_ms
Definition: hpm_eui_drv.h:130
eui scan disp data structure
Definition: hpm_eui_drv.h:139