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.

[参考译文] AM623:使用 BCDMA 进行 SPI 数据传输

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

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1554832/am623-spi-data-transfer-using-bcdma

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

工具/软件:

您好、

我的客户希望使用 BCDMA 进行 SPI 传输。 他使用 mcu_plus_sdk_am62x_11_00_00_16 中的“umax_memcpy_interrupt.c"示“示例作为起点。
顺便说一下、SDK 中有一个 使用 PKTDMA 的“mcspi_loopback_dma"示“示例。
他希望使用 BCDMA、因为他已在其他进程中使用它并重复使用代码。

他在 sysconfig/代码中添加了必要的更改、现在到 SPI 的数据传输/从 SPI 传输数据似乎可以正常工作。
但数据传输后不会产生中断。

【调试情况】
他检查了 UDMA_eventRegister () 函数中的“cqEventPrms"参数“参数并找到  
vintrNum 为 2Ch (44)。 这意味着将第 44 个中断聚合器虚拟中断分配给事件。
他还检查了 位于 0x4802C020 的 IntrStatusReg 的第 44 个中断、并确认 DMA 传输完成后该值更改为 0x00000001。
但是“cqEventPrms",“, coreIntrNum、coreIntrNum 为 0h、应该映射到内核中断。

他还检查了 UDMA_init 之后 gUdmaDrvObj 中的“rmInitPrms"参数“参数。

startBlkCopyUhcCh    = 0x00000000 (0)
numBlkCopyUhcCh      = 0x00000000 (0)
startBlkCopyHcCh     = 0x00000000 (0)
numBlkCopyHcCh       = 0x00000000 (0)
startBlkCopyCh       = 0x00000012 (18)
numBlkCopyCh         = 0x00000006 (6)
startTxUhcCh         = 0x00000000 (0)
numTxUhcCh           = 0x00000000 (0)
startTxHcCh          = 0x00000000 (0)
numTxHcCh            = 0x00000000 (0)
startTxCh            = 0x0000000C (12)
numTxCh              = 0x00000006 (6)
startRxUhcCh         = 0x00000000 (0)
numRxUhcCh           = 0x00000000 (0)
startRxHcCh          = 0x00000000 (0)
numRxHcCh            = 0x00000000 (0)
startRxCh            = 0x00000012 (18)
numRxCh              = 0x00000006 (6)
startMappedTxCh      = {0x00000000,0x00000000,0x00000000,0x00000000}
numMappedTxCh        = {0x00000000,0x00000000,0x00000000,0x00000000}
startMappedRxCh      = {0x00000000,0x00000000,0x00000000,0x00000000}
numMappedRxCh        = {0x00000000,0x00000000,0x00000000,0x00000000}
startMappedRing      = {0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000}
numMappedRing        = {0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000}
startFreeFlow        = 0x00000000 (0)
numFreeFlow          = 0x00000000 (0)
startFreeRing        = 0x00000000 (0)
numFreeRing          = 0x00000000 (0)
startGlobalEvent     = 0x0000020D (525)
numGlobalEvent       = 0x00000080 (128)
startVintr           = 0x0000002C (44)
numVintr             = 0x00000012 (18)
startIrIntr          = 0x00000000 (0)
numIrIntr            = 0x00000012 (18)
startC7xCoreIntr     = 0x00000000 (0)

他认为 startVintr (44) 与 vintrNum 有关。 和 startIrIntr (0) 与 coreIntrNum 相关。

问题:
Q1) 首先、是否可以使用 BCMDA 进行 SPI 数据传输?
Q2) 如果 Q1 的答案是肯定的、那么没有生成 DMA 完成中断的潜在原因是什么? 任何调试建议?

