National Instruments NI-VXI User Manual

Page 34

Advertising
background image

Chapter 2 Introduction to the NI-VXI Functions

© National Instruments Corporation

2-15

NI-VXI User Manual

timeout = 2000L; /* 2 seconds */

/* Notice the use of the macros for defining the access */
/* parameters. These can be found in the NI-VXI header files */
addrptr1 = (UINT32) MapVXIAddress(AccessP_Space(A16_SPACE) |

AccessP_Priv(NonPriv_DATA) |
AccessP_BO(MOTOROLA_ORDER) |
AccessP_Owner(0),
addr, timeout, &window1, &ret);

if (ret >= 0) /** MapVXIAddress call is successful **/
{

/* The following code reads the ID register of a device */
/* at logical address 10. */
la = 10;
addrptr = (UINT16 *)((UINT32) addrptr1 + 64 * la);
VXIpeek(addrptr,2, &svalue));

if (BusErrorRecv)

printf("Bus Error has occurred.\n");

else

printf("Value read was %hd.\n", svalue));

ret = UnMapVXIAddress(window1);

} else

printf("Unable to access window.\n");

/* Close library when done */
ret = CloseVXIlibrary();

}

Notice that the return variable for the

MapVXIAddress()

function is a

pointer. While you can dereference this pointer directly on some
platforms, we recommend that you use the

VXIpeek()

and

VXIpoke()

macros and functions in NI-VXI instead.

You can define

BINARY_COMPATIBLE

when compiling your program

to force NI-VXI to use a version of

VXIpeek()

and

VXIpoke()

macros that will work on all embedded and MXI platforms. In addition,
you can use the functions, rather than the macros, to ensure future
compatibility. To force the compiler to use the functions, put the
function name in parentheses, for example,

(VXIpoke) (addrptr, 2, 0);

instead of

VXIpoke (addrptr, 2, 0);

Advertising