最近在PowerPC的板子上加一个FPGA,需要用PCI-E连接,就调试了PCI-E。由于vxWorks本身已经将驱动写好了,使用时直接调用即可,但是很快就出现了问题:一开始直接使用mmap的方式映射FPGA的总线上到应用程序的内存空间中尝试读写,这种方法比较简单,不需要内核与应用程序之间的拷贝,效率也应该不错。然而实际测试中速度却相当的慢,上网搜索原因,才发现PCI-E默认传输每次只能传四个字节的包!!要想传大包提高效率,就必须要使用DMA传输,否则只能每次发送四个字节。
因此换用DMA方式,也比较好理解,PCI-E上有一个DMA描述符,内容和传统DMA类似,只是多配置了一个DMA传输链,换用之后速度有了不小的改观。
下面是在调试过程中看到的一些比较让人纠结的概念,列举如下,加深自己的理解。本人菜鸟,所以大多数内容都是根据网上的资料整改的,还望海涵。
MSI 中断与传统中断
PCI-E支持两种中断:传统INTx中断和MSI中断。 比较两种中断能让我们了解PCI规范发展的来龙去脉,也能使我们把握PCI发展的技术方向。