1 /*! 2 * @file apm32f10x_dac.h 3 * 4 * @brief This file contains all the functions prototypes for the DAC firmware library 5 * 6 * @version V1.0.4 7 * 8 * @date 2022-12-01 9 * 10 * @attention 11 * 12 * Copyright (C) 2020-2022 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 #ifndef __APM32F10X_DAC_H 27 #define __APM32F10X_DAC_H 28 29 /* Includes */ 30 #include "apm32f10x.h" 31 32 #ifdef __cplusplus 33 extern "C" { 34 #endif 35 36 /** @addtogroup APM32F10x_StdPeriphDriver 37 @{ 38 */ 39 40 /** @addtogroup DAC_Driver DAC Driver 41 @{ 42 */ 43 44 /** @defgroup DAC_Enumerations Enumerations 45 @{ 46 */ 47 48 /** 49 * @brief DAC Channel selection 50 */ 51 typedef enum 52 { 53 DAC_CHANNEL_1 = 0x00000000, 54 DAC_CHANNEL_2 = 0x00000010 55 } DAC_CHANNEL_T; 56 57 /** 58 * @brief DAC trigger selection 59 */ 60 typedef enum 61 { 62 DAC_TRIGGER_NONE = 0x00000000, 63 DAC_TRIGGER_TMR6_TRGO = 0x00000004, 64 DAC_TRIGGER_TMR8_TRGO = 0x0000000C, 65 DAC_TRIGGER_TMR7_TRGO = 0x00000014, 66 DAC_TRIGGER_TMR5_TRGO = 0x0000001C, 67 DAC_TRIGGER_TMR2_TRGO = 0x00000024, 68 DAC_TRIGGER_TMR4_TRGO = 0x0000002C, 69 DAC_TRIGGER_EINT9 = 0x00000034, 70 DAC_TRIGGER_SOFT = 0x0000003C 71 } DAC_TRIGGER_T; 72 73 /** 74 * @brief DAC wave generation 75 */ 76 typedef enum 77 { 78 DAC_WAVE_GENERATION_NONE = 0x00000000, 79 DAC_WAVE_GENERATION_NOISE = 0x00000040, 80 DAC_WAVE_GENERATION_TRIANGLE = 0x00000080 81 } DAC_WAVE_GENERATION_T; 82 83 /** 84 * @brief DAC channelx mask/amplitude selector 85 */ 86 typedef enum 87 { 88 DAC_LFSR_MASK_BIT11_1 = 0x00000000, /*!< Mask bit[11:1] of LFSR for noise wave generation */ 89 DAC_LFSR_MASK_BIT11_2 = 0x00000100, /*!< Mask bit[11:2] of LFSR for noise wave generation */ 90 DAC_LFSR_MASK_BIT11_3 = 0x00000200, /*!< Mask bit[11:3] of LFSR for noise wave generation */ 91 DAC_LFSR_MASK_BIT11_4 = 0x00000300, /*!< Mask bit[11:4] of LFSR for noise wave generation */ 92 DAC_LFSR_MASK_BIT11_5 = 0x00000400, /*!< Mask bit[11:5] of LFSR for noise wave generation */ 93 DAC_LFSR_MASK_BIT11_6 = 0x00000500, /*!< Mask bit[11:6] of LFSR for noise wave generation */ 94 DAC_LFSR_MASK_BIT11_7 = 0x00000600, /*!< Mask bit[11:7] of LFSR for noise wave generation */ 95 DAC_LFSR_MASK_BIT11_8 = 0x00000700, /*!< Mask bit[11:8] of LFSR for noise wave generation */ 96 DAC_LFSR_MASK_BIT11_9 = 0x00000800, /*!< Mask bit[11:9] of LFSR for noise wave generation */ 97 DAC_LFSR_MASK_BIT11_10 = 0x00000900, /*!< Mask bit[11:10] of LFSR for noise wave generation */ 98 DAC_LFSR_MASK_BIT11 = 0x00000A00, /*!< Mask bit11 of LFSR for noise wave generation */ 99 DAC_LFSR_MASK_NONE = 0x00000B00, /*!< Mask none bit of LFSR for noise wave generation */ 100 101 DAC_TRIANGLE_AMPLITUDE_1 = 0x00000000, /*!< Triangle amplitude equal to 1 */ 102 DAC_TRIANGLE_AMPLITUDE_3 = 0x00000100, /*!< Triangle amplitude equal to 3 */ 103 DAC_TRIANGLE_AMPLITUDE_7 = 0x00000200, /*!< Triangle amplitude equal to 7 */ 104 DAC_TRIANGLE_AMPLITUDE_15 = 0x00000300, /*!< Triangle amplitude equal to 15 */ 105 DAC_TRIANGLE_AMPLITUDE_31 = 0x00000400, /*!< Triangle amplitude equal to 31 */ 106 DAC_TRIANGLE_AMPLITUDE_63 = 0x00000500, /*!< Triangle amplitude equal to 63 */ 107 DAC_TRIANGLE_AMPLITUDE_127 = 0x00000600, /*!< Triangle amplitude equal to 127 */ 108 DAC_TRIANGLE_AMPLITUDE_255 = 0x00000700, /*!< Triangle amplitude equal to 255 */ 109 DAC_TRIANGLE_AMPLITUDE_511 = 0x00000800, /*!< Triangle amplitude equal to 511 */ 110 DAC_TRIANGLE_AMPLITUDE_1023 = 0x00000900, /*!< Triangle amplitude equal to 1023 */ 111 DAC_TRIANGLE_AMPLITUDE_2047 = 0x00000A00, /*!< Triangle amplitude equal to 2047 */ 112 DAC_TRIANGLE_AMPLITUDE_4095 = 0x00000B00 /*!< Triangle amplitude equal to 4095 */ 113 } DAC_MASK_AMPLITUDE_SEL_T; 114 115 /** 116 * @brief DAC output buffer 117 */ 118 typedef enum 119 { 120 DAC_OUTPUT_BUFFER_ENBALE = 0x00000000, 121 DAC_OUTPUT_BUFFER_DISABLE = 0x00000002 122 } DAC_OUTPUT_BUFFER_T; 123 124 /** 125 * @brief DAC data align 126 */ 127 typedef enum 128 { 129 DAC_ALIGN_12BIT_R = 0x00000000, 130 DAC_ALIGN_12BIT_L = 0x00000004, 131 DAC_ALIGN_8BIT_R = 0x00000008 132 } DAC_ALIGN_T; 133 134 /**@} end of group DAC_Enumerations*/ 135 136 137 /** @defgroup DAC_Structures Structures 138 @{ 139 */ 140 141 /** 142 * @brief DAC Config structure definition 143 */ 144 typedef struct 145 { 146 DAC_TRIGGER_T trigger; 147 DAC_OUTPUT_BUFFER_T outputBuffer; 148 DAC_WAVE_GENERATION_T waveGeneration; 149 DAC_MASK_AMPLITUDE_SEL_T maskAmplitudeSelect; 150 } DAC_Config_T; 151 152 /**@} end of group DAC_Structures*/ 153 154 155 /** @defgroup DAC_Functions Functions 156 @{ 157 */ 158 159 /* DAC Reset and Configuration */ 160 void DAC_Reset(void); 161 void DAC_Config(uint32_t channel, DAC_Config_T* dacConfig); 162 void DAC_ConfigStructInit(DAC_Config_T* dacConfig); 163 void DAC_Enable(DAC_CHANNEL_T channel); 164 void DAC_Disable(DAC_CHANNEL_T channel); 165 166 /* DAC channel for DAM */ 167 void DAC_DMA_Enable(DAC_CHANNEL_T channel); 168 void DAC_DMA_Disable(DAC_CHANNEL_T channel); 169 170 /* DAC channel software trigger */ 171 void DAC_EnableSoftwareTrigger(DAC_CHANNEL_T channel); 172 void DAC_DisableSoftwareTrigger(DAC_CHANNEL_T channel); 173 void DAC_EnableDualSoftwareTrigger(void); 174 void DAC_DisableDualSoftwareTrigger(void); 175 176 /* DAC channel wave generation */ 177 void DAC_EnableWaveGeneration(DAC_CHANNEL_T channel, DAC_WAVE_GENERATION_T wave); 178 void DAC_DisableWaveGeneration(DAC_CHANNEL_T channel, DAC_WAVE_GENERATION_T wave); 179 180 /* DAC set channel data */ 181 void DAC_ConfigChannel1Data(DAC_ALIGN_T align, uint16_t data); 182 void DAC_ConfigChannel2Data(DAC_ALIGN_T align, uint16_t data); 183 void DAC_ConfigDualChannelData(DAC_ALIGN_T align, uint16_t data2, uint16_t data1); 184 185 /* DAC read data output value */ 186 uint16_t DAC_ReadDataOutputValue(DAC_CHANNEL_T channel); 187 188 /**@} end of group DAC_Functions*/ 189 /**@} end of group DAC_Driver */ 190 /**@} end of group APM32F10x_StdPeriphDriver */ 191 192 #ifdef __cplusplus 193 } 194 #endif 195 196 #endif /* __APM32F10X_DAC_H */ 197