最近的项目捣鼓msp430需要用到dac转换以输出模拟信号,项目代码是接手前同事的 有些地方调试不通,以前没有接触过msp430芯片,更是没搞过这种芯片io口时序驱动层的东西,甚至纯c的都是头一次作为工作正式用。没办法 万事开头难嘛 ,硬着头皮网上到处翻资料 找芯片的手册 找dac外设的寄存器说明,功夫不负有心人 最终还是被我解决了。

记录一下解决的过程

首先对以前的代码浏览了一遍,以及对网上到处抄过去抄过来的文章有了个初步的大概套路了解。首先这是一个12位的dac外设 ,先对他进行初始化就是 设置参考电压源 设置各个寄存器 打开外设,然后12位嘛 自然是0x00~0xfff输出对应电压。就像下面这样,事先我已经确保了硬件连线是正确的,知道了DAC12_0CTL是寄存器控制位,知道了DAC12ENC是使外设工作,DAC12_0DAT是输出模拟量。

1 //不能使用内部参考电压 会影响到温度传感器
2 //ADC12CTL0 = REFON + REF2_5V; // 参考电压为内部2.5v
3 DAC12_0CTL = DAC12AMP_5 + DAC12IR + DAC12LSEL_0;//控制寄存器设置,自动更新数据,内基准为满量程
4 DAC12_0CTL |= DAC12SREF_2;//使用外部参考电压 外部的为3.3v
5 DAC12_0CTL |= DAC12ENC; // 启动DAC模块(DAC12LSEL_0时此句可以省,这里设置为1)
6 DAC12_0DAT = 0x0000; //DAC初值为0,更新这个寄存器就可以更改DAC输出数据

好我们继续往下工作,然后在网上翻到了一篇芯片的中文手册  https://www.docin.com/p-301491113.html  找到了第119页关于DAC外设描述的位置,主要就是这幅图。

学单片机入门的时候这种框图也见识过 知道是单片机内部机制的描述 跟内部机制是对应的,自己凭这种图真正解决问题的话是头一遭。进而我观察到了自己代码跟图上有联系关系,怎么个联系法呢 ,那就是DAC12SREFX吸引了我的关注,因为代码里跟图上单词是相似的,原来代码里写的是DAC12SREF_0 ,进而我跟踪到了他的定义。

1 #define DAC12SREF_0         (0*0x2000u)  /* DAC12 reference 0: Vref+ */
2 #define DAC12SREF_1 (1*0x2000u) /* DAC12 reference 1: Vref+ */
3 #define DAC12SREF_2 (2*0x2000u) /* DAC12 reference 2: Veref+ */
4 #define DAC12SREF_3 (3*0x2000u) /* DAC12 reference 3: Veref+ */

通过后面的注释以及其它网站的说明了解到Vref+是内部参考电压源 Veref+是外部参考电压源,再进而发现下面还有一个寄存器描述表,我知道事情有眉目了。

通过对照硬件原理图我已经事先知道了确实是使用的0号通道,也就是DAC12_0CTL,再结合上面的框图知道了第01是vref 通过框图看到也是对应的节点也是连在一起的。23是veref,我们是使用外部电压参考源那么使用2。对照框图和寄存器说明 以及注释 觉得直接使用

DAC12SREF_2应该就对了,那么我们还是来确保验证一下吧。
1 #define DAC12SREF_2         (2*0x2000u)  /* DAC12 reference 2: Veref+ */

2*0x2000u对照上面的寄存器说明可以看到第14 和13 位是二进制的10 ,也正好契合到框图的DAC12SREFX处梯形的第三个。说明根据以前经验的推测都是正确的。由于我用的IAR工具里没法调试,于是把初始化的几个宏定义玲出来在vc++里查看了最终组合出的字节值,以及把对应的二进制位对照寄存器说明进行了一个确认。然后DAC12_0DAT进行输出 ,测试一下,大功告成,一切正常。

经过这一过程,感觉人真是神奇 对吧,  通过对现象规律关联思索  对现象的预测 建立假想模型  ,主观能动性加上摸索学习能力,竟然也可以解决未知的问题。

