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.

[参考译文] MSP430G2553:ADC10的多个通道上 DTC 模式下的模数转换。

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1502253/msp430g2553-a-d-conversion-in-dtc-mode-on-multiple-channels-of-adc10

器件型号:MSP430G2553

工具/软件:

您好的团队、

我的账户希望在多个通道上以 AD 模式进行 DTC 转换、但他们无法理解其工作原理。

他们希望确认以下几点。

1. 当获取信道 A7至 A0且 DT=0x10 (16次)时、他们对数据存储顺序的理解是否正确、如下所示?
(A7→A0、顺序为 A7到 A0)

2. ADC10IFG 信号(要触发中断处理程序的时序)是否基于 DTC 中设置的数据数量发生?
或者、它是否每次在 ADC10MEM 中存储从 A7到 A0的数据时都会触发?

此致、

Kenley

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

    1)是的。 [重复]通道序列模式从英寸-> A0对通道进行向下计数、因此在本例中、A7将是第一个条目。

    2)当计数(ADC10DTC1)耗尽(两个块模式下两次)时、会触发 ADC10IFG。 [参考用户指南(SLAU144K)第22.2.7.1]节。  

    DTC 完成(停止)时、不会停止 ADC。 在重复模式(CONSEQ=2或=3)和 ADC10CT=0下、在下一次转换完成之前会有一个竞态重新初始化 ADC10SA;如果您丢失竞态、一些样本将丢失、布局将与 上面(1)中的图片不匹配。  

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

    您好 Bruce、

    感谢您的支持。

    以上图片(1)的含义是什么? 您的意思是:

    在第一个 DTC 之后、DTC 将再次启动并且 ADC10SA 中定义的寄存器将被下一个样本覆盖、这是正确的吗?

    此致、

    Kenley

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

    如果 ADC10CT=1、DTC 将(重新)以 ADC10SA 中的任何位置开始。 [参考用户指南第 22.2.7.3节]。 如果 ADC10CT=0、则必须重新写入 ADC10SA 以(重新)启动序列;这可以是但不需要与之前相同的地址。

    是的、这就是我所指的图片。 它显示 A7是第一个条目、但如果一些样本在比赛中丢失、则不会。 如果 ADC10CT=1、则 A7将是第一个条目、但您不知道是旧条目还是新条目。 [当我使用 DTC 时、我一直在为 ADC 使用计时器触发器、因此我知道重新启动 DTC 的截止日期。 这场比赛还在那里,但很容易赢得。]

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

    您好 Bruce、

    很抱歉、我的客户和我仍然没有得到它。

    当前客户正在使用 ADC10CT=1、因此 DTC 将在不知道数据是新数据或旧数据的情况下重新启动 ADC10SA 内的任何数据。 在本例中、第一个条目将是 A7。

    我的理解正确吗?

    正如您提到的"在下一次转换完成之前有人需要重新初始化 ADC10SA"、您能详细说明一下吗?

    在 [22.2.7 ADC10数据传输控制器]上、提到"启用 DTC 后、每次 ADC10完成转换并将结果加载到 ADC10MEM 时、都会触发数据传输。 在传输预定义数量的转换数据之前、无需软件干预即可管理 ADC10。"

    根据上述情况、我认为 当 ADC10完成转换并将结果加载到 ADC10MEM 时、DTC 会自动传输数据。 但是、您说的是、当您使用 DTC 时、您会为 ADC 使用计时器触发器、以便知道重新启动 DTC 的截止日期。
    我之所以不会得到它、是因为我认为当 ADC10DTC=1时、DTC 将在 ADC10SA 内部的任何数据处重新启动、而 DTC 将自行处理而无需我们重新启动。 您能帮助我更好地理解这一点吗?

    如果您可以编写一些简单的操作流程、将会很有帮助。  

    此致、

    Kenley

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

    Kenley

    请 在 SLAC485代码示例或演示|德州仪器 TI.com 上查看 msp430g2x33_ADC10_μ 07~10和13、14 ADC 转换使用 DTC 的示例代码

    请问这些代码示例对您是否有用?

    谢谢

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

    尊敬的 Xiaodong:

    很抱歉、由于出差、我没有时间查看代码。

    如果您能提供一些见解、将会很有帮助。

    此致、

    Kenley

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

    当 ADC10CT=0时、存在一个竞态来设置 ADC10SA (以重新启动 DTC);失去竞态将导致结果的顺序未知。 当 ADC10CT=1时、不存在设置 ADC10SA 的竞态、结果将按顺序排列、但(如果失去竞态)您将不知道前几个条目是旧条目还是新条目、因为 DTC 的内部计数器不可见。 两者从根本上是在 ADC 进行之前采集数据的争用。 这可以通过使用两块模式(实际上是半传输机制)来稍微缓解一些问题。 您使用的是双块模式吗?

    所有这些都基于我的理解、您使用的是重复序列(CONSEQ=3、MSC=1)模式。 您使用的是这样吗?

    故障诊断码(DTC)工作流程如用户指南图22-10和22-12所示。

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

    您好 Bruce、

    客户已查看用户指南上的操作流程、但他们不理解该流程。

    因此、他们要求我们向他们解释、以便更好地理解。

    让我向他们询问他们想要使用的所有模式、并向您提供反馈。

    此致、

    Kenley

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

    您好 Bruce、

    客户已查看用户指南上的操作流程、但他们不理解该流程。

    因此、他们要求我们向他们解释、以便更好地理解。

    让我向他们询问他们想要使用的所有模式、并向您提供反馈。

    此致、

    Kenley

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

    您好 Bruce、

    这些是它们的设置。

     //设置 ADC

     ADC10CTL0 = ADC10SHT_2 + MSC + ADC10ON + ADC10IE;// ADC10ON、启用中断(16CLK ADCsample)、VDD (3.3V)参考

     ADC10CTL1 = CONSEQ_3 + INCH_7 + ADC10SSEL_3;//输入 A0~A7、重复多路、SMCLK

     ADC10AE0 |= BIT6 + BIT0;           // P1.0 (A0) P1.5 (A5) P1.6 (A6) P1.7 (A7) ADC 选项选择

     ADC10DTC1 = 0x40;              // 8*8转换

     

    在第一个 DTC 之后、DTC 再次启动、并设置 ADC10SA 中定义的寄存器。

    理解它将被下一个样本覆盖、但不知道它是旧数据还是新数据是正确的吗?  

    您能逐步解释一下吗?

    很抱歉、我们很难理解您的解释。

    此致、

    Kenley

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

    我假设:

    a) ADC10CT=0、ADC10TB=0、因为我没有看到对 ADC10DTC0的分配。

    b)在启动 ADC 之前分配 ADC10SA (即设置 ADC10SC)

    C) SMCLK=ADCCLK

    观察:每次转换需要(16+12+1)=29个 ADC 时钟。  当 CONSEQ=3且 MSC=1时、每29个 MCLK (类似于4-10个 CPU 指令)就会显示一个结果。

    1) ADC10SC=1

    2)执行64次转换、并反复存储在 ADC10SA 缓冲区 A7->A0中。

    3)触发 ADC10IFG=1。 ADC 继续运行。

    4A) ISR 被称为[ADC10IF=0]。 我 不能说这需要多长时间,但我通常估计20-30个 MCLK。 一段时间后(取决于代码)会存储 ADC10SA。

    4B)步骤(3)开始后的29 SMCLK、A7的转换完成并存储在 ADC10MEM 中。

    这是一个很好的例子。 根据步骤(4A)还是(4B)是否首先完成(4B 似乎最有可能)、DTC 在完成(4B)时可能会激活、也可能不会激活。

    5A)如果(4A)首先完成、DTC 会将 ADC10MEM 复制到 ADC10SA 缓冲区(A7)中的第一个条目中

    5B)如果(4B)首先完成、ADC10IFG = 1 保持=0。 ADC 继续运行。

    6A) ADC10SA 缓冲区中还执行了63次转换并(按顺序)存储了这些转换

    6b)不调用 ISR。 该代码不知道 IFG 是来自 DTC 还是直接来自 ADC、因此(至少)来自(4B)的样本可能会丢失。  

    7a)[继续(3)]

    7b)从 A6 (或者 A5或 A4、具体取决于第一个条目所用的时间(4A))开始、再执行和存储64次转换。

    8A)[-]

    8b)[在(3)处继续]

    [编辑:固定步骤(5B)/(6B)。 UG 图22-10与第 22.2.10节不一致("n"与 DTC1);后者正确。 总体结果是相同的。]

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

    您好 Bruce、

    感谢您发送编修。

    现在已经很清楚了。

    此致、

    Kenley