智能车学习(五)—— dac学习
2015-10-08 21:13
295 查看
一、代码共享:
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的转换管教是哪个,需要查一下手册相关文章推荐
- RHCE7 管理II-5管理进程的优先级
- 常用的开源游戏服务器框架
- ocp-210
- 剑指offer—把字符串转换成整数
- 匿名内部类和内部类
- 【读书笔记】GCD-网络编程要不要使用GCD
- XSS跨站脚本攻击剖析与防御
- 【读书笔记】GCD-网络编程要不要使用GCD
- Codeforces Round #324 (Div. 2)C. Marina and Vasya set
- Anroid常用的辅助类(一)——网络相关
- hdoj Work 5326 (并查集+技巧) 好题
- 如何将GDB中需要的调试信息输出到文件
- Lintcode 二叉树前序遍历
- 黑马程序员—Foundation框架之NSArray与NSMutableArray
- 3Sum Closest
- 剑指offer—求1+2+3+...+n
- java文件读写方法
- UIWebView和WKWebView 改变HTML 图片尺寸 及 字体大小
- C#中的特定类型数组的默认值
- 第2章 变量和基本类型 附2 --声明和定义的区别