2021-12-02 16:00:09 +08:00

219 lines
8.4 KiB
C

/*!
* @file apm32f0xx_dac.h
*
* @brief This file contains all the functions prototypes for the DAC firmware library
*
* @note It's only for APM32F051,APM32F072,APM32F091 devices
*
* @version V1.0.1
*
* @date 2021-07-01
*
*/
#ifndef __DAC_H
#define __DAC_H
#include "apm32f0xx.h"
#ifdef __cplusplus
extern "C" {
#endif
/** @addtogroup Peripherals_Library Standard Peripheral Library
@{
*/
/** @addtogroup DAC_Driver DAC Driver
@{
*/
/** @addtogroup DAC_Enumerations Enumerations
@{
*/
/**
* @brief DAC_Trigger
*/
typedef enum
{
DAC_TRIGGER_NONE = ((uint32_t)0x00000000), //!< None DAC Trigger
DAC_TRIGGER_T2_TRGO = ((uint32_t)0x00000024), //!< Timer 2 TRGO event
DAC_TRIGGER_T3_TRGO = ((uint32_t)0x0000000C), //!< Timer 3 TRGO event
DAC_TRIGGER_T6_TRGO = ((uint32_t)0x00000004), //!< Timer 6 TRGO event
DAC_TRIGGER_T7_TRGO = ((uint32_t)0x00000014), //!< Timer 7 TRGO event, applicable only for APM32F072 devices
DAC_TRIGGER_T15_TRGO = ((uint32_t)0x0000001C), //!< Timer 15 TRGO event
DAC_TRIGGER_EINT_IT9 = ((uint32_t)0x00000034), //!< EINT line9
DAC_TRIGGER_SOFTWARE = ((uint32_t)0x0000003C) //!< Software trigger
}DAC_TRIGGER_T;
/**
* @brief DAC_wave_generation, only applicable for APM32F072 devices
*/
typedef enum
{
DAC_WAVE_GENERATION_NONE = ((uint32_t)0x00000000), //!< Wave generation disabled
DAC_WAVE_GENERATION_NOISE = ((uint32_t)0x00000040), //!< Noise wave generation enabled
DAC_WAVE_GENERATION_TRIANGLE = ((uint32_t)0x00000080) //!< Triangle wave generation enabled
}DAC_WAVE_GENERATION_T;
/**
* @brief DAC channelx mask/amplitude selector, only applicable for APM32F072 devices
*/
typedef enum
{
DAC_LFSRUNAMASK_BIT0 = ((uint32_t)0x00000000), //!< Unmask bit0 of LFSR/ triangle amplitude equal to 1
DAC_LFSRUNAMASK_BITS1_0 = ((uint32_t)0x00000100), //!< Unmask bits[1:0] of LFSR to 3
DAC_LFSRUNAMASK_BITS2_0 = ((uint32_t)0x00000200), //!< Unmask bits[2:0] of LFSR to 7
DAC_LFSRUNAMASK_BITS3_0 = ((uint32_t)0x00000300), //!< Unmask bits[3:0] of LFSR to 15
DAC_LFSRUNAMASK_BITS4_0 = ((uint32_t)0x00000400), //!< Unmask bits[4:0] of LFSR to 31
DAC_LFSRUNAMASK_BITS5_0 = ((uint32_t)0x00000500), //!< Unmask bits[5:0] of LFSR to 63
DAC_LFSRUNAMASK_BITS6_0 = ((uint32_t)0x00000600), //!< Unmask bits[6:0] of LFSR to 127
DAC_LFSRUNAMASK_BITS7_0 = ((uint32_t)0x00000700), //!< Unmask bits[7:0] of LFSR to 255
DAC_LFSRUNAMASK_BITS8_0 = ((uint32_t)0x00000800), //!< Unmask bits[8:0] of LFSR to 511
DAC_LFSRUNAMASK_BITS9_0 = ((uint32_t)0x00000900), //!< Unmask bits[9:0] of LFSR to 1023
DAC_LFSRUNAMASK_BITS10_0 = ((uint32_t)0x00000A00), //!< Unmask bits[10:0] of LFS to 2047
DAC_LFSRUNAMASK_BITS11_0 = ((uint32_t)0x00000B00), //!< Unmask bits[11:0] of LFS to 4095
DAC_TRIANGLEAMPLITUDE_1 = ((uint32_t)0x00000000), //!< Select max triangle amplitude of 1
DAC_TRIANGLEAMPLITUDE_3 = ((uint32_t)0x00000100), //!< Select max triangle amplitude of 3
DAC_TRIANGLEAMPLITUDE_7 = ((uint32_t)0x00000200), //!< Select max triangle amplitude of 7
DAC_TRIANGLEAMPLITUDE_15 = ((uint32_t)0x00000300), //!< Select max triangle amplitude of 15
DAC_TRIANGLEAMPLITUDE_31 = ((uint32_t)0x00000400), //!< Select max triangle amplitude of 31
DAC_TRIANGLEAMPLITUDE_63 = ((uint32_t)0x00000500), //!< Select max triangle amplitude of 63
DAC_TRIANGLEAMPLITUDE_127 = ((uint32_t)0x00000600), //!< Select max triangle amplitude of 127
DAC_TRIANGLEAMPLITUDE_255 = ((uint32_t)0x00000700), //!< Select max triangle amplitude of 255
DAC_TRIANGLEAMPLITUDE_511 = ((uint32_t)0x00000800), //!< Select max triangle amplitude of 511
DAC_TRIANGLEAMPLITUDE_1023 = ((uint32_t)0x00000900), //!< Select max triangle amplitude of 1023
DAC_TRIANGLEAMPLITUDE_2047 = ((uint32_t)0x00000A00), //!< Select max triangle amplitude of 2047
DAC_TRIANGLEAMPLITUDE_4095 = ((uint32_t)0x00000B00) //!< Select max triangle amplitude of 4095
}DAC_MASK_AMPLITUDE_SEL_T;
/**
* @brief DAC_OutputBuffer
*/
typedef enum
{
DAC_OUTPUTBUFF_ENABLE = ((uint32_t)0x00000000), //!< DAC channel1 output buffer enabledDAC channel1 output buffer disabled
DAC_OUTPUTBUFF_DISABLE = ((uint32_t)0x00000002) //!< DAC channel1 output buffer enabledDAC channel1 output buffer disabled
}DAC_OUTPUTBUFF_T;
/**
* @brief DAC_Channel_selection
*/
typedef enum
{
DAC_CHANNEL_1 = ((uint32_t)0x00000000), //!< DAC channel1
DAC_CHANNEL_2 = ((uint32_t)0x00000010) //!< DAC channel2
}DAC_CHANNEL_T;
/**
* @brief DAC_data_alignment
*/
typedef enum
{
DAC_ALIGN_12B_R = ((uint32_t)0x00000000), //!< DAC 12-bit right-aligned data
DAC_ALIGN_12B_L = ((uint32_t)0x00000004), //!< DAC 12-bit left-aligned data
DAC_ALIGN_8B_R = ((uint32_t)0x00000008) //!< DAC 8-bit right-aligned data
}DAC_DATA_ALIGN_T;
/**
* @brief DAC_interrupts_definition
*/
typedef enum
{
DAC_INT_CH1_DMAUDR = ((uint32_t)0x00002000), //!< DAC channel1 DMA Underrun Interrupt
DAC_INT_CH2_DMAUDR = ((uint32_t)0x20000000) //!< DAC channel2 DMA Underrun Interrupt
}DAC_INT_T;
/**
* @brief DAC_flags_definition
*/
typedef enum
{
DAC_FLAG_CH1_DMAUDR = ((uint32_t)0x00002000), //!< DAC channel1 DMA Underrun Flag
DAC_FLAG_CH2_DMAUDR = ((uint32_t)0x20000000) //!< DAC channel2 DMA Underrun Flag
}DAC_FLAG_T;
/**@} end of group DAC_Enumerations*/
/** @addtogroup DAC_Macros Macros
@{
*/
/** Macros description */
#define CTRL_CLEAR_MASK ((uint32_t)0x00000FFE)
#define DUAL_SWTRIG_SET ((uint32_t)0x00000003)
#define DUAL_SWTRIG_RESET ((uint32_t)0xFFFFFFFC)
#define DH12RCH1_OFFSET ((uint32_t)0x00000008)
#define DH12RCH2_OFFSET ((uint32_t)0x00000014)
#define DH12RD_OFFSET ((uint32_t)0x00000020)
#define DATOUT_OFFSET ((uint32_t)0x0000002C)
/**@} end of group DAC_Macros*/
/** @addtogroup DAC_Structure Data Structure
@{
*/
/**
* @brief DAC Config structure definition
*/
typedef struct
{
DAC_TRIGGER_T trigger; //!< DAC trigger selection
DAC_OUTPUTBUFF_T outputBuff; //!< DAC output buffer disable
DAC_WAVE_GENERATION_T waveGeneration; //!< DAC noise/triangle wave generation selection
DAC_MASK_AMPLITUDE_SEL_T maskAmplitudeSelect; //!< DAC mask/amplitude selector
}DAC_Config_T;
/**@} end of group DAC_Structure*/
/** @addtogroup DAC_Fuctions Fuctions
@{
*/
/** DAC reset and configuration */
void DAC_Reset(void);
void DAC_Config(uint32_t channel, DAC_Config_T* dacConfig);
void DAC_ConfigStructInit(DAC_Config_T* dacConfig);
void DAC_Enable(DAC_CHANNEL_T channel);
void DAC_Disable(DAC_CHANNEL_T channel);
void DAC_EnableSoftwareTrigger(DAC_CHANNEL_T channel);
void DAC_DisableSoftwareTrigger(DAC_CHANNEL_T channel);
void DAC_EnableDualSoftwareTrigger(void); //!< Only for APM32F072 and APM32F091 devices
void DAC_DisableDualSoftwareTrigger(void); //!< Only for APM32F072 and APM32F091 devices
void DAC_EnableWaveGeneration(DAC_CHANNEL_T channel, DAC_WAVE_GENERATION_T wave); //!< Only for APM32F072 and APM32F091 devices
void DAC_DisableWaveGeneration(DAC_CHANNEL_T channel, DAC_WAVE_GENERATION_T wave); //!< Only for APM32F072 and APM32F091 devices
/** Read data */
void DAC_ConfigChannel1Data(DAC_DATA_ALIGN_T dataAlign, uint16_t data);
void DAC_ConfigChannel2Data(DAC_DATA_ALIGN_T dataAlign, uint16_t data); //!< Only for APM32F072 and APM32F091 devices
void DAC_ConfigDualChannelData(DAC_DATA_ALIGN_T dataAlign, uint16_t data2, uint16_t data1); //!< Only for APM32F072 and APM32F091 devices
uint16_t DAC_ReadDataOutputValue(DAC_CHANNEL_T channel);
/** DMA */
void DAC_EnableDMA(DAC_CHANNEL_T channel);
void DAC_DisableDMA(DAC_CHANNEL_T channel);
/** Interrupt and flag */
void DAC_EnableInterrupt(DAC_CHANNEL_T channel);
void DAC_DisableInterrupt(DAC_CHANNEL_T channel);
uint8_t DAC_ReadStatusFlag(DAC_FLAG_T flag);
void DAC_ClearStatusFlag(DAC_FLAG_T flag);
uint8_t DAC_ReadIntFlag(DAC_INT_T intFlag);
void DAC_ClearIntFlag(DAC_INT_T intFlag);
/**@} end of group DAC_Fuctions*/
/**@} end of group DAC_Driver */
/**@} end of group Peripherals_Library*/
#ifdef __cplusplus
}
#endif
#endif /* __DAC_H */