查看: 3792|回复: 8

[分享] LPC55xx中ADC多通道采样与DMA传输

[复制链接]
  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3300

    主题

    6547

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32033
    最后登录
    2024-4-26
    发表于 2021-7-15 09:37:58 | 显示全部楼层 |阅读模式
    LPC55xx中ADC多通道采样与DMA传输
    在工程应用中,多通道ADC采集与DMA传输是十分重要的。有些客户在使用MCUXpresso IDE对LPC55xx的ADC进行配置时有些许疑问,本文以LPC55S69为例,针对此问题进行讲解。


    LPC55xx的ADC是一个全新的设计,它支持单端模拟信号采样、差分模拟信号采样,采样频率可以达到1MSPS。
    触发方式支持硬件外部信号触发,软件CTimer与SCT模块触发。我们以软件触发采集为例进行介绍。


    1. 轮询模式单通道ADC采集
    配置ADC0通道0引脚,LPC55S69-EVK中PIO0_23可由杜邦线引出进行测试,如下:
    11.png
    配置ADC0的时钟,如下:
    12.png
    配置ADC0的外设,如下:
    13.png
    每秒中采集ADC0通道0一次,如下:
    1. /* Enable ADC */
    2. POWER_DisablePD(kPDRUNCFG_PD_LDOGPADC);
    3. /*Store the AD result*/
    4. lpadc_conv_result_t mLpadcResultConfigStruct0;

    5. while(1) {
    6.    /* Delay 1s */
    7.    SysTick_DelayTicks(1000U);
    8.    /* 1U is trigger0 mask. */
    9.    LPADC_DoSoftwareTrigger(ADC0,1U);
    10.    /* Wait ADC conversion */
    11.    while (!LPADC_GetConvResult(ADC0,&mLpadcResultConfigStruct0, 0U)){}
    12.    /* Print AD value */
    13.    PRINTF("ADC value0: %d\r\n", ((mLpadcResultConfigStruct0.convValue) >> 3));
    14. }
    复制代码
    查找UserManual,如下。在single-end A通道模式下,ADC转化值储存在FIFO 0中,故LPADC_GetConvResult函数第三个传参为0,表示将FIFO 0的值保存到lpadc_conv_result_t类型的结构体中。FIFO 0在十二位ADC精度下,ADC转化值0~2位为无效位,故要左移三位。
    14.png
    2. 定时器中断多通道ADC采样
    配置ADC0通道0引脚,LPC55S69-EVK中PIO0_23可由杜邦线引出进行测试,配置ADC0通道4引脚,PIO1_8可由杜邦线引出进行测试,配置ADC0通道1引脚,PIO1_9连接于VDDA,如下:
    15.png
    配置ADC0外设,如下:
    16.png
    配置Ctimer0引脚、时钟、外设如下所示:
    17.png
    在mian.c中声明ctimer0中断回调函数,并在回调函数中读取ADC转换值,只触发一次AD采样,可以连续采样三次,如下:
    1. lpadc_conv_result_t mLpadcResultConfigStruct0;
    2. lpadc_conv_result_t mLpadcResultConfigStruct1;
    3. lpadc_conv_result_t mLpadcResultConfigStruct2;
    4. void Timer0_Callback(uint32_t flags);
    5. void Timer0_Callback(uint32_t flags)
    6. {
    7.    LPADC_DoSoftwareTrigger(ADC0, 1U); /* 1U is trigger0 mask. */
    8.    while (!LPADC_GetConvResult(ADC0, &mLpadcResultConfigStruct0, 0U)){}
    9.    PRINTF("ADC value0: %d\r\n", ((mLpadcResultConfigStruct0.convValue) >> 3));
    10.    while (!LPADC_GetConvResult(ADC0, &mLpadcResultConfigStruct1, 0U)){}
    11.    PRINTF("ADC value1: %d\r\n", ((mLpadcResultConfigStruct1.convValue) >> 3));
    12.    while (!LPADC_GetConvResult(ADC0, &mLpadcResultConfigStruct2, 0U)){}
    13.    PRINTF("ADC value2: %d\r\n", ((mLpadcResultConfigStruct2.convValue) >> 3));
    14. }
    复制代码
    3. DMA读取ADC转换值
    程序流程如下所示:
    18.png
    配置DMA外设,如下:
    19.png
    修改main.c,如下:
    1. lpadc_conv_result_t mLpadcResultConfigStruct0;
    2. lpadc_conv_result_t mLpadcResultConfigStruct1;
    3. lpadc_conv_result_t mLpadcResultConfigStruct2;

    4. uint32_t g_AdcConvResult[1];
    5. volatile boolg_DmaTransferDoneFlag = false;

    6. void Timer0_Callback(uint32_t flags);

    7. void ADC_DMA_Callback(dma_handle_t *handle, void *param, bool transferDone, uint32_t tcds);

    8. void Timer0_Callback(uint32_t flags)
    9. {
    10.     /* 1U is trigger0 mask. */
    11.     LPADC_DoSoftwareTrigger(ADC0, 1U);
    12. }

    13. void ADC_DMA_Callback(dma_handle_t *handle, void *param, bool transferDone, uint32_t tcds)
    14. {
    15.     if (true == transferDone)
    16.     {
    17.         g_DmaTransferDoneFlag = true;
    18.     }
    19. }
    复制代码
    Main函数添加代码,如下:
    1. /* Enable ADC */
    2. POWER_DisablePD(kPDRUNCFG_PD_LDOGPADC);
    3. while(1) {     /* Wait ADC conversion */
    4.     while ((LPADC_GetStatusFlags(ADC0) & kLPADC_ResultFIFO0ReadyFlag) == 0UL){}     /* Start DMA Transfer */
    5.     DMA_StartTransfer(&DMA0_CH0_Handle);     /* Wait DMA Transfer */
    6.     while (false == g_DmaTransferDoneFlag){}
    7.     PRINTF("Adc conversion word :0x%X\r\n",g_AdcConvResult[0]);
    8.     PRINTF("ADC conversion value:%d\r\n",
    9.            ((uint16_t)(g_AdcConvResult[0] & 0xFFFFU) >> 3));
    10. }
    复制代码


    签到签到
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-10 22:38
  • 签到天数: 1335 天

    [LV.10]以坛为家III

    88

    主题

    4292

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9049
    最后登录
    2024-4-13
    发表于 2021-7-15 09:59:30 | 显示全部楼层
    DMA是一个好东西,其可不占用CPU的资源。
    但如果不用DMA也是可以的,程序也可以运行。
    这个目的又是什么呢?
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    昨天 08:13
  • 签到天数: 558 天

    [LV.9]以坛为家II

    34

    主题

    5917

    帖子

    2

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    5706
    最后登录
    2024-4-26
    发表于 2021-7-20 08:36:13 | 显示全部楼层
    全面,引申一下能够有更多的适用性
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2023-8-30 17:43
  • 签到天数: 306 天

    [LV.8]以坛为家I

    14

    主题

    1746

    帖子

    4

    金牌会员

    Rank: 6Rank: 6

    积分
    2531
    最后登录
    2023-8-30
    发表于 2021-7-20 16:18:44 | 显示全部楼层
    内容好丰富,真不错!
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2021-9-10 13:05
  • 签到天数: 18 天

    [LV.4]偶尔看看III

    8

    主题

    61

    帖子

    0

    注册会员

    Rank: 2

    积分
    181
    最后登录
    2021-9-18
    发表于 2021-7-23 13:14:17 | 显示全部楼层
    内容不错,支持支持
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2022-11-10 08:51
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    1

    主题

    897

    帖子

    0

    高级会员

    Rank: 4

    积分
    616
    最后登录
    2022-11-10
    发表于 2021-7-27 09:04:19 | 显示全部楼层
    相当不错,支持支持!
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2021-3-24 09:39
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    12

    主题

    94

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    299
    最后登录
    2021-12-28
    发表于 2021-7-28 11:34:03 | 显示全部楼层
    感谢分享
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2022-1-4 14:25
  • 签到天数: 1 天

    [LV.1]初来乍到

    0

    主题

    172

    帖子

    0

    高级会员

    Rank: 4

    积分
    571
    最后登录
    2024-4-26
    发表于 2022-8-9 23:48:04 | 显示全部楼层
    学习了,多谢
    每天登陆学习一下
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-7-9 12:56
  • 签到天数: 1 天

    [LV.1]初来乍到

    1

    主题

    7

    帖子

    0

    新手上路

    Rank: 1

    积分
    17
    最后登录
    2023-7-9
    发表于 2023-7-9 12:59:17 | 显示全部楼层
    这个用于5528好像有点不一样
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-27 13:43 , Processed in 0.146743 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表