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.

[参考译文] RM57L843:有关 ADC FIFO 的问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/619038/rm57l843-questions-about-adc-fifo

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

最近我学习使用 ADC、有一些我不理解的器件。

问题:

  1. 如果启用了 ADC RAM 溢出忽略功能、当 ADC 已经从起始点覆盖 RAM 时、如果此时读取 FIFO、我将得到什么结果? 来自被覆盖位置的数据、还是 RAM 中最早的数据?
  2. 我能不能理解 FIFO 是一个循环缓冲器? 这意味着它始终首先为我提供最早的数据。 如果缓冲区中的一个元素被覆盖、读取位置将指向下一个数据、而新的被覆盖数据将保留为最新数据。
  3. ADC FIFO 有一个地址范围。 但 TRM 说我可以访问其中的任何一个数据。 这是否意味着:
    1. 如果我读取一个字、我可以选择范围中的任何地址。 (在 HALCoGen 生成的代码中,它对应于 BUF0~BUF7寄存器。)
    2. 如果我使用指令 LDM 或 memcpy 函数读取多个字、我可以覆盖所有地址、ADC 将自动按顺序最多提供8个结果。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    如果 MODECR 中的 OVR_RAM_IGN 位置位,则 ADC 模块将忽略组结果存储器的内容,并换行以使用新转换的结果覆盖存储器。 如果 OVR_RAM_IGN 位未置位,则应用程序必须在溢出情况下读出组的结果存储器;只有这样,ADC 才能继续向存储器写入新结果。首先读取存储的转换结果

    因此它将读取最早的数据

    2.是的,您总是先获得最旧的数据。

    3.将检查此项

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢你的答复。 期待第三个问题的答案。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    如果我读取一个字、我可以选择范围内的任何地址。 (在 HALCoGen 生成的代码中,它对应于 BUF0~BUF7寄存器。)

    QJ>您可以使用任何缓冲器(BUF0~BUF7)读取数据。 您读出的数据是最早 的数据。  在此示例中、为转换组1选择通道4、7和8、转换结果存储在组1存储器中。 通道4数据首先存储(内存插槽#0、地址偏移量为0x0)、然后存储通道7 (内存插槽#1、地址偏移量为0x4)和通道8 (内存插槽#2、地址偏移量为0x8)。 在连续模式下、通道4的下一个转换数据将存储在内存插槽3中。 在单 次转换模式下、通道4的下一个转换数据将存储在内存插槽0中。 在读取插槽0和插槽1之前、我们无法读取插槽2中的数据。

    2.如果我使用指令 LDM 或 memcpy 函数读取多个字、我可以覆盖所有地址、ADC 将自动按顺序提供最多8个结果

    QJ> 使用 LDM、一次最多可以读取8个结果。

    asm (" push{r0、R1-R12}");

    asm (" ldr r0、addr_value");

    asm (" LDM r0!、{R2-R8}");

    asm (" pop{r0、R1-R12}");

     

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

    您好!

    使用 memcpy、您可以读取尽可能多的字节。 此示例读取18个字。 组1存储器区域定义为40个字。

        memcpy (ADC1_DATA、0xFF3E0040、4*18); //0xFF3E0040是 MibADC1 RAM 中组1的存储器起始地址

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