-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMK60_dac.c
68 lines (58 loc) · 1.96 KB
/
MK60_dac.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/*!
* COPYRIGHT NOTICE
* Copyright (c) 2013,山外科技
* All rights reserved.
* 技术讨论:山外论坛 http://www.vcan123.com
*
* 除注明出处外,以下所有内容版权均属山外科技所有,未经允许,不得用于商业用途,
* 修改内容时必须保留山外科技的版权声明。
*
* @file MK60_dac.c
* @brief DAC函数
* @author 山外科技
* @version v5.0
* @date 2013-08-28
*/
#include "common.h"
#include "MK60_dac.h"
DAC_MemMapPtr DACN[2] = {DAC0_BASE_PTR, DAC1_BASE_PTR}; //定义两个指针数组保存 DACN 的地址
/*!
* @brief DAC初始化
* @param DACn_e DAC模块号
* @since v5.0
* Sample usage: dac_init (DAC1 ); //初始化 DAC1
*/
void dac_init(DACn_e dacn)
{
/* 使能时钟 */
SIM_SCGC2 |= (SIM_SCGC2_DAC0_MASK << dacn) ; //使能DAC模块
/* 配置DAC寄存器 */
//配置DAC_C0寄存器
DAC_C0_REG(DACN[dacn]) = ( 0
| DAC_C0_DACTRGSEL_MASK //选择软件触发
| DAC_C0_DACRFS_MASK //选择参考VDD电压(3.3V)
| DAC_C0_DACEN_MASK //使能DAC模块
);
//配置DAC_C1寄存器
DAC_C1_REG(DACN[dacn]) = ( 0
) ;
//配置DAC_C2寄存器
DAC_C2_REG(DACN[dacn]) = ( 0
| DAC_C2_DACBFRP(0) //设置缓冲区读指针指向0
);
DAC_DATH_REG(DACN[dacn], 0) = 0; //默认输出最低电压
DAC_DATL_REG(DACN[dacn], 0) = 0;
}
/*!
* @brief DAC输出
* @param DACn_e DAC模块号
* @param val 输出模拟量所对应的数字量(12bit)
* @since v5.0
* Sample usage: dac_out (DAC1 ,0x100); //初始化 DAC1 输出 0x100 数字量对应的模拟量
*/
void dac_out(DACn_e dacn, uint16 val)
{
ASSERT(val < 0x1000); //val 为 12bit
DAC_DATH_REG(DACN[dacn], 0) = (val >> 8); //输出电压
DAC_DATL_REG(DACN[dacn], 0) = (val & 0xFF);
}