现在用6678的SRIO从FPGA接收数据,FPGA做主!现在遇到一个问题,就是怎么判断FPGA发送过来的数据已经到达DSP指定的空间,比如我想把数据发送到6678的SL2,待数据完全到达我才能对数据进行处理,开始用的是在数据的最后发送一个标志位,DSP一直查询标志位是否到达,但是这样如果多核操作占用总线!请问有什么好的办法吗?谢谢!
Andy Yin1:
在DIO方式下,可以发送doorbell中断,参考帖子及例程:
http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/p/53665/123500.aspx#123500
http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/47664.aspx
在message方式下可以通过配置Accumulator Queue等方式来产生中断。
Mark:
回复 Andy Yin1:
非常感谢您的回复,我现在是采用这个办法了。就是让FPGA方发完数据之后发送一个doorbell信号,但是遇到了一个问题。
在DIO模式下,我让对方在数据的结尾发送一个标志位,已知发送数据的长度。当我接收到对方的doorbell中断时,我查询数据最后的这个标志位,发现该标志位并未到达。所以我猜想可能是因为当数据发送过来时需要内部DMA搬运到我指定的DSP内存空间,而doorbell则直接去触发这边的中断。
数据搬运需要一定的时间,从而造成了doorbell先于我的数据达到,这样如果用doorbell来标志数据发送完毕,有点不合适,因为那时候数据并未完全到达相应的空间,因为数据占用总线的情况不同,所以数据到达晚于doorbell到达的时间也不一样,这个应该怎么解决啊,谢谢了!
hocodrecon:
回复 Brighton Feng:
想问一下,你说的中断之后再去查数据标志是什么意思,是指通过中断调用的函数置的标志,还是指其他的?
Brighton Feng:
回复 hocodrecon:
我的意思是在Doorbell中断服务程序中去查询数据标志,或者在中断服务程序执行完后去查询数据标志。
Mark:
回复 Brighton Feng:
您好,Brighto Feng,首先非常感谢您的解答,谢谢您提供的这两种数据接收方式!另外感谢您提供的C66XX多核开发驱动程序。
这几天又查看了一下SRIO的datasheet,发现doorbell其实可以专门可以用于DIO方式下数据发送完毕中断。在SRIO芯片手串的中断介绍那部分。不知道我理解的对不对,好像是说FPGA可以采用有response的写发送数据,等FPGA收到所有数据包的response后再发送doorbell,就可以保证数据完全发送到相应的空间。
如果FPGA向DSP发送数据,那么DSP收到每一包都会有一个response反馈。这个反馈好像就是来自于vBUS。但是我测试了一下,发现当FPGA将数据发送完毕后,要等好多个时钟才能全部收到所有包的response,这样可能发送效率也低些。
不知道我对芯片手册的理解对不对,手册的内容摘要部分如下:
Mark:
回复 Brighton Feng:
好的,非常感谢您的解答,谢谢!
zi yang:
回复 Brighton Feng:
你好,Brighton Feng,
我这里有一个 AIF2 的问题,如果你有时间请帮我看下,谢谢。
http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/54952.aspx