你好
我现在调试的一块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模块重新配置一下(从复位的步骤开始到每个寄存器的配置),但是感觉很繁琐,有没有更好的办法使数据重新从我设定的地址开始写数?因为一条曲线的数据我要重复采集上万次,所以每次采集前这么操作感觉很浪费时间。
谢谢!
yuepeng zhang:
回复 xunliang ma:
您好,我把UPP设置为接受模式,由FPGA通过UPP向omapl38发送数据,我也需要重复发送,但是又不想每次都重新配置UPP,请问您是怎么解决重复采集数据的问题的?非常感谢您能抽时间指导一下。
xunliang ma:
回复 yuepeng zhang:
我仍然是采用重复配置的方式进行的
aihua LIU:
回复 yuepeng zhang:
请问一下,一次DMA为什么最多只能传输64k的数据啊?我最近也在用UPP,但是我感觉一次能传输的数据能超过到1M呢,但是芯片里的内存才256K加上DDR也就512k我不知道这些数都存到哪去了,仿真时在寄存器里也能看到接收到的数,这是为什么呢?你能指点指点我么?
yuepeng zhang:
回复 aihua LIU:
aihua,你好。好像omapl38的所有DMA一次传输只能达到64KB,这是没法更改的,包括UPP的专属DMA。你一次传输1M数据,并不是一次DMA传输完的,你用了很多次DMA才传输完的。传输多少次取决于你的DMA每次传输数据的大小和总数据量。
OMAPL138 L2确实只有256K,但是为什么DDR2只有512K呢?至于数据放到哪里是由你决定的,UPP寄存器UPPxD0就是决定DMA的窗口地址的,也就是你要放置数据的地址。你说到你能在寄存器中看到数据,通过CCS能够看到寄存器的地址,你可以在OMAPL138 的Memory Map中查到寄存器地址所在的区域,然后你就知道数据放在那里了。
aihua LIU:
回复 yuepeng zhang:
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 remainerror #10010: errors encountered during linking; "upp_and_ndk_test.out" not built>> Compilation failuregmake: *** [upp_and_ndk_test.out] Error 1gmake: Target `all' not remade because of errors.**** Build Finished ****
我不知道我这想法行不行,是否还有更好的方案可以实现?请大神您帮我指点指点迷津啊.谢谢
yangmei zhang:
你好,我现在也遇到了与你类似的问题,请问你是怎么解决该问题的?
我现在调试的是PC电脑通过网口连接OMAP_L138,OMAP_L138通过uPP连接FPGA。DSP从PC电脑上接收数据,然后通过uPP接口将数据发送给FPGA。从DSP的内存上看,uPP发送缓存中的数据确实是已经修改了,但是FPGA总是接收不到正确的数据(网口程序运行之前该缓存中有什么数据,FPGA就接收到什么数据),但是如果单独运行uPP发送程序的话,FPGA接收完全正常。
谢谢!
aihua LIU:
回复 yangmei zhang:
开两个线程即两个task,一个用来控制DSP和PC的数据传输,一个用来是实现UPP和FPGA的通信,用信号量实现task之间的协调工作
gu guhao:
回复 aihua LIU:
求联系大神!QQ610773424
Jack Wu3:
回复 gu guhao:
上次问广州创龙的FAE,好像他们做好了OMAPL138的UPP驱动,使用UPP和FPGA连接,FPGA板卡上面有高速的AD和DA,可以加他们FAE的QQ:2532609929,去问问。