HPM SDK
HPMicro Software Development Kit
hpm_lin_clock_detection.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_QEI_ENCODER_H
9 #define _HPM_QEI_ENCODER_H
10 
11 #include "hpm_soc_feature.h"
12 #include "hpm_plb_drv.h"
13 #include "hpm_trgm_drv.h"
14 #ifdef HPMSOC_HAS_HPMSDK_DMAV2
15 #include "hpm_dmav2_drv.h"
16 #else
17 #include "hpm_dma_drv.h"
18 #endif
19 #include "hpm_dmamux_drv.h"
20 #include <math.h>
21 
26 typedef struct {
27  uint32_t lin_max_freq;
28  uint32_t *dma_buffer;
29  uint32_t dma_buffer_addr;
30  uint32_t *run_buffer;
31  uint16_t run_buffer_len;
32  uint32_t freq;
33  uint16_t filter_length;
34  float clock_error;
35  struct {
38  uint8_t plb_type_b_chn;
40 #ifdef HPMSOC_HAS_HPMSDK_DMAV2
41  DMAV2_Type *dma;
42 #else
44 #endif
45  uint8_t dma_chn;
46  uint16_t trgmux_pin;
49  } device;
50  void (*call_back)(uint32_t clk_hz);
51  struct {
52  uint16_t index_save;
53  uint16_t index_read;
55  uint32_t threshold;
56  int32_t freq_hz;
57  uint32_t start_buf[3];
58  } run_data;
59 
61 
62 #if defined(__cplusplus)
63 extern "C" {
64 #endif /* __cplusplus */
65 
72 
80 
90 {
91  if (cfg->run_data.freq_hz == -1) {
92  return false;
93  } else {
94  return true;
95  }
96 }
97 
107 {
108  uint32_t clock;
109 
110  clock = cfg->run_data.freq_hz;
111  cfg->run_data.freq_hz = -1;
112 
113  return clock;
114 }
115 
116 #if defined(__cplusplus)
117 }
118 #endif /* __cplusplus */
119 
120 #endif
uint32_t hpm_stat_t
Definition: hpm_common.h:126
static bool plb_lin_clock_get_detection_status(plb_lin_clock_t *cfg)
get detection status
Definition: hpm_lin_clock_detection.h:89
void plb_lin_dma_isr_function(plb_lin_clock_t *cfg)
plb lin clock detection isr function
Definition: hpm_lin_clock_detection.c:201
hpm_stat_t plb_lin_clock_detection_init(plb_lin_clock_t *cfg)
plb lin clock detection init
Definition: hpm_lin_clock_detection.c:13
static uint32_t plb_lin_clock_get_detection_freq(plb_lin_clock_t *cfg)
get detection freq
Definition: hpm_lin_clock_detection.h:106
Definition: hpm_dmamux_regs.h:12
Definition: hpm_dmav2_regs.h:12
Definition: hpm_dma_regs.h:12
Definition: hpm_plb_regs.h:12
Definition: hpm_trgm_regs.h:12
LIN clock detection.
Definition: hpm_lin_clock_detection.h:26
uint32_t * run_buffer
Definition: hpm_lin_clock_detection.h:30
uint32_t freq
Definition: hpm_lin_clock_detection.h:32
uint8_t plb_type_b_chn
Definition: hpm_lin_clock_detection.h:38
uint32_t lin_max_freq
Definition: hpm_lin_clock_detection.h:27
TRGM_Type * trgm
Definition: hpm_lin_clock_detection.h:37
int32_t freq_hz
Definition: hpm_lin_clock_detection.h:56
uint8_t dma_chn
Definition: hpm_lin_clock_detection.h:45
uint16_t index_save
Definition: hpm_lin_clock_detection.h:52
struct plb_lin_clock_t::@846 run_data
uint16_t trgm_dma_dst_index
Definition: hpm_lin_clock_detection.h:48
uint32_t threshold
Definition: hpm_lin_clock_detection.h:55
uint16_t trgmux_pin
Definition: hpm_lin_clock_detection.h:46
uint16_t run_buffer_len_half
Definition: hpm_lin_clock_detection.h:54
DMAMUX_Type * dma_mux
Definition: hpm_lin_clock_detection.h:39
uint32_t * dma_buffer
Definition: hpm_lin_clock_detection.h:28
uint16_t filter_length
Definition: hpm_lin_clock_detection.h:33
uint16_t run_buffer_len
Definition: hpm_lin_clock_detection.h:31
DMA_Type * dma
Definition: hpm_lin_clock_detection.h:43
PLB_Type * plb
Definition: hpm_lin_clock_detection.h:36
uint32_t dma_buffer_addr
Definition: hpm_lin_clock_detection.h:29
float clock_error
Definition: hpm_lin_clock_detection.h:34
uint16_t trgm_dma_src_index
Definition: hpm_lin_clock_detection.h:47
uint16_t index_read
Definition: hpm_lin_clock_detection.h:53