MSPM0L1306例程学习-ADC部分(1)

MSPM0L1306例程学习-ADC部分(1)

MSPM0L1306例程学习

使用的TI的官方例程,即SDK里边包含的例程代码。

MCU使用的是MSPM0L1306, 对于ADC部分,有10个例程:
mspm0sdk中的ADC例程

例程理解

ADC的转换有多种工作模式,从最简单的单通道单次转换开始入手,即对特定的某个输入通道,进行一次电压的采样,并且读取ADC的转换结果。

标黑的三个例程,代码结构几乎相同,所使用的参考电压源不同而已。都是对ADC转换的结果,与参考电压的一半进行比较,根据判断结果点亮对应的LED灯。

  • adc12_single_conversion :单通道单次转换,直接使用AVCC作为参考电压源;
  • adc12_single_conversion_vref_internal:单通道单次转换,使用内部参考电压源,配置VREF为2.5V;
  • adc12_single_conversion_vref_external:单通道单次转换,使用外部参考电压源,需要外接参考电压到VREF+引脚;

从这三个例程入手,代码结构如下:
在这里插入图片描述
在这里插入图片描述

详细代码注释如下,因为代码都涉及到sysconfig图形配置工具,所以把对应的内容也一并截图上传。

  • GPIO部分,相同的配置,配置了一个GPIO口,用于点亮LED灯操作;
  • ADC部分,也基本相同的配置,时钟,分频;单通道单次转换,使用MEM0,自动采样,软件触发;
  • 在参考电压的选择上,是最大的区别,3个例程分别选择了不同的参考电压,如果选择了vref,还需要在vref模块中对电压进行配置。

adc12_single_conversion

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
详细代码如下:

/*
 * ADC转换的SDK例程
 * 文件名:adc12_single_conversion.c
 *
 * 描述:
 *   1、单通道单次转换、自动采样模式、软件触发;
 *   2、使用MEM0,通道0(PA27),直接用电源电压作为参考电压
 *   3、PA0引脚连接有LED灯;
 *   4、对通道0进行AD采样和转换,根据转换结果进行LED的指示操作:
 *     a.当转换结果小于0x7ff时,LED灭; 否则,点亮LED
 *
 * 操作描述:
 *   1、下载程序,全速运行;
 *   2、引脚PA27通过杜邦线连接VCC或GND
 *     a. 连接到VCC时,红色LED点亮;
 *     b. 连接到GND时,红色LED熄灭.
 * 注意事项:
 *   1、如果使用的是LP-MSPM0L1306, PA27引脚默认通过跳线帽连接三色LED2;
 *
 * 思考:
 *   给输入引脚上施加一个电压,看测量值是否符合预取结果。
 *
 * 修改:
 *   基于官方的sdk例程增加注释,xie_sx@126.com
 */

#include "ti_msp_dl_config.h"

//ADC转换完成的标识,在ADC的中断里设为有效;
volatile bool gCheckADC;

volatile uint16_t gAdcResult;

int main(void)
{
    //初始化配置
    SYSCFG_DL_init();

    //使能中断
    NVIC_EnableIRQ(ADC12_0_INST_INT_IRQN);

    //标志位清零
    gCheckADC = false;

    while (1)
    {
        //软件开启ADC转换,SC=1
        DL_ADC12_startConversion(ADC12_0_INST);

        //等待转换完成
        //如果标志位gCheckADC不是true,程序在while循环等待
        //gCheckADC=true后,程序继续往下执行
        while (false == gCheckADC)
        {
            __WFE();
        }


        //读取ADC12的转换结果
        gAdcResult = DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_0);

        //对ADC12的转换结果进行处理
        if (gAdcResult > 0x7ff)
        {
            DL_GPIO_clearPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN);
        }
        else
        {
            DL_GPIO_setPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN);
        }

        //ADC12的转换标志位清零
        gCheckADC = false;

        //使能ADC转换,即ENC=1,等待触发信号
        DL_ADC12_enableConversions(ADC12_0_INST);
    }
}


/*
 * ADC12中断处理函数
 *
 * 中断里边只设置标志位gCheckADC
 *
 */

void ADC12_0_INST_IRQHandler(void)
{
    switch (DL_ADC12_getPendingInterrupt(ADC12_0_INST))
    {
        case DL_ADC12_IIDX_MEM0_RESULT_LOADED:
            //结果存储寄存器有更新
            gCheckADC = true;
            break;
        default:
            break;
    }
}

adc12_single_conversion_vref_internal

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
详细代码如下:

