Motorola MPC5200 Manuel D’Utilisation

Page de 28
8
KADAK
KwikNet MPC5200 FEC Device Driver
BestComm FEC Initialization
The 
KwikNet
 MPC5200 FEC device driver must initialize the BestComm FEC receive and
transmit tasks to match the driver's configured requirements.  Unfortunately, the
BestComm FEC initialization must only be performed once.  However, the MPC5200
FEC driver can be opened and closed many times as 
KwikNet
 operates.  Each time the
driver is opened, it must initialize the FEC hardware but it must only initialize the
BestComm FEC subsystem once.
To meet this requirement, an FEC initialization procedure 
kn_BestCommFEC()
 is
provided in source file 
KN5200BC.C
.  The 
d
evice driver calls this procedure to prepare the
BestComm FEC subsystem for subsequent use by the driver.  The procedure is called
every time that the Ethernet network interface is opened for use.
The function receives a pointer to an initialization structure 
knx_bcfecsetup
 defined in
header file 
KN5200BC.H
.  This structure serves two purposes.  On input, it presents the
configuration information needed to initialize the BestComm FEC subsystem.  On output,
it contains the task identifiers for the BestComm FEC RX and TX tasks.
Procedure 
kn_BestCommFEC()
 maintains a copy of structure 
knx_bcfecsetup
 as
received the first time that the function is called.  The BestComm FEC subsystem is
initialized and the results are saved in static variable 
kn_bcdata
.  On subsequent calls to
kn_BestCommFEC()
, the input parameters are compared to the saved values.  If the new
parameters do not match the original values, the call is rejected with an error status
because the BestComm FEC subsystem cannot be reconfigured to meet the revised
configuration requested.
A custom timing service is implemented in source file 
KN5200BC.C
 for the benefit of the
MPC5200 FEC device driver.  Precise timing is derived from the internal MPC5200
Time Base Register.  Procedure 
kn_tbdelay()
 can be used to instrument a compute
bound delay with microsecond precision.  This procedure supercedes the crude delay
function offered by 
KwikNet
 procedure 
kn_brddelay()
.  Note that proper operation of
procedure 
kn_tbdelay()
 depends upon the time base clock frequency as defined by
symbol 
TBR_FREQ
 in header file 
KN5200BC.H
.
You are free to edit source file 
KN5200BC.C
 to adapt the BestComm FEC initialization
sequence to your particular needs.  Alternatively, you can merge the code from module
KN5200BC.C
 into your own BestComm task initialization module, being sure to retain
FEC setup procedure 
kn_BestCommFEC()
 and its functional integrity.
MPC5200 Register Support
Two low level MPC5200 register access functions are provided in source file
KN5200BC.C
.  Function 
kn_get_mbar()
 reads the Memory Base Address Register (
MBAR
)
and returns its value to the caller.  Function 
kn_get_tbr()
 reads the low order 32 bits of
the 64-bit Time Base Register (TB) and returns its value to the caller.
These functions are implemented using the assembly language features offered by each of
the C compilers tested by KADAK.  The functions are implemented in a compiler
specific manner in header file 
KN5200BC.H
.  Instances of the functions are included near
the end of source file 
KN5200BC.C
 by defining symbol 
KN_CCNEED_MPC5200SPR
 and
including header file 
KN5200BC.H
 for a second time.