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.

[参考译文] AM6442:McSPI DMA 模式

Guru**** 2543550 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1301302/am6442-mcspi-dma-mode

器件型号:AM6442
主题中讨论的其他器件:SysConfig

您好

我对 McSPI DMA 模式有疑问吗?

--

q1:mcu+sdk 样例"mcspi_loopback_dma",

我认为该程序是使用 DMA 将存储器(gMcspiTxBuffer)传输到 TX 缓冲区、将 RX 缓冲区传输到存储器(gMcspiRxBuffer)。

但我认为它 似乎没有设置 uDMA。

在 API 中有什么 uDMA 设置吗?

还是 DMA 模式自动将 FIFO 传输到存储器?

--

问题2:  

在 TRM McSPI 中、

我只能找到 DMA 请求、无法找到 DMA 模式的详细信息。

DMA 模式是否意味着"使用 DMA 请求"?

这个 DMA 请求是发送给 uDMA 的信号?

--

问题3:

是否有关于 McSPI RXbuffer 读取时间的任何测试/报告?

我的客户想知道使用 DMA 的64字节读取时间。

谢谢。

GR

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

    您好、GR、

    请允许我们花点时间返回此主题。

    谢谢。

    瓦伊布哈夫

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

    尊敬的 Kumar:

    感谢您的支持。

    我很高兴 你告诉我是否有任何信息。

    此致、

    GR

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

    您好、GR、

    在我忙于执行一项高优先级任务时、给我延迟答复表示歉意。

    请等待一天内回复、感谢您的耐心等待。

    谢谢。

    瓦伊布哈夫

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

    您好、GR、

    我已记下您的疑问。

    就 uDMA 而言、它是通过 SysConfig 工具进行配置的。 可以在 SysConfig 工具生成的文件中找到有关它的更多详细信息。

    我在这里附上几个片段,这将有助于引导你在正确的方向。

    请告诉我这是否有帮助。

    感谢您的耐心等待。

    此致、

    瓦伊布哈夫

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

    您好、Vaibhav、

    感谢您的信息。

    我了解 uDMA。

    有关于  McSPI RXbuffer 读取时间的任何信息吗?

    问题3:

    是否有关于 McSPI RXbuffer 读取时间的任何测试/报告?

    我的客户想知道使用 DMA 的64字节读取时间。

    [/报价]

    或缓冲器分配到 MSRAM 中?

    如果正确、我们可以读取几个 CPU 时钟吗?

    在链接器命令文件中

    此致、

    GR

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

    您好、GR、

    关于延迟、我介绍了 MCSPI 传输 API 的测量。 请在下面找到它。

    如果您需要一些特定的延迟、请告诉我、我很乐意提供相同的延迟。

    若要检查某个特定缓冲区是否位于 MSRAM 中、您只需在 CCS 中打开内存分配工具即可。 从此处开始、您可以检查缓冲区在 MSRAM 的某个部分中的分配位置。 下面给出了一个快照、可以在其中找到存储器分配工具选项、以及该选项打开时的窗口。

    希望这对您有所帮助、感谢您的耐心等待。

    此致、

    瓦伊布哈夫

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

    您好、Vaibhav、

    感谢您的支持。

    抱歉迟到了回复。

    如果您需要一些特定的延迟,请告诉我,我很乐意提供相同的延迟。

    谢谢你。

    我展示过、我想知道特定延迟。

    要检查特定缓冲区是否在 MSRAM 中,您只需打开 CCS 中的内存分配工具即可。 从此处开始、您可以检查缓冲区在 MSRAM 的某个部分中的分配位置。 下面给出了您可以在其中找到内存分配工具选项的快照以及打开时的窗口。

    在 MCU+SDK SPI 回送(R5F)项目中、

    MSRAM 中没有下拉按钮。

    我应该怎么做的设置吗?

    此致、

    GR

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

    您好、GR、

    我已注意到您的关切。

    请预计在几个工作日内收到回复。

    感谢您的耐心等待。

    此致、

    瓦伊布哈夫

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

    您好、GR、

    请预计在一天内收到答复。

    感谢您的耐心等待。

    此致、

    瓦伊布哈夫

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

    您好、GR、

    我展示过、我想知道特定延迟。

    [/报价]

    好的、我将计算一次接收8位数据的延迟。

    在 MCU+SDK SPI 回送(R5F)项目中、

    MSRAM 中没有下拉按钮。

    我应该怎么做的设置吗?

    [/报价]

    我认为不需要额外的设置。 这很有趣,我将再次检查我的终端。

    事实证明、它应该显示出来。

    您可以点击顶部面板上标题为" 全部展开 "

    请告诉我、如果这也不能为您效劳。

    我希望您尝试执行的其他步骤是重新启动 CCS、然后关闭并重新打开 存储器分配 工具。

    期待您对此作出回应。

    同时、我将在某个时候开始计算上面提到的延迟。

    此致、

    瓦伊布哈夫

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

    您好、Vaibhav、

    好了,我将计算一次接收8位数据的延迟。

    谢谢你。 我将等待。

    您可以点击顶部面板上标题为" 全部展开 "

    请告诉我、如果这也不能为您效劳。

    我希望您尝试执行的其他步骤是重新启动 CCS、然后关闭并重新打开 存储器分配 工具。

    期待您对此作出回应。

    [/报价]

    我无法通过按"全部展开"在 MSRAM 内部看到

    我已尝试从 MCU+SDK (v9.01)重新移植 CCS 工程、但不起作用。

    此致、

    GR  

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

    您好、GR、

    由于下拉列表没有出现、我将尝试使用相同的 CCS 版本和适用于 AM64x 的 MCU plus SDK 来重新创建。

    我认为 CCS 12.5、MCU plus SDK 9.1应该这样做。

    请允许我花一天时间重新创建。

    请预计在一天内收到答复。

    感谢您的耐心等待。

    此致、

    瓦伊布哈夫

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

    您好、GR、

    我已重新创建此问题、并且也无法看到下拉选项/展开所有也不适用于 MSRAM。

    只是指出了这个问题在 MCU plus SDK AM64x 版本9.0和更低版本中不存在。 只能在9.1和更高版本中看到它。

    我已针对此问题提出了 JIRA、并将在我们继续修复此问题时在此处进行更新。

    解决方法

    或者,我希望您查看名为" mcspi_loopback.Debug.map "。

    它位于 调试/

    打开该文件后、您将能够看到分配的位置、例如、如果我想查看分配的位置  gMcspiTxBuffer

    那么我只需进行搜索并找出相同的值。

    有关示例、请查看随附的以下屏幕截图。

    希望这个解释能帮你解决问题。

    我将致力于前面所承诺的计算延迟。

    感谢您的耐心等待。

    此致、

    瓦伊布哈夫

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

    您好、Vaibhav、

    感谢您的信息。

    我将检查.map 文件。

    我按之前承诺的计算延迟。

    谢谢你。

    我将等待。

    此致、

    GR

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

    您好、GR、

    之前、我已经通过 MCSPI 连接了一个外部传感器、因此我将从中读取一个字节、获取延迟、并在一天之内在这里更新。

    此致、

    瓦伊布哈夫

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

    您好、GR、

    我已经提出了读取1字节或8位数据的延迟计算。

    基本上是您所请求的读取操作。

    因此、延迟有一个很有趣的数字。

    由于微秒计算非常广泛、因此我计算了周期、或者更正式地计算了 CPU 时钟周期。

    请查看所附的屏幕截图。  

    事实上、对于刚刚读取的8位、CPU 时钟周期大约为每一次218个、但对于8位读取的其余部分、平均显示168个 CPU 时钟周期。



    如需更多信息、

    计算时间(以微秒为单位)的公式非常简单、如= CPU 时钟周期*(1/内核频率)

    在本例中、我使用的是 R5F 内核、因此 平均时间(以微秒为单位)= 168 *(1 / 800)= 0.21微秒

    对于第一次读取、它为218个 CPU 时钟周期或0.2725微秒。




    这是代码中读取8位数据的部分。 此 API 可在以下位置获取: MCU_PLUS_SDK_AM64X_PATH > SOURCE > drivers > mcspi > V0 > mcspi_v0.c


    static inline uint8_t *MCSPI_fifoRead8(uint32_t  baseAddr,
                                    uint32_t  chNum,
                                    uint8_t  *bufPtr,
                                    uint32_t  transferLength,
                                    uint32_t  dataWidthBitMask)
    {
        uint32_t        i, rxData;
        uint32_t cycleCountBefore, cycleCountAfter, cpuCycles; // added for latency compute
    
        /* Read the data from RX FIFO for 8-bit transfer */
        for(i = 0; i < transferLength; i++)
        {
            CycleCounterP_reset();  // added for latency compute
            cycleCountBefore = CycleCounterP_getCount32(); // added for latency compute
    
            rxData = MCSPI_readRxDataReg(baseAddr, chNum);
    
            cycleCountAfter = CycleCounterP_getCount32(); // added for latency compute
            if(cycleCountAfter > cycleCountBefore) // added for latency compute
            {
                cpuCycles = cycleCountAfter - cycleCountBefore; // added for latency compute
            }
            else
            {
                cpuCycles = (0xFFFFFFFFU - cycleCountBefore) + cycleCountAfter; // added for latency compute
            }
    
            printf("Total number of cycles for reading 8 bits is: %d \r\n", cpuCycles); // added for latency compute
    
            rxData &= dataWidthBitMask;         /* Clear unused bits */
            *bufPtr++ = (uint8_t) rxData;
        }
    
        return (bufPtr);
    }




    很乐意为您提供帮助  

    此致、

    瓦伊布哈夫

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

    您好、Vaibhav、

    非常感谢!

    我明白了。

    此致、

    GR