mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-20 11:43:22 +00:00
103 lines
3.3 KiB
Text
103 lines
3.3 KiB
Text
|
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.
|