一、代码共享:

1、dac.h

#ifndef DAC_H_
#define DAC_H_ #include "common.h" // 2.2 DAC控制寄存器0 位定义
#define DAC_DISABLE 0x00 //禁止DAC
#define DAC_ENABLE DAC_C0_DACEN_MASK //使能DAC #define DAC_SEL_VREFO 0x00 //参考电压1选择
#define DAC_SEL_VDDA DAC_C0_DACRFS_MASK //参考电压2选择 #define DAC_SEL_PDB_HW_TRIG 0x00 //硬件触发
#define DAC_SEL_SW_TRIG DAC_C0_DACTRGSEL_MASK //软件触发 #define DAC_SW_TRIG_STOP 0x00 //软触发无效
#define DAC_SW_TRIG_NEXT DAC_C0_DACSWTRG_MASK //软触发有效 #define DAC_HP_MODE 0x00 //高功耗模式
#define DAC_LP_MODE DAC_C0_LPEN_MASK //低功耗模式 //#define DAC_BFWM_INT_DISABLE 0x00 //禁止缓冲溢出中断
//#define DAC_BFWM_INT_ENABLE DAC_C0_DACBWIEN_MASK //使能缓冲溢出中断 #define DAC_BFT_PTR_INT_DISABLE 0x00 //禁止缓冲读取顶指针溢出
#define DAC_BFT_PTR_INT_ENABLE DAC_C0_DACBTIEN_MASK //使能缓冲读取顶指针溢出 #define DAC_BFB_PTR_INT_DISABLE 0x00 //禁止缓冲读取底指针溢出
#define DAC_BFB_PTR_INT_ENABLE DAC_C0_DACBBIEN_MASK //使能缓冲读取底指针溢出 // 2.3 DAC控制寄存器1 位定义
#define DAC_DMA_DISABLE 0x00 //禁止DMA
#define DAC_DMA_ENABLE DAC_C1_DMAEN_MASK //使能DMA
#define DAC_BF_NORMAL_MODE 0x00
//#define
#define DAC_BF_DISABLE 0x00 //3 函数接口声明 //============================================================================
//函数名称:dac_init
//函数返回:无
//参数说明: VreReference:参考电压选择。0=1.75V,1=3V。
//功能概要:初始化DAC模块设定。
//============================================================================
void dac_init(uint8_t VreReference); //============================================================================
//函数名称:dac_convert
//函数返回:DAC完成标志。0=完成失败,1=完成成功
//参数说明:VReference: 参考电压转换值 范围(0~4095)
//功能概要:执行DAC转换。
//============================================================================
uint8_t dac_convert(uint16_t VReference); //============================================================================
//函数名称:dac_set_buffer
//函数返回:设置的缓冲区大小值
//参数说明:dacx_base_ptr:DACx基指针
// dacindex
// buffval :缓冲区值
//功能概要:设置DACx缓冲区
//============================================================================
int dac_set_buffer(DAC_MemMapPtr dacx_base_ptr, uint8_t dacindex, int buffval); //============================================================================
//函数名称:dac_set
//函数返回:无
//参数说明:dacx_base_ptr:DACx基指针
// VrefSel: 参考电压
//功能概要:DAC软件触发
//============================================================================
void dac_set(DAC_MemMapPtr dacx_base_ptr, uint8_t VrefSel); #endif

2、dac.c

#include "dac.h"               //包含DAC驱动程序头文件

