HPM SDK
HPMicro Software Development Kit
hpm_trgm_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_TRGM_DRV_H
9 #define HPM_TRGM_DRV_H
10 
11 #include "hpm_common.h"
12 #include "hpm_trgm_regs.h"
13 #include "hpm_trgmmux_src.h"
14 
25 typedef enum trgm_filter_mode {
32 
36 typedef enum trgm_output_type {
43 
47 typedef struct trgm_input_filter {
48  bool invert;
49  bool sync;
50  uint32_t filter_length;
53 
57 typedef struct trgm_output {
58  bool invert;
60  uint8_t input;
62 
63 #ifdef __cplusplus
64 extern "C" {
65 #endif
66 
73 static inline void trgm_enable_io_output(TRGM_Type *ptr, uint32_t mask)
74 {
75  ptr->GCR |= mask;
76 }
77 
84 static inline void trgm_disable_io_output(TRGM_Type *ptr, uint32_t mask)
85 {
86  ptr->GCR &= ~mask;
87 }
88 
96 static inline void trgm_input_filter_set_filter_length(TRGM_Type *ptr, uint8_t input, uint32_t length)
97 {
98 #if defined(TRGM_SOC_HAS_FILTER_SHIFT) && TRGM_SOC_HAS_FILTER_SHIFT
99  uint32_t len = length;
100  uint8_t shift;
101  for (shift = 0; shift <= (TRGM_FILTCFG_FILTLEN_SHIFT_MASK >> TRGM_FILTCFG_FILTLEN_SHIFT_SHIFT); shift++) {
102  if (shift > 0) {
103  len >>= 1u;
104  }
106  break;
107  }
108  }
112  }
115 #else
116  ptr->FILTCFG[input] = (ptr->FILTCFG[input] & ~TRGM_FILTCFG_FILTLEN_MASK)
117  | TRGM_FILTCFG_FILTLEN_SET(length);
118 #endif
119 }
120 
128 static inline void trgm_input_filter_set_filter_shift(TRGM_Type *ptr, uint8_t input, uint8_t shift)
129 {
130 #if defined(TRGM_SOC_HAS_FILTER_SHIFT) && TRGM_SOC_HAS_FILTER_SHIFT
131  ptr->FILTCFG[input] = (ptr->FILTCFG[input] & ~TRGM_FILTCFG_FILTLEN_SHIFT_MASK)
133 #else
134  (void) ptr;
135  (void) input;
136  (void) shift;
137 #endif
138 }
139 
146 static inline void trgm_input_filter_enable_sync(TRGM_Type *ptr, uint8_t input)
147 {
148  ptr->FILTCFG[input] |= TRGM_FILTCFG_SYNCEN_MASK;
149 }
150 
157 static inline void trgm_input_filter_disable_sync(TRGM_Type *ptr, uint8_t input)
158 {
159  ptr->FILTCFG[input] &= ~TRGM_FILTCFG_SYNCEN_MASK;
160 }
161 
169 static inline void trgm_input_filter_set_mode(TRGM_Type *ptr, uint8_t input, trgm_filter_mode_t mode)
170 {
171  ptr->FILTCFG[input] = (ptr->FILTCFG[input] & ~TRGM_FILTCFG_MODE_MASK)
172  | TRGM_FILTCFG_MODE_SET(mode);
173 }
174 
182 static inline void trgm_input_filter_invert(TRGM_Type *ptr, uint8_t input, bool invert)
183 {
184  ptr->FILTCFG[input] = (ptr->FILTCFG[input] & ~TRGM_FILTCFG_OUTINV_MASK)
185  | TRGM_FILTCFG_OUTINV_SET(invert);
186 }
187 
195 static inline void trgm_input_filter_config(TRGM_Type *ptr, uint8_t input, trgm_input_filter_t *filter)
196 {
197  ptr->FILTCFG[input] = TRGM_FILTCFG_OUTINV_SET(filter->invert)
198  | TRGM_FILTCFG_MODE_SET(filter->mode)
199  | TRGM_FILTCFG_SYNCEN_SET(filter->sync);
201 }
202 
210 static inline void trgm_output_update_source(TRGM_Type *ptr, uint8_t output, uint8_t source)
211 {
212  ptr->TRGOCFG[output] = (ptr->TRGOCFG[output] & ~TRGM_TRGOCFG_TRIGOSEL_MASK)
213  | TRGM_TRGOCFG_TRIGOSEL_SET(source);
214 }
215 
223 static inline void trgm_output_config(TRGM_Type *ptr, uint8_t output, trgm_output_t *config)
224 {
225  ptr->TRGOCFG[output] = TRGM_TRGOCFG_TRIGOSEL_SET(config->input)
226  | (config->type & TRGM_TRGOCFG_FEDG2PEN_MASK)
227  | (config->type & TRGM_TRGOCFG_REDG2PEN_MASK)
228  | TRGM_TRGOCFG_OUTINV_SET(config->invert);
229 }
230 
238 static inline void trgm_dma_request_config(TRGM_Type *ptr, uint8_t dma_out, uint8_t dma_src)
239 {
240 #if defined(TRGM_SOC_HAS_DMAMUX_EN) && TRGM_SOC_HAS_DMAMUX_EN
242 #else
243  ptr->DMACFG[dma_out] = TRGM_DMACFG_DMASRCSEL_SET(dma_src);
244 #endif
245 }
246 
247 #ifdef __cplusplus
248 }
249 #endif
254 #endif /* HPM_TRGM_DRV_H */
255 
256 
#define TRGM_TRGOCFG_OUTINV_SET(x)
Definition: hpm_trgm_regs.h:96
#define TRGM_TRGOCFG_REDG2PEN_MASK
Definition: hpm_trgm_regs.h:114
#define TRGM_TRGOCFG_FEDG2PEN_MASK
Definition: hpm_trgm_regs.h:104
#define TRGM_DMACFG_DMAMUX_EN_MASK
Definition: hpm_trgm_regs.h:134
#define TRGM_FILTCFG_SYNCEN_MASK
Definition: hpm_trgm_regs.h:64
#define TRGM_FILTCFG_OUTINV_MASK
Definition: hpm_trgm_regs.h:39
#define TRGM_FILTCFG_FILTLEN_BASE_SHIFT
Definition: hpm_trgm_regs.h:84
#define TRGM_FILTCFG_MODE_MASK
Definition: hpm_trgm_regs.h:54
#define TRGM_FILTCFG_FILTLEN_BASE_SET(x)
Definition: hpm_trgm_regs.h:85
#define TRGM_FILTCFG_FILTLEN_BASE_MASK
Definition: hpm_trgm_regs.h:83
#define TRGM_TRGOCFG_TRIGOSEL_MASK
Definition: hpm_trgm_regs.h:124
#define TRGM_FILTCFG_OUTINV_SET(x)
Definition: hpm_trgm_regs.h:41
#define TRGM_FILTCFG_SYNCEN_SET(x)
Definition: hpm_trgm_regs.h:66
#define TRGM_FILTCFG_MODE_SET(x)
Definition: hpm_trgm_regs.h:56
#define TRGM_TRGOCFG_TRIGOSEL_SET(x)
Definition: hpm_trgm_regs.h:126
#define TRGM_FILTCFG_FILTLEN_SHIFT_SHIFT
Definition: hpm_trgm_regs.h:74
#define TRGM_DMACFG_DMASRCSEL_SET(x)
Definition: hpm_trgm_regs.h:146
#define TRGM_FILTCFG_FILTLEN_SHIFT_MASK
Definition: hpm_trgm_regs.h:73
#define TRGM_FILTCFG_FILTLEN_SHIFT_SET(x)
Definition: hpm_trgm_regs.h:75
#define TRGM_FILTCFG_FILTLEN_MASK
Definition: hpm_trgm_regs.h:65
#define TRGM_FILTCFG_FILTLEN_SET(x)
Definition: hpm_trgm_regs.h:67
trgm_output_type
Output type.
Definition: hpm_trgm_drv.h:36
static void trgm_input_filter_config(TRGM_Type *ptr, uint8_t input, trgm_input_filter_t *filter)
Configure filter.
Definition: hpm_trgm_drv.h:195
static void trgm_input_filter_set_filter_shift(TRGM_Type *ptr, uint8_t input, uint8_t shift)
Set filter length.
Definition: hpm_trgm_drv.h:128
static void trgm_input_filter_enable_sync(TRGM_Type *ptr, uint8_t input)
Enable sync input with TRGM clock.
Definition: hpm_trgm_drv.h:146
struct trgm_output trgm_output_t
Output configuration.
static void trgm_output_update_source(TRGM_Type *ptr, uint8_t output, uint8_t source)
Update source for TRGM output.
Definition: hpm_trgm_drv.h:210
static void trgm_input_filter_set_mode(TRGM_Type *ptr, uint8_t input, trgm_filter_mode_t mode)
Set filter working mode.
Definition: hpm_trgm_drv.h:169
enum trgm_filter_mode trgm_filter_mode_t
Filter mode.
static void trgm_output_config(TRGM_Type *ptr, uint8_t output, trgm_output_t *config)
Configure output.
Definition: hpm_trgm_drv.h:223
enum trgm_output_type trgm_output_type_t
Output type.
static void trgm_input_filter_set_filter_length(TRGM_Type *ptr, uint8_t input, uint32_t length)
Set filter length.
Definition: hpm_trgm_drv.h:96
static void trgm_input_filter_disable_sync(TRGM_Type *ptr, uint8_t input)
Disable sync input with TRGM clock.
Definition: hpm_trgm_drv.h:157
struct trgm_input_filter trgm_input_filter_t
Input filter configuration.
static void trgm_dma_request_config(TRGM_Type *ptr, uint8_t dma_out, uint8_t dma_src)
Configure DMA request.
Definition: hpm_trgm_drv.h:238
trgm_filter_mode
Filter mode.
Definition: hpm_trgm_drv.h:25
static void trgm_enable_io_output(TRGM_Type *ptr, uint32_t mask)
Enable IO output.
Definition: hpm_trgm_drv.h:73
static void trgm_input_filter_invert(TRGM_Type *ptr, uint8_t input, bool invert)
Invert filter output.
Definition: hpm_trgm_drv.h:182
static void trgm_disable_io_output(TRGM_Type *ptr, uint32_t mask)
Disable IO output.
Definition: hpm_trgm_drv.h:84
@ trgm_output_pulse_at_input_rising_edge
Definition: hpm_trgm_drv.h:39
@ trgm_output_pulse_at_input_falling_edge
Definition: hpm_trgm_drv.h:38
@ trgm_output_pulse_at_input_both_edge
Definition: hpm_trgm_drv.h:40
@ trgm_output_same_as_input
Definition: hpm_trgm_drv.h:37
@ trgm_filter_mode_rapid_change
Definition: hpm_trgm_drv.h:27
@ trgm_filter_mode_delay
Definition: hpm_trgm_drv.h:28
@ trgm_filter_mode_bypass
Definition: hpm_trgm_drv.h:26
@ trgm_filter_mode_stable_high
Definition: hpm_trgm_drv.h:29
@ trgm_filter_mode_stable_low
Definition: hpm_trgm_drv.h:30
Definition: hpm_trgm_regs.h:12
__RW uint32_t TRGOCFG[137]
Definition: hpm_trgm_regs.h:15
__RW uint32_t DMACFG[8]
Definition: hpm_trgm_regs.h:17
__RW uint32_t FILTCFG[28]
Definition: hpm_trgm_regs.h:13
__RW uint32_t GCR
Definition: hpm_trgm_regs.h:19
Input filter configuration.
Definition: hpm_trgm_drv.h:47
trgm_filter_mode_t mode
Definition: hpm_trgm_drv.h:51
bool sync
Definition: hpm_trgm_drv.h:49
bool invert
Definition: hpm_trgm_drv.h:48
uint32_t filter_length
Definition: hpm_trgm_drv.h:50
Output configuration.
Definition: hpm_trgm_drv.h:57
trgm_output_type_t type
Definition: hpm_trgm_drv.h:59
bool invert
Definition: hpm_trgm_drv.h:58
uint8_t input
Definition: hpm_trgm_drv.h:60