How do I access my VME hardware from MVME3100?
Till Straumann
strauman at slac.stanford.edu
Fri Jan 29 01:26:51 UTC 2010
rtwas wrote:
> Dimitrios Tsifakis wrote:
>> Hello everyone,
>>
>> I am a new RTEMS user. I have just managed to compile 4.9.3 for an
>> MVME3100 and run the hello_world_c program. The second step I had in
>> mind was to access the VME cards that are also installed in that
>> crate, but I cannot find any documentation that describes how to
>> achieve that.
>>
>> Any help and pointing to the right direction would be greatly
>> appreciated.
>>
>> Regards Dimitris
>>
>
>
> Hello,
>
> My understanding is that the mvme ppc bsp's use the motorola setup
> defaults for each of the address space types (32bit (extended), 24bit
> (standard), 16 (short io)).
That's not correct. The BSP programs its own mappings which you
can display with
BSP_VMEOutboundPortsShow(stdout)
you can change this using BSP_VMEOutboundPortCfg(),
c.f. the header file in <src>/c/src/lib/libbsp/shared/vmeUniverse/VME.h
> The BSP_vme2local_adrs() function (according to Till) just does a
> verification of an
> existing mapping.
>
> "
> This function doesn't do any mapping but it checks if the given local
> address is mapped on the VME bus ('visible to other VME masters')
> using already existing mappings and translates it into a VME address.
> " -Till Strauman
>
> You need to use a "BSP" function, here's a 24bit (Standard) address space
> example:
>
> ...................................................................
> unsigned long local_address;
> volatile uint32_t * vme32p;
>
> return = BSP_vme2local_adrs(VME_AM_STD_SUP_DATA, 0x00000000,
> &local_address); // map the space
>
> if(return <0)
> printf("BSP_vme2local_adrs(): failed \n");
>
> else
> // to acess address 0x1000
> *(vme32p + 0x1000/4) = 0xdeadbeef; // for a 32 bit word write
>
> // the "/4" thing is there because the address space is in *bytes* but
> the pointer
> // is 4 times that size.
> ....................................................................................
>
>
> The "am" codes can be found:
>
> "/opt/rtems-4.9/powerpc-rtems4.9/mvme5500/lib/include/bs/vme_am_defs.h"
> (in the case of an mvme5500 on a Linux system install)
>
> -or-
> "./c/src/lib/libbsp/shared/vmeUniverse/vme_am_defs.h"
>
>
> The relevant BSP functions can be found:
> "c/src/lib/libbsp/powerpc/shared/vme/vme_universe.c"
>
> If your write/read *order* is important you'd probably want to do an
> *inline* "eieio" instruction
> to force "in order execution". There was talk in one of the past
> emails about using some io functions
> to do this but I've not located them yet.
>
> I asked this question not long ago. You should be able to find it in
> the email archives.
>
> Robert W.
>
> _______________________________________________
> rtems-users mailing list
> rtems-users at rtems.org
> http://www.rtems.org/mailman/listinfo/rtems-users
More information about the users
mailing list