//============================================================================
//函数名称:dac_init
//函数返回:无
//参数说明:RefVoltage:参考电压选择。0=1.2V,1=3.3V。
//功能概要:初始化DAC模块设定。
//============================================================================
void dac_init(uint8_t RefVoltage)
{
uint8_t VreRF = DAC_SEL_VREFO;
if(RefVoltage == 1)
{
VreRF = DAC_SEL_VDDA; //3.3V
} //SIM_SCGC2 |= SIM_SCGC2_DAC0_MASK ; //使能DAC 0
SIM_SCGC6 |=SIM_SCGC6_DAC0_MASK; //使能DAC0时钟
dac_set(DAC0_BASE_PTR,VreRF);
} //============================================================================
//函数名称:dac_convert
//函数返回:DAC完成标志。0=完成失败,1=完成成功
//参数说明:VReference: 参考电压转换值 范围(0~4095)
//功能概要:执行DAC转换。
//============================================================================
uint8_t dac_convert(uint16_t VReference)
{ if(VReference != dac_set_buffer(DAC0_BASE_PTR, 0, VReference))
{
return 0;
}
else
return 1;
} //内部函数 //============================================================================
//函数名称:dac_set_buffer
//函数返回:设置的缓冲区大小值
//参数说明:dacx_base_ptr:DACx基指针
// dacindex :缓冲区号
// buffval :缓冲区值
//功能概要:设置DACx缓冲区
//============================================================================
int dac_set_buffer( DAC_MemMapPtr dacx_base_ptr, uint8_t dacindex, int buffval)
{
int temp = 0;
uint32_t datal = 0, datah = 0;
//设置缓冲区低字节
DAC_DATL_REG(dacx_base_ptr, dacindex) = (buffval&0x0ff);
//设置缓冲区高字节
DAC_DATH_REG(dacx_base_ptr, dacindex) = (buffval&0xf00) >>8;
datal = DAC_DATL_REG(dacx_base_ptr, dacindex);
datah = DAC_DATH_REG(dacx_base_ptr, dacindex)<<8;
temp = (datal | datah);
//temp =(DAC_DATL_REG(dacx_base_ptr, dacindex) | (DAC_DATH_REG(dacx_base_ptr, dacindex)<<8));
return temp ;
} //============================================================================
//函数名称:dac_set
//函数返回:无
//参数说明:dacx_base_ptr:DACx基指针
// VrefSel: 参考电压
//功能概要:配置DAC模块
//============================================================================
void dac_set(DAC_MemMapPtr dacx_base_ptr, uint8_t VrefSel)
{
//配置DAC_C0寄存器
DAC_C0_REG(dacx_base_ptr) = (
DAC_BFB_PTR_INT_DISABLE|//缓冲区置底中断禁止
DAC_BFT_PTR_INT_DISABLE|//缓冲区置顶中断禁止
//DAC_BFWM_INT_DISABLE |//水印中断禁止
DAC_HP_MODE |//高功耗模式
DAC_SW_TRIG_STOP |//软触发无效
DAC_SEL_SW_TRIG |//选择软件触发
VrefSel |//选择参考电压
DAC_ENABLE //使能DAC0模块
); //配置DAC_C1寄存器
DAC_C1_REG(dacx_base_ptr)= (
DAC_BF_DISABLE |//DAC缓冲区禁止
DAC_BF_NORMAL_MODE |//DAC选择区选择正常工作模式
DAC_DMA_DISABLE //DMA禁止
) ;
}

二、使用方法:

uint16_t t = 0;
dac_init(1); while(1)
{
dac_convert(t);
}

三、存在的问题:

dac的转换管教是哪个,需要查一下手册

