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.

[参考译文] MSPM0G1519:CTL0.ENC 位和 MEMCTL[y]配置问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1508026/mspm0g1519-ctl0-enc-bit-and-memctl-y-configuration-issue

器件型号:MSPM0G1519

工具/软件:

您好:

MSPM0G1519参考手册指出 CTL0.ENC 位必须为0才能写入 MEMCTL[y]。

但也有说明、CTL0.ENC 设置为0后、当前转换将完成、结果存储在相应的 MEMRESx 中。

状态寄存器中还有一个额外的 BUSY 标志、可以检查最后一次转换是否已完成(例如在设置 ENC=0后)。

问题:如果我设置  CTL0.ENC=0并立即写入 MEMCTL[y](根据我对参考手册的解释允许这样做)并且仍然存在正在进行的转换、会发生什么情况?

在上述场景中、我们观察到、如果再次启用转换(CTL0.ENC=1)、转换实际上不会启动。 下面的代码显示了该序列。

DL_ADC12_disableConversions(ADC1);
DL_ADC12_configConversionMem(ADC1, ...);
DL_ADC12_enableConversions(ADC1);

然而、如果我们在禁用转换后等到 STATUS.BUSY=0 (参考手册中未提及这一点)、则它会按预期工作。 下面是工作伪代码。

DL_ADC12_disableConversions(ADC1);
while(DL_ADC12_getStatus(ADC1) & DL_ADC12_STATUS_CONVERSION_ACTIVE) {};
DL_ADC12_configConversionMem(ADC1, ...);
DL_ADC12_enableConversions(ADC1);

这是预料之中的吗? 参考手册中是否缺少此信息?

此致

Marco Marder

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

    您好、Marco、

    Unknown 说:
    问题:如果我设置  CTL0.ENC=0并立即写入 MEMCTL[y](根据我对参考手册的解释允许这样做)并且仍然有一个正在进行的转换
    、会发生什么情况

    不,这是不会发生的。 配置 ADC 配置寄存器时、确保不会进行 ADC 转换。 这是不安全的。

    Unknown 说:
    在上述情形中、我们观察到如果再次启用转换(CTL0.ENC=1)、转换实际上并未启动。 下面的代码显示了序列。

    在哪里有 DL_ADC12_startConversion ()? 我认为这里需要一个触发信号来开始 ADC 转换。

    B.R.

    Sal

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

    您好 Sal Ye、

    感谢您的反馈。


    1.最好确认在转换过程中不允许更改 ADC 配置寄存器。 您可以在参考手册中更清楚地说明这一点。

    2.我提供的代码只是伪代码。 转换由硬件通过生成 PWM 信号以用于电机控制的计时器来触发。 在第一个代码片段中、如果在仍有正在进行的转换时写入 CONFIG 寄存器 MEMCCTL、则不会启用转换。

    然而,由于不允许这样做,我们是好的。 我们将确保在写入 CTL0.ENC=0后等待转换完成、然后再重新配置 MEMCTL。

    Marco