HPM SDK
HPMicro Software Development Kit
hpm_dac_drv.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2021-2025 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 #ifndef HPM_DAC_DRV_H
8 #define HPM_DAC_DRV_H
9 
10 #include "hpm_common.h"
11 #include "hpm_dac_regs.h"
12 #include "hpm_soc_feature.h"
13 
21 #define DAC_OUTPUT(PERCENT) (PERCENT / 10000.0f * DAC_SOC_MAX_DATA)
22 
24 #define DAC_AHB_ERROR_EVENT DAC_IRQ_EN_AHB_ERROR_MASK
26 #define DAC_FIFO_EMPTY_EVENT DAC_IRQ_EN_FIFO_EMPTY_MASK
28 #define DAC_BUF1_COMPLETE_EVENT DAC_IRQ_EN_BUF1_CMPT_MASK
30 #define DAC_BUF0_COMPLETE_EVENT DAC_IRQ_EN_BUF0_CMPT_MASK
31 
33 typedef enum {
39 
41 typedef enum {
47 
49 typedef struct {
50  bool sync_mode;
51  uint8_t dac_mode;
52  uint8_t ana_div;
53 } dac_config_t;
54 
56 typedef enum {
60 
62 typedef enum {
66 
68 typedef struct {
69  uint16_t start_point;
70  uint16_t end_point;
71  uint8_t round_mode;
72  uint8_t up_down;
73  uint8_t step_num;
75 
77 typedef enum {
81 
83 typedef enum {
86  dac_burst_incr8 = 5
88 
90 typedef struct {
91  uint32_t start_addr;
92  uint8_t stop;
93  uint16_t len;
94 } dac_buffer_t;
95 
97 typedef struct {
98  uint8_t buf_data_mode;
99  uint8_t burst;
103 
105 typedef struct {
106  uint32_t data0: 12;
107  uint32_t reserved: 4;
108  uint32_t data1: 12;
109  uint32_t reserved1: 4;
111 
112 #ifdef __cplusplus
113 extern "C" {
114 #endif
115 
121 
131 
139 hpm_stat_t dac_set_direct_config(DAC_Type *ptr, uint16_t data);
140 
150 hpm_stat_t dac_set_step_config(DAC_Type *ptr, uint8_t step_cfg_idx, dac_step_config_t *config);
151 
161 
171 hpm_stat_t dac_set_output_frequency(DAC_Type *ptr, uint32_t dac_input_freq, uint32_t dac_output_freq);
172 
180 hpm_stat_t dac_set_step_sw_trigger(DAC_Type *ptr, uint8_t step_sw_trig_idx);
181 
187 
193 void dac_set_hw_trigger_enable(DAC_Type *ptr, bool enable);
194 
204 hpm_stat_t dac_external_dma_request_enable(DAC_Type *ptr, uint8_t buf_idx, bool enable);
205 
211 
217 void dac_enable_conversion(DAC_Type *ptr, bool enable);
218 
225 void dac_enable_interrupts(DAC_Type *ptr, uint32_t mask);
226 
232 uint32_t dac_get_status_flags(DAC_Type *ptr);
233 
239 void dac_set_status_flags(DAC_Type *ptr, uint32_t mask);
240 
247 
254 
255 #ifdef __cplusplus
256 }
257 #endif
258 
263 #endif
uint32_t hpm_stat_t
Definition: hpm_common.h:135
dac_round_mode_t
DAC round mode.
Definition: hpm_dac_drv.h:62
dac_mode_t
DAC operation mode.
Definition: hpm_dac_drv.h:33
void dac_enable_interrupts(DAC_Type *ptr, uint32_t mask)
Enable DAC interrupts.
Definition: hpm_dac_drv.c:255
dac_data_structure_t
DAC data structure type.
Definition: hpm_dac_drv.h:77
hpm_stat_t dac_set_step_sw_trigger(DAC_Type *ptr, uint8_t step_sw_trig_idx)
Set DAC step software trigger.
Definition: hpm_dac_drv.c:193
void dac_set_status_flags(DAC_Type *ptr, uint32_t mask)
Clear DAC status flags.
Definition: hpm_dac_drv.c:265
uint32_t dac_get_status_flags(DAC_Type *ptr)
Get DAC status flags.
Definition: hpm_dac_drv.c:260
void dac_set_hw_trigger_enable(DAC_Type *ptr, bool enable)
Enable or disable DAC hardware trigger.
Definition: hpm_dac_drv.c:228
uint16_t dac_get_current_buffer_offset(DAC_Type *ptr)
Get current DAC buffer offset.
Definition: hpm_dac_drv.c:275
hpm_stat_t dac_set_step_config(DAC_Type *ptr, uint8_t step_cfg_idx, dac_step_config_t *config)
Set DAC step mode configuration.
Definition: hpm_dac_drv.c:53
dac_burst_type_t
DAC burst type.
Definition: hpm_dac_drv.h:83
hpm_stat_t dac_set_output_frequency(DAC_Type *ptr, uint32_t dac_input_freq, uint32_t dac_output_freq)
Set DAC output frequency.
Definition: hpm_dac_drv.c:180
dac_step_direction_t
DAC step direction.
Definition: hpm_dac_drv.h:56
uint8_t dac_get_current_buffer_index(DAC_Type *ptr)
Get current DAC buffer index.
Definition: hpm_dac_drv.c:270
hpm_stat_t dac_set_direct_config(DAC_Type *ptr, uint16_t data)
Set DAC direct mode configuration.
Definition: hpm_dac_drv.c:164
hpm_stat_t dac_external_dma_request_enable(DAC_Type *ptr, uint8_t buf_idx, bool enable)
Enable or disable DAC external DMA request.
Definition: hpm_dac_drv.c:243
hpm_stat_t dac_set_buffer_config(DAC_Type *ptr, dac_buffer_config_t *config)
Set DAC buffer mode configuration.
Definition: hpm_dac_drv.c:108
dac_ana_div_t
DAC analog divider.
Definition: hpm_dac_drv.h:41
void dac_set_buffer_dma_reset(DAC_Type *ptr)
Reset DAC buffer DMA.
Definition: hpm_dac_drv.c:223
void dac_set_buffer_sw_trigger(DAC_Type *ptr)
Set DAC buffer software trigger.
Definition: hpm_dac_drv.c:211
hpm_stat_t dac_init(DAC_Type *ptr, dac_config_t *config)
Initialize DAC.
Definition: hpm_dac_drv.c:17
void dac_enable_conversion(DAC_Type *ptr, bool enable)
Enable or disable DAC conversion.
Definition: hpm_dac_drv.c:237
void dac_get_default_config(dac_config_t *config)
Get default DAC configuration.
Definition: hpm_dac_drv.c:10
@ dac_round_mode_loop
Definition: hpm_dac_drv.h:64
@ dac_round_mode_oneshot
Definition: hpm_dac_drv.h:63
@ dac_mode_buffer
Definition: hpm_dac_drv.h:36
@ dac_mode_trig
Definition: hpm_dac_drv.h:37
@ dac_mode_step
Definition: hpm_dac_drv.h:35
@ dac_mode_direct
Definition: hpm_dac_drv.h:34
@ dac_data_stru_1_point
Definition: hpm_dac_drv.h:79
@ dac_data_stru_2_point
Definition: hpm_dac_drv.h:78
@ dac_burst_single
Definition: hpm_dac_drv.h:84
@ dac_burst_incr8
Definition: hpm_dac_drv.h:86
@ dac_burst_incr4
Definition: hpm_dac_drv.h:85
@ dac_step_down
Definition: hpm_dac_drv.h:58
@ dac_step_up
Definition: hpm_dac_drv.h:57
@ dac_ana_div_4
Definition: hpm_dac_drv.h:43
@ dac_ana_div_6
Definition: hpm_dac_drv.h:44
@ dac_ana_div_2
Definition: hpm_dac_drv.h:42
@ dac_ana_div_8
Definition: hpm_dac_drv.h:45
Definition: hpm_dac_regs.h:12
DAC buffer configuration structure.
Definition: hpm_dac_drv.h:97
dac_buffer_t buf0
Definition: hpm_dac_drv.h:100
dac_buffer_t buf1
Definition: hpm_dac_drv.h:101
uint8_t burst
Definition: hpm_dac_drv.h:99
uint8_t buf_data_mode
Definition: hpm_dac_drv.h:98
DAC buffer data structure.
Definition: hpm_dac_drv.h:105
uint32_t data1
Definition: hpm_dac_drv.h:108
uint32_t reserved1
Definition: hpm_dac_drv.h:109
uint32_t data0
Definition: hpm_dac_drv.h:106
uint32_t reserved
Definition: hpm_dac_drv.h:107
DAC buffer structure.
Definition: hpm_dac_drv.h:90
uint32_t start_addr
Definition: hpm_dac_drv.h:91
uint16_t len
Definition: hpm_dac_drv.h:93
uint8_t stop
Definition: hpm_dac_drv.h:92
DAC configuration structure.
Definition: hpm_dac_drv.h:49
uint8_t ana_div
Definition: hpm_dac_drv.h:52
uint8_t dac_mode
Definition: hpm_dac_drv.h:51
bool sync_mode
Definition: hpm_dac_drv.h:50
DAC step configuration structure.
Definition: hpm_dac_drv.h:68
uint8_t up_down
Definition: hpm_dac_drv.h:72
uint16_t end_point
Definition: hpm_dac_drv.h:70
uint8_t step_num
Definition: hpm_dac_drv.h:73
uint16_t start_point
Definition: hpm_dac_drv.h:69
uint8_t round_mode
Definition: hpm_dac_drv.h:71