智能车学习(五)—— dac学习的更多相关文章

  1. 智能车学习(十五)——K60野火2013版例程

    一.中断函数注册方法: 1.格式: 配置某个功能的中断 注册中断函数 开启中断 2.一个例子 pit_init_ms(PIT0,);//定时中断初始化 set_vector_handler(PIT0_ ...

  2. 《Linux内核设计与实现》课本第五章学习笔记——20135203齐岳

    <Linux内核设计与实现>课本第五章学习笔记 By20135203齐岳 与内核通信 用户空间进程和硬件设备之间通过系统调用来交互,其主要作用有三个. 为用户空间提供了硬件的抽象接口. 保 ...

  3. 20145213《Java程序设计》第五周学习总结补充

    20145213<Java程序设计>第五周学习总结补充 教材学习内容总结 欠的账都是要还的!第九章的内容躲过对酒当歌的夜,躲不过四下无人的街.由于第五周贪玩,疏忽冷落了Collection ...

  4. 20145213《Java程序设计》第五周学习总结

    20145213<Java程序设计>第五周学习总结 教材学习内容总结 "素衣莫起风尘叹,犹及清明可到家."每每念此,不得不心疼自己.古人清明长假都进城耍了,还担心自己清 ...

  5. 20145337 《Java程序设计》第五周学习总结

    20145337 <Java程序设计>第五周学习总结 教材学习内容总结 第八章 JAVA中的所有错误都会被包装成对象,如果你愿意,可以尝试执行并捕捉代表错误的对象后做一些处理.使用了try ...

  6. 20145218 《Java程序设计》第五周学习总结

    20145218 <Java程序设计>第五周学习总结 教材学习内容总结 异常 程序中总有些意想不到的状况所引发的错误,如果不对异常进行正确的处理,则可能导致程序的中断执行,造成不必要的损失 ...

  7. 《Java程序设计》第五周学习总结

    20145224 <Java程序设计>第五周学习总结 教材学习内容总结 第八章异常处理 8.1.1使用try.catch ·教材范例用户连续输入整数,输入0结束后显示输入数的平均值(代码如 ...

  8. 20145103《java程序设计》第五周学习总结

    20145103<Java程序设计>第5周学习总结 教材学习内容总结 第八章 异常处理 1.设计错误对象都继承自java.lang.Throwable类 2.Java中所有错误都会被打包为 ...

  9. TweenMax动画库学习(五)

    目录            TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            Tw ...

  10. 20155304 2016-2017-2 《Java程序设计》第五周学习总结

    20155304 2016-2017-2 <Java程序设计>第五周学习总结 教材学习内容总结 第八章 try catch JVM会先尝试执行try区块中的内容,若发生错误且与catch后 ...

随机推荐

  1. ios 中的autoresizingMask

    以前对这个知识理解的不太对,看了下面这个地址的文章后,感觉说的对,也没检验,今天实验后,发现是错的...在这里对以前读过此文的朋友表示抱歉. 原文地址如下: http://www.cnblogs.co ...

  2. python模块名和文件名冲突解决

    对于python初学者,很容易练习到一个随机数生成的程序,代码如下: #!/usr/bin/python import random print(random.randint(12,20)) 这个小程 ...

  3. ffmpeg-20160728-bin.7z

    ESC 退出 0 进度条开关 1 屏幕原始大小 2 屏幕1/2大小 3 屏幕1/3大小 4 屏幕1/4大小 S 下一帧 [ -2秒 ] +2秒 ; -1秒 ' +1秒 下一个帧 -> -5秒 f ...

  4. Effective C++ -----条款22:将成员变量声明为private

    切记将成员变量声明为private.这可赋予客户访问数据的一致性.可细微划分访问控制.允诺约束条件获得保证,并提供class作者以充分的实现弹性. protected并不比public更具有封装性.

  5. Divide and conquer:Subset(POJ 3977)

    子序列 题目大意:给定一串数字序列,要你从中挑一定个数的数字使这些数字和绝对值最小,求出最小组合数 题目的数字最多35个,一看就是要数字枚举了,但是如果直接枚举,复杂度就是O(2^35)了,显然行不通 ...

  6. BestCoder8 1001.Summary(hdu 4989) 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4989 题目意思:给出 n 个数,然后将这些数两两相加,得到 n*(n-1) /2 对和,把重复的和去掉 ...

  7. Zookeeper WINDOWS 安装配置

    下载:zookeeper:http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz 解压zo ...

  8. Gson解析复杂的json数据

    最近在给公司做一个直播APK的项目,主要就是通过解析网络服务器上的json数据,然后将频道地址下载下来再调用Android的播放器进行播放,原先本来打算使用普通的json解析方法即JsonObject ...

  9. php抽象工厂模式的研究

    上一节理解了工厂模式.其代码原理如下: <?php abstract class ApptEncoder{ abstract function encode(); } class BloggsA ...

  10. 立方体旋转 【web前端学习部落22群120342833】

    效果: HTML部分: <body class="body"> <div class="rect-wrap">   <!-- // ...