查看: 3733|回复: 0

RT1052-ADC问题

[复制链接]
  • TA的每日心情
    开心
    2025-7-11 08:53
  • 签到天数: 301 天

    连续签到: 2 天

    [LV.8]以坛为家I

    3873

    主题

    7477

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    39278
    最后登录
    2025-7-21
    发表于 2020-2-12 09:56:32 | 显示全部楼层 |阅读模式
    RT1052-ADC问题



    使用RT1052已经有一段时间了,在使用过程中也遇到了很多问题,这里针对ADC的使用作出如下的一些总结。


    1. ADC和ADC_ETC的区别


    使用RT1052时,会发现ADC和ST的有很大的区别。RT1050的ADC只能实现一些简单的功能,不具备扫描模式,适用于软件触发采集单个通道的应用,例如定时采集电池电量的任务。


    而要实现较为复杂的多个通道数据采集时,我们就需要用到ADC_ETC了,ADC_ETC能够实现多个通道扫描模式的数据采集,而在RT1052的库函数里,并没有提到扫描模式。而是使用了叫做Chain的概念,看开发手册里,最多有8个Chain,也就是说最多可以使用8个通道的扫描模式采样,我们会发现RT1050的ADC并没有ST里面的注入分组的概念。


    在需要使用定时采样多个通道数据时,RT1052里面有个很方便的触发模式,这里叫外部触发External Trigger,这也是ADC_ETC真正的用处了,可以配置定时器PIT来实现周期性触发ADC采样,配置的例程可以参考官方的SDK库。


    总的来说,简单的应用使用ADC就可以了,需要多个通道采集数据的就需要使用ADC_ETC了。

    2. 关于ADC_ETC里Group的概念


    对于RT1052里ADC关于Group的概念一直比较迷糊,我的建议是在使用ADC_ETC时,每个通道最好单独分配一个Group,官方的例程也是这样配置的,理解的还不够彻底。


    3. 关于外部触发的概念


    看RT1052的ADC_ETC手册时,里面介绍特点描述到每一个ADC支持8个硬件外部触发控制,然而使用时就会发现有坑了,ADC1只支持trigger0~trigger3,ADC2只支持trigger4~trigger7。
    45.png
    4. 关于ADC2的使用


    可以说RT1052芯片使用时,IO引脚非常的灵活,可以任意接入一个片内外设上,在使用ADC1和ADC2时,通道绝大部分都可以通用。在使用ADC2时,很多朋友会发现使用不起来,如果是使用PIT触发的周期采样的话,可以查看ADC2是否使用的是trigger4~trigger7,其次在使用ADC2时,有个寄存器需要配置。ADC_ETC (CTRL),也可以通过库函数调用。
    46.png
    1. <font size="3" face="微软雅黑">1.  adc_etc_config_t adcEtcConfig;   
    2. 2.ADC_ETC_GetDefaultConfig(&adcEtcConfig);
    3. 3.adcEtcConfig.enableTSCBypass = false; /* To use ADC2, this bit should be cleared *

    4. </font>
    复制代码
    5. 关于ADC使用DMA的坑


    在使用RT1052的ADC并用DMA传输数据时,会发现DMA里面竟然没有8Byte传输,这里可能是官方遗漏了,可以手动加上,且使用16Byte传输时,会发现DMA不工作,后来官方直接把16Byte去掉了。
    1. <font size="3" face="微软雅黑">assert((srcWidth == 1U) || (srcWidth == 2U) || (srcWidth == 4U) || (srcWidth == 8U) || (srcWidth == 32U));
    2.     assert((destWidth == 1U) || (destWidth == 2U) || (destWidth == 4U) || (destWidth == 8U) || (destWidth == 32U));
    3.     assert(transferBytes % bytesEachRequest == 0);

    4.     config->destAddr = (uint32_t)destAddr;
    5.     config->srcAddr = (uint32_t)srcAddr;
    6.     config->minorLoopBytes = bytesEachRequest;
    7.     config->majorLoopCounts = transferBytes / bytesEachRequest;
    8.     switch (srcWidth)
    9.     {
    10.         case 1U:
    11.             config->srcTransferSize = kEDMA_TransferSize1Bytes;
    12.             break;
    13.         case 2U:
    14.             config->srcTransferSize = kEDMA_TransferSize2Bytes;
    15.             break;
    16.         case 4U:
    17.             config->srcTransferSize = kEDMA_TransferSize4Bytes;
    18.             break;
    19.         case 8U:
    20.             config->srcTransferSize = kEDMA_TransferSize8Bytes;
    21.             break;
    22.         case 32U:
    23.             config->srcTransferSize = kEDMA_TransferSize32Bytes;
    24.             break;
    25.         default:
    26.             break;
    27.     }
    28.     switch (destWidth)
    29.     {
    30.         case 1U:
    31.             config->destTransferSize = kEDMA_TransferSize1Bytes;
    32.             break;
    33.         case 2U:
    34.             config->destTransferSize = kEDMA_TransferSize2Bytes;
    35.             break;
    36.         case 4U:
    37.             config->destTransferSize = kEDMA_TransferSize4Bytes;
    38.             break;
    39.         case 8U:
    40.             config->destTransferSize = kEDMA_TransferSize8Bytes;
    41.             break;
    42.         case 32U:
    43.             config->destTransferSize = kEDMA_TransferSize32Bytes;
    44.             break;
    45.         default:
    46.             break;
    47. }

    48. </font>
    复制代码
    这里需要注意的是使用8Byte传输时,如果定义的目标地址数组未使用数据对齐预处理指令,DMA可能会出现运行不起来的情况,需要在定义的目标地址处加上数据对齐的预处理指令。SDK_ALIGN(目标地址 , 对齐长度),我们这里使用4Byte对齐。
    1. <font size="3" face="微软雅黑">SDK_ALIGN(uint16_t g_AdcArcResult[ARC_ADC_SAMPLE_LENGTH], 4);</font>
    复制代码



    作者:智小星                       文章出处:点击

    qiandao qiandao
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-22 01:09 , Processed in 0.078912 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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