1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2K.1beta (1.48)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>The A/D Driver</TITLE>
<META NAME="description" CONTENT="The A/D Driver">
<META NAME="keywords" CONTENT="rtic">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="LaTeX2HTML v2K.1beta">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="rtic.css">
<LINK REL="next" HREF="node53.html">
<LINK REL="previous" HREF="node51.html">
<LINK REL="up" HREF="node51.html">
<LINK REL="next" HREF="node53.html">
</HEAD>
<BODY bgcolor="white">
<!--Navigation Panel-->
<A NAME="tex2html694"
HREF="node53.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html692"
HREF="node51.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html686"
HREF="node51.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="/usr/share/latex2html/icons/prev.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html695"
HREF="node53.html">The D/A Driver</A>
<B> Up:</B> <A NAME="tex2html693"
HREF="node51.html">Creating I/O Drivers</A>
<B> Previous:</B> <A NAME="tex2html687"
HREF="node51.html">Creating I/O Drivers</A>
<BR>
<BR>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION00521000000000000000">
The A/D Driver</A>
</H2>
The most basic device driver for an A/D board should contain, as a
minimum, the following template:
<P>
<PRE>
#include ``main.h'' /* needed */
int RTiC_init_AD_card(void)
{
/* do all card initialization here */
return(RTIC_SUCCESS); /* or RTIC_ERROR, depending */
}
void RTiC_AD1_run(void)
{
/* do all periodic jobs here */
}
void RTiC_AD2_run(void)
{
/* do all periodic jobs here */
}
int RTiC_stop_AD_card(void)
{
/* do all card ``stopping'' functions here */
return(RTIC_SUCCESS); /* or RTIC_ERROR, depending */
}
</PRE>
<P>
The first function <TT>RTiC_init_AD_card</TT> is run immediately after
the user releases the ``RUN'' button in <TT>xrtic</TT>. Similarly, the
last function, <TT>RTiC_stop_AD_card</TT> is run immediately after the
user releases the ``STOP'' button in <TT>xrtic</TT>. In both of these
cases, the functions must return either ``RTIC_ERROR'' or
``RTIC_SUCCESS'', depending on whether an error was encountered or
not, respectively.
<P>
The <TT>RTiC_AD1_run</TT> and <TT>RTiC_AD2_run</TT> functions, on the
other hand, have a completely different use. These functions are
called once per controller cycle. The first function, <TT>RTiC_AD1_run</TT> is used to trigger A/D conversions in the A/D
cards. Then, sometime later, and prior to the execution of the user's
controller, the function <TT>RTiC_AD2_run</TT> will be called, at which
time this function should load the data vector pointer (<TT>float
*RTiC_sensor</TT>) with the sampled data, for example:
<P><PRE>
for (i=0; i<NUM_CONTROL_INPUTS; i++)
*(RTiC_sensor+i) = INW(AD_BASE);
</PRE>
<P>
<BR><HR>
<ADDRESS>
Michael Barabanov
2001-06-19
</ADDRESS>
</BODY>
</HTML>
|