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.

[参考译文] TMS570LC4357:使用增强通道选择模式的 ADC 组通道序列

Guru**** 2430620 points
Other Parts Discussed in Thread: TMS570LC4357, HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1328194/tms570lc4357-adc-groups-channel-sequence-using-enhanced-channel-selection-mode

器件型号:TMS570LC4357
主题中讨论的其他器件: HALCOGEN

团队、您好!

我们正在使用 TMS570LC4357 测试内部 ADC 的评估板。

到目前为止、我们已尝试在单次/连续转换模式下获取数据、并获得预期结果。

我们还探究了组1、组2和事件组中的多通道选择。

我 在这里的怀疑是因为这个通道是按顺序逐个转换的、即0、1、2、3、4、...

但我们需要用户选择序列、即、0、5、6、2、1、3、4。。。 等等

我们从 TRM 中知道、 增强型通道选择 和配置 LUT (LUT) 这是可能的。

您能提供一些有关如何操作的示例代码吗?

使用上述特性还有一个疑问、那就是是否可能在两个组通道之间进行排序、如下面的组中所示

通道  

序列

0 0 1 4 1 5
组1 2组 组1 2组 组1 2组

此致、

普拉蒂克

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

    Pratik、您好!

    但我们需要用户选择序列、即、0、5、6、2、1、3、4。。。 等等

    我们从 TRM 中知道、 增强型通道选择 和配置 LUT (LUT

      

     

     

     


    ) 这是可能的。 [/报价] 遗憾的是、没有现成的示例可用于此目的。 但是、您可以使用增强型通道选择模式来实现此功能。 此外、增强通道选择模式的主要目的是在外部通道上进行高达1024的转换。 请参阅以下主题: (10)[常见问题解答] TMS570LC4357-TMS570LC4357 EP:这种引用的"1024片外通道"是什么意思? -基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛 但是、如果我们将 EXT_CHN_MUX_SEL 位设置为0、则仅会基于 NT_CHN_MUX_SEL 位的值进行内部通道转换。 例如、我假设您希望使用单个触发器进行0、5、6、2、1、3和4个通道的转换、然后按照以下步骤操作。 1.设置 ADG1SEL 寄存器中7个位中的任意一个。 因为此处我们要使用右单个触发器转换7个通道、所以我们应该设置 ADG1SEL 寄存器中的7位。 如果您只想转换单个通道和单次转换、则需要在此寄存器中仅设置1个位。 2.现在使用所需的转换次数设置 G1_MAX_COUNT 寄存器。 这意味着如果您将此寄存器设置为0、则所有7个通道只会发生一次转换、否则、如果您将此寄存器设置为1、则会发生组转换、依此类推。 3.现在准备 LUT 并编程到对应的 LUT 区域。 您必须按如下方式对 LUT 进行编程、以实现上述所需序列。 4.完成上述配置后、如果现在您提供了触发、则转换序列将按所需顺序完成。 另请参阅 TRM 中的"使用增强通道选择模式的 ADC 转换序列示例"、以了解更多详细信息。 只需根据您的要求进行尝试、如果您在构建此应用程序时遇到任何困难、我将在这个问题上为您提供进一步的帮助。 -- 谢谢。此致、 Jagadish。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Jagadish、您好!

    感谢您的快速响应。

    • 现在、准备 LUT 并将其编程到相应的 LUT 区域。 我们必须对其进行编程。 您能再简要介绍一下这部分吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Pratik、您好!

    ADC1实例的 LUT 区域将从0xFF3E2000开始、对于 ADC2实例、将从0xFF3A2000开始。

    从该起始地址开始、该 LUT 表将占用总共96个字、32位字的前32个条目用于事件组、后32个条目32位字用于组1、而32位字的第三个条目用于组2。

    例如、如果您的目标是转换 ADC1和组1通道、则查找表应从(0xFF3E2000 + 32 * 4)开始、即  0xFF3E2080地址。

    例如、如果您要转换该组1中的0、5、6、2、1、3和4个通道、那么您应该按照以下方式对 LUT 表进行编程:

    地址     -  值

    0xFF3E2000 -  0x00000000        /*通道0*/

    0xFF3E2004 -  0x00000005        /*通道5*/

    0xFF3E2008 -  0x00000006        /*通道6*/

    0xFF3E200C -  0x00000002        /*通道2*/

    0xFF3E2010 - 0x00000001          /*通道1*/

    0xFF3E2014 -  0x00000003        /*通道3*/

    0xFF3E2018 -  0x00000004        /*通道4*/

    --
    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!

    我已经配置了 LUT 并按照如上所示的步骤操作。

    仍然无法看到正确的通道序列。

    我也注意到、在不使用 LUT 的正常情况下、通道也不是按顺序读取。

    读取 ADC 通道时是否要进行配置?

    请在这里帮助我。

    你在之前的答复中也说过:  

    例如、如果您的目标是转换 ADC1和组1通道、则查找表应从(0xFF3E2000 + 32 * 4)开始、即0xFF3E2080  地址
    但在 LUT 表中、第一个地址是 0xFF3E2000 -  0x00000000        /*通道0*/。  

    请您澄清这一点。

    谢谢。

    普拉蒂克

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

    Jagadish、您好!

    我们会继续提供此路径。

    我注意到、下面提到的 TRM 寄存器地址与 IDE 中的实际控制器映射不匹配。

    这是随附的这两者的屏幕截图。

          

                TRM                                              CCS IDE 调试模式

    请注意、我选择了正确的控制器。

    我也面临着奇怪的问题。 我无法将值设置为  ADG1MAXCOUNT 寄存器 寄存器。

    尽管我能够将值设置为所有其他寄存器、  ADG2MAXCOUNT 寄存器 (如右侧图像所示)。

    在代码中、我尝试将0x7h 写入  ADG1MAXCOUNT 寄存器  将0xCh and 0xCh 添加到  ADG2MAXCOUNT 寄存器

    但是、如右侧的图所示、  ADG2MAXCOUNT 寄存器  已设置正确的值、但是  ADG1MAXCOUNT 寄存器  保持不变。

    您能检查一下这一点吗?

    谢谢。

    普拉蒂克

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

    Pratik、您好!

    好的、我最后将尝试针对该要求创建一个示例。

    --
    谢谢。此致、
    Jagadish。

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

    Pratik、您好!

    我创建了一个示例工程供您参考。

    e2e.ti.com/.../ADC_5F00_Enhanced_5F00_Channel_5F00_Selection_5F00_Demo_5F00_LC4357.zip

    以下是最终测试结果:

    大家可以看到、我的最终转换结果与我给出的 LUT 顺序相同。 我还通过给通道1提供0V 和3.3V 来测试这个序列、结果恰好在第5次转换时反映、即 ADC_DATA[4]。

    请将其作为参考、并使用您的代码进行验证。

    --
    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!

    感谢您提供示例。 这有助于理解增强信道选择功能。

    我已根据示例项目进行了更改。 但在本例中、当我启用增强通道选择模式时、它不会获取所选的通道、而是从0到16获取所有通道。

    一个观察结果是 、在我们设置 ADG1CHNSELMODECTRL = 0x0A 之后、ADG1INTCR 寄存器变为0;

    但在您的示例代码中、它显示了所选通道的数量。

    此外、 ADG1INTFLG 寄存器为0x0B、这表示溢出。

    您能在这里指导我吗?

    谢谢。

    普拉蒂克

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

    Pratik、您好!

    我根据示例项目进行了更改。 但在我启用增强信道选择模式时,它不会获取所选信道,而是从0到16的所有信道。

    它不会对所有通道进行转换、而是只会按照 LUT 中用户定义的顺序对选定的通道进行转换。

    您可能会混淆 RAM 中的数据存储、实际上在 RAM 中的 ID 字段不会仅移动 CURRENT_COUNT 并会移动到 RAM 存储器中。

    因此、RAM 存储中归档的 ID 将始终序列为0、1、2、3等、但实际通道 ID 应再次从 LUT 表中获取、就像我在示例中所做的那样:

    为了便于理解、请参阅以下示例:

    在初始测试中、我有7 个从通道0到通道6的 ADC 通道

    现在、我已经测试并验证了 RAM 存储器中的数据、

    您可以在 RAM 中看到 ID 字段始终只按顺序显示、我的意思是 ID 字段显示0到6的数字、因为它不是实际的 ID、而是  CURRENT_COUNT。

    如果您在 用实际 ID 替换 CURRENT_COUNT 后进行验证、则可以看到正确的序列。

    在这里您可以看到、通道1的结果为0、因为我已将该通道和所有其他通道接地、所以我们在其他通道上获得了一些值。  现在我要做的是删除接地的通道、并希望验证结果。

    现在我要从 HALCoGen 中移除 ADC 通道1:

    现在、您可以看到结果是现在仅针对6个通道。 但 ID 像以前一样按顺序查看、但正如我所说、它们不是实际的 ID 、而只是 CURRENT_COUNT 数字、它们始终仅按顺序显示。

    如果您仔细验证 CURRENT_COUNT 为4、结果0是否替换为其他通道。

    甚至您还可以在最终结果缓冲器中事后验证相同的内容。

    --
    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!  

    感谢您的详细解释、我了解了 ID 和 CURR_COUNT 的数字序列。

    但在本例中、通道将超过所选的通道。
    即使我已经使用以下 for 循环进行了验证:

    例如,在你选择了6个通道后,你的 Seq 将从0变为5 ,但在我的例子中,我选择了8个通道,但循环直到16个通道,因为我的通道选择寄存器在进入 getADCData()之前为0。

    请指导我、为什么会清除通道选择寄存器。

    谢谢。

    普拉蒂克

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

    Pratik、您好!

    在 BNDB 中分配的存储器大小是多少。

    这应该是我们要转换的通道数量的最小大小。  如果您要转换16个通道、请将其保持为至少16个。

    --
    谢谢。此致、
    Jagadish。

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

    我更正了这个问题、它起作用了。

    感谢 Jagadish 的全力帮助。