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.

[参考译文] RTOS/AM3352:具有中断的 NDK 示例工程

Guru**** 2551900 points
Other Parts Discussed in Thread: SYSBIOS, AMIC110, AM3352, DP83848M, MATHLIB

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/610850/rtos-am3352-example-project-for-ndk-with-interrupts

器件型号:AM3352
主题中讨论的其他部件:SYSBIOSAMIC110DP83848MEVMK2GMATHLIB

工具/软件:TI-RTOS

我希望其中一个 EVM 或 Beagle 板上有一个335x 示例项目、该项目使用具有中断功能的 NDK。 我一直在查看 Nimu_BasicExample_bbbAM335x_armExampleProject、但这似乎是为轮询而设置的、但我可能会错。 我在该项目中看不到中断被初始化的任何位置。 我也很不确定大多数设置会做什么、因为我不熟悉 Starterware 和 SoC、TI-RTOS 的文档也很少。

我的主要问题是使从 NDK 到硬件的接口正常工作、我希望我能找到一个示例、因为没有有关如何设置的文档(我找到了)。

我的初始化代码是:

/*芯片配置 MII/RMII 选择*/
SOCCtrlCpswPortMacModeSelect (1、Ethernet_MAC_TYPE_RMII);
SOCCtrlCpswPortMacModeSelect (2、Ethernet_MAC_TYPE_RMII);

EMAC_socGetInitCfg (0、&cfg);
cfg.port[0].phy_addr = EMAC_CPSW_PORT0_PHY_ADDR_UTI;
cfg.port[1].phy_addr = EMAC_CPSW_PORT0_PHY_ADDR_UTI;
cfg.macModeFlags = EMAC_CPSW_CONFIG_MODEFLG_FULLDUPLEX;
EMAC_socSetInitCfg (0、&cfg);

NIMUDeviceTable[NIMU_DEVICE_index++].init =&CpswEmacInit;
NIMUDeviceTable[NIMU_DEVICE_index].init = NULL;

我在 SYSBIOS 中设置了 NDK、它确实会运行。 它检测到电缆已插入、但之后没有任何内容(我希望 DHCP 客户端正在运行、这是因为它会因故障而超时、但网络不响应-是的、网络会执行 DHCP)

我相信我已经启用了所有时钟。 使用时钟树工具、当您启用模块时、我看到除一个时钟之外的所有时钟都打开、但我不确定在哪里打开250MHz 时钟或如何验证它已经打开。 我不确定哪个寄存器控制它

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

    在这些 c 文件中切换后是否必须重建库? 我只想用"master"替换 v4目录或整个 EMAC 驱动程序文件夹中的文件吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、您需要重建 EMAC 库。 您可以将整个 EMAC 驱动程序文件夹替换为"主文件夹"。 端口#2问题的修复程序位于 v4目录中。 "master"将在即将推出的 PRSDK 4.2版本中提供。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我复制了主目录并替换了 packages/ti\drv\emac 中的 EMAC 内容

    我使用从 packages 目录中生成的 gmake clean 和 gmake 全部重建了所有文件

    我对配置文件和我的 Nimu 代码进行了更改

    我添加了 stackInitHook、甚至注释掉了阻止所有代码运行的#ifdef、并更新了我在 cfg 文件中的 IP 字段中添加的静态 IP 的 IP 地址信息(我不知道为什么执行此操作两次)

    我将项目设置为静态 IP

    我运行了它、我仍然得到了半双工协商、并且从 IP 地址192.168.1.3到192.168.1.23的 ping 没有回复。 我的结尾似乎没有任何变化 CPSW_STATS 寄存器全部为0。 我出了什么问题?

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

    >>我不知道为什么要两次这样做

    您的配置文件中是否有适用于电路板上端口#2的 ip.ifIdx = 2;?

    您是直接还是通过开关将电路板连接到 PC?

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

    我已经通过集线器连接了它、但无论通过哪种方式、ping 测试都应该起作用、无论是在交换机、集线器还是路由器上进行测试、还是直接通过 PC 进行测试、都应该起作用、不应该这样做? 我将尝试将其直接连接到 PC。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果在 cpsw_Nimu_eth.c 下的 CpswEmacInit()中设置断点,是否可以将其命中?

      if (numEmacInterfaces == 2U)

          {

            //对于 dualMacMode,需要启用 AleBypass */

            EMAC_socGetInitCfg (0、&EMAC_cfg);

    #IF 定义(SOC_AM335x)||定义(SOC_AM437x)

            HW_WR_FIELD32 ((EMAC_cfg.ALE_BASE + CPSW_ALE_CTRL)、

            CPSW_ALE_CTRL_BYPASS、CPSW_ALE_CTRL_BYPASS_ENABLE);

    其他

      CSL_CPSW_enableAle ((CSL_cpswHandle) EMAC_cfg.ss_BASE);

    #endif

            NIMU_drv_log ("成功注册 EMAC \n");

            RetVal = 0;

          }

    此致、Garrett

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、我能够达到此 if 语句中的断点
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可以在此处上传 MAIN_Model840i.c、nimu_evm.cfg 和.out 文件吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在框中更新了我的下削减3352项目
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    更新.cfg 后、我能够从 IP 地址为192.168.1.20的 PC ping 您的工程的电路板:
    ip.address ="192.168.1.23";
    ip.gatewayIpAddr ="192.168.1.1";

    和 stackInitHook():
    char * ipaddr ="192.168.2.23";
    字符*ipMask ="255.255.255.0;
    char *ipGateway ="192.168.2.1";

    您能否尝试相同的方法来查看它是否有用?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    加载预构建的调试.out 文件时、我能够看到非零的 CPSW 统计数据、尽管 ping 失败。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    进行这些更改并不能解决我的 Ping 问题。 我假设库重建出现问题。

    我被告知、在进一步通知之前、该项目将不再进行。 我们可能会在下一个 SDK 发布时再看一下、但如果我可以使用该 SDK 执行 ping 操作但无法执行 DHCP、则路由器上的 TCP 连接也没有希望。

    感谢你的帮助。

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

    可能是库重建问题。  好的、当您恢复工作时、您可以使用以下代码来启用 DHCP。 我已经在您的主板上验证了它、并能够使用路由器上运行的 DHCP 服务器分配的 IP 地址对主板执行 ping 操作。

       CI_SERVICE_DHCPc dhcpc;

       //在 IF-2上指定 DHCP 服务

       bzero (&dhcpc,sizeof (dhcpc));

       dhcpc.cisargs.Mode = CIS_FLG_IFIDXVALID;

       dhcpc.cisargs.IfIdx = 2;

       dhcpc.param.pOptions = DHCP_OPTIONS;

       dhcpc.param.len = 2;

       CfgAddEntry (hCfg、CFGTAG 服务、CFGITEM_SERVICE_DHCPCLIENT、0、

             sizeof (dhcpc)、(uint8 *)&dhcpc、0);

    此致、Garrett