一、代码共享:

1、dac.h

  1. #ifndef DAC_H_
  2. #define DAC_H_
  3.  
  4. #include "common.h"
  5.  
  6. // 2.2 DAC控制寄存器0 位定义
  7. #define DAC_DISABLE 0x00 //禁止DAC
  8. #define DAC_ENABLE DAC_C0_DACEN_MASK //使能DAC
  9.  
  10. #define DAC_SEL_VREFO 0x00 //参考电压1选择
  11. #define DAC_SEL_VDDA DAC_C0_DACRFS_MASK //参考电压2选择
  12.  
  13. #define DAC_SEL_PDB_HW_TRIG 0x00 //硬件触发
  14. #define DAC_SEL_SW_TRIG DAC_C0_DACTRGSEL_MASK //软件触发
  15.  
  16. #define DAC_SW_TRIG_STOP 0x00 //软触发无效
  17. #define DAC_SW_TRIG_NEXT DAC_C0_DACSWTRG_MASK //软触发有效
  18.  
  19. #define DAC_HP_MODE 0x00 //高功耗模式
  20. #define DAC_LP_MODE DAC_C0_LPEN_MASK //低功耗模式
  21.  
  22. //#define DAC_BFWM_INT_DISABLE 0x00 //禁止缓冲溢出中断
  23. //#define DAC_BFWM_INT_ENABLE DAC_C0_DACBWIEN_MASK //使能缓冲溢出中断
  24.  
  25. #define DAC_BFT_PTR_INT_DISABLE 0x00 //禁止缓冲读取顶指针溢出
  26. #define DAC_BFT_PTR_INT_ENABLE DAC_C0_DACBTIEN_MASK //使能缓冲读取顶指针溢出
  27.  
  28. #define DAC_BFB_PTR_INT_DISABLE 0x00 //禁止缓冲读取底指针溢出
  29. #define DAC_BFB_PTR_INT_ENABLE DAC_C0_DACBBIEN_MASK //使能缓冲读取底指针溢出
  30.  
  31. // 2.3 DAC控制寄存器1 位定义
  32. #define DAC_DMA_DISABLE 0x00 //禁止DMA
  33. #define DAC_DMA_ENABLE DAC_C1_DMAEN_MASK //使能DMA
  34. #define DAC_BF_NORMAL_MODE 0x00
  35. //#define
  36. #define DAC_BF_DISABLE 0x00
  37.  
  38. //3 函数接口声明
  39.  
  40. //============================================================================
  41. //函数名称:dac_init
  42. //函数返回:无
  43. //参数说明: VreReference:参考电压选择。0=1.75V,1=3V。
  44. //功能概要:初始化DAC模块设定。
  45. //============================================================================
  46. void dac_init(uint8_t VreReference);
  47.  
  48. //============================================================================
  49. //函数名称:dac_convert
  50. //函数返回:DAC完成标志。0=完成失败,1=完成成功
  51. //参数说明:VReference: 参考电压转换值 范围(0~4095)
  52. //功能概要:执行DAC转换。
  53. //============================================================================
  54. uint8_t dac_convert(uint16_t VReference);
  55.  
  56. //============================================================================
  57. //函数名称:dac_set_buffer
  58. //函数返回:设置的缓冲区大小值
  59. //参数说明:dacx_base_ptr:DACx基指针
  60. // dacindex
  61. // buffval :缓冲区值
  62. //功能概要:设置DACx缓冲区
  63. //============================================================================
  64. int dac_set_buffer(DAC_MemMapPtr dacx_base_ptr, uint8_t dacindex, int buffval);
  65.  
  66. //============================================================================
  67. //函数名称:dac_set
  68. //函数返回:无
  69. //参数说明:dacx_base_ptr:DACx基指针
  70. // VrefSel: 参考电压
  71. //功能概要:DAC软件触发
  72. //============================================================================
  73. void dac_set(DAC_MemMapPtr dacx_base_ptr, uint8_t VrefSel);
  74.  
  75. #endif

