1 /*! 2 * @file apm32e10x_dac.h 3 * 4 * @brief This file contains all the functions prototypes for the DAC firmware library 5 * 6 * @version V1.0.2 7 * 8 * @date 2022-12-31 9 * 10 * @attention 11 * 12 * Copyright (C) 2021-2023 Geehy Semiconductor 13 * 14 * You may not use this file except in compliance with the 15 * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). 16 * 17 * The program is only for reference, which is distributed in the hope 18 * that it will be useful and instructional for customers to develop 19 * their software. Unless required by applicable law or agreed to in 20 * writing, the program is distributed on an "AS IS" BASIS, WITHOUT 21 * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. 22 * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions 23 * and limitations under the License. 24 */ 25 26 /* Define to prevent recursive inclusion */ 27 #ifndef __APM32E10X_DAC_H 28 #define __APM32E10X_DAC_H 29 30 /* Includes */ 31 #include "apm32e10x.h" 32 33 #ifdef __cplusplus 34 extern "C" { 35 #endif 36 37 /** @addtogroup APM32E10x_StdPeriphDriver 38 @{ 39 */ 40 41 /** @addtogroup DAC_Driver 42 @{ 43 */ 44 45 /** @defgroup DAC_Enumerations Enumerations 46 @{ 47 */ 48 49 /** 50 * @brief DAC Channel selection 51 */ 52 typedef enum 53 { 54 DAC_CHANNEL_1 = 0x00000000, 55 DAC_CHANNEL_2 = 0x00000010 56 }DAC_CHANNEL_T; 57 58 /** 59 * @brief DAC trigger selection 60 */ 61 typedef enum 62 { 63 DAC_TRIGGER_NONE = 0x00000000, 64 DAC_TRIGGER_TMR6_TRGO = 0x00000004, 65 DAC_TRIGGER_TMR8_TRGO = 0x0000000C, 66 DAC_TRIGGER_TMR7_TRGO = 0x00000014, 67 DAC_TRIGGER_TMR5_TRGO = 0x0000001C, 68 DAC_TRIGGER_TMR2_TRGO = 0x00000024, 69 DAC_TRIGGER_TMR4_TRGO = 0x0000002C, 70 DAC_TRIGGER_EINT9 = 0x00000034, 71 DAC_TRIGGER_SOFT = 0x0000003C 72 }DAC_TRIGGER_T; 73 74 /** 75 * @brief DAC wave generation 76 */ 77 typedef enum 78 { 79 DAC_WAVE_GENERATION_NONE = 0x00000000, 80 DAC_WAVE_GENERATION_NOISE = 0x00000040, 81 DAC_WAVE_GENERATION_TRIANGLE = 0x00000080 82 }DAC_WAVE_GENERATION_T; 83 84 /** 85 * @brief DAC channelx mask/amplitude selector 86 */ 87 typedef enum 88 { 89 DAC_LFSR_MASK_BIT11_1 = 0x00000000, /*!< Mask bit[11:1] of LFSR for noise wave generation */ 90 DAC_LFSR_MASK_BIT11_2 = 0x00000100, /*!< Mask bit[11:2] of LFSR for noise wave generation */ 91 DAC_LFSR_MASK_BIT11_3 = 0x00000200, /*!< Mask bit[11:3] of LFSR for noise wave generation */ 92 DAC_LFSR_MASK_BIT11_4 = 0x00000300, /*!< Mask bit[11:4] of LFSR for noise wave generation */ 93 DAC_LFSR_MASK_BIT11_5 = 0x00000400, /*!< Mask bit[11:5] of LFSR for noise wave generation */ 94 DAC_LFSR_MASK_BIT11_6 = 0x00000500, /*!< Mask bit[11:6] of LFSR for noise wave generation */ 95 DAC_LFSR_MASK_BIT11_7 = 0x00000600, /*!< Mask bit[11:7] of LFSR for noise wave generation */ 96 DAC_LFSR_MASK_BIT11_8 = 0x00000700, /*!< Mask bit[11:8] of LFSR for noise wave generation */ 97 DAC_LFSR_MASK_BIT11_9 = 0x00000800, /*!< Mask bit[11:9] of LFSR for noise wave generation */ 98 DAC_LFSR_MASK_BIT11_10 = 0x00000900, /*!< Mask bit[11:10] of LFSR for noise wave generation */ 99 DAC_LFSR_MASK_BIT11 = 0x00000A00, /*!< Mask bit11 of LFSR for noise wave generation */ 100 DAC_LFSR_MASK_NONE = 0x00000B00, /*!< Mask none bit of LFSR for noise wave generation */ 101 102 DAC_TRIANGLE_AMPLITUDE_1 = 0x00000000, /*!< Triangle amplitude equal to 1 */ 103 DAC_TRIANGLE_AMPLITUDE_3 = 0x00000100, /*!< Triangle amplitude equal to 3 */ 104 DAC_TRIANGLE_AMPLITUDE_7 = 0x00000200, /*!< Triangle amplitude equal to 7 */ 105 DAC_TRIANGLE_AMPLITUDE_15 = 0x00000300, /*!< Triangle amplitude equal to 15 */ 106 DAC_TRIANGLE_AMPLITUDE_31 = 0x00000400, /*!< Triangle amplitude equal to 31 */ 107 DAC_TRIANGLE_AMPLITUDE_63 = 0x00000500, /*!< Triangle amplitude equal to 63 */ 108 DAC_TRIANGLE_AMPLITUDE_127 = 0x00000600, /*!< Triangle amplitude equal to 127 */ 109 DAC_TRIANGLE_AMPLITUDE_255 = 0x00000700, /*!< Triangle amplitude equal to 255 */ 110 DAC_TRIANGLE_AMPLITUDE_511 = 0x00000800, /*!< Triangle amplitude equal to 511 */ 111 DAC_TRIANGLE_AMPLITUDE_1023 = 0x00000900, /*!< Triangle amplitude equal to 1023 */ 112 DAC_TRIANGLE_AMPLITUDE_2047 = 0x00000A00, /*!< Triangle amplitude equal to 2047 */ 113 DAC_TRIANGLE_AMPLITUDE_4095 = 0x00000B00 /*!< Triangle amplitude equal to 4095 */ 114 }DAC_MASK_AMPLITUDE_SEL_T; 115 116 /** 117 * @brief DAC output buffer 118 */ 119 typedef enum 120 { 121 DAC_OUTPUT_BUFFER_ENBALE = 0x00000000, 122 DAC_OUTPUT_BUFFER_DISABLE = 0x00000002 123 }DAC_OUTPUT_BUFFER_T; 124 125 /** 126 * @brief DAC data align 127 */ 128 typedef enum 129 { 130 DAC_ALIGN_12BIT_R = 0x00000000, 131 DAC_ALIGN_12BIT_L = 0x00000004, 132 DAC_ALIGN_8BIT_R = 0x00000008 133 }DAC_ALIGN_T; 134 135 /**@} end of group DAC_Enumerations*/ 136 137 138 /** @defgroup DAC_Structures Structures 139 @{ 140 */ 141 142 /** 143 * @brief DAC Config structure definition 144 */ 145 typedef struct 146 { 147 DAC_TRIGGER_T trigger; 148 DAC_OUTPUT_BUFFER_T outputBuffer; 149 DAC_WAVE_GENERATION_T waveGeneration; 150 DAC_MASK_AMPLITUDE_SEL_T maskAmplitudeSelect; 151 }DAC_Config_T; 152 153 /**@} end of group DAC_Structures */ 154 155 156 /** @defgroup DAC_Functions Functions 157 @{ 158 */ 159 160 /* DAC Reset and Configuration */ 161 void DAC_Reset(void); 162 void DAC_Config(uint32_t channel, DAC_Config_T* dacConfig); 163 void DAC_ConfigStructInit(DAC_Config_T* dacConfig); 164 void DAC_Enable(DAC_CHANNEL_T channel); 165 void DAC_Disable(DAC_CHANNEL_T channel); 166 167 /* DAC channel for DAM */ 168 void DAC_DMA_Enable(DAC_CHANNEL_T channel); 169 void DAC_DMA_Disable(DAC_CHANNEL_T channel); 170 171 /* DAC channel software trigger */ 172 void DAC_EnableSoftwareTrigger(DAC_CHANNEL_T channel); 173 void DAC_DisableSoftwareTrigger(DAC_CHANNEL_T channel); 174 void DAC_EnableDualSoftwareTrigger(void); 175 void DAC_DisableDualSoftwareTrigger(void); 176 177 /* DAC channel wave generation */ 178 void DAC_EnableWaveGeneration(DAC_CHANNEL_T channel, DAC_WAVE_GENERATION_T wave); 179 void DAC_DisableWaveGeneration(DAC_CHANNEL_T channel, DAC_WAVE_GENERATION_T wave); 180 181 /* DAC set channel data */ 182 void DAC_ConfigChannel1Data(DAC_ALIGN_T align, uint16_t data); 183 void DAC_ConfigChannel2Data(DAC_ALIGN_T align, uint16_t data); 184 void DAC_ConfigDualChannelData(DAC_ALIGN_T align, uint16_t data2, uint16_t data1); 185 186 /* DAC read data output value */ 187 uint16_t DAC_ReadDataOutputValue(DAC_CHANNEL_T channel); 188 189 /**@} end of group DAC_Functions */ 190 /**@} end of group DAC_Driver */ 191 /**@} end of group APM32E10x_StdPeriphDriver */ 192 193 #ifdef __cplusplus 194 } 195 #endif 196 197 #endif /* __APM32E10X_DAC_H */ 198