记一次DAC转换功能修改的解决的更多相关文章

  1. 实现十进制无符号整数m到十六进制数的转换功能

    /*利用顺序栈结构,编写算法函数void Dto16(unsigned int m)实现十进制无符号整数m到十六进制数的转换功能.*//******************************** ...

  2. maximo功能修改(初步理解)

    已接触IBM公司的MAXIMO近三个月,在这时间里自己对maximo也有所了解,今天将自己总结写在这里,方便自己的温习和大家的参考,不足之处还望指出,我一定在第一时间内修改. 今天在公司所做的就是完善 ...

  3. java11-5 String类的转换功能

    String的转换功能: byte[] getBytes():把字符串转换为字节数组. char[] toCharArray():把字符串转换为字符数组. static String valueOf( ...

  4. Java基础知识强化34:String类之String类的转换功能

    1. String类的转换功能 String[] split(String regex)//将字符串变成字符串数组(字符串切割) byte[] getBytes()//将字符串变成字节数组 char[ ...

  5. javaCV开发详解之7:让音频转换更加简单,实现通用音频编码格式转换、重采样等音频参数的转换功能(以pcm16le编码的wav转mp3为例)

    javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG.j ...

  6. C++ operator重载运算符和隐式转换功能的实现

    C++ operator重载运算符和隐式转换功能的实现: #include <iostream> using namespace std; class OperatorTest { pub ...

  7. github 换行符自动转换功能

    最近想把自己的一个Qt工程同步到github上,但是当自己把代码从仓库中签出来的时候编译的时候总是出现一些很奇葩的错误,一开始以为是源文件编码的问题,改了编码以后问题还是没有解决,我比较了一下两个工程 ...

  8. String的用法——转换功能

    package cn.itcast_05; /* String类的转换功能: byte[] getByte():把字符串转换成字节数组 复习: public String(byte[] bytes): ...

  9. String类的转换功能

    /* * String类的转换功能 * char[] toCharArray():把字符串转换为字符数组 * String toLowerCase():把字符串转换为小写字符串 * String to ...

  10. ABBYY FineReader 15新增智能PDF文档转换功能

    ABBYY FineReader 15(Windows系统)新增智能PDF文档转换功能,可自动检测导入PDF数字文档的文本层质量,确保转变为可编辑格式后的准确结果:从表单字段和文本框中提取文本,准确保 ...

随机推荐

  1. Mysql 通用分页

    第一步,建立数据库: create table student( id int primary key auto_increment, code varchar(50), name varchar(5 ...

  2. 支付宝支付功能接入(PC)

    在使用支付宝支付功能开发的阶段, 可以在沙箱环境下进行开发, 开发完成之后, 到线上再进行相关参数的替换即可 一. 登陆支付宝开放平台(https://open.alipay.com/platform ...

  3. 逆向WeChat(八)

    上一篇逆向WeChat(七)是逆向微信客户端本地数据库相关事宜. 本篇逆向微信客户端本地日志xlog相关的事宜. 本篇在博客园地址https://www.cnblogs.com/bbqzsl/p/18 ...

  4. 树莓派4B 微雪7寸触摸屏 双屏 触摸屏校正

    树莓派4B+微雪7寸触摸屏+PC显示器,以触摸屏位主显示,PC显示器扩展,这时会有触摸不准的情况. 通过观察可以发现触摸被放大到了整个屏幕,即触摸屏+PC显示器. 1. 通过查看2个屏幕分辨率和位置, ...

  5. C/C++源码扫描系列- Fortify 篇

    首发于 https://xz.aliyun.com/t/9276 概述 Fortify是一款商业级的源码扫描工具,其工作原理和codeql类似,甚至一些规则编写的语法都很相似,其工作示意图如下: 首先 ...

  6. docker部署最新6.2版Zabbix Server端

    一.安装docker,参见本博客docker安装文档. 二.启动空的mysql -e MYSQL_DATABASE="zabbix" \ -e MYSQL_USER="z ...

  7. Flutter之GetX之国际化

    Flutter之GetX之国际化 在GetMaterialApp中设置 GetMaterialApp( locale: Get.deviceLocale, translations: Messages ...

  8. linux shell移植,sh不支持数组及bash移植

    查看此时系统shell ls -al /bin/sh Linux 操作系统缺省的 shell 是Bourne Again shell,它是 Bourne shell 的扩展,简称 Bash,与 Bou ...

  9. Idea如何关闭单词拼写检查

    打开Intellij Idea,在代码中输入lisi或zhangsan单词,可见这两个单词下面出现了绿色波浪线,表明词库中找不到这两个单词 2 鼠标移到波浪线上,可以看到如下提示信息,点击[more] ...

  10. Qt音视频开发1-vlc解码播放

    一.前言 最开始接触视频监控这块的时候,用的就是vlc作为解码的内核,主要是因为vlc使用简单方便,直接传入一个句柄即可,简单几行代码就可以实现一个视频流播放,很适合初学者使用,也推荐初学者用qt+v ...