|
Hi,
arbitration priority does not depend on the
operating system used, but on the PCI arbiter. The PCI spec does not mandate a
detailed arbitration scheme, just a recommendation that it has to be a "fair
arbitration". Thus, each PC chipset uses a different scheme. So, arbitration
latency may vary from PC to PC. There's no way to give your hardware the highest
priority. You may use the latency timer of your PCI hardware to assign a
guaranteed bus bandwidth to your hardware, but thie is limited to 256 clock
cycles. There are Embedded Solutions which do not adhere to the latency timer,
i.e. once they have arbitrated the bus they use it as long as they have to
transfer data. This violates the PCI spec, but in embedded, high data rate
applications this may be the only way out. Check out the QL5064 by
QuickLogic.
On the other hand, doing bus master DMA usually
involves some from of DMA controller (e.g. the DMA engine in the 9656) and,
usually, you have to deal with the Memory management unit of the Operating
System to allocate buffers (note that contiguos physical memory may not be
contiguos in the virtual address space and vice versa, especially for larger
buffers). This is not deterministic, like everything in Windows. Windows OSes
are general purpose OSes, not Real Time OSes.
Next, doing DMA, you will also use interrupts at
the end of the DMA to signal to the host. Effects you have to
consider:
- PCI bus interrupt latency (not
so bad)
- Interrupt sharing (probably
more than one PCI device use the same interrupt)
- Interrupt latency in the
OS.
Moreover, you won't have 4GB of host memory on a
machine. 4GB is the overall address space of 32bit processors including
peripherals devices like PCI. The largets memory I've seen is 2GB on a
machine.
Sounds like a very interesting and tough
application.
regards,
Peter Marek
General Director MarekMicro GmbH tel.: 049-9621-9732-110 fax: 049-9621-9732-199 www.marekmicro.de
|