
3020-XX-UM
ProDAQ 3020 USB2.0 VXIbus Slot-0 Interface User Manual
Page 36 of 60
Copyright, © 2003 Bustec Production Ltd.
Figure 30 - Register I/O using memory mapping
ViStatus function rmw_register (ViSession instr_session, ViBusAddress offset, ViUInt16 mod)
{
ViStatus status;
ViChar descr[256];
ViAddr address;
ViUInt16 win_access;
ViUInt16 value;
if ((status = viMapAddress (instr_session, VI_A32_SPACE, offset,
sizeof (ViUInt16), VI_FALSE, (ViAddr) 0, &address)) != VI_SUCCESS)
{
viStatusDesc (instr_session, status, descr);
if (status > VI_SUCCESS)
printf (“VISA WARNING: viMapAddress returned status %08x (%s)\n”,
status, descr);
else
{
printf (“VISA ERROR: viMapAddress returned status %08x (%s)\n”,
status, descr);
return status;
}
}
if ((status = viGetAttribute (instr_session,
VI_ATTR_WIN_ACCESS, &win_access)) != VI_SUCCESS)
{
viStatusDesc (instr_session, status, descr);
if (status > VI_SUCCESS)
printf (“VISA WARNING: viGetAttribute returned status %08x (%s)\n”,
status, descr);
else
{
printf (“VISA ERROR: viGetAttribute returned status %08x (%s)\n”,
status, descr);
return status;
}
}
if (win_access == VI_DEREF_ADDR)
{
/* allowed to use pointer or similar */
value = *((ViUInt16 *) address);
value = value | mod;
*((ViUInt16 *) address) = value;
}
else if (win_access == VI_USE_OPERS)
{
/* use functions to access memory */
viPeek16 (instr_session, address, &value);
value = value | mod;
viPoke16 (instr_session, address, value);
}
if ((status = viUnmapAddress (instr_session) != VI_SUCCESS)
{
viStatusDesc (instr_session, status, descr);
if (status > VI_SUCCESS)
printf (“VISA WARNING: viUnmapAddress returned status %08x (%s)\n”,
status, descr);
else
{
printf (“VISA ERROR: viUnmapAddress returned status %08x (%s)\n”,
status, descr);
return status;
}
}
return VI_SUCCESS;
}
Artisan Technology Group - Quality Instrumentation ... Guaranteed | (888) 88-SOURCE | www.artisantg.com