/*! * 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); }