123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- /*
- * Copyright (c) 2021 HPMicro
- *
- * SPDX-License-Identifier: BSD-3-Clause
- *
- */
- #ifndef HPM_DAC_DRV_H
- #define HPM_DAC_DRV_H
- #include "hpm_common.h"
- #include "hpm_dac_regs.h"
- #include "hpm_soc_feature.h"
- /* The range of DAC output value setting is from 0.0 to 10000.0, which is mapped to 0 to 100 in percentage. */
- #define DAC_OUTPUT(PERCENT) (PERCENT / 10000.0f * (DAC_SOC_MAX_DATA + 1))
- #define DAC_AHB_ERROR_EVENT DAC_IRQ_EN_AHB_ERROR_MASK
- #define DAC_FIFO_EMPTY_EVENT DAC_IRQ_EN_FIFO_EMPTY_MASK
- #define DAC_BUF1_COMPLETE_EVENT DAC_IRQ_EN_BUF1_CMPT_MASK
- #define DAC_BUF0_COMPLETE_EVENT DAC_IRQ_EN_BUF0_CMPT_MASK
- typedef enum {
- dac_mode_direct = 0,
- dac_mode_step,
- dac_mode_buffer
- } dac_mode_t;
- typedef enum {
- dac_ana_div_2 = 0,
- dac_ana_div_4,
- dac_ana_div_6,
- dac_ana_div_8
- } dac_ana_div_t;
- typedef struct {
- bool sync_mode;
- uint8_t dac_mode;
- uint8_t ana_div;
- } dac_config_t;
- typedef enum {
- dac_step_up = 0,
- dac_step_down
- } dac_step_direction_t;
- typedef enum {
- dac_round_mode_oneshot = 0,
- dac_round_mode_loop
- } dac_round_mode_t;
- typedef struct {
- uint16_t start_point;
- uint16_t end_point;
- uint8_t round_mode;
- uint8_t up_down;
- uint8_t step_num;
- } dac_step_config_t;
- typedef enum {
- dac_data_stru_2_point = 0,
- dac_data_stru_1_point
- } dac_data_structure_t;
- typedef enum {
- dac_burst_single = 0,
- dac_burst_incr4 = 3,
- dac_burst_incr8 = 5
- } dac_burst_type_t;
- typedef struct {
- uint32_t start_addr;
- uint8_t stop;
- uint16_t len;
- } dac_buffer_t;
- typedef struct {
- uint8_t buf_data_mode;
- uint8_t burst;
- dac_buffer_t buf0;
- dac_buffer_t buf1;
- } dac_buffer_config_t;
- #ifdef __cplusplus
- extern "C" {
- #endif
- void dac_get_default_config(dac_config_t *config);
- hpm_stat_t dac_init(DAC_Type *ptr, dac_config_t *config);
- hpm_stat_t dac_set_direct_config(DAC_Type *ptr, uint16_t data);
- hpm_stat_t dac_set_step_config(DAC_Type *ptr, uint8_t step_cfg_idx, dac_step_config_t *config);
- hpm_stat_t dac_set_buffer_config(DAC_Type *ptr, dac_buffer_config_t *config);
- hpm_stat_t dac_set_output_frequency(DAC_Type *ptr, uint32_t dac_input_freq, uint32_t dac_output_freq);
- hpm_stat_t dac_set_step_sw_trigger(DAC_Type *ptr, uint8_t step_sw_trig_idx);
- void dac_set_buffer_sw_trigger(DAC_Type *ptr);
- void dac_set_hw_trigger_enable(DAC_Type *ptr, bool enable);
- hpm_stat_t dac_external_dma_request_enable(DAC_Type *ptr, uint8_t buf_idx, bool enable);
- void dac_set_buffer_dma_reset(DAC_Type *ptr);
- void dac_enable_conversion(DAC_Type *ptr, bool enable);
- void dac_enable_interrupts(DAC_Type *ptr, uint32_t mask);
- uint32_t dac_get_status_flags(DAC_Type *ptr);
- void dac_set_status_flags(DAC_Type *ptr, uint32_t mask);
- uint8_t dac_get_current_buffer_index(DAC_Type *ptr);
- uint16_t dac_get_current_buffer_offset(DAC_Type *ptr);
- #ifdef __cplusplus
- }
- #endif
- #endif
|