• i.MX RT1050 ADC2调试工作总结


    前段时间,小编在帮客户完成一个i.MX RT1050的项目,在项目中会用到ADC2去采样压力传感器的值,由于项目前期,小编只能在MIMXRT1050 EVK开发板上做验证,中间遇到一些软件和硬件的问题,虽然问题现在回想起来都很不起眼,但在当时还是很头疼的,所有小编在这里复盘一下当时遇到的问题及解决过程。
    ADC_ETC触发ADC2代码实现
    基于SDK软件包中的evkbimxrt1050_adc_etc_software_trigger_conv例程,使用ADC_ETC模块中trigger chain功能依次不间断地采样ADC2_IN5,ADC2_IN6,ADC2_IN8引脚(具体引脚对应关系如表1所示),在连续完成3个ADC采样后,触发中断,读取对应地采样值,完整代码请参考附件。
    代码重点修改项如下:
    • 禁止TSC_BYPASS功能
    1.     /* Initialize the ADC_ETC. */
    2.     ADC_ETC_GetDefaultConfig(&adcEtcConfig);
    3.     adcEtcConfig.XBARtriggerMask = 0x10U; /* Enable the external XBAR trigger4. */
    4.     adcEtcConfig.enableTSCBypass = false;
    5.     ADC_ETC_Init(DEMO_ADC_ETC_BASE, &adcEtcConfig);
    复制代码


    • 增加B2B功能
    1.     /* Set the external XBAR trigger0 chain0 configuration. */
    2.     adcEtcTriggerChainConfig.enableB2BMode       = true;
    3.     adcEtcTriggerChainConfig.ADCHCRegisterSelect = 1U
    4.                                                    << DEMO_ADC_CHANNEL_GROUP0; /* Select ADC_HC0 register to trigger. */
    5.     adcEtcTriggerChainConfig.ADCChannelSelect =
    6.         DEMO_ADC_ETC_CHANNEL1; /* ADC_HC0 will be triggered to sample Corresponding channel. */
    7.     //adcEtcTriggerChainConfig.InterruptEnable = kADC_ETC_Done0InterruptEnable; /* Enable the Done0 interrupt. */
    8. #if defined(FSL_FEATURE_ADC_ETC_HAS_TRIGm_CHAIN_a_b_IEn_EN) && FSL_FEATURE_ADC_ETC_HAS_TRIGm_CHAIN_a_b_IEn_EN
    9.     adcEtcTriggerChainConfig.enableIrq = true; /* Enable the IRQ. */
    10. #endif                                         /* FSL_FEATURE_ADC_ETC_HAS_TRIGm_CHAIN_a_b_IEn_EN */
    11.     ADC_ETC_SetTriggerChainConfig(DEMO_ADC_ETC_BASE, 4U, 0U,
    12.                                   &adcEtcTriggerChainConfig); /* Configure the trigger0 chain0. */
    13.     adcEtcTriggerChainConfig.ADCHCRegisterSelect = 1U
    14.                                                    << DEMO_ADC_CHANNEL_GROUP1; /* Select ADC2_HC1 register to trigger. */
    15.     adcEtcTriggerChainConfig.ADCChannelSelect =
    16.         DEMO_ADC_ETC_CHANNEL2; /* ADC_HC1 will be triggered to sample Corresponding channel. */
    17.     //adcEtcTriggerChainConfig.InterruptEnable = kADC_ETC_Done0InterruptEnable; /* Enable the Done1 interrupt. */
    18. #if defined(FSL_FEATURE_ADC_ETC_HAS_TRIGm_CHAIN_a_b_IEn_EN) && FSL_FEATURE_ADC_ETC_HAS_TRIGm_CHAIN_a_b_IEn_EN
    19.     adcEtcTriggerChainConfig.enableIrq = true; /* Enable the IRQ. */
    20. #endif                                         /* FSL_FEATURE_ADC_ETC_HAS_TRIGm_CHAIN_a_b_IEn_EN */
    21.     ADC_ETC_SetTriggerChainConfig(DEMO_ADC_ETC_BASE, 4U, 1U,
    22.                                   &adcEtcTriggerChainConfig); /* Configure the trigger4 chain1. */
    23.     adcEtcTriggerChainConfig.ADCHCRegisterSelect = 1U
    24.                                                    << DEMO_ADC_CHANNEL_GROUP2; /* Select ADC2_HC2 register to trigger. */
    25.     adcEtcTriggerChainConfig.ADCChannelSelect =
    26.         DEMO_ADC_ETC_CHANNEL3; /* ADC_HC1 will be triggered to sample Corresponding channel. */
    27.     //adcEtcTriggerChainConfig.enableB2BMode       = false;
    28.     //adcEtcTriggerChainConfig.InterruptEnable = kADC_ETC_Done0InterruptEnable; /* Enable the Done0 interrupt. */
    29.     adcEtcTriggerChainConfig.InterruptEnable = kADC_ETC_Done0InterruptEnable; /* Enable the Done1 interrupt. */
    30. #if defined(FSL_FEATURE_ADC_ETC_HAS_TRIGm_CHAIN_a_b_IEn_EN) && FSL_FEATURE_ADC_ETC_HAS_TRIGm_CHAIN_a_b_IEn_EN
    31.     adcEtcTriggerChainConfig.enableIrq = true; /* Enable the IRQ. */
    32. #endif                                         /* FSL_FEATURE_ADC_ETC_HAS_TRIGm_CHAIN_a_b_IEn_EN */
    33.     ADC_ETC_SetTriggerChainConfig(DEMO_ADC_ETC_BASE, 4U, 2U,
    34.                                   &adcEtcTriggerChainConfig); /* Configure the trigger4 chain2. */
    复制代码


    Debug技巧
    在开发中,我们经常会利用debug工具(如Jlink, LPC-link2等)来观察代码运行的过程和结果,尤其是在代码运行结果与预期有出入的时候。同时,在开发过程中,使用printf打印一下信息也是一种常用的debug手段,在这里,小编分享一个宏打印的的debug技巧,帮助我们快速定位异常情况发生的位置。
    具体代码如下,其中宏定义__FILE__,__func__,__LINE__分别代表调试信息所在的文件,函数及行号。除此之外,常用的宏还有:__DATE__、__TIME__,分别代表当前的编译日期与时间。
    1. #define LOG(frm,args...) {\
    2.     PRINTF("[%s : %s : %d]\n",__FILE__,__func__,__LINE__);\
    3.     PRINTF(frm,##args);\
    4.     PRINTF("\n");\
    5. }
    复制代码

    硬件的“坑”
    在使用MIMXRT1050 EVK开发板进行验证过程中,发现板子上的一个‘小坑’,如果将WDOG_B (GPIO_B1_13)脚配置成GPIO输出高速的高低电平变换,会触发MCU复位,原因是UM805RE的MR脚会被拉低。
  • 相关阅读:
    JS算法练习一
    jquery抖动的按钮
    CSS3教程:box-sizing属性的理解border、padding与容器宽度的关系
    鼠标hover事件
    object 插入元素,插入HTML页面
    点击展开点击收起
    IE支持CSS3圆角
    登录事件,鼠标点击输入框隐藏默认值事件
    复制 动态文本按钮
    凯撒密码、GDP格式化输出、99乘法表
  • 原文地址:https://www.cnblogs.com/zhugeanran/p/16390953.html
Copyright © 2020-2023  润新知