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.

关于L138中的UPP模块传输数据的问题

Other Parts Discussed in Thread: OMAP-L138

你好

       我现在调试的一块OMAP-L138的板子的功能是通过UPP上传外部ADC的数据到DDR中,然后利用DSP处理这些数据。

       整个UPP模块的初始化及配置都在DSP程序中完成,首先我通过仿真器单独调试DSP程序,发现能够正常的通过UPP将数据写到DDR的某块区域,然后DSP数据处理一切正常。随后不使用仿真器,把DSP程序加上DSPLINK功能后通过在ARM端跑的WINCE系统载入到内存中运行,然后发现很多时候DDR的那块区域写入的都是0,通过寄存器查看写入地址的变化,发现地址没错,确实到了写入的最后一个数据的地址上,但是就是写入的那块地址空间发现大多数都是0(正常不是这样).

       我的UPP模块没有使用upp_START和upp_WAIT,ENABLE信号由外部FPGA控制,只有在写入数据的时刻才打开。不使用UPP中断功能。

      所以,有几个问题想问一下:

1,为什么同样的DSP程序通过仿真器可以运行,但是系统单独调用的时候UPP往指定地址写入的数据都是0?我的程序中DSPLINK功能没有问题,通过实验已经验证过。

2,是不是DSP和ARM都对DDR操作导致冲突?也就是说DSP指定UPP把数据写到DDR的某块区域上后,ARM会不会在这块区域操作导致将其改写?因为我单独通过仿真器调试DSP程序没有问题。

3,由于我是要多次重复的采数据,为了保证下次写入的数据不是沿着上次的地址往后写,我每次重新采集数据之前都把UPP模块重新配置一下(从复位的步骤开始到每个寄存器的配置),但是感觉很繁琐,有没有更好的办法使数据重新从我设定的地址开始写数?因为一条曲线的数据我要重复采集上万次,所以每次采集前这么操作感觉很浪费时间。

谢谢!

 

 

  • 您好,我把UPP设置为接受模式,由FPGA通过UPP向omapl38发送数据,我也需要重复发送,但是又不想每次都重新配置UPP,请问您是怎么解决重复采集数据的问题的?非常感谢您能抽时间指导一下。

  • 我仍然是采用重复配置的方式进行的

  • 请问一下,一次DMA为什么最多只能传输64k的数据啊?我最近也在用UPP,但是我感觉一次能传输的数据能超过到1M呢,但是芯片里的内存才256K加上DDR也就512k我不知道这些数都存到哪去了,仿真时在寄存器里也能看到接收到的数,这是为什么呢?你能指点指点我么?

  • aihua,你好。好像omapl38的所有DMA一次传输只能达到64KB,这是没法更改的,包括UPP的专属DMA。你一次传输1M数据,并不是一次DMA传输完的,你用了很多次DMA才传输完的。传输多少次取决于你的DMA每次传输数据的大小和总数据量。
    OMAPL138 L2确实只有256K,但是为什么DDR2只有512K呢?至于数据放到哪里是由你决定的,UPP寄存器UPPxD0就是决定DMA的窗口地址的,也就是你要放置数据的地址。你说到你能在寄存器中看到数据,通过CCS能够看到寄存器的地址,你可以在OMAPL138 的Memory Map中查到寄存器地址所在的区域,然后你就知道数据放在那里了。
  • yuepeng zhang 您好!我最近改写NDK中helloworld 例子,用来实现DSP向PC传送数据,而数据由FPGA自通过UPP传送到DSP,我建立了两个工程,一个用来实现UPP接收FPGA的数据,一个用来实 现DSP和PC之间的通信,现在两个工程单独仿真都能达到目标,我想把两个工程合并成一块,于是我把其中一个工程中的相关文件导入到另外一个工程中,并且 添加了相应的库文件路径,但是在编译时出现了如下的错误:

    undefined        first referenced                                                                
      symbol              in file                                                                     
     ---------        ----------------                                                                
     _NIMUDeviceTable C:\ti\ndk_2_22_03_20\packages\ti\ndk\stack\lib\stk6_nat_ppp_pppoe.a674<nimu.o674>

    error #10234-D: unresolved symbols remain
    error #10010: errors encountered during linking; "upp_and_ndk_test.out" not
       built

    >> Compilation failure
    gmake: *** [upp_and_ndk_test.out] Error 1
    gmake: Target `all' not remade because of errors.

    **** Build Finished ****

    我不知道我这想法行不行,是否还有更好的方案可以实现?请大神您帮我指点指点迷津啊.谢谢

  • 你好,我现在也遇到了与你类似的问题,请问你是怎么解决该问题的?

    我现在调试的是PC电脑通过网口连接OMAP_L138,OMAP_L138通过uPP连接FPGA。DSP从PC电脑上接收数据,然后通过uPP接口将数据发送给FPGA。从DSP的内存上看,uPP发送缓存中的数据确实是已经修改了,但是FPGA总是接收不到正确的数据(网口程序运行之前该缓存中有什么数据,FPGA就接收到什么数据),但是如果单独运行uPP发送程序的话,FPGA接收完全正常。

    谢谢!

  • 开两个线程即两个task,一个用来控制DSP和PC的数据传输,一个用来是实现UPP和FPGA的通信,用信号量实现task之间的协调工作

  • 求联系大神!QQ610773424

  • 上次问广州创龙的FAE,好像他们做好了OMAPL138的UPP驱动,使用UPP和FPGA连接,FPGA板卡上面有高速的AD和DA,可以加他们FAE的QQ:2532609929,去问问。
  • 大神,你好,我想问下,你们PC通过网口给omapl138发送数据,是怎么做的?我的omapl138发数据给PC,pc能正常接收,但pc给omap发,omapl只能接收一部分,请问你们是怎么弄得???谢谢

  • 你可以检查一下你们的PHY芯片是不是工作在全双工模式下。

  • 大神你好,请问你upp的例程从哪下载到的???能不能加你下企鹅,九二四一一五九六八

  • 大神,你好。能不能把你们的dsp的发送模式下的例程给我一份,因为我的数据总是出错,但又找不到原因,谢谢

  • 你好,请问你。我将upp配置成接收模式,在shareRAM中开辟一块内存

    #pragma DATA_SECTION(FPGA_ADC_DATA,".FPGA_ADC_upp");
    volatile uint16_t FPGA_ADC_DATA[5][1539] = {0};
    #pragma DATA_ALIGN(FPGA_ADC_DATA, 8)

    一包数据是1539 个16位数据;并且将upp的dma配置如下;为什么只能收到第一包数据,DMA不是有两个状态,(活动状态、等待排序状态)吗,收到第一包数据后,程序就一直停在while(UPISR->bits.EOWI==0){};为什么?

    while(1)
    {

    UPP->UPID0 = (uint32_t)&FPGA_ADC_DATA[count]; //add next DMA transfer
    UPP->UPID1 = 0x00010C06; //1 lines 3078 bytes per line ;
    UPP->UPID2 = 0x00000C06; //no offset between lines ;
    while(UPIS2r->bits.PEND == 1){};

    count++;
    if(count==5)
    {count=0;}

    while(UPISR->bits.EOWI==0){};
    }
    }

  • 哥们,你的问题是怎么解决的, 我收到的数据一直为0

  • 你好shaojie qu,

    请问你的问题解决了吗?