This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] LP-MSPM0G3507:存储器索引中的 ADC 通道值错误

Guru**** 2595805 points
Other Parts Discussed in Thread: MSPM0G3507, SEGGER

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1218651/lp-mspm0g3507-adc-channel-value-in-wrong-memory-index

器件型号:LP-MSPM0G3507
主题中讨论的其他器件:MSPM0G3507SEGGER

您好!

我正在实现对在 MSPM0G3507 MCU (器件版本 PG1)上读取 ADC 的支持。

我将使用 DL_ADC12_initSeqSample (),并使用 DL_ADC12_configConversionMem ()配置总共10个 ADC 值以进行读取。

ADC0配置为使用 A0_0 (MEM_IDX_0)、A0_1 (MEM_IDX_1)、A0_2 (MEM_IDX2)、A0_3 (MEM_IDX_3)和 A0_7 (MEM_IDX_4)。
ADC1配置为使用 A1_0 (MEM_IDX_0)、A1_1 (MEM_IDX_1)、A1_2 (MEM_IDX2)、A1_3 (MEM_IDX_3)和 A1_7 (MEM_IDX_4)。

对于 ADC0、我配置以下顺序样本:

DL_ADC12_initSeqSample(ADC0,
                       DL_ADC12_REPEAT_MODE_ENABLED,
                       DL_ADC12_SAMPLING_SOURCE_AUTO,
                       DL_ADC12_TRIG_SRC_EVENT,
                       DL_ADC12_SEQ_START_ADDR_00,
                       DL_ADC12_SEQ_END_ADDR_04,
                       DL_ADC12_SAMP_CONV_RES_12_BIT,
                       DL_ADC12_SAMP_CONV_DATA_FORMAT_UNSIGNED);


然后、我使用例如为 A0_0配置5个转换存储器:
DL_ADC12_configConversionMem(ADC0,
                             DL_ADC12_MEM_IDX_0,
                             DL_ADC12_INPUT_CHAN_0,
                             DL_ADC12_REFERENCE_VOLTAGE_VDDA,
                             DL_ADC12_SAMPLE_TIMER_SOURCE_SCOMP0,
                             DL_ADC12_AVERAGING_MODE_DISABLED,
                             DL_ADC12_BURN_OUT_SOURCE_DISABLED,
                             DL_ADC12_TRIGGER_MODE_AUTO_NEXT,
                             DL_ADC12_WINDOWS_COMP_MODE_DISABLED);


当为 ADC0触发 DL_ADC12_IIDX_MEM4_RESULT_LOADD 中断时、I READ (来自主循环。 不来自中断)使用 DL_ADC12_getMemResult ()的 ADC 值。

我遇到的问题以及我之所以在这个论坛中写文章,是因为有时 使用 DL_ADC12_getMemResult ()读取了错误的 ADC 值。

例如、如果我向 MCU 上的 ADC0_3施加3.3V 电压、则结果有时会以 ADC0_0的结果读取结束。 有时(在重新启动之后)结果会以 ADC0_3中的形式呈现。

什么原因可能导致这种行为?

/此致、Jens

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Jens、您好!

    听起来 FIFO 模式可能处于开启状态。 在 FIFO 模式下、所有可用的 MEMRES 寄存器(0-11)都被用作输入 FIFO。 在此模式下、序列中的每次转换都只写入下一个 MEMRES 寄存器、而不是像您想要的那样进行严格分配。 上电后的第一次转换生效、因为您与该第一个序列的 MEMRES0寄存器对齐、一切都落入正确位置。

    您是否 在配置代码的某个位置调用了 DL_ADC12_enableFIFO? 运行代码时、在 CCS 的寄存器视图中(命中 View -> Registers (查看->寄存器) 调试时)、您是否可以检查 ADC0 CTL2寄存器?  

    查看 FIFOEN 位字段、确保设置了定期刷新、或者通过暂停调试器或使用刷新图标手动刷新寄存器视图。  

    我们希望看到在您的代码运行时已清除 FIFOEN 位。  

    此致、
    Brandon Fisher

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    感谢您的快速回复。

    DL_ADC12_enableFIFO ()不能从代码中的任何位置调用。

    我实际上并不是在 code composer 中进行调试、而是从命令行使用 GDB。

    该调用返回 false、指示 FIFO 启用实际上已关闭:
    bool ret = DL_ADC12_isFIFOEnabled (ADC0);

    但至少 TI 支持在 ADC 通道范围内存在差距。 我使用例如0、1、2、3和7 (不使用4和5)。

    /此致、Jens

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Jens、您好!

    我实际上不是在 code composer 中调试,而是使用命令行中的 GDB。
    [/报价]

    我懂了。

     您当前使用哪个版本的 SDK 和工具来构建和编程器件?  

    此致、
    Brandon Fisher

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我使用 mspm0_SDK_1_00_00_04、并使用 GCC 工具链进行构建。

    为了对 MCU 进行编程、我使用 J-link (Segger)、或者通过 I2C 对 MCU 进行编程( 与 MCU 引导加载程序通信)的内部闪存工具对 MCU 进行编程。

    我相信我也可以使用 code composer/ticlang 复制。

    是否临时权变措施是 为 ADC0和 ADC1配置所有11个 MEMRES 寄存器?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Jens、您好!

     对于 PG1器件、应使用1.xx 之前的 SDK 版本。 请查看此帖子: https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1204644/faq-mspm0-sdk-important-note-for-early-mspm0-customers

    我不确定这会如何将器件 ADC 置于 FIFO 模式、但使用早期 SDK 版本的其中一个示例进行快速测试会是一个不错的选择。  

    此致、
    Brandon Fisher

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Brandon:

    我已经尝试使用 SDK mspm0_SDK_0_58_00_00_eng 进行构建、但我遇到了同样的问题。 所以问题仍然存在。

    ADC0和 ADC1的 CTL2寄存器的值为:
    0x4000000

    根据文档、这看起来是正常的。 此位域是所有位域的复位值(0x0)、ENDADD 设为0x4除外。 因此 FIFOEN 位为0。

    /此致、Jens

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Jens、您好!

    谢谢您的检查。 只是为了确认您用于构建的其他工具也适用于早期样品(CCS 12.1或更早版本等)?

    您的 CTL2寄存器设置  对我来说似乎是正确的。  使用 DL_ADC12_enablePower 启用 ADC 电源后、是否 在写入外设寄存器之前完全等待?  

    此致、
    Brandon Fisher