/*
 * ADC转换的SDK例程
 * 文件名:adc12_single_conversion_vref_internal.c
 * 描述:
 *   1、单通道单次转换、自动采样模式、软件触发;
 *   2、使用MEM0,通道2(PA25),使用内部参考电压,2.5V
 *   3、PA0引脚连接有LED灯;
 *   4、对通道0进行AD采样和转换,根据转换结果进行LED的指示操作:
 *     a.当转换结果小于0x7ff时,LED灭; 否则,点亮LED
 *
 * 操作描述:
 *   1、下载程序,全速运行;
 *   2、引脚PA25通过杜邦线连接VCC或GND
 *     a. 连接到VCC时,红色LED点亮;
 *     b. 连接到GND时,红色LED熄灭.
 * 注意事项:
 *   1、如果使用的是LP-MSPM0L1306, PA25引脚默认接有跳线帽J4;
 *
 * 思考:
 *   给输入引脚上施加一个电压,看测量值是否符合预取结果。
 *
 * 修改:
 *   基于官方的sdk例程增加注释,xie_sx@126.com
 */

#include "ti_msp_dl_config.h"

volatile bool gCheckADC;
volatile uint16_t adcResult;

int main(void)
{
    //初始化配置
    SYSCFG_DL_init();

    //使能中断
    NVIC_EnableIRQ(ADC12_0_INST_INT_IRQN);

    gCheckADC = false;

    //在启动ADC12转换之前,先确认参考电压VREF已稳定
    while (DL_VREF_CTL1_READY_NOTRDY == DL_VREF_getStatus(VREF));

    while (1)
    {
        //软件开启ADC转换,SC=1
        DL_ADC12_startConversion(ADC12_0_INST);

        //等待转换完成
        //如果标志位gCheckADC不是true,程序在while循环等待
        //gCheckADC=true后,程序继续往下执行
        while (false == gCheckADC)
        {
            __WFE();
        }

        //读取ADC12的转换结果
        adcResult = DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_0);

        //对ADC12的转换结果进行处理
        if (adcResult > 0x7ff)
        {
            DL_GPIO_clearPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN);
        }
        else
        {
            DL_GPIO_setPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN);
        }

        //ADC12的转换标志位清零
        gCheckADC = false;

        //使能ADC转换,即ENC=1,等待触发信号
        DL_ADC12_enableConversions(ADC12_0_INST);
    }
}



/*
 * ADC12中断处理函数
 *
 * 中断里边只设置标志位gCheckADC
 *
 */

void ADC12_0_INST_IRQHandler(void)
{
    switch (DL_ADC12_getPendingInterrupt(ADC12_0_INST))
    {
        case DL_ADC12_IIDX_MEM0_RESULT_LOADED:
            gCheckADC = true;
            break;
        default:
            break;
    }
}

adc12_single_conversion_vref_external

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
详细代码如下:

/*
 * ADC转换的SDK例程
 * 文件名:adc12_single_conversion_vref_external.c
 * 描述:
 *   1、单通道单次转换、自动采样模式、软件触发;
 *   2、使用MEM0,通道2(PA25),使用内部参考电压,2.5V
 *   3、PA0引脚连接有LED灯;
 *   4、对通道0进行AD采样和转换,根据转换结果进行LED的指示操作:
 *     a.当转换结果小于0x7ff时,LED灭; 否则,点亮LED
 *
 * 操作描述:
 *   1、下载程序,全速运行;
 *   2、引脚PA25通过杜邦线连接VCC或GND
 *     a. 连接到VCC时,红色LED点亮;
 *     b. 连接到GND时,红色LED熄灭.
 * 注意事项:
 *   1、如果使用的是LP-MSPM0L1306, PA25引脚默认接有跳线帽J4;
 *   2、需要VREF+引脚外接参考电压
 *
 * 思考:
 *   给输入引脚上施加一个电压,看测量值是否符合预取结果。
 *
 * 修改:
 *   基于官方的sdk例程增加注释,xie_sx@126.com
 */

#include "ti_msp_dl_config.h"

/* 宏定义配置
 * 先定义了外部参考电压ADC12_EXTERNAL_REF_VOLTAGE, 取参考电压的一半为监测比较的电压ADC12_MONITOR_VOLTAGE
 * 因为ADC位数为12位,通过宏定义的方式计算出了参考电压的一半值所对应的ADC转换结果ADC12_MONITOR_VALUE
 *
 * 实际上ADC12_MONITOR_VALUE,可以直接计算出来的。 2的12次方的一半,2048,即12位ADC满量程的一半;
 * 如果是10位AD,一半为512
 */
/* clang-format off */
#define ADC12_BIT_RESOLUTION          (12)
#define ADC12_EXTERNAL_REF_VOLTAGE    (3.3)
#define ADC12_MONITOR_VOLTAGE         (ADC12_EXTERNAL_REF_VOLTAGE / 2)
#define ADC12_MONITOR_VALUE           ((1 << ADC12_BIT_RESOLUTION) * (ADC12_MONITOR_VOLTAGE / (ADC12_EXTERNAL_REF_VOLTAGE)))
/* clang-format on */

