1 /******************************************************************************
2 * Copyright (C) 2019, Huada Semiconductor Co.,Ltd All rights reserved.
3 *
4 * This software is owned and published by:
5 * Huada Semiconductor Co.,Ltd ("HDSC").
6 *
7 * BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND
8 * BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT.
9 *
10 * This software contains source code for use with HDSC
11 * components. This software is licensed by HDSC to be adapted only
12 * for use in systems utilizing HDSC components. HDSC shall not be
13 * responsible for misuse or illegal use of this software for devices not
14 * supported herein. HDSC is providing this software "AS IS" and will
15 * not be responsible for issues arising from incorrect user implementation
16 * of the software.
17 *
18 * Disclaimer:
19 * HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE,
20 * REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS),
21 * ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING,
22 * WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED
23 * WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED
24 * WARRANTY OF NONINFRINGEMENT.
25 * HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT,
26 * NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT
27 * LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION,
28 * LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR
29 * INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT,
30 * INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA,
31 * SAVINGS OR PROFITS,
32 * EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
33 * YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR
34 * INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED
35 * FROM, THE SOFTWARE.
36 *
37 * This software may be replicated in part or whole for the licensed use,
38 * with the restriction that this Disclaimer and Copyright notice must be
39 * included with each copy of this software, whether used in part or whole,
40 * at all times.
41 */
42 /******************************************************************************/
43 /** \file dac.c
44 **
45 ** dac driver API.
46 **
47 ** - 2019-04-10 First Version
48 **
49 ******************************************************************************/
50
51 /******************************************************************************
52 * Include files
53 ******************************************************************************/
54 #include "hc32l196_dac.h"
55
56 /**
57 ******************************************************************************
58 ** \addtogroup AdcGroup
59 ******************************************************************************/
60 //@{
61
62 /******************************************************************************
63 * Local pre-processor symbols/macros ('#define')
64 ******************************************************************************/
65
66 /******************************************************************************
67 * Global variable definitions (declared in header file with 'extern')
68 ******************************************************************************/
69
70 /******************************************************************************
71 * Local type definitions ('typedef')
72 ******************************************************************************/
73
74 /******************************************************************************
75 * Local function prototypes ('static')
76 ******************************************************************************/
77
78 /******************************************************************************
79 * Local variable definitions ('static')
80 ******************************************************************************/
81
82 /*****************************************************************************
83 * Function implementation - global ('extern') and local ('static')
84 *****************************************************************************/
85
86 /**
87 ******************************************************************************
88 ** \brief 使能相关通道的DMA DMA_CR0中的DMAEN0
89 **
90 ** @param NewState : TRUE 或者 FALSE
91 ** \retval 无
92 **
93 ******************************************************************************/
Dac_DmaCmd(boolean_t NewState)94 void Dac_DmaCmd(boolean_t NewState)
95 {
96 SetBit((uint32_t)(&(M0P_DAC->CR0)), 12, NewState);
97 }
98
99 /**
100 ******************************************************************************
101 ** \brief 配置DAC的DMA下溢中断, DMA_CR0中的DMAUDRIE0
102 **
103 ** @param NewState : TRUE 或者 FALSE
104 ** \retval 无
105 **
106 ******************************************************************************/
Dac_DmaITCfg(boolean_t NewState)107 void Dac_DmaITCfg(boolean_t NewState)
108 {
109 SetBit((uint32_t)(&(M0P_DAC->CR0)), 13, NewState);
110 }
111
112 /**
113 ******************************************************************************
114 ** \brief 获取DAC的DMA下溢中断标志位状态, DMA_SR中的DMAUDR0
115 **
116 ** @param 无
117 ** \retval TRUE 或 FALSE
118 **
119 ******************************************************************************/
Dac_GetITStatus(void)120 boolean_t Dac_GetITStatus(void)
121 {
122 return GetBit((uint32_t)(&(M0P_DAC->SR)), 13);
123 }
124
125 /**
126 ******************************************************************************
127 ** \brief 配置DAC的使能与禁止, DMA_CR0中的EN0
128 **
129 ** @param NewState : TRUE 或者 FALSE
130 ** \retval 无
131 **
132 ******************************************************************************/
Dac_Cmd(boolean_t NewState)133 void Dac_Cmd(boolean_t NewState)
134 {
135 SetBit((uint32_t)(&(M0P_DAC->CR0)), 0, NewState);
136 }
137
138 /**
139 ******************************************************************************
140 ** \brief 软件触发寄存器,触发DAC转换 DMA_SWTRIGR中的SWTRIG0
141 **
142 ** @param 无
143 ** \retval 无
144 **
145 ******************************************************************************/
Dac_SoftwareTriggerCmd(void)146 void Dac_SoftwareTriggerCmd(void)
147 {
148 SetBit((uint32_t)(&(M0P_DAC->SWTRIGR)), 0, 1);
149 }
150
151 /**
152 ******************************************************************************
153 ** \brief 初始化DAC0
154 **
155 ** @param DAC_InitStruct : 用于初始化DAC0的结构体
156 ** \retval 无
157 **
158 ******************************************************************************/
Dac_Init(stc_dac_cfg_t * DAC_InitStruct)159 void Dac_Init(stc_dac_cfg_t* DAC_InitStruct)
160 {
161 M0P_DAC->CR0_f.BOFF0 = DAC_InitStruct->boff_t;
162 M0P_DAC->CR0_f.TEN0 = DAC_InitStruct->ten_t;
163 M0P_DAC->CR0_f.TSEL0 = DAC_InitStruct->tsel_t;
164 M0P_DAC->CR0_f.WAVE0 = DAC_InitStruct->wave_t;
165 M0P_DAC->CR0_f.MAMP0 = DAC_InitStruct->mamp_t;
166 M0P_DAC->CR0_f.SREF0 = DAC_InitStruct->sref_t;
167
168 if(DAC_InitStruct->align == DacLeftAlign)
169 {
170 M0P_DAC->DHR12L0_f.DHR0 = DAC_InitStruct->dhr12;
171 }
172 else if(DAC_InitStruct->align == DacRightAlign)
173 {
174 M0P_DAC->DHR12R0_f.DHR0 = DAC_InitStruct->dhr12;
175 }
176 else
177 {
178 M0P_DAC->DHR8R0_f.DHR0 = DAC_InitStruct->dhr8;
179 }
180 }
181
182 /**
183 ******************************************************************************
184 ** \brief 向DAC0的数据保持寄存器写数据
185 **
186 ** @param DAC_Channel: Dac_0
187 ** @param DAC_Align : Right_Align 与Left_Align
188 ** @param DAC_Bit : Bit8 与Bit12
189 ** @param Data : 所要发送的数据
190 ** \retval 无
191 **
192 ******************************************************************************/
Dac_SetChannelData(en_align_t DAC_Align,en_bitno_t DAC_Bit,uint16_t Data)193 void Dac_SetChannelData(en_align_t DAC_Align, en_bitno_t DAC_Bit, uint16_t Data)
194 {
195 if(DAC_Align == DacRightAlign)
196 {
197 if(DAC_Bit == DacBit8)
198 {
199 M0P_DAC->DHR8R0_f.DHR0 = (uint8_t)Data;
200 }
201 else if(DAC_Bit == DacBit12)
202 {
203 M0P_DAC->DHR12R0_f.DHR0 = Data;
204 }
205 else
206 {
207 return;
208 }
209 }
210 else if(DAC_Align == DacLeftAlign)
211 {
212 if(DAC_Bit == DacBit8)
213 {
214 return;
215 }
216 else if(DAC_Bit == DacBit12)
217 {
218 M0P_DAC->DHR12L0_f.DHR0 = Data;
219 }
220 else
221 {
222 return;
223 }
224 }
225 else
226 {
227 return;
228 }
229 }
230
231
232
233 /**
234 ******************************************************************************
235 ** \brief 获取DAC数据输出寄存器DAC_DOR0
236 **
237 ** @param 无
238 ** \retval DAC_DOR0的值
239 **
240 ******************************************************************************/
Dac_GetDataOutputValue(void)241 uint16_t Dac_GetDataOutputValue(void)
242 {
243 uint16_t tmp;
244
245 tmp = M0P_DAC->DOR0_f.DOR0;
246 return tmp&0x0fff;
247 }
248
249 /******************************************************************************
250 * EOF (not truncated)
251 ******************************************************************************/
252
253
254