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.

[参考译文] J784S4XEVM:c7x 上的 UDMA、错误的中断号

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1619152/j784s4xevm-udma-on-c7x-wrong-interrupt-number

器件型号: J784S4XEVM

尊敬的专家:

我们在 j784s4_evm 上使用 SDK 10.01。

我正在尝试使用 UDMA 驱动程序。

我在 c7x 内核上的 UDMA 主实例初始化期间发现问题。

分配的中断向量为向量 0。 但从 48 开始。

UdmaRmInitPrms_init 函数为已初始化的实例设置 c7x 内核中断偏移。

if(UDMA_INST_ID_START != instId)
          {
              uint32_t curInstIrStart     = 0U;
              uint32_t startInstIrStart   = 0U;
              /* Returned num value not used in this case, Passing to avoid dereferencing of NULL pointer */
              uint32_t num        = 0U;

              /* Get the startInstIrStart i.e., start value of range of IR interrupts
                 allocated to first instance */
              retVal += Udma_rmSetSharedResRmInitPrms(Udma_rmGetSharedResPrms(UDMA_RM_RES_ID_IR_INTR),
                                                     UDMA_INST_ID_START,
                                                     UDMA_INST_ID_START,
                                                     rmDefBoardCfgResp[UDMA_RM_RES_ID_IR_INTR].rangeStart,
                                                     rmDefBoardCfgResp[UDMA_RM_RES_ID_IR_INTR].rangeNum,
                                                     &startInstIrStart,
                                                     &num);

              /* Get the curInstIrStart i.e., start value of range of IR interrupts
                 allocated to current instance */
              retVal += Udma_rmSetSharedResRmInitPrms(Udma_rmGetSharedResPrms(UDMA_RM_RES_ID_IR_INTR),
                                                     instId,
                                                     UDMA_INST_ID_START,
                                                     rmDefBoardCfgResp[UDMA_RM_RES_ID_IR_INTR].rangeStart,
                                                     rmDefBoardCfgResp[UDMA_RM_RES_ID_IR_INTR].rangeNum,
                                                     &curInstIrStart,
                                                     &num);
              /* Add the no. of IR Interrupts reserved for C7x/C66x before current instance
                 to make sure each instance has their own range C7x/C66x events */
          #if defined (BUILD_C7X)
              /* Start C7x Core Interrupt */
              rmInitPrms->startC7xCoreIntr                   =  (UDMA_C7X_CORE_INTR_OFFSET + (curInstIrStart - startInstIrStart));

 似乎此 if 语句缺少 else 语句(对于 UDMA 主实例)

它至少应该执行 rmInitPrms->startC7xCoreIntr = (UDMA_C7X_CORE_INTR_OFFSET);

 

此致、

Charles

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

    尊敬的 Charles:

    startC7xCoreIntr 分配将放置在 if (UDMA_INST_ID_START!= instId) 内、这会针对 UDMA 主实例 (instId = 0) 跳过。 因此、startC7xCoreIntr 保持为 0、而不是 UDMA_C7X_CORE_INTR_OFFSET (48)、从而使用保留区域 (0–47) 中的中断向量对 CLEC 进行编程。
    我会从我这边尝试一下,然后回到你身边。

    此致、
    Shabary S Sundar.

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

    尊敬的 Charles:

    我在 c7x 内核上初始化 UDMA 主实例期间发现了问题。

    您能否说明遇到此问题时所使用的 UDMA 示例或应用?  在我这边、我从 SDK 构建并运行了 UDMA memcpy 测试示例、运行正常。  您还可以尝试构建一个 SDK UDMA 示例应用。

    您还能否分享您用于编译示例/应用的确切编译命令或过程?

    请在下面找到我这边使用的环境设置和编译步骤:

    # Set PDK installation path (pointing to the packages directory)
    export PDK_INSTALL_PATH=<PDK_INSTALL_PATH>/packages
    
    # Set tools installation path
    export TOOLS_INSTALL_PATH=<TOOLS_INSTALL_PATH>
    
    From the PDK build directory:
    make -s udma_memcpy_testapp_freertos BOARD=<board_name> BUILD=release CORE=<core_name>


    此致、
    Shabary S Sundar

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

    尊敬的  Shabary S Sundar:

    它工作正常、但未达到预期。
    在文档中、为 UDMA 保留的中断矢量从 id 48 开始。

    1.  对于主 UDMA 、会分配中断 0(不是预期的,因为缺少偏移)。
    2.  对于 BCDMA 和 MCU UDMA、看起来是正确的(在预期范围内)。

    在我的应用中、我将使用中断 0 用于其他目的、当我实现 UDMA 时、中断的初始化失败(已分配中断 0) 。

    我已经做了纠正、我只是报告了文件与执行之间的差异。

    此致、

    Charles

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

    尊敬的 Charles:

    感谢您指出这一差异。 我们将在内部进行审查并考虑到这一点。

    此致、
    Shabary S Sundar