volatile bool gCheckADC;

int main(void)
{
    uint16_t adcResult;

    //初始化配置
    SYSCFG_DL_init();

    //使能中断
    NVIC_EnableIRQ(ADC12_0_INST_INT_IRQN);

    gCheckADC = false;

    while (1)
    {
        //软件开启ADC转换,SC=1
        DL_ADC12_startConversion(ADC12_0_INST);

        //等待转换完成
        //如果标志位gCheckADC不是true,程序在while循环等待
        //gCheckADC=true后,程序继续往下执行
        while (false == gCheckADC)
        {
            __WFE();
        }

        //读取ADC12的转换结果
        adcResult = DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_0);

        //对ADC12的转换结果进行处理
        if (adcResult > ADC12_MONITOR_VALUE)
        {
            DL_GPIO_clearPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN);
        }
        else
        {
            DL_GPIO_setPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN);
        }

        //?这一句没太必要,多余的
        DL_ADC12_stopConversion(ADC12_0_INST);

        //ADC12的转换标志位清零
        gCheckADC = false;

        //使能ADC转换,即ENC=1,等待触发信号
        DL_ADC12_enableConversions(ADC12_0_INST);
    }
}


/*
 * ADC12中断处理函数
 *
 * 中断里边只设置标志位gCheckADC
 *
 */