2、dac.c

  1. #include "dac.h" //包含DAC驱动程序头文件
  2.  
  3. //============================================================================
  4. //函数名称:dac_init
  5. //函数返回:无
  6. //参数说明:RefVoltage:参考电压选择。0=1.2V,1=3.3V。
  7. //功能概要:初始化DAC模块设定。
  8. //============================================================================
  9. void dac_init(uint8_t RefVoltage)
  10. {
  11. uint8_t VreRF = DAC_SEL_VREFO;
  12. if(RefVoltage == 1)
  13. {
  14. VreRF = DAC_SEL_VDDA; //3.3V
  15. }
  16.  
  17. //SIM_SCGC2 |= SIM_SCGC2_DAC0_MASK ; //使能DAC 0
  18. SIM_SCGC6 |=SIM_SCGC6_DAC0_MASK; //使能DAC0时钟
  19. dac_set(DAC0_BASE_PTR,VreRF);
  20. }
  21.  
  22. //============================================================================
  23. //函数名称:dac_convert
  24. //函数返回:DAC完成标志。0=完成失败,1=完成成功
  25. //参数说明:VReference: 参考电压转换值 范围(0~4095)
  26. //功能概要:执行DAC转换。
  27. //============================================================================
  28. uint8_t dac_convert(uint16_t VReference)
  29. {
  30.  
  31. if(VReference != dac_set_buffer(DAC0_BASE_PTR, 0, VReference))
  32. {
  33. return 0;
  34. }
  35. else
  36. return 1;
  37. }
  38.  
  39. //内部函数
  40.  
  41. //============================================================================
  42. //函数名称:dac_set_buffer
  43. //函数返回:设置的缓冲区大小值
  44. //参数说明:dacx_base_ptr:DACx基指针
  45. // dacindex :缓冲区号
  46. // buffval :缓冲区值
  47. //功能概要:设置DACx缓冲区
  48. //============================================================================
  49. int dac_set_buffer( DAC_MemMapPtr dacx_base_ptr, uint8_t dacindex, int buffval)
  50. {
  51. int temp = 0;
  52. uint32_t datal = 0, datah = 0;
  53. //设置缓冲区低字节
  54. DAC_DATL_REG(dacx_base_ptr, dacindex) = (buffval&0x0ff);
  55. //设置缓冲区高字节
  56. DAC_DATH_REG(dacx_base_ptr, dacindex) = (buffval&0xf00) >>8;
  57. datal = DAC_DATL_REG(dacx_base_ptr, dacindex);
  58. datah = DAC_DATH_REG(dacx_base_ptr, dacindex)<<8;
  59. temp = (datal | datah);
  60. //temp =(DAC_DATL_REG(dacx_base_ptr, dacindex) | (DAC_DATH_REG(dacx_base_ptr, dacindex)<<8));
  61. return temp ;
  62. }
  63.  
  64. //============================================================================
  65. //函数名称:dac_set
  66. //函数返回:无
  67. //参数说明:dacx_base_ptr:DACx基指针
  68. // VrefSel: 参考电压
  69. //功能概要:配置DAC模块
  70. //============================================================================
  71. void dac_set(DAC_MemMapPtr dacx_base_ptr, uint8_t VrefSel)
  72. {
  73. //配置DAC_C0寄存器
  74. DAC_C0_REG(dacx_base_ptr) = (
  75. DAC_BFB_PTR_INT_DISABLE|//缓冲区置底中断禁止
  76. DAC_BFT_PTR_INT_DISABLE|//缓冲区置顶中断禁止
  77. //DAC_BFWM_INT_DISABLE |//水印中断禁止
  78. DAC_HP_MODE |//高功耗模式
  79. DAC_SW_TRIG_STOP |//软触发无效
  80. DAC_SEL_SW_TRIG |//选择软件触发
  81. VrefSel |//选择参考电压
  82. DAC_ENABLE //使能DAC0模块
  83. );
  84.  
  85. //配置DAC_C1寄存器
  86. DAC_C1_REG(dacx_base_ptr)= (
  87. DAC_BF_DISABLE |//DAC缓冲区禁止
  88. DAC_BF_NORMAL_MODE |//DAC选择区选择正常工作模式
  89. DAC_DMA_DISABLE //DMA禁止
  90. ) ;
  91. }

二、使用方法:

  1. uint16_t t = 0;
  2. dac_init(1);
  3.  
  4. while(1)
  1. {
  2. dac_convert(t);
  3. }

三、存在的问题:

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. centos6.5 nginx开机启动

    /etc/init.d/下添加nginxd文件,内容如下: #!/bin/bash # #chkconfig: - #description: Nginx is a World Wide Web se ...

  2. HTTP 错误 500.19- Internal Server Error 错误解决方法

    1.点击发布的文件夹,选择属性 2.选择安全,添加一个用户就可以了,设置为完全 --今天公司网页打开出现Server Error in '/' Application.怎么样解决. 解决方法:控制面板 ...

  3. HDU 2602 Bone Collector WA谁来帮忙找找错

    Problem Description Many years ago , in Teddy’s hometown there was a man who was called “Bone Collec ...

  4. 【python】入门学习(五)

    字符串: 正索引,从0开始 和 负索引,从-1开始 >>> s = 'apple' >>> s[0] 'a' >>> s[1] 'p' >& ...

  5. 解决Odoo出现的Unable to send email, please configure the sender's email address or alias.

    这是由于当前登录用户的邮件地址信息缺失造成的,需要设置其邮件地址. 方法:使用创建该用户的管理员帐号登录系统,开启技术特性,在需要设置邮箱地址的用户界面点击相关的业务伙伴标签链接,如图所示:

  6. NIS 报错No such map passwd.byname. Reason: Can't bind to server which serves this domain

    在NIS—client端使用命令:ypcat passwd ,把错如上题, 原因:client端ypbind服务未启动解决方法:当然是启动ypbind了,命令:service ypbind start ...

  7. 无限轮播的N+2 策略

    N张照片把contentsSize设置为N+2个图片的宽度,例子如下,两端填充如图,当处于一端时,且即将进入循环状态的时候,如第二张图,从状态1滑动到状态2,在滑动结束的时候,将当前的位置直接转到状态 ...

  8. Java常用工具类题库

    一.    填空题 在Java中每个Java基本类型在java.lang包中都在一个相应的包装类,把基本类型数据转换为对象,其中包装类Integer是___Number__的直接子类. 包装类Inte ...

  9. AI调色板

    AI新建图层时,要选择CMYK模式,才能出现如下图所示调色板,如果选RGB模式,那么调整颜色的时候只能通过输入RGB.

  10. 解决java.lang.SecurityException: Access to default session denied

    原先使用的代码如下: Session session = Session.getDefaultInstance(properties, null); 后来把代码修改为: Session session ...