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.

WriteDSPMemory



各位好!

         我参考C:\ti\mcsdk_2_01_02_06\tools\boot_loader\examples\pcie\linux_host_loader下的pciedemo.c中的

                               uint32_t writeDSPMemory(uint32_t coreNum, uint32_t DSPMemAddr, uint32_t *buffer, uint32_t length) 

                              uint32_t readDSPMemory(uint32_t coreNum, uint32_t DSPMemAddr, uint32_t *buffer, uint32_t length) 

函数向DSP写入数据和从DSP读出数据。我用的是EVM 6678。

        现在遇到了问题,具体描述为:

        1.当把DSPMemAddr的地址设置为0x90000000时,调用writeDSPMemory将设置的数据写进去,但是通过仿真器观察发现0x90000000这个地址中写入的不是我设置的数据。然后我又调用readDSPMemory从该地址读出数据,发现读出的数据正是我写进去的数据。

        2.当把DSPMemAddr的地址设置为0x80000000时,就不存在1中所描述的问题。

       不知道有没有人遇到过类似的问题?希望牛人给出建议!

谢谢!

  • 你是在pc侧对DSP进行数据读写么?注意在读写之前需要确定地址映射关系有预先配置好。

  • 您好!

           我是在PC侧对DSP进行数据读写,在读写之前m_MemoryRange0.outd(IB_OFFSET(3),DDR_START)进行了地址映射。我的程序是完全按照

    C:\ti\mcsdk_2_01_02_06\tools\boot_loader\examples\pcie\linux_host_loader下面的pciedemo.c进行修改的,因为我用的PC系统是XP.

         如果映射不正确的话,那从地址0x80000000地址开始进行的读写怎么会正常?

       希望您能给我一些思路!

    谢谢!

  • 您好!

            我将DDR映射到了region3,而region3的大小只有16M,您觉得这样会导致上面的问题吗?如果会,能解释一下吗?

           这个问题比较着急解决,不知道您能不能尽快回复我?

    谢谢!

  • 如果只映射了地址0x80000000开始的16MB空间,肯定是不行,你可以在读写0x9000000之前重配地址映射将0x90000000开始的地址进行映射。

  • 您好!

          根据您的回答,我是不是可以这样理解:如果我在PC侧只从0x80000000开始映射16MB的空间,那么就只能操作DDR的从0x80000000开始的映射16MB空间?

    如果是这样,那么为什么我只从0x80000000开始映射后,还能对0x90000000地址的数据进行读写,并且能从该地址读出我写进去的数据,虽然通过仿真器看不到这个地址的变化?

  • 您好!

          根据您的回答,我是不是可以这样理解:如果我在PC侧只从0x80000000开始映射16MB的空间,那么就只能操作DDR的从0x80000000开始的映射16MB空间?

    如果是这样,那么为什么我只从0x80000000开始映射后,还能对0x90000000地址的数据进行读写,并且能从该地址读出我写进去的数据,虽然通过仿真器看不到这个地址的变化?