HPM SDK
HPMicro Software Development Kit
hpm_ppi_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_PPI_DRV_H
9 #define HPM_PPI_DRV_H
10 
11 #include "hpm_common.h"
12 #include "hpm_soc_ip_feature.h"
13 #include "hpm_ppi_regs.h"
14 
26 typedef enum {
35 typedef enum {
44 typedef enum {
53 typedef enum {
62 typedef enum {
71 typedef enum {
79 typedef enum {
89 typedef enum {
100 typedef enum {
109 typedef enum {
118 typedef struct {
119  uint8_t cycle_num;
120  uint8_t high_num;
121  uint8_t low_num;
123  bool revert;
130 typedef struct {
132  uint16_t addr_start_high_12bits; /* address space: 0xF8000000 ~ 0xFFFFFFFF */
133  uint16_t addr_end_high_12bits; /* address space: 0xF8000000 ~ 0xFFFFFFFF */
134  uint16_t addr_mask;
136  uint8_t sync_clk_sel;
137  uint8_t interval_cycle;
138  uint8_t rcmd_start0;
139  uint8_t rcmd_end0;
140  uint8_t rcmd_start1;
141  uint8_t rcmd_end1;
142  uint8_t wcmd_start0;
143  uint8_t wcmd_end0;
144  uint8_t wcmd_start1;
145  uint8_t wcmd_end1;
146 #if defined(HPM_IP_FEATURE_PPI_DM_POLARITY_EACH_CS) && HPM_IP_FEATURE_PPI_DM_POLARITY_EACH_CS
147  ppi_dm_valid_polarity_t dm_polarity;
148 #endif
155 typedef struct {
158  uint8_t cmd_cycle;
159  ppi_ad_func_t ad_func_sel[4];
160  ppi_ad_pin_dir_t ad_pin_dir[4];
161  ppi_byte_sel_t byte_sel[4];
162  bool ctrl_pin_value[8];
165 #ifdef __cplusplus
166 extern "C" {
167 #endif
168 
175 static inline void ppi_set_reset(PPI_Type *ppi, bool reset)
176 {
177  if (reset) {
179  } else {
181  }
182 }
183 
191 static inline void ppi_config_cs_pin_polarity(PPI_Type *ppi, uint8_t index, ppi_cs_idle_polarity_t pol)
192 {
193  assert(index < 4);
194  ppi->PAD_CFG = (ppi->PAD_CFG & ~(((1u << PPI_PAD_CFG_CS_IDLE_ST_SHIFT) << index))) | (((pol << PPI_PAD_CFG_CS_IDLE_ST_SHIFT) << index));
195 }
196 
204 static inline void ppi_config_dm_pin_polarity(PPI_Type *ppi, uint8_t index, ppi_dm_valid_polarity_t pol)
205 {
206 #if defined(HPM_IP_FEATURE_PPI_DM_POLARITY_EACH_CS) && HPM_IP_FEATURE_PPI_DM_POLARITY_EACH_CS
207  assert(index < 4);
208  ppi->CS[index].CFG2 = (ppi->CS[index].CFG2 & ~PPI_CS_CFG2_DM_POLARITY_MASK) | PPI_CS_CFG2_DM_POLARITY_SET(pol);
209 #else
210  (void)index;
211  if (pol == ppi_dm_valid_pol_high) {
213  } else {
215  }
216 #endif
217 }
218 
228 static inline void ppi_config_ctrl_pin_polarity(PPI_Type *ppi, uint8_t index, ppi_ctrl_polarity_t pol)
229 {
230  assert(index < 8);
231  ppi->PAD_CFG = (ppi->PAD_CFG & ~(((1u << PPI_PAD_CFG_CTRL_PAD_POL_SHIFT) << index))) | (((pol << PPI_PAD_CFG_CTRL_PAD_POL_SHIFT) << index));
232 }
233 
241 static inline void ppi_set_ctrl_pin_dir(PPI_Type *ppi, uint8_t index, ppi_ctrl_pin_dir_t dir)
242 {
243  assert(index < 8);
244  ppi->PAD_CFG = (ppi->PAD_CFG & ~(((1u << PPI_PAD_CFG_CTRL_PAD_OE_SHIFT) << index))) | (((dir << PPI_PAD_CFG_CTRL_PAD_OE_SHIFT) << index));
245 }
246 
254 static inline void ppi_config_timeout(PPI_Type *ppi, uint16_t timeout_cnt, bool enable)
255 {
256  ppi->TM_CFG = PPI_TM_CFG_TM_CFG_SET(timeout_cnt) | PPI_TM_CFG_TM_EN_SET(enable);
257 }
258 
265 static inline void ppi_set_irq_enable(PPI_Type *ppi, uint32_t mask)
266 {
267  ppi->IRQ_EN |= mask;
268 }
269 
276 static inline void ppi_set_irq_disable(PPI_Type *ppi, uint32_t mask)
277 {
278  ppi->IRQ_EN &= ~mask;
279 }
280 
287 static inline uint32_t ppi_get_irq_enable_status(PPI_Type *ppi)
288 {
289  return ppi->IRQ_EN;
290 }
291 
298 static inline uint32_t ppi_get_irq_status(PPI_Type *ppi)
299 {
300  return ppi->IRQ_STS;
301 }
302 
309 static inline void ppi_clear_irq_flag(PPI_Type *ppi, uint32_t mask)
310 {
311  ppi->IRQ_STS = mask;
312 }
313 
319 static inline void ppi_set_clk_pin_enable(PPI_Type *ppi)
320 {
322 }
323 
329 static inline void ppi_set_clk_pin_disable(PPI_Type *ppi)
330 {
332 }
333 
341 
349 void ppi_config_cs_pin(PPI_Type *ppi, uint8_t index, ppi_cs_pin_config_t *config);
350 
358 void ppi_config_cmd(PPI_Type *ppi, uint8_t index, ppi_cmd_config_t *config);
359 
367 uint32_t ppi_ns2cycle(uint32_t freq_in_hz, uint32_t ns);
368 
369 #ifdef __cplusplus
370 }
371 #endif
375 #endif /* HPM_PPI_DRV_H */
static void reset(hpm_panel_t *panel)
Definition: cc10128007.c:74
ppi_clk_output_mode_t
clock pin output mode
Definition: hpm_ppi_drv.h:62
ppi_dm_valid_polarity_t
dm pin valid polarity
Definition: hpm_ppi_drv.h:35
static void ppi_config_dm_pin_polarity(PPI_Type *ppi, uint8_t index, ppi_dm_valid_polarity_t pol)
config dm pin work polarity
Definition: hpm_ppi_drv.h:204
static void ppi_config_ctrl_pin_polarity(PPI_Type *ppi, uint8_t index, ppi_ctrl_polarity_t pol)
config ctrl pin work polarity, output and input ctrl pin polarity has different meaning
Definition: hpm_ppi_drv.h:228
ppi_port_size_t
port size
Definition: hpm_ppi_drv.h:79
uint32_t ppi_ns2cycle(uint32_t freq_in_hz, uint32_t ns)
convert ns to cycle
Definition: hpm_ppi_drv.c:105
static void ppi_set_clk_pin_enable(PPI_Type *ppi)
set clk pin enable
Definition: hpm_ppi_drv.h:319
static void ppi_clear_irq_flag(PPI_Type *ppi, uint32_t mask)
clear irq flag
Definition: hpm_ppi_drv.h:309
static uint32_t ppi_get_irq_enable_status(PPI_Type *ppi)
get irq enable status
Definition: hpm_ppi_drv.h:287
static void ppi_set_irq_disable(PPI_Type *ppi, uint32_t mask)
set irq disable
Definition: hpm_ppi_drv.h:276
ppi_cs_idle_polarity_t
cs pin idle polarity
Definition: hpm_ppi_drv.h:26
void ppi_config_cs_pin(PPI_Type *ppi, uint8_t index, ppi_cs_pin_config_t *config)
config cs pin
Definition: hpm_ppi_drv.c:24
static void ppi_config_cs_pin_polarity(PPI_Type *ppi, uint8_t index, ppi_cs_idle_polarity_t pol)
config cs pin work valid polarity
Definition: hpm_ppi_drv.h:191
static void ppi_set_clk_pin_disable(PPI_Type *ppi)
set clk pin disable
Definition: hpm_ppi_drv.h:329
void ppi_config_cmd(PPI_Type *ppi, uint8_t index, ppi_cmd_config_t *config)
config cmd
Definition: hpm_ppi_drv.c:69
ppi_irq_mask_t
irq mask
Definition: hpm_ppi_drv.h:71
ppi_ctrl_pin_dir_t
ctrl pin direction
Definition: hpm_ppi_drv.h:53
ppi_ad_pin_dir_t
cmd address and data pins direction
Definition: hpm_ppi_drv.h:109
void ppi_config_clk_pin(PPI_Type *ppi, ppi_clk_pin_config_t *config)
config clock pin output
Definition: hpm_ppi_drv.c:10
ppi_byte_sel_t
cmd byte select
Definition: hpm_ppi_drv.h:89
ppi_ad_func_t
cmd address and data function
Definition: hpm_ppi_drv.h:100
static void ppi_set_irq_enable(PPI_Type *ppi, uint32_t mask)
set irq enable
Definition: hpm_ppi_drv.h:265
static void ppi_set_reset(PPI_Type *ppi, bool reset)
set ppi software reset
Definition: hpm_ppi_drv.h:175
static void ppi_config_timeout(PPI_Type *ppi, uint16_t timeout_cnt, bool enable)
config timeout
Definition: hpm_ppi_drv.h:254
static uint32_t ppi_get_irq_status(PPI_Type *ppi)
get irq status
Definition: hpm_ppi_drv.h:298
ppi_ctrl_polarity_t
ctrl pin polarity
Definition: hpm_ppi_drv.h:44
static void ppi_set_ctrl_pin_dir(PPI_Type *ppi, uint8_t index, ppi_ctrl_pin_dir_t dir)
set ctrl pin direction
Definition: hpm_ppi_drv.h:241
@ ppi_clk_always_output
Definition: hpm_ppi_drv.h:64
@ ppi_clk_output_by_cmd_clk_output
Definition: hpm_ppi_drv.h:63
@ ppi_dm_valid_pol_high
Definition: hpm_ppi_drv.h:36
@ ppi_dm_valid_pol_low
Definition: hpm_ppi_drv.h:37
@ ppi_port_size_16bits
Definition: hpm_ppi_drv.h:81
@ ppi_port_size_32bits
Definition: hpm_ppi_drv.h:82
@ ppi_port_size_8bits
Definition: hpm_ppi_drv.h:80
@ ppi_cs_idle_pol_high
Definition: hpm_ppi_drv.h:28
@ ppi_cs_idle_pol_low
Definition: hpm_ppi_drv.h:27
@ ppi_irq_tm_out_mask
Definition: hpm_ppi_drv.h:72
@ ppi_ctrl_pin_dir_input
Definition: hpm_ppi_drv.h:54
@ ppi_ctrl_pin_dir_output
Definition: hpm_ppi_drv.h:55
@ ppi_ad_pin_dir_output
Definition: hpm_ppi_drv.h:110
@ ppi_ad_pin_dir_input
Definition: hpm_ppi_drv.h:111
@ ppi_byte_sel_16_23_bits
Definition: hpm_ppi_drv.h:92
@ ppi_byte_sel_0_7_bits
Definition: hpm_ppi_drv.h:90
@ ppi_byte_sel_8_15_bits
Definition: hpm_ppi_drv.h:91
@ ppi_byte_sel_24_31_bits
Definition: hpm_ppi_drv.h:93
@ ppi_ad_func_data
Definition: hpm_ppi_drv.h:101
@ ppi_ad_func_addr
Definition: hpm_ppi_drv.h:102
@ ppi_ctrl_pol_high
Definition: hpm_ppi_drv.h:46
@ ppi_ctrl_pol_low
Definition: hpm_ppi_drv.h:45
#define PPI_CLKPIN_CFG_EN_MASK
Definition: hpm_ppi_regs.h:169
#define PPI_PAD_CFG_CS_IDLE_ST_SHIFT
Definition: hpm_ppi_regs.h:69
#define PPI_IRQ_EN_IRQ_TMOUT_EN_MASK
Definition: hpm_ppi_regs.h:213
#define PPI_TM_CFG_TM_CFG_SET(x)
Definition: hpm_ppi_regs.h:193
#define PPI_TM_CFG_TM_EN_SET(x)
Definition: hpm_ppi_regs.h:183
#define PPI_GLB_CFG_SOFT_RESET_MASK
Definition: hpm_ppi_regs.h:57
#define PPI_PAD_CFG_CTRL_PAD_POL_SHIFT
Definition: hpm_ppi_regs.h:104
#define PPI_PAD_CFG_DM_PAD_POL_MASK
Definition: hpm_ppi_regs.h:78
#define PPI_PAD_CFG_CTRL_PAD_OE_SHIFT
Definition: hpm_ppi_regs.h:90
Definition: hpm_ppi_regs.h:12
__RW uint32_t CLKPIN_CFG
Definition: hpm_ppi_regs.h:16
struct PPI_Type::@690 CS[4]
__RW uint32_t IRQ_STS
Definition: hpm_ppi_regs.h:19
__RW uint32_t IRQ_EN
Definition: hpm_ppi_regs.h:20
__RW uint32_t GLB_CFG
Definition: hpm_ppi_regs.h:13
__RW uint32_t CFG2
Definition: hpm_ppi_regs.h:25
__RW uint32_t PAD_CFG
Definition: hpm_ppi_regs.h:14
__RW uint32_t TM_CFG
Definition: hpm_ppi_regs.h:17
clock pin config structure
Definition: hpm_ppi_drv.h:118
bool revert
Definition: hpm_ppi_drv.h:123
uint8_t high_num
Definition: hpm_ppi_drv.h:120
uint8_t cycle_num
Definition: hpm_ppi_drv.h:119
ppi_clk_output_mode_t mode
Definition: hpm_ppi_drv.h:122
uint8_t low_num
Definition: hpm_ppi_drv.h:121
cmd config structure
Definition: hpm_ppi_drv.h:155
bool clk_output
Definition: hpm_ppi_drv.h:157
bool cs_pin_value
Definition: hpm_ppi_drv.h:156
uint8_t cmd_cycle
Definition: hpm_ppi_drv.h:158
cs pin config structure
Definition: hpm_ppi_drv.h:130
uint8_t wcmd_end1
Definition: hpm_ppi_drv.h:145
uint16_t addr_mask
Definition: hpm_ppi_drv.h:134
uint8_t rcmd_start1
Definition: hpm_ppi_drv.h:140
bool sync_clk_en
Definition: hpm_ppi_drv.h:135
uint8_t rcmd_start0
Definition: hpm_ppi_drv.h:138
uint16_t addr_end_high_12bits
Definition: hpm_ppi_drv.h:133
uint8_t wcmd_end0
Definition: hpm_ppi_drv.h:143
uint8_t wcmd_start1
Definition: hpm_ppi_drv.h:144
uint8_t interval_cycle
Definition: hpm_ppi_drv.h:137
uint16_t addr_start_high_12bits
Definition: hpm_ppi_drv.h:132
uint8_t rcmd_end0
Definition: hpm_ppi_drv.h:139
uint8_t rcmd_end1
Definition: hpm_ppi_drv.h:141
uint8_t wcmd_start0
Definition: hpm_ppi_drv.h:142
ppi_port_size_t port_size
Definition: hpm_ppi_drv.h:131
uint8_t sync_clk_sel
Definition: hpm_ppi_drv.h:136