最近的项目捣鼓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. 通过squid将本地作为代理让不可联网的远端服务器联网

    一种方法 https://unix.stackexchange.com/questions/116191/give-server-access-to-internet-via-client-conne ...

  2. Jenkins篇-安装与使用

    Jenkins是一个开源自动化服务器,可以自动执行持续集成和交付软件所涉及的重复技术任务.Jenkins是基于Java的,可以从Ubuntu软件包安装,也可以通过下载和运行其Web应用程序存档(WAR ...

  3. Linux之buffer/cache

    buffers和cached解释 =========================================================缓存(cached)是把读取过的数据保存起来,重新读 ...

  4. Nuxt.js 应用中的 close 事件钩子

    title: Nuxt.js 应用中的 close 事件钩子 date: 2024/12/2 updated: 2024/12/2 author: cmdragon excerpt: close 钩子 ...

  5. H5C3时钟实例(rem适配)

    1.原理分析和效果图 先上效果图: 屏幕适配上使用rem适配,假设用户的手机屏幕最下宽度是375px,而谷歌浏览器最小的字体大小为12px,所以我以375px为标准尺寸进行rem适配,即375px的屏 ...

  6. cento 申请ssl证书笔记

    如果您的Certbot工具没有内置的Nginx插件,您可以尝试以下方法来申请证书并配置Nginx服务器: 安装Certbot的Nginx插件: sudo yum install certbot-ngi ...

  7. C# Redis 的基本使用

    C# Redis 的基本使用 -迷恋自留地 Redis 概述 在我们日常的开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没有什么问题,可是一 ...

  8. 中电金信发布两款大模型产品,打通AI+应用“最后一公里”

    近年来,以大模型为代表的人工智能技术已成为引领新一代产业变革的核心动力.2024年政府工作报告首次提出"人工智能+",要求"大力推进现代化产业体系建设,加快发展新质生产力 ...

  9. [python]Markdown图片引用格式批处理桌面应用程序

    需求 使用python编写一个exe,实现批量修改图片引用,将修改后的文件生成为 文件名_blog.md.有一个编辑框,允许接收拖动过来md文件,拖入文件时获取文件路径,有一个编辑框编辑修改后的文件的 ...

  10. mybatis-plus多表联合分页查询

    1.entity层要写个Vo实体类 2.controller @AutoLog(value = "员工CURD-分页列表查询")@ApiOperation(value=" ...