工具/软件:
您好的团队、
我的账户希望在多个通道上以 AD 模式进行 DTC 转换、但他们无法理解其工作原理。
他们希望确认以下几点。
1. 当获取信道 A7至 A0且 DT=0x10 (16次)时、他们对数据存储顺序的理解是否正确、如下所示?
(A7→A0、顺序为 A7到 A0)

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

此致、
Kenley
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.
工具/软件:
您好的团队、
我的账户希望在多个通道上以 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)中的图片不匹配。
如果 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 的示例代码
请问这些代码示例对您是否有用?
谢谢
当 ADC10CT=0时、存在一个竞态来设置 ADC10SA (以重新启动 DTC);失去竞态将导致结果的顺序未知。 当 ADC10CT=1时、不存在设置 ADC10SA 的竞态、结果将按顺序排列、但(如果失去竞态)您将不知道前几个条目是旧条目还是新条目、因为 DTC 的内部计数器不可见。 两者从根本上是在 ADC 进行之前采集数据的争用。 这可以通过使用两块模式(实际上是半传输机制)来稍微缓解一些问题。 您使用的是双块模式吗?
所有这些都基于我的理解、您使用的是重复序列(CONSEQ=3、MSC=1)模式。 您使用的是这样吗?
故障诊断码(DTC)工作流程如用户指南图22-10和22-12所示。
您好 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);后者正确。 总体结果是相同的。]