谢谢。此致、
田代浩一郎

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

    您好 、Tashiro Koichiro、

    SoC 支持可以使用 BCDMA 或 PKTDMA 通道将数据从存储器传输到 SPI FIFO 或将 SPI FIFO 传输到存储器。

    在 MCU+SDK 中、我们仅支持 PKTDMA、而不支持 BCDMA。

    如果客户要实现 BCDMA、那么我们需要检查客户如何为 SPI 实现 TRPD。

    为什么客户希望使用 BCDMA 而不是 PKTDMA、并且 MCU+SDK 也不支持 BCDMA + SPI。

    谁是客户?

    此致、

    Anil.

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

    尊敬的 Anil:

    如果客户正在实施 BCDMA、那么我们需要检查客户如何为 SPI 实施 TRPD。

    是否要获取客户的 CCS 工程?

    为什么客户要使用 BCDMA 而不是 PKTDMA、并且 MCU+SDK 也不支持 BCDMA + SPI。

    如前所述、客户已将 BCDMA 用于其他目的、因此他们熟悉 BCDMA。 这就是为什么他们更喜欢 BCDMA 而不是 PKTDMA 的原因。

    客户是谁?

    我会让您离线知道。

    谢谢。此致、
    田代浩一郎

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

    您好 、Tashiro Koichiro、

    感谢您分享详细信息。

    在 MCU+ SDK 中、我们支持带有 PKTDMA 的 SPI、并且该路径已经过正确验证和测试。

    如果我们尝试将 BCDMA 与 SPI 一起使用、可能会导致多个问题、因为 TI 的 E2E 不支持此功能。

    虽然客户可能已经熟悉 BCDMA、但不建议将其重复用于 SPI 等其他外设。

    MCU+ SDK 中的设计如下:
    •BCDMA 通道用于存储器到存储器传输。
    •PKTDMA 通道用于存储器到外设或外设到存储器传输(如 SPI、UART 等)。

    这种分离是为了确保正确性和稳定性。

    此致、

    Anil.

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

    尊敬的 Anil:

    根据您的反馈、现在客户正在尝试修改 mcspi_loopback_dma 示例并使用 PKTDMA。
    数据传输似乎可以正确完成、但在传输完成后不会产生中断(未调用中断处理程序)。
    IntrStatusReg 值更新为 0x00000001、因此看起来 INTAGGR 出现中断。

    以下是客户检查的内容。
    -当 UDMA_eventRegister API 与 eventMode = UDMA_EVENT_MODE_SHARED 结合使用时,
    vintrNum 为 62、coreIntrNum 为零。
    -当  UDMA_eventRegister API 与 eventMode = UDMA_EVENT_MODE_EXCEIVE 一起使用时,masterEventHandle = NULL ,
    vintrNum 为 63、coreIntrNum 为 1。
    客户认为 vintrNum 应该在 0 到 39 之间。 coreIntrNum 应介于 64 和 103 之间。

    -客户还检查了 UdmaRmInitPrms_init 后的 Udma_Rm InitPrms,并发现初始化的值是;
    startVintr = 62
    numVintr = 18
    startIrIntr = 0
    numIrIntr = 18
    他认为中断不正确生成、因为上述初始化值不正确。
    您能否检查这些值是否正确?
    如果没有、如何纠正?

    谢谢。此致、
    田代浩一郎

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

    您好 、Tashiro Koichiro、

    请问客户是使用哪种 SPI 主接口、MCU 接口还是 DM 接口?

     客户如何 为 SPI + DMA 配置 syscfg?

    客户如何确认  未触发中断?

     客户是否 启用了回调模式并将断点置于回调模式、并且未达到断点?

    此致、

    Anil.

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

    尊敬的 Anil:

    是否可以知道客户使用的是 SPI 主模块、MCU 模块还是 DM SPI 模块?

    使用 main 中的 McSPI1。
    我将向您发送部分客户代码和一些离线解释。

    谢谢。此致、
    田代浩一郎

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

    您好 、Tashiro Koichiro、

    我已经看到了代码。

    我们 在 MCU+SDK 中不正式支持 SPI + DMA。

    我建议在自定义应用中做所有事情、例如示例代码中的 DMA 和 SPI 集成。

     A53 内核上已经提供了 DMA SPI 示例。

    可以在 DM R5F 内核中利用相同的代码。

    请告诉我如何继续。

    如果我想检查客户代码、我需要验证每个代码、这需要一些时间。

    至于其他方法、A53 内核上提供具有 DMA 的 SPI、因此我们需要轻松集成到 DM R5F 内核中。

    客户是谁、他们的最终产品是什么?

    他们什么时候想要这种代码?

    由于 MCU+SDK 中不支持此功能、但根据客户的详细信息、我们可以使用该功能。

    此致、

    Anil.