|
Part 2: Ethernet-Equipped RabbitCore
Modules
by Fred Eady
Start ý The
Networking Core ý Code Names and Comedy
ý Where and Why ý Completing
Initialization Down to Business
ý Now What? ý Sources
and PDF
COMPLETING INITIALIZATION
Enough control has been established at
this point to manage some of the functions of the RTL8019AS. One of
those functions is a hardware reset via the RSTDRV pin connected to
PD4. An active-high pulse with a high-going width greater than 800
ns is applied to the RSTDRV pin. To complete the RTL8019AS initialization
process, you need to put the RTL8019AS in a known state, perform any
interrupt vector assignments, and pull in any required data that normally
would be stored in an external ý9346 EEPROM.
After the reset has been confirmed, writing
0x21 to the command register stops the RTL8019AS, or NIC as itýs called
in the code comments. The tickwait and mswait functions
are implemented as assembler routines in the Dynamic C Premier PKTDRV
library (see Listing
3 . A good example of how the
base I/O address (PD_WR1 or 0xC000), write strobe, and register offset
are used is shown in Listing 2
under the ";; clear all currently
pending interrupts" comment. The two lines of code that follow
the comment effectively write the value of 0xFF into the RTL8019ASýs
interrupt status register (ISR).
A generic interrupt handler is shown in
Listing
4 . It doesnýt do much because
you havenýt really turned the RTL8019AS loose on anything yet. SetVectExtern2000
is a relatively new function designed to help work around an interrupt
logic problem on the microprocessor. If you check out the RCM2100
schematic, the PE4 and PE5 external interrupt inputs have a 1-Kohm
resistor between them. This arrangement allows both interrupt inputs
to receive an interrupt at the same time. PE5 (interrupt one) reacts
first because it has a higher priority than PE4 (interrupt zero).
The reaction of PE5 is ignored and the ISR that will be executed is
the routine written for PE4, or interrupt two. The 1-Kohm resistor
delays the edge enough to guarantee that interrupt one will fire first.
SetVectExtern2000 does a similar function to the 1-Kohm resistor
in software. When the SetVectExtern2000 function is called,
external interrupts zero and one both are set to the same priority
level (three). The actual priority desired is passed to the SetVectExtern2000
function. The other parameter handed to this function is the address
of the ISR handler.
SetVectExtern2000 sets up the
external interrupt table vectors and returns the address of the vector
table entry. I0CR (interrupt 0 control register) and I1CR are set
up as equals by writing 0x33 to both registers. The 0x33 sets up both
interrupt control registers to trigger on both edges and have the
highest possible priority. You can read more about this workaround
in the TN301 technical note on Rabbit Semiconductorýs site. [1]
Now all of the lines into and out of
the RTL8019AS are defined and at a known state. The next step is to
reset the RTL8019AS. So, writing 0xC0 to the RTL8019AS command register
points you to page three, which contains the ý9346 command register.
Writing a 0x40 to the ý9346 command register places the RTL8019AS
in Auto-Load mode. This mode will force the RTL8019AS out of Normal,
or DP8390, mode and initiate a load of the ý9346 contents. The original
DP8390 does not have a page three and there is no provision for an
EEPROM load or an EEPROM in the original DP8390 configuration. The
ý9346 is an item of convenience particular to the RTL8019AS and is
aimed primarily at plug-and-play environments. The idea is to stick
configuration values in the EEPROM that normally would have to be
manually or programmatically entered for proper operation. In reality,
the data pushed out of the RCM2100 EEPROM emulation routine only contains
enough information to set the functions of the RTL8019AS LEDs. With
this said, after completion of the load, the command register is reset
and the RTL8019AS is returned to Normal mode and stopped.
The "virtual" ý9346 is played
out in Listing
5 . After a reset, the RTL8019AS
thinks there is a real ý9346 on the hook and clocks out the appropriate
bits. All the RCM2100ýs microprocessor has to do is mimic the data
an actual ý9346 would return.
PREVIOUS
NEXT
Circuit Cellar provides up-to-date information for engineers. Visit
www.circuitcellar.com for
more information and additional articles.
For subscription information, call (860) 875-2199, subscribe@circuitcellar.com
or subscribe online.
ýCircuit Cellar, the Magazine for Computer Applications. Posted with
permission. |