101 lines
3.1 KiB
Plaintext
101 lines
3.1 KiB
Plaintext
CONTENT:
|
|
|
|
dma.h
|
|
dma1.c
|
|
dma2.s
|
|
|
|
WHAT ARE THESE FILES:
|
|
|
|
These files contain MPC8240 (Kahlua) DMA controller
|
|
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 DMA controller.
|
|
|
|
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
|
|
or using MPC8240 as I/O device 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 DMA controller interrupt.
|
|
|
|
2. The host system is responsible for configuring
|
|
the MPC8240 including Embedded Utilities Memory
|
|
Block. Since the DMA controller on MPC8240 can
|
|
be accessed by either local 603e core or the host
|
|
that MPC8240 serves as I/O processor through host
|
|
PCI configuration, it is important that the local
|
|
processor uses EUMBBAR to access its local DMA
|
|
controller while the PCI master uses I/O
|
|
processor's PCSRBAR to access the DMA controller
|
|
on I/O device.
|
|
|
|
To qualify whether is EUMBBAR or PCSRBAR, one
|
|
additional parameter is requied from the host
|
|
system, LOCAL or REMOTE so that the base value
|
|
can be correctly interpreted.
|
|
|
|
3. If the host system is also using the EPIC unit
|
|
on MPC8240, the system can register the
|
|
DMA_ISR with the EPIC including other
|
|
desired resources.
|
|
|
|
If the host system does not using the EPIC unit
|
|
on MPC8240, DMA_ISR function can be called for
|
|
each desired time interval.
|
|
|
|
In both cases, the host system is free to
|
|
provide its own interrupt service routine.
|
|
|
|
4. To start a direct mode DMA transaction,
|
|
use DMA_Bld_Curr with the start parameter
|
|
set to 1.
|
|
|
|
To start a chaining mode DMA transaction,
|
|
the application shall build descriptors
|
|
in memory first, next, use DMA_Bld_Desp
|
|
with the start parameter set to 1.
|
|
|
|
5. DMA_Start function clears, then sets the CS
|
|
bit of DMA mode register.
|
|
|
|
DMA_Halt function clears the CS bit of DMA
|
|
mode register.
|
|
|
|
These functions can be used to start and
|
|
halt the DMA transaction.
|
|
|
|
If the chaining descriptors has been
|
|
modified since the last time a DMA
|
|
transaction started, use DMA_Chn_Cnt
|
|
function to let DMA controller process
|
|
the modified descriptor chain without
|
|
stopping or disturbing the current DMA
|
|
transaction.
|
|
|
|
It is the host system's responsibility of
|
|
setting up the correct DMA transfer mode
|
|
and pass the correct memory address parameters.
|
|
|
|
6. It is the host system's responsibility of
|
|
queueing the DMA I/O request. The host
|
|
system can call the DMA_ISR with its own
|
|
desired interrupt service subroutines to
|
|
handle each individual interrupt and queued
|
|
DMA I/O requests.
|
|
|
|
7. The DMA driver routines contains a set
|
|
of utilities, Set and Get, for host system
|
|
to query and modify the desired DMA registers.
|