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.

[参考译文] 编译器/处理器 SDK-AM437X:具有 UART DMA 的 NIMU 示例

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/865499/compiler-processor-sdk-am437x-nimu-example-with-uart-dma

器件型号:PROCESSOR-SDK-AM437X
Thread 中讨论的其他器件:SYSBIOSAM4376

工具/软件:TI C/C++编译器

我的项目需要同时与串行端口和网络端口进行通信。 因此、我尝试将 UART 函数添加到 NIMU 示例中。 但是、如果我启用 UART DMA、NIMU 无法 正常启动。

具体步骤如下:

编译 NIMU_BasicExample_skAM437x_armExampleproject 示例、确认网络协议栈正常运行。 ping IP 地址正常。我们可以从 调试端口看到协议 stackstartup 和协商过程的变化。

2. GNU 编译器目录添加:

  ${pdk_install_path}配件添加、 ${edma3LLD_BIOS6_INSTALLDIR}/封装、 ${cG_tool_include_path}

GNU 编译器符号添加:

  BUILDCFG_MOD_UART、 UART_V1、 UART_DMA_ENABLE

4. nimu_skam437x.cfg 添加:

 VAR Hwi = xdc.useModule('ti.sysbios.hal.Hwi');

var drv         = xdc.loadPackage ("ti.sdo.EDMA3.drv");
 var rm         = XDC.loadPackage ("ti.sdo.EDMA3.rm");

hwi.dispatcherSwiSupport = true;
hwi.dispatcherTaskSupport = true;
hwi.dispatcherAutoNestingSupport = true;
Hwi.initStackFlag = false;
Hwi.checkStackFlag = false;

/*强制外设部分为不可高速缓存的严格排序存储器*/
VAR 外设 Attrs ={
   键入:MMU.FirstLevelDesc_section,//段描述符
   TEX:0、
   可缓冲:false,               //可缓冲
   可高速缓存 :false,               //可高速缓存
   可共享 :false,               //可共享
   NoExecute :true,                //不可执行
};
/*定义外设所在的1Meg 页的基址。 *
VAR 外设 BaseAddr = 0x44DF2800;
/*相应地配置相应的 MMU 页描述符*/
Mmu.setFirstLevelDescMeta(peripheralBaseAddr、
                         peripheralBaseAddr、
                         peripheralAttrs);
                         
VAR 外设 BaseAddr = 0x44e0b000;
/*相应地配置相应的 MMU 页描述符*/
Mmu.setFirstLevelDescMeta(peripheralBaseAddr、
                         peripheralBaseAddr、
                         peripheralAttrs);                          
                         
/*定义外设所在的1Meg 页的基址。 *
VAR 外设 BaseAddr = 0x49000000;
/*相应地配置相应的 MMU 页描述符*/
Mmu.setFirstLevelDescMeta(peripheralBaseAddr、
                         peripheralBaseAddr、
                         peripheralAttrs);
