我用OMAPL138的upp模块读取FPGA端发送过来的数据,UPP只用作接收,单通道75M运行。程序运行时,首先FPGA端给DSP中断,之后,DSP首先初始化UPP的三个参数值,即UPID0、UPID1、UPID2,之后UPP开始接收数据,接收完之后等待下一次FPGA端发送的中断。(两次中断间时间间隔为200微妙,UPP传输数据量为7200word,word为16bit,所以两次中断的时间间隔足够UPP接收完7200个16bit的数据),每次UPP都写入到同一个SDRAM地址范围内,但是运行过程中发现DPEI中断出现了,用计数器累加时,发现大部分都是DPEI中断,而EOWI中断数量却很少。如果在写UPID0、UPID1、UPID2寄存器前先用while(((CSL_UppReg->UPIS2) & 0x02) != 0x02)判断的话,这样不会出现DPEI中断了,但是得到的EOWI中断的数目要远远少于正常数目,也就是丢包了。时间,计算着完全够用。不知道咋回事。有知道的帮忙解答一下吧,谢谢啦
Zou Liuhua:
回复 shaotu zhu:
我也注册了NMI中断(硬中断),和EOWI中断(软中断),但中断一直没有触发,不知道是不是中断服务程序没有成功注册的缘故,我现在用轮询接收upp数据,明显来不及接收,还得使用中断。能否将你的例程(含中断)发给我参考一下。谢谢了!
shaotu zhu:
回复 Zou Liuhua:
kkkkkk=(Upp_handle->DPEI=1) |
((Upp_handle->UORI=1)<<1)|
((Upp_handle->ERRI=1)<<2)|
((Upp_handle->EOWI=1)<<3)|
((Upp_handle->EOLI=0)<<4);
CSL_UppReg->UPIEC &=0x0000;//先清除
CSL_UppReg->UPIES=kkkkkk;
你把对应的中断打开不行吗?我就是这样打开的中断,接收完一次会产生一次相应中断。
还有一个就是进入了中断后,你要及时的清除对应的中断位,手册上有那部分程序的。你试试吧。