现象:dsp在nwrite完成会发送一个nwrite finished的门铃信号,计时dsp的单次发送传输时间会很长,达到秒级别
分析:多种尝试后,发现nwrite不加门铃,传输时间是正常的,因此怀疑门铃发送问题;网上查了有类似问题,提到一个关键问题,门铃信号是要有response信号的,查询dsp的状态寄存器也确实是指示传输超时;fpga端的代码没有对门铃做response处理,因此基本确认问题的根源。
srio手册中“SP_RT_CTL”说明如下:
Timeout value for all ports on the device. This timeout is for sending a packet to receiving the corresponding
response packet. Max value represents 3 to 6 seconds. The timeout duration can be expressed as:
Timeout = 15 x((Prescale Value + 1) x DMA Clock Period x Timeout Value)
where Prescale Value is set in PER_SET_CNTL (offset 0020h) and the Timeout Value is the decimal representation
of this register value. For example, given a 400 MHz DMA, a Prescale Value of 4, and a Timeoout Value of FFFFFFh,
the Timeoout duration would be:
Timeout = 15 x((4 + 1) x 2.5 ns x 16777216) = 3.15 s
查dsp的寄存器确实是0xFFFFFF,为最大时长的超时时间,这个值我在初始化时是没有配置的
解决:将SP_RT_CTL设置为0,测试的结果和无门铃的方式基本相同。
补充:fpga这边增加response信号,应该也可以正常,目前还未验证。