最近的项目捣鼓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. (Python基础教程之十八)Python字典交集–比较两个字典

    Python示例,用于查找2个或更多词典之间的常见项目,即字典相交项目. 1.使用"&"运算符的字典交集 最简单的方法是查找键,值或项的交集,即 & 在两个字典之间 ...

  2. JavaCC : Java Glossary

    JavaCC Formerly known as Jack. JavaCC is a parser, like YACC (Yet Another Compiler Compiler), except ...

  3. ThreeJs-04详解材质与纹理

    一.matcap材质 这个材质不会受到光照影响,但是如果图片本身有光就可以一直渲染这个图片本来的样子,用来将一个图片纹理渲染到物体上的材质 代码实现 加载模型后,开启纹理渲染,并把它的材质变为这个材质 ...

  4. ClickHouse 物化视图学习总结

    物化视图 物化视图源表--基础数据源 创建源表,因为我们的目标涉及报告聚合数据而不是单条记录,所以我们可以解析它,将信息传递给物化视图,并丢弃实际传入的数据.这符合我们的目标并节省了存储空间,因此我们 ...

  5. 《前端运维》二、Nginx--2请求处理流程及核心模块

    前一篇内容,我们学习了nginx的一些基本概念.安装和目录的作用.这篇文章我们来学习一些更加深入的内容. 一.Nginx请求处理流程 我们先来看张图吧: 我们看上图,首先客户端请求到Nginx服务器, ...

  6. fiddler:The system proxy was changed.Click to reenable capturing

    前情 最近在开发一个老旧项目,由于本地环境已难跑起,于是想通过代理线上代码进行功能开发. 坑位 启动fiddler后,fiddler菜单栏会警告,大概意思是代理被更改了,点击重启fillder代理,但 ...

  7. 树莓派4B 多屏 QT程序窗口全屏 QScreen 只能获取1个屏幕

    直接运行程序时,窗口全屏, 并且QScreen 只能获取1个屏幕,这是由于QT默认使用了EGLFS.(坑了一下午) 所以必须采用命令方式打开程序. ./程序名称 -platform xcb

  8. springboot连接mysql报错errorCode 0, state 08S01

    前言许久未维护的项目需要检查一些数据,重新运行项目发现有create connection SQLException ,具体报错信息是 errorCode 0, state 08S01 . Sprin ...

  9. jacoco-实战篇-增量覆盖率

    我fork的jacoco源码改造好:https://github.com/exmyth/jacoco 入口:https://github.com/exmyth/jacoco/blob/master/o ...

  10. 聊一聊 C#线程池 的线程动态注入 (中)

    一:背景 1. 讲故事 上一篇我们用 Thread.Sleep 的方式演示了线程池饥饿场景下的动态线程注入,可以观察到大概 1s 产生 1~2 个新线程,很显然这样的增长速度扛不住上游请求对线程池的D ...