2022-05-24 05:26:36 -04:00
|
|
|
/*
|
|
|
|
* SPDX-FileCopyrightText: 2019-2022 Espressif Systems (Shanghai) CO LTD
|
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
|
|
*/
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "esp_err.h"
|
|
|
|
#include "esp_intr_alloc.h"
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#define DAC_DMA_EOF_INTR 0x01
|
|
|
|
#define DAC_DMA_TEOF_INTR 0x02
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Initialize DAC DMA peripheral
|
|
|
|
*
|
|
|
|
* @param[in] freq_hz DAC data frequency per channel
|
|
|
|
* @param[in] is_alternate Transmit data alternate between two channels or simultaneously
|
|
|
|
* @param[in] is_apll Whether use APLL as DAC digital controller clock source
|
|
|
|
* @return
|
|
|
|
* - ESP_ERR_NOT_FOUND The DMA peripheral has been occupied
|
|
|
|
* - ESP_ERR_NO_MEM No memory for the DMA peripheral struct
|
2022-10-10 07:17:22 -04:00
|
|
|
* - ESP_ERR_INVALID_ARG The frequency is out of range
|
2022-05-24 05:26:36 -04:00
|
|
|
* - ESP_OK Initialize DAC DMA peripheral success
|
|
|
|
*/
|
2022-10-10 07:17:22 -04:00
|
|
|
esp_err_t dac_dma_periph_init(uint32_t freq_hz, bool is_alternate, bool is_apll);
|
2022-05-24 05:26:36 -04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Deinitialize DAC DMA peripheral
|
|
|
|
*
|
|
|
|
* @return
|
2022-10-10 07:17:22 -04:00
|
|
|
* - ESP_ERR_INVALID_STATE The DAC DMA has been de-initialized already
|
|
|
|
* or the interrupt has not been de-registered
|
2022-05-24 05:26:36 -04:00
|
|
|
* - ESP_OK Deinitialize DAC DMA peripheral success
|
|
|
|
*/
|
|
|
|
esp_err_t dac_dma_periph_deinit(void);
|
|
|
|
|
|
|
|
/**
|
2022-10-10 07:17:22 -04:00
|
|
|
* @brief Get the DMA interrupt signal id
|
2022-05-24 05:26:36 -04:00
|
|
|
*
|
|
|
|
* @return
|
2022-10-10 07:17:22 -04:00
|
|
|
* - int DMA interrupt signal id
|
2022-05-24 05:26:36 -04:00
|
|
|
*/
|
2022-10-10 07:17:22 -04:00
|
|
|
int dac_dma_periph_get_intr_signal(void);
|
2022-05-24 05:26:36 -04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Enable the DMA and interrupt of the DAC DMA peripheral
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
void dac_dma_periph_enable(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Disable the DMA and interrupt of the DAC DMA peripheral
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
void dac_dma_periph_disable(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Whether the TX_EOF interrupt is triggered
|
|
|
|
*
|
|
|
|
* @return
|
2022-10-10 07:17:22 -04:00
|
|
|
* - uint32_t Mask of the triggered interrupt: DAC_DMA_EOF_INTR, DAC_DMA_EOF_INTR
|
2022-05-24 05:26:36 -04:00
|
|
|
*/
|
|
|
|
uint32_t dac_dma_periph_intr_is_triggered(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Get the descriptor that just finished sending data
|
|
|
|
*
|
|
|
|
* @return
|
|
|
|
* - uint32_t The address of the EOF descriptor
|
|
|
|
*/
|
|
|
|
uint32_t dac_dma_periph_intr_get_eof_desc(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Start a DMA transaction
|
|
|
|
* @note DMA transaction will stop when reaches the tail of the descriptor link
|
|
|
|
*
|
|
|
|
* @param[in] desc_addr Descriptor address
|
|
|
|
*/
|
|
|
|
void dac_dma_periph_dma_trans_start(uint32_t desc_addr);
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|