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