一种基于MPC8260和FPGA的DMA接口设计与实现
所以在中断初始化时要同时有效IDMA屏蔽寄存器和SIU中断屏蔽寄存器对应的比特位。具体的中断初始化实例如下: void IDMAint(void) { *(long*)(IDMR1)=0x0F000000;/*使能IDMA1所有的二级中断*/ *(long*)(IDMR2)=0x0F000000;/*使能IDMA2所有的二级中断*/ *(long*)(SIMR_L)|=0x00000600;/*使能IDMA1和IDMA2在SIU中的中断*/ *(long*)(SIMR_H)|=0x00006000;/*使能外部中断IRQ1和IRQ2*/ *(long*)(SIEXR)|=0x00006000; /*设置IRQ1和IRQ2为下降沿触发*/ *(long*)(SIUMCR)=0x81210000;/*配置SIU模式配置寄存器*/ /*连接中断服务程序和中断向量号*/ if((intConnect(INUM_TO_IVEC(INUM_IRQ1),(VOIDFUNCPTR)IRQ1Handler,0))==ERROR) logMsg("intConnectIRQ1failedn",0,0,0,0,0,0); if((intConnect(INUM_TO_IVEC(INUM_IRQ2),(VOIDFUNCPTR)IRQ2Handler,0))==ERROR) logMsg("intConnectIRQ2failedn",0,0,0,0,0,0); if((intConnect(INUM_TO_IVEC(INUM_IDMA1),(VOIDFUNCPTR)IDMA11Handler,0))==ERROR) logMsg("intConnectIDMA1failedn",0,0,0,0,0,0); if((intConnect(INUM_TO_IVEC(INUM_IDMA2),(VOIDFUNCPTR)IDMA2Handler,0))==ERROR) logMsg("intConnectIDMA2failedn",0,0,0,0,0,0); } 尤其要注意的是,中断处理程序结束之前的清SIU中断挂起寄存器,不能直接在SIU中断挂起寄存器的IDMA位写1,而是要通过在IDMA事件寄存器的BC位写1来间接地清SIU中断挂起寄存器。 2.2 FPGA部分程序 FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点 系统中的FPGA芯片选用Xilinx公司的VirtexII 3000。利用VirtexII内嵌的大容量BlockRAM配置为单口RAM来做缓冲区,在程序中可以用Xilinx的集成开发环境ISE 7.1i内部自带的IP核生成。系统设计师可以根据需要通过可编辑的连接把FPGA内部的逻辑块连接起来,就好像一个电路试验板被放在了一个芯片里。一个出厂后的成品FPGA的逻辑块和连接可以按照设计者而改变,所以FPGA可以完成所需要的逻辑功能。 FPGA一般来说比ASIC(专用集成芯片)的速度要慢,无法完成复杂的设计,而且消耗更多的电能。但是他们也有很多的优点比如可以快速成品,可以被修改来改正程序中的错误和更便宜的造价。厂商也可能会提供便宜的但是编辑能力差的FPGA。因为这些芯片有比较差的可编辑能力,所以这些设计的开发是在普通的FPGA上完成的,然后将设计转移到一个类似于ASIC的芯片上。另外一种方法是用CPLD(复杂可编程逻辑器件备)。 FPGA设计的关键部分是和MPC8260的总线接口设计。通过适当选择缓冲区的起始地址和长度,可以使MPC8260读FPGA都以突发的方式进行。设计中,MPC8260对FPGA的突发读写遵循自己配置的UPM模式,所以要综合考虑UPM模式设计和FPGA读写逻辑设计。在设计UPM模式时,可以在每次MPC8260锁定数据总线数据之前由通用功能信号线(General Purpose Line,GPL)产生一个下降沿通知FPGA往数据总线上写新数据;或者通过GPL把总线时钟送到FPGA达到收发同步来完成MPC8260与FPGA之间的读写。 3 总结 结合MPC8260的中断处理和IDMA传输机制,设计了一种MPC8260和FPGA之间的高速数据传输接口。测试结果显示:采用循环读的方式把FPGA中的数据复制到SDRAM中,数据传输速率只有11 Mbps左右;而采用本文介绍的IDMA方式,最高速率能够达到500 Mbps,并且内核占用率较低,实验结果完全能够满足系统设计需求。本研究对于PowerPC系列CPU的接口设计有一定的参考价值。
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)