void ADC12_0_INST_IRQHandler(void)
{
    switch (DL_ADC12_getPendingInterrupt(ADC12_0_INST))
    {
        case DL_ADC12_IIDX_MEM0_RESULT_LOADED:
            gCheckADC = true;
            break;
        default:
            break;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/239625.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode题目拓展】第207题 课程表 拓展(拓扑排序、Tarjan算法、Kosaraju算法)

文章目录 一、拓扑排序题目二、题目拓展1. 思路分析2. tarjan算法3. kosaraju算法 一、拓扑排序题目 最近在看一个算法课程的时候看到了一个比较好玩的题目的扩展&#xff0c;它的原题如下&#xff1a; 对应的LeetCode题目为 207. 课程表 这个题目本身来说比较简单&#xff…

单元测试技术

文章目录 一、单元测试快速入门二、单元测试断言三、Junit框架的常用注解 一、单元测试快速入门 所谓单元测试&#xff0c;就是针对最小的功能单元&#xff0c;编写测试代码对其进行正确性测试。 常规的例如如果在main中测试&#xff0c;比如说我们写了一个学生管理系统&…

【九】spring、springmvc、springboot、springcloud

spring、springmvc 、springboot 、springcloud 简介 从事IT这么些年&#xff0c;经历了行业技术的更迭&#xff0c;各行各业都会有事务更新&#xff0c;IT行业技术更迭速度快的特点尤为突出&#xff0c;或许这也是从事这个行业的压力所在&#xff0c;但另一方面反应了这个行业…

2023年第三季度全球SSD出货量环比增长24%,市场复苏!

根据Trendfocus发布的研究报告显示&#xff1a;2023年第三季度全球SSD出货量环比增长24%&#xff0c;达到9306万pcs&#xff0c;出货容量也增长了21%&#xff0c;达到7769EB。三星出货量市场TOP1&#xff0c;其次是WDC西部数据、金士顿、镁光Micron、海力士等。 由于PC OEM连续…

【精选】小白是如何挖漏洞的(技巧篇)

目录&#xff1a; 怎么找漏洞 找到后如何挖漏洞 关于通杀漏洞N day漏洞的挖掘 漏洞如何提交 每小结都有提供对应的案例&#xff0c;简直不要太nice&#xff01; 这个月的SRC活动也快开始了&#xff0c;看到群里的小伙伴在问如何找漏洞&#xff0c;SQL注入的漏洞咋找&#x…

jQuery遍历与删除添加节点

个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一名大二在校生 &#x1f921; 个人主页&#xff1a;坠入暮云间x &#x1f43c;座右铭&#xff1a;懒惰受到的惩罚不仅仅是自己的失败&#xff0c;还有别人的成功。 &#x1f385;**学习目标: 坚持每一次的学习打卡 文章…

极简壁纸js逆向(混淆处理)

本文仅用于技术交流&#xff0c;不得以危害或者是侵犯他人利益为目的使用文中介绍的代码模块&#xff0c;若有侵权请练习作者更改。 之前没学js&#xff0c;卡在这个网站&#xff0c;当时用的自动化工具&#xff0c;现在我要一雪前耻。 分析 第一步永远都是打开开发者工具进…

接口管理——Swagger

Swagger是一个用于设计、构建和文档化API的工具集。它包括一系列工具&#xff0c;如Swagger Editor&#xff08;用于编辑Swagger规范&#xff09;、Swagger UI&#xff08;用于可视化API文档&#xff09;和Swagger Codegen&#xff08;用于根据API定义生成客户端库、server stu…

【FPGA】Verilog:BCD 加法器的实现 | BCD 运算 | Single-level 16 bit 超前进位加法器 | 2-level 16-bit 超前进位加法器

0x00 BCD 运算 在 BCD 中,使用4位值作为操作数,但由于只表示 0 到 9 的数字,因此只使用 0000 到 1001 的二进制数,而不使用 1010 到 1111 的二进制数(dont care)。 因此,不能使用常规的 2complement 运算来计算,需要额外的处理:如果 4 位二进制数的运算结果在 1010 …

Rxjs 学习笔记 - 简化版

RxJS 提供了一套完整的异步解決方案&#xff0c;让我们在面对各种异步行为&#xff08;Event, AJAX, Animation 等&#xff09;都可以使用相同的 API 做开发。 前置知识点 同步&#xff08;Synchronous&#xff09;就是整个处理过程顺序执行&#xff0c;当各个过程都执行完毕&…

【acwing】92. 递归实现指数型枚举

穿越隧道 递归枚举、位运算 方法① 从1到n&#xff0c;顺序访问每位数&#xff0c;是否选择&#xff0c;每位数有两种状态&#xff0c;选1或不选0. AC代码如下&#xff1a; #include <iostream> using namespace std;const int N 100; // bool st[N]; int n;void dfs(in…

JVM面试

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.JVM 的整体结构2.类加载做了哪些事情?类加载器有哪些&#xff1f;双亲委派和沙箱安全 3.Java虚拟机栈是什么4.方法区的理解HotSpot 中方法区的演进方法区的内部结…

XSS漏洞 深度解析 XSS_labs靶场

XSS漏洞 深度解析 XSS_labs靶场 0x01 简介 XSS原名为Cross-site Sciprting(跨站脚本攻击)&#xff0c;因简写与层叠样式表(Cascading style sheets)重名&#xff0c;为了区分所以取名为XSS。 这个漏洞主要存在于HTML页面中进行动态渲染输出的参数中&#xff0c;利用了脚本语…

git常规操作流程(纯命令行操作)和一些注意事项

当你在单位拿到了git仓库,并利用公司给你的OA账号和邮箱完成了你的git基础配置,下面就是使用命令行的无错固定操作流程 如果你很着急,你可以直接跳到最后的总结部分 具体步骤 1.从仓库克隆代码到本地 这里的[codeUrl]就是你仓库的地址,当你在仓库点击图中绿色位置时,剪贴板…

1841_在Windows上安装emacs irony server

Grey 全部学习内容汇总&#xff1a;GitHub - GreyZhang/editors_skills: Summary for some common editor skills I used. 1841_在Windows上安装emacs irony server emacs有很多优点&#xff0c;配置出来不仅用着顺手而且有一定的成就感。但是&#xff0c;对于大多数人来说或…

001两数之和

题意 给出一个数组和一个目标值&#xff0c;让你在数组中找出和为目标值的两个数&#xff0c;并且这两个数在数组中的下标&#xff08;索引&#xff09;不同。 示例 输入&#xff1a;nums[2,7,11,15],target9 输出&#xff1a;[0,1] 解释&#xff1a;因为nums[0]nums[1]9&#…

苹果app应用ipa文件程序开发后如何运行到苹果iOS真机上测试?

在苹果应用程序开发过程中&#xff0c;将app安装于真机进行测试是一个不可或缺的步骤&#xff0c;它可以帮助你检测app在实际设备上的性能表现及存在的潜在问题。这篇文章将详细阐述如何将开发好的苹果app&#xff08;.ipa文件&#xff09;安装到真机上进行测试。 图片来源&…

DataFunSummit:2023年数据治理在线峰会-核心PPT资料下载

一、峰会简介 数据治理&#xff08;Data Governance&#xff09;是组织中涉及数据使用的一整套管理行为。由企业数据治理部门发起并推行&#xff0c;关于如何制定和实施针对整个企业内部数据的商业应用和技术管理的一系列政策和流程。 数据治理是一个通过一系列信息相关的过程…

【数据结构】堆的模拟实现

前言:前面我们学习了顺序表、单链表、栈、队列&#xff0c;今天我们就开始新的学习吧&#xff0c;今天我们将进入堆的学习&#xff01;(最近博主处于低谷期)一起加油吧各位。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:数据结构 &…

idea__SpringBoot微服务10——整合JDBC(新依赖)

整合JDBC 完整项目地址&#xff1a;一、创建一个项目二、idea配置连接mysql三、创建yaml数据库连接配置文件四、测试一下&#xff0c;没有问题五、增删改查————————创作不易&#xff0c;如觉不错&#xff0c;随手点赞&#xff0c;关注&#xff0c;收藏(*&#xffe3;︶…