103 lines
3.3 KiB
Plaintext
103 lines
3.3 KiB
Plaintext
CONTENT:
|
|
|
|
epic.h
|
|
epic1.c
|
|
epic2.s
|
|
|
|
WHAT ARE THESE FILES:
|
|
|
|
These files contain MPC8240 (Kahlua) EPIC
|
|
driver routines. The driver routines are not
|
|
written for any specific operating system.
|
|
They serves the purpose of code sample, and
|
|
jump-start for using the MPC8240 EPIC unit.
|
|
|
|
For the reason of correctness of C language
|
|
syntax, these files are compiled by Metaware
|
|
C compiler and assembler.
|
|
|
|
ENDIAN NOTATION:
|
|
|
|
The algorithm is designed for big-endian mode,
|
|
software is responsible for byte swapping.
|
|
|
|
USAGE:
|
|
|
|
1. The host system that is running on MPC8240
|
|
shall link the files listed here. The memory
|
|
location of driver routines shall take into
|
|
account of that driver routines need to run
|
|
in supervisor mode and they process external
|
|
interrupts.
|
|
|
|
The routine epic_exception shall be called by
|
|
exception vector at location 0x500, i.e.,
|
|
603e core external exception vector.
|
|
|
|
2. The host system is responsible for configuring
|
|
the MPC8240 including Embedded Utilities Memory
|
|
Block. All EPIC driver functions require the
|
|
content of Embedded Utilities Memory Block
|
|
Base Address Register, EUMBBAR, as the first
|
|
parameter.
|
|
|
|
3. Before EPIC unit of MPC8240 can be used,
|
|
initialize EPIC unit by calling epicInit
|
|
with the corresponding parameters.
|
|
|
|
The initialization shall disable the 603e
|
|
core External Exception by calling CoreExtIntDisable( ).
|
|
Next, call epicInit( ). Last, enable the 603e core
|
|
External Exception by calling CoreExtIntEnable( ).
|
|
|
|
4. After EPIC unit has been successfully initialized,
|
|
epicIntSourceSet( ) shall be used to register each
|
|
external interrupt source. Anytime, an external
|
|
interrupt source can be disabled or enabled by
|
|
calling corresponding function, epicIntDisable( ),
|
|
or epicIntEnable( ).
|
|
|
|
Global Timers' resource, base count and frequency,
|
|
can be changed by calling epicTmFrequencySet( )
|
|
and epicTmBaseSet( ).
|
|
|
|
To stop counting a specific global timer, use
|
|
the function, epicTmInhibit while epicTmEnable
|
|
can be used to start counting a timer.
|
|
|
|
5. To mask a set of external interrupts that are
|
|
are certain level below, epicIntPrioritySet( )
|
|
can be used. For example, if the processor's
|
|
current task priority register is set to 0x7,
|
|
only interrupts of priority 0x8 or higher will
|
|
be passed to the processor.
|
|
|
|
Be careful when using this function. It may
|
|
corrupt the current interrupt pending, selector,
|
|
and request registers, resulting an invalid vetor.
|
|
|
|
After enabling an interrupt, disable it may also
|
|
cause an invalid vector. User may consider using
|
|
the spurious vector interrupt service routine to
|
|
handle this case.
|
|
|
|
6. The EPIC driver routines contains a set
|
|
of utilities, Set and Get, for host system
|
|
to query and modify the desired EPIC source
|
|
registers.
|
|
|
|
7. Each external interrupt source shall register
|
|
its interrupt service routine. The routine
|
|
shall contain all interrupt source specific
|
|
processes and keep as short as possible.
|
|
|
|
Special customized end of interrupt routine
|
|
is optional. If it is needed, it shall contain
|
|
the external interrupt source specific end of
|
|
interrupt process.
|
|
|
|
External interrupt exception vector at 0x500
|
|
shall always call the epicEOI just before
|
|
rfi instruction. Refer to the routine,
|
|
epic_exception, for a code sample.
|