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