UART.Settings.useDma ="true";
然后、进行编译、就通过了。
但是、当运行程序时、调试端口没有任何内容、并且无法 ping 通。
如果从 .cfg 文件中删除 UART.Settings.useDma ="true"、程序将再次正常运行。  IP 地址也正常。
UART DMA 是否不能在 NIMU 中使用? 或者我丢失了什么?
PROCESSOR_SDK_RTOS_AM437X_6_01_00_08、 Code Composer Studio 版本:9.1.0.00010。 AM4376。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Bin、

    默认情况下、NIMU 示例 不会将 EDMA 用于 UART。 要为 UART 添加 EDMA、您需要对 NIMU 示例进行必要的更改。 您可以参阅 pdk_AM437X_1_0_16\packages/ti\drv\uart\example 或 pdk_AM437X_1_0_16\packages/ti\drv\uart\test 下的 UART 示例。  应该有一些具有 EDMA 的 UART 示例。

    Ming

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

    您好、Ming、

    我只想引用您提到的示例: C:\ti\pdk_am437X_1_0_16\packages/ti\drv\uart\test\am437X\armv7\BIOS\UART_BasicExample_dma_evmAM437x_armTestProjectProject.txt、其项目由 pdkProbat.Create 创建。

    这就是其结果:如果 在.cfg 文件中添加 UART.Settings.useDma ="true",程序将无法正常运行。

    此外,关于这一问题的汇编补充如下:

        需要在 IT 项目路径中添加文件:  sample_am437X_arm_int_reg.c、 sample_am437X_cfg.c、 sample_arm_cs.c、 sample_arm_init.c

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

    您好、Bin、

    奇怪的是、UART DMA 示例应该已经在 CFG 文件中将 useDMA 设置为 true。  

    我将查看此 AM437x 示例并返回给您。

    Ming

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

    您好、Ming、

    如果在 NIMU 项目的 CFG 文件中将使用 DMA 设置为 true、 Nimu 程序无法正确运行。

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

    您好、Bin、

    我对以下陈述感到有点困惑:

    >>我只想引用您提到的示例: C:\ti\pdk_am437X_1_0_16\packages/ti\drv\uart\test\am437X\armv7\BIOS\UART_BasicExample_dma_evmAM437x_armTestProject.txt,其项目由 pdkProjectCreate.txt 创建。

    >>结果如下:如果 在.cfg 文件中添加 UART.Settings.useDma ="true",程序将无法正常运行。

    >>此外,有关该文件的汇编补充如下:

    >>     需要在 IT 项目路径中添加文件:  sample_am437X_arm_int_reg.c、 sample_am437X_cfg.c、 sample_arm_cs.c、 sample_arm_init.c

    对于 UART DMA 测试示例、我对 evmAM437x 执行了相同的步骤。 示例构建正常、 .cfg 文件中的 UART.Settings.useDma ="true"已设置。 因为我手头没有 evmAM437x、所以无法对其进行测试。

    此示例是否适合您? 如果不是、我们需要对其进行研究、因为这意味着带有 DMA 的 UART 存在 问题、那么 NIMU 示例将不起作用。 如果 该示例有效、则我们需要 重点介绍 如何在 Nimu 示例中设置具有 DMA 的 UART。

    Ming

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

    您好!

    示例 UART_BasicExample_DMA_evmAM437x_armTestProject 正常。 我 已经测试了不同的 UART 端口、一切都好。

    问题是我想在 Nimu 示例中实现 UART DMA 的功能、所以我将 UART DMA 的代码迁移到了 Nimu 示例中、迁移的代码的编译正常、但运行异常。  

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

    您好、Bin、

    我对 UART DMA 支持进行了一些研究。 这并不是简单地添加 EDMA 驱动程序并 将 useDma 设置为 true。 需要添加整组代码。 最重要的是 UartApp_edmaInit()。 请参阅  UART_DMA_ENABLE 启用的 pdk_AM437X_1_0_16\packages/ti\drv\UART\test\src\MAIN_UART_TEST.c 代码段。 您必须在您的 Nimu 示例中进行相同的更改。

    Ming

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

    您好、Ming、

    是的、我是这样做的。 在顶部:

    GNU 编译器符号添加:

      BUILDCFG_MOD_UART、 UART_V1、 UART_DMA_ENABLE

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

    您好、Bin、

    只需定义 UART_DMA_ENABLE 是不够的、您就需要查看在 PDK_AM437X_1_0_16\packages/ti\drv\UART\test\src\main_UART_test.c 中完成的操作、尤其是由 UART_DMA_ENABLE 启用的代码段、例如 函数 UartApp_edmaInit ()及其调用位置。   您需要对您的 Nimu 代码执行相同的操作。

    Ming  

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

    您好、Ming、

    我已经添加了您之前提到的所有代码、但当我发现网络无法正常工作时、我删除了这些代码。 事实证明、如果 在.cfg 文件中 UART.Settings.useDma ="true"、则网络是不正确的。  

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

    您好、Bin、

    我唯一能想到的另一件事是 UART DMA 和 NIMU/NDK 使用的 EDMA 可能会导致冲突。

    Ming

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

    您好、Ming、

    这意味着我无法在 Nimu 中实现 UART DMA?

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

    您好、Bin、

    我的意思是、您可能需要研究用于 UART DMA 的 emda 通道、而 NIMU/NDK DMA 不会发生冲突。

    Ming

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

    您好、Ming、

    您是否有关于 UART DMA 和 NIMU/NDK DMA 的 EDMA 实现的设计文档?

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

    您好、Bin、

    我没有您要求的设计文档、但 NIMU 示例代码应该具有针对 NIMU/NDK DMA 的 EDMA3设置。

    Ming