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.

NDK的底层初始化EVM_Init和gel文件初始化的问题

Other Parts Discussed in Thread: SYSBIOS

各位工程师好,我有几个问题想请教一下,如下:

现在我的NDK helloworld例程通过gel文件的配置,是能跟PC端通信的。

1、我在target configuration里头把引用gel文件去掉,想用EVM_init这个函数来初始化硬件,就跟PC端连不通了,ping也ping不通,我把EVM_init函数和gel文件进行的初始化进行了对比,确认它们都进行了一样的初始化,另外把EVM_init放在了main函数的最开始或者是通过cfg配置为Startup.lastFxns.$add('&EVM_init');结果都还是一样的。想请问一下是什么原因?

2、带SYSBIOS的这个工程和普通的不带RTOS的工程的bootloader是一样的流程吗?

  • void EVM_init()
    {
    platform_init_flags sFlags;
    platform_init_config sConfig;
    /* Status of the call to initialize the platform */
    int32_t pform_status;

    /*
    * You can choose what to initialize on the platform by setting the following
    * flags. Things like the DDR, PLL, etc should have been set by the boot loader.
    */
    memset( (void *) &sFlags, 0, sizeof(platform_init_flags));
    memset( (void *) &sConfig, 0, sizeof(platform_init_config));

    sFlags.pll = 0; /* PLLs for clocking */
    sFlags.ddr = 0; /* External memory */
    sFlags.tcsl = 1; /* Time stamp counter */
    #ifdef _SCBP6618X_
    sFlags.phy = 0; /* Ethernet */
    #else
    sFlags.phy = 1; /* Ethernet */
    #endif
    sFlags.ecc = 0; /* Memory ECC */

    sConfig.pllm = 0; /* Use libraries default clock divisor */

    pform_status = platform_init(&sFlags, &sConfig);

    请问看到的是以上贴出来的代码吗?有没有将需要初始化的部分flag置1。

  • bootloader流程是一样的。
  • 都置1了呢,pll,ddr以及ecc都置为了1,sFlags.pllm还是保持为0 。
  • 首先,我把sFlags.pll ,sFlags.ddr,sFlags.ecc 都设置为了1,然后我在target configuration里头把引用gel文件,也调用了evm_init函数,只要evm_init函数里面的platform_init函数里的任何配函数进行了配置,都会导致ping不通。
    就是我把整个platform_init函数里其他所有的语句都注释掉,只剩下configSerdes函数,也会导致ping不通,只留下其他的函数也是一样的。所以我觉得不是某个参数配置有问题,这种现象搞得我毫无头绪,能麻烦帮忙看看嘛。
  • 把platform_init中的configSerdes替换成GEL文件中的configSGMIISerdes试试看。

  • 我仔细对过,我这两个配置是完全一致的,结果还是一样的。
    就是我在工程里添加了一个hwi的硬件中断,这个中断是EMACRXINT,在这个中断服务函数里设置断点,我用gel文件配置时,就是一直在进中断服务函数,然后全速运行的时候就是可以与上位机通信的,可以ping通。
    但是换成Evm_Init初始化,或者是之前不带操作系统时写的外设初始化程序,这个EMACRXINT的中断服务函数就再也不进去了,而且ping也ping不通了,感觉就是EMAC模块就没收到数据了。
    我现在就完全没头绪,也没辙的感觉,这个问题困扰好久了,麻烦您再帮我想想,万分感谢!
  • 还有,就是用虽然跑NDK跟上位机通信不了了,但是不掉电,加载不带操作系统的GE的工程师可以和上位机通信的。但是再加载用gel文件初始化的带NDK的工程依然和上位机ping不通,除非掉电重启,否则带NDK的工程就是跟上位机就连不通了。