vmeUniverse.c
Till Straumann
strauman at slac.stanford.edu
Wed Sep 23 13:59:49 UTC 2009
Peter Dufault wrote:
>
> On Sep 23, 2009, at 6:00 , lee wrote:
>
>> In rtems/c/src/lib/libbsp/shared/vmeUniverse/vmeUniverse.c
>>
>> On line 1462 is:
>>
>> if ((pci_addr & 7) != (vme_addr & 7)) {
>> uprintf(stderr,"vmeUniverseDmaStartXX: misaligned addresses:
>> (pci_addr
>> & 7) %08x, (vme_addr & 7 ) %08x \n",(pci_addr & 7 ),(vme_addr & 7 ));
>> return -1;
>> }
>>
>> Does anyone know what this is for?
>
> The PCI address and the VME address must be 64-bit aligned with each
> other or the DMA engine will generate an error.
Yes; this is a hardware restriction. See the 'Universe II user's
manual', section 2.8.1.1
"Although the PCI and VMEbus addresses may be programmed to any byte
aligned address, they must be 8-byte aligned to each other (i.e. the
low three
bits of each must be identical). If not programmed with aligned
source and
destination addresses and an attempt to start the DMA is made, the
DMA will
not start, it will set the protocol error bit (P_ERR) in the DCSR
register
(Table A.55), and if enabled to, generate an interrupt. Linked-list
operations
will cease."
T.
>
> Peter
> _______________________________________________
> rtems-users mailing list
> rtems-users at rtems.org
> http://www.rtems.org/mailman/listinfo/rtems-users
More information about the users
mailing list