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.

[参考译文] TMS320C6746:C6746 EDMA:DMAQNUMn

Guru**** 2587365 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/630740/tms320c6746-c6746-edma-dmaqnumn

器件型号:TMS320C6746

您好!

我的目标是将 UART1发送和接收事件映射到 EDMA3通道控制器0的队列1。

我有类似的东西  

CSL_FINST (EDMA3->DMAQNUM[EDMA_queue_RX_UART1 ]、EDMA3CC_DMAQNUM_E0、Q1);
CSL_FINST (EDMA3->DMAQNUM[EDMA_queue_TX_UART1 ]、EDMA3CC_DMAQNUM_E1、Q1)

其中 EDMA_queue_RX_UART1和 EDMA_queue_TX_UART1为1。  

根据 TRM,字段描述为此。

由于 UART1 RX 和 TX 事件是事件12和13、我不确定如何在 DMAQNUM 寄存器中映射/配置它?

此致

Parul Bhatt

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

    我已将您的疑问转发给软件专家。 他们的反馈应发布在此处。

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

    本特定的 TI 文档并不是最好的。 两个表中都使用了"n"来表示不同的值。 在我们的一些较新文档中、我们使用 x 和 y 来表示不同的枚举值、这一点变得更加清晰。 在这种情况下、应该使用 DMAQNUMx、表16-28顶部的数字代表要用于 x 的值。例如、E8与 DMAQNUM1中的0-2位一同使用。

    表16-28中的枚举值表示分配给特定事件的通道。 在本例中、您使用的是 E12和 E13。

    我不确定在最新的 Processor SDK 版本中提供或推荐了哪些 CSL 命令、但如果您不使用、我建议您转到它、以便在我们所有最新的处理器中提供最佳的持续支持和可移植性。

    就个人而言、我不喜欢使用 FINS/FINST 函数、因为它们执行读取/修改/写入操作。 如果在设置过程中只执行了一次此代码、这不是问题、但 EMDMACC 寄存器上的 RMW 速度很慢、并且在实时处理应用中使用时会导致问题。

    您可以从我的解释中看到、需要更新 FINST 的参数以使用正确的 EN 字段掩码;这就是 EDMA3CC_DMAQNUM_E0的用途。

    您在哪里获得了此代码的示例?

    我不知道您所使用的 CSLr 版本对应的令牌或字段值是多少、因此我建议您在 ProcSDK 中查找示例。 否则、请查看 CSL 源代码以了解 FINST 的需求。

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

    我有这个版本的 CSL
    software-dl.ti.com/.../index_FDS.html。

    cslr_edma3cc.h flie 具有用于 DMAQNUM 的令牌、其中 CSL_FINST 是从中获取令牌的。 该文件具有以下 DMAQNUM 令牌:

    /* DMAQNUM */


    #define CSL_EDMA3CC_DMAQNUM_E7_MASK (0x70000000u)
    #define CSL_EDMA3CC_DMAQNUM_E7_SHIFT (0x0000001Cu)
    #define CSL_EDMA3CC_DMAQNUM_E7_RESETVAL (0x000000000000)
    /*--E7 Tokens--*/
    #define CSL_EDMA3CC_DMAQNUM_E7_Q0 (0x000000000000)
    #define CSL_EDMA3CC_DMAQNUM_E7_Q1 (0x00000001u)



    #define CSL_EDMA3CC_DMAQNUM_E6_MASK (0x07000000u)
    #define CSL_EDMA3CC_DMAQNUM_E6_SHIFT (0x00000018u)
    #define CSL_EDMA3CC_DMAQNUM_E6_RESETVAL (0x000000000000)
    /*--E6 Tokens--*/
    #define CSL_EDMA3CC_DMAQNUM_E6_Q0 (0x000000000000u)
    #define CSL_EDMA3CC_DMAQNUM_E6_Q1 (0x00000001u)



    #define CSL_EDMA3CC_DMAQNUM_E5-MASK (0x00700000u)
    #define CSL_EDMA3CC_DMAQNUM_E5-SHIFT (0x00000014u)
    #define CSL_EDMA3CC_DMAQNUM_E5_RESETVAL (0x000000000000)
    /*--e5 Tokens--*/
    #define CSL_EDMA3CC_DMAQNUM_E5-Q0 (0x000000000000u)
    #define CSL_EDMA3CC_DMAQNUM_E5-Q1 (0x00000001u)



    #define CSL_EDMA3CC_DMAQNUM_E4_MASK (0x00070000u)
    #define CSL_EDMA3CC_DMAQNUM_E4_SHIFT (0x00000010u)
    #define CSL_EDMA3CC_DMAQNUM_E4_RESETVAL (0x00000000u)
    /*--E4令牌--*/
    #define CSL_EDMA3CC_DMAQNUM_E4_Q0 (0x000000000000)
    #define CSL_EDMA3CC_DMAQNUM_E4_Q1 (0x00000001u)



    #define CSL_EDMA3CC_DMAQNUM_E3_MASK (0x00007000u)
    #define CSL_EDMA3CC_DMAQNUM_E3_SHIFT (0x0000000Cu)
    #define CSL_EDMA3CC_DMAQNUM_E3_RESETVAL (0x000000000000)
    /*--E3 Tokens--*/
    #define CSL_EDMA3CC_DMAQNUM_E3_Q0 (0x000000000000)
    #define CSL_EDMA3CC_DMAQNUM_E3_Q1 (0x00000001u)



    #define CSL_EDMA3CC_DMAQNUM_E2_MASK (0x00000700u)
    #define CSL_EDMA3CC_DMAQNUM_E2_SHIFT (0x00000008u)
    #define CSL_EDMA3CC_DMAQNUM_E2_RESETVAL (0x000000000000)
    /*--E2令牌--*/
    #define CSL_EDMA3CC_DMAQNUM_E2_Q0 (0x000000000000)
    #define CSL_EDMA3CC_DMAQNUM_E2_Q1 (0x00000001u)



    #define CSL_EDMA3CC_DMAQNUM_E1_MASK (0x00000070u)
    #define CSL_EDMA3CC_DMAQNUM_E1_SHIFT (0x00000004u)
    #define CSL_EDMA3CC_DMAQNUM_E1_RESETVAL (0x000000000000)
    /*--E1令牌--*/
    #define CSL_EDMA3CC_DMAQNUM_E1_Q0 (0x000000000000)
    #define CSL_EDMA3CC_DMAQNUM_E1_Q1 (0x00000001u)



    #define CSL_EDMA3CC_DMAQNUM_E0_MASK (0x00000007u)
    #define CSL_EDMA3CC_DMAQNUM_E0_SHIFT (0x000000000000)
    #define CSL_EDMA3CC_DMAQNUM_E0_RESETVAL (0x00000000u)
    /*--E0令牌--*/
    #define CSL_EDMA3CC_DMAQNUM_E0_Q0 (0x00000000u)
    #define CSL_EDMA3CC_DMAQNUM_E0_Q1 (0x00000001u)


    #define CSL_EDMA3CC_DMAQNUM_RESETVAL (0x00000000u)


    很明显,令牌仅限于 E7。 因此、我不确定要用于 E12和 E13的令牌。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Parul、

    我在本地拥有的最早的 BIOSPSP 版本是03_10_01_00、其中文件日期为2012年。 您是否支持非常旧的产品? 如果没有、请升级到最新的 Processor SDK。

    您的代码是否按目前的原样正确编译和链接? FINST 宏需要精确的文本值才能解析为有效令牌。 我在旧文件中找不到示例。 您使用了什么示例来生成您的代码?

    如果找到 FINST 宏的定义、您将看到它如何创建一组寄存器操作值:寄存器名称、移位计数和/或掩码值以及插入值。 您已使用 DMAQNUM[EDMA_queue_RX_UART1 ]选择了寄存器名称。

    当您查看表16-28及其上面的寄存器图(在 TRM 中)时、您会看到您已为 DMAQNUM 选择 n=1列、因此您需要从此处显示的 Eventn 值中进行选择。 您需要选择 E12和 E13来获得最左列中显示的正确字段。 由于您注意到 CSL 仅为 E0-E7提供掩码和移位值、因此您需要从这些值中进行选择、以选择事件的对应字段 E12和 E13。 这分别是 E4和 E5、对吧?

    使用 E0和 E1的旧值、您可以在执行这些行之前以及在执行这些行之后检查 CCS 中的 DMAQNUMn 寄存器。 这将让您查看您的代码集的 EN 字段。 然后更新到 E4和 E5的新值并再次运行。 您是否看到这次更新了正确的字段?

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

    您好、Randy、

    Parul 正在帮助我为现有应用添加 UART EDMA 支持、该应用已经在为 McASP 使用 EDMA。  您已经注意到、她引用的代码是很久以前使用之前的 SDX/CSL API 等创建的  我们正在将项目更新为最新的 SYS-BIOS、但与此同时、我们还必须继续将 UART EDMA 支持集成到此版本的项目代码中、而无需对支持软件(CSL)进行任何大规模更新。

    我已经查看过这篇主题、并相信您的建议已经奏效。  我已经附上了使用旧 CSL FINST 运行建议的 DMAQNUM 命令的图片、以及表16-28中的 E4和 E5值、该图片似乎显示了正确的结果。  在单步执行这三行之前(第一行是 McASP 在0中的 RX 队列、仅供参考):

    CSL_FINST (EDMA3->DMAQNUM[EDMA_queue_RX]、EDMA3CC_DMAQNUM_E0、Q0);  

    CSL_FINST (EDMA3->DMAQNUM[1],EDMA3CC_DMAQNUM_E4,Q1);
    CSL_FINST (EDMA3->DMAQNUM[1],EDMA3CC_DMAQNUM_E5,Q1);

    我将 DMAQNUM0和 DMAQNUM1设置为0x77777777。  然后我单步执行它们、在 DMAQNUM0 E0中看到0、在 DMAQNUM1 E4和 E5中看到1 (根据表16-28、表示事件 E12和 E13)。

    在这方面、我们已配置为在 DMA 队列1中对 UART Tx 和 Rx 事件进行排队。  你同意吗?

    谢谢、

    Robert

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

    我确实同意,但当然你的图片比我的图片要大声得多。

    7的使用非常适合调试。

    如果您愿意、请将您的帖子标记为已回答、然后在出现新问题时启动新主题。

    此致、
    RandyP