DMA Peripheral - Texas Instruments
Download
Report
Transcript DMA Peripheral - Texas Instruments
DSP C 5000
Chapter 8
Direct Memory Access (DMA)
Copyright © 2003 Texas Instruments. All rights reserved.
Direct Memory Access
In a real-time system, DMA is used to transfer data
from peripheral/memory and memory/peripheral
without burdening the CPU :
Input Data
Memory
DMA
serial or parallel
Let’s see how the
DMA performs
its tasks...
ESIEE, Slide 2
ESIEE
internal/external
C54x
C55x
Copyright © 2003 Texas Instruments. All rights reserved.
C54x Direct Memory Access (DMA)
Performs data transfers without CPU intervention
SRC address
SOURCE
DEST
Element 1
Element 2
Element 3
Element 4
Frame 1
Frame 2
Frame 3
Frame 4
DST address
Terminology
- Element: basic unit of transfer (1, 2 words)
- Frame: multiple elements (1-64K)
- Block: multiple frames (1-256)
Max Speed: One 16-bit word per 4 CPU cycles (all channels combined)
Transfer dependent upon:
- Source/destination address
- Rotating priority between channels
- Event sync (different events can be selected)
- Element/Frame count
- Index (can select: no modification, inc/dec by 1 and element/frame index)
ESIEE, Slide 3
ESIEE
Copyright © 2003 Texas Instruments. All rights reserved.
DMA Registers and Resources
DMA Channels 0-5
EHPI
Source
DMA “Resources”
Destination
DARAM
EHPI
Auxiliary
Channel
15
Elem Count
Frame Count
SARAM
Elem Index
Frame Index
Ext’l Mem
Control
Status
14
13
8
Free AUTOIX DPRC[5:0]
DE[5:0]
INTSEL
DPRC
AUTOIX
Free
7
DMA
Bus
6
INTSEL
Peripherals
5
0
DE[5:0]
DMPREC Register
Enable/disable channels
Interrupt Multiplex Control
Channel Priority (Hi or Low)
Extended reload mode
Emulation Control
Only the ‘C5409, ‘10, ‘16, ‘21 and ‘41 support external DMA accesses
ESIEE, Slide 4
ESIEE
Copyright © 2003 Texas Instruments. All rights reserved.
DMA Registers
12
15
DSYN[3:0]
11
DBLW
10
8 7
rsvd
0
Frame Count
DMSFCn (Sync Event and Frame Count)
Frame Count:
N-1 (N is desired # of frames)
DBLW:
Double-word mode (0: 16-bit, 1: 32-bit)
DSYN:
DMA sync event
15
14
13
12
11
10
8
AUTOINIT DINM IMOD CTMOD SLAXS SIND
7
6
5
4
2
DMS DLAXS DIND
1
0
DMD
DMMCRn (Transfer Mode Control)
ESIEE, Slide 5
ESIEE
DMD:
Destination Address Space (Program, Data, I/O)
DIND:
Destination Index (none, +, -, element/frame index)
DLAXS:
Internal/External Access (0/1)
DMS:
Source Address Space (Program, Data, I/O)
SIND:
Source Index (none, +, -, element/frame index)
SLAXS:
Internal/External Access (0/1)
Copyright © 2003 Texas Instruments. All rights reserved.
DMA Registers - Synchronisation Example
ESIEE, Slide 6
ESIEE
Index and Frame offset are 16 bits signed
Example: data sorting
Copyright © 2003 Texas Instruments. All rights reserved.
DMA Registers – ABU Mode
Implements circular buffering.
Indefinite number of transfers.
Base address must be a power of two, 2r >N,
with N being the buffer size.
One side must be without address modification
and the other can only use an indexing mode.
3000h
McBSP
DRR
ESIEE, Slide 7
ESIEE
DMSRC1=DRR
DMDST1
DMCTR1
DMSFC1
30FFh
1E57
2089
F57B
...
DEAD
Copyright © 2003 Texas Instruments. All rights reserved.
DMA Registers – Interrupt Mode
DINM, IMOD and CTMOD specify
interrupt mode:
DINM: no interrupt on transfer completion if 0.
CTMOD: multiframe mode if 0, ABU mode if 1.
IMOD: depend on CTMOD
ESIEE, Slide 8
ESIEE
Multiframe mode: interrupt occurs at end of block
transfer if 0, else at the end of each frame and at the
end of block transfer.
ABU mode: interrupt occurs when buffer is full if 0,
else at half buffer full and at buffer full condition.
Copyright © 2003 Texas Instruments. All rights reserved.
Writing to the DMA Registers
Writing to DMA registers is a multi-step process using
sub-bank addressing
MMR Regs
Sub-bank Address
DMSA
Data Register
DMSDN
Data Register
with auto-increment DMSDI
Sub-bank Regs
DMSRCn Source Address
DMDSTn Destination Address
DMCTRn Element Count
DMSFCn Sync Event, Frame Count
DMMCRn Transfer Mode Control
Using sub-bank addressing with auto-increment
DMSRC0 .set 00h
STM
DMSRC0,DMSA
;init DMSA to pt to DMSRC0
STM
#1000h,DMSDI
;write 1000h to DMSRC0
STM
#2000h,DMSDI
;write 2000h to DMDST0
…etc.
Another example
ESIEE, Slide 9
ESIEE
Copyright © 2003 Texas Instruments. All rights reserved.
DMA Throughput
DPRC[5:0]: determines DMA bus priority between channels
- (hi-1, low-0) Affects access to the 16-bit DMA bus only
- Can select high or low rotating priority (per element transfer):
High
Ch-3
Low
Ch-0
Ch-2
Priority Access to
Data Buses:
ESIEE, Slide 10
ESIEE
Ch-5
Ch-1
Low serviced when high:
- waiting for event sync
- transfers are complete
Ch-4
EHPI
DMA (Hi)
DMA (Lo)
CPU
highest
lowest
Copyright © 2003 Texas Instruments. All rights reserved.
Example: Auto-Init and Sync Events
McBSP
A/D
DRR
Global Reload Regs
DMGSA=DRR
DMGDA=80h
DMGCR=15
DMGFR0=00h
DMA Ch0
DMSRC0=DRR
DMDST0=80h
DMCTR0=15
DMSFC0=00h
Sync event
RRDY = 1
80h
8Fh
1E57
2089
F57B
...
DEAD
Int to CPU
Selected sync event (e.g. RRDY=1) triggers element transfer
(e.g. from DRR to 80h)
Interrupt can occur at end of block or end of frame/block
DMA channel registers reloaded from reload registers at
end of block transfer IF auto-init enabled.
Example shown transfers 16 values from DRR to the same
memory locations every frame
Refer to the documentation for a complete list of the DMA registers
ESIEE, Slide 11
ESIEE
Copyright © 2003 Texas Instruments. All rights reserved.
Example: Interfacing PCM3002 with DMA
McBSP2
A/D
DMA4
DMA5
DRR
McBSP2
DXR
PING
IN
D/A
PING
PROCES-
OUT
SING
ESIEE, Slide 12
ESIEE
PONG
PONG
IN
OUT
Copyright © 2003 Texas Instruments. All rights reserved.
Overview
Create a new project
Retrieve audioIO.cdb
(McBSP2 configuration already done) and
save it in the project directory as
audioIODma.cdb
Specify buffer declaration (circular
addressing constraint).
Configure DMA channels with GUI
interface.
Interrupt configuration for input DMA
channel
ESIEE, Slide 13
ESIEE
Copyright © 2003 Texas Instruments. All rights reserved.
Create Source File
ESIEE, Slide 14
ESIEE
Take the file audioIODma.c and add it to
the project.
Copyright © 2003 Texas Instruments. All rights reserved.
Buffer Declaration
ESIEE, Slide 15
ESIEE
Because of constraints on buffer address in
ABU mode, the buffer must declared and
handled in a special way during linking.
Add this file audioIODma.cmd
Copyright © 2003 Texas Instruments. All rights reserved.
DMA Configurations
ESIEE, Slide 16
ESIEE
Open file audioIODma.cdb and go to CSL
Add a DMA configuration named
« DmaAudioRx ».
Copyright © 2003 Texas Instruments. All rights reserved.
DMA Configuration
ESIEE, Slide 17
ESIEE
Select ABU for circular buffer
Interrupt on half and full buffer to
implement Ping-Pong buffering
Synchronisation on receive event from AD
converter through McBSP2.
Copyright © 2003 Texas Instruments. All rights reserved.
DMA configurations
source and destinatation
ESIEE, Slide 18
ESIEE
Copyright © 2003 Texas Instruments. All rights reserved.
DMA Configuration
ESIEE, Slide 19
ESIEE
Add a new DMA configuration
« DmaAudioTx ».
Copyright © 2003 Texas Instruments. All rights reserved.
DMA configurations
source and destinatation
ESIEE, Slide 20
ESIEE
Copyright © 2003 Texas Instruments. All rights reserved.
DMA Settings
ESIEE, Slide 21
ESIEE
Select DMA4 for receive channel
Copyright © 2003 Texas Instruments. All rights reserved.
DMA Settings
ESIEE, Slide 22
ESIEE
Select DMA5 for transmit channel
Copyright © 2003 Texas Instruments. All rights reserved.
DMA Handling
ESIEE, Slide 23
ESIEE
Declare handle to DMA channels in source file
and start transfer using CSL functions call.
Copyright © 2003 Texas Instruments. All rights reserved.
DMA Interrupt Handling
ESIEE, Slide 24
ESIEE
Connect IRQ event from DMA4 to a function
called RxBuffer
Unmask this interrupt and globally enable
interrupts (INTM)
Copyright © 2003 Texas Instruments. All rights reserved.
DMA Interrupt Handler
Add the DMA interrupt service routine « RxBuffer »
Build and run the application
ESIEE, Slide 25
ESIEE
Copyright © 2003 Texas Instruments. All rights reserved.
Other DMA Issues
Auto-Initialization:
- At end of block, DMA copies reload registers to channel registers
- Reload registers can be altered at any time
- Every channel can select to use auto-init and reload registers
- Allows user to provide “continuous” or “repetitious” operation
ESIEE, Slide 26
ESIEE
Copyright © 2003 Texas Instruments. All rights reserved.
‘C55x Direct Memory Access (DMA)
Performs data transfers without CPU intervention
SRC addr
SOURCE
DEST
Element 1
Element 2
Element 3
Element 4
Frame 1
Frame 2
Frame 3
Frame 4
DST addr
Terminology
- Element: basic unit of transfer (1, 2, or 4 bytes)
- Frame: a group of 1 to 64K elements
- Block: a group of 1 to 64K frames
Max Throughput: Two 16-bit transfers (R/W) per cycle (2 different Ch’s)
Transfer dependent upon:
- Source/destination address
- Priority (rotating priority between channels, also Ch vs. CPU)
- Event sync (20 different events can be selected for ‘C5510)
- Element/Frame count
- Index (can select: constant, increment, element/frame index)
ESIEE, Slide 27
ESIEE
Copyright © 2003 Texas Instruments. All rights reserved.
DMA Registers, Resources
DMA Channels 0-5
Source
Destination
DMA “Ports”
Read
Bus
32
Elem Index
Frame Index
Elem Count
Frame Count
16-bit FIFO
Control
Status
32
EHPI
Auxiliary
Channel
ESIEE, Slide 28
ESIEE
32
DARAM
32
SARAM
32
EMIF
16
Peripherals
16
EHPI
Write
Bus
Each CHx has: 2 32-bit buses (R/W) + 16-bit FIFO + 8 DMA regs shown
DMA Channels 0-5 have access to all ports except EHPI port
EHPI Auxiliary Channel has access to all ports except Peripherals port
EHPI share the auxiliary port with USB module
Copyright © 2003 Texas Instruments. All rights reserved.
DMA vs EHPI
Global Control Register (DMA_GCR)
If EXCL 0 all ports are connected.
If EXCL 1 ports in red are disconnected and EHPI
have exclusive access to DARAM and SARAM
ESIEE, Slide 29
ESIEE
Copyright © 2003 Texas Instruments. All rights reserved.
DMA Throughput
DMA throughput is affected by the combination of:
1
CPU has FIXED priority over the DMA
- Affects access to: RHEA, EMIF, SARAM, DARAM
2
PRIO bits: (DMA_CCRn:6) sets priority(hi/low) for DMA channel n
EHPI PRIO bit: (DMA_GCR:0) sets priority for EHPI Aux. channel
- Affects access to the two 16-bit DMA buses
- Can select high or low priority round robin (per element transfer)
High
Ch-3
Ch-0
Ch-2
3
Low
Ch-5
Ch-1
Low serviced when high:
- waiting for event sync
- transfers are complete
Ch-4
EHPI EXCL bit: (DMA_GCR:1)
- Affects access to internal/external memory
- EXCL=1: EHPI accesses internal RAM only, DMA external RAM only
ESIEE, Slide 30
ESIEE
Copyright © 2003 Texas Instruments. All rights reserved.
DMA Service Chain
ESIEE, Slide 31
ESIEE
Scenario
Service chain example
Copyright © 2003 Texas Instruments. All rights reserved.
DMA Interrupt
Interrupts can be generated from multiple events for
each channel (DMA_CICR), all interrupts are Ored :
ESIEE, Slide 32
ESIEE
Timeout : each resource access can be supervised thanks to a
counter.
Drop : Synchronisation not serviced.
Half frame : At half of each frame.
Frame : At the end of each frame.
Last Frame : At the beginning of the last frame transfer.
Block : At the end of the block transfer.
Read DMA_CSR to determine source of interrupt
Copyright © 2003 Texas Instruments. All rights reserved.
Setting Up a DMA Transfer (SARAMD/A)
Problem: - Transfer a block of pixels from SARAM to a D/A
- Output via McBSP/DMA and sync transfer to D/A (ready)
16-bit pixels
(SARAM)
Src: mem_8
15
14
McBSP
DXR
8 9 10 11
14 15 16 17
20 21 22 23
13
12
DMA
D
D/A
Dest: DXR
Ready
EXT_INT4
9
8
7
6
5
2
1
0
DST BEN DST PACK DST SRC BEN SRC PACK SRC DATA TYPE
DMA Channel n Source Destination Parameters Register (DMA_CSDPn)
Field
Description
DATA TYPE
SRC/DST
Element size
Port select
Options
Answer?
2
1, 2, or 4 bytes
SA/DARAM, EMIF, Periph SARAM/Periph
DST/SRC PACK Data packing packed or non-packed
non-packed
DST/SRC BEN
no burst
Burst enable
no burst, 4 element burst
There’s more to set up for the DMA channel ...
ESIEE, Slide 33
ESIEE
Copyright © 2003 Texas Instruments. All rights reserved.
Setting Up a DMA Transfer (SARAMD/A)
Problem: - Transfer a block of pixels from SARAM to a D/A
- Output via McBSP/DMA and sync transfer to D/A (ready)
16-bit pixels
(SARAM)
Src: mem_8
15
14
McBSP
DXR
8 9 10 11
14 15 16 17
20 21 22 23
13
DMA
D
D/A
Dest: DXR
Ready
EXT_INT4
11
10
9
8
7
6
5
4
0
DST AMODE SRC AMODE
AUTO INIT EN PRIO FS SYNC
DMA Channel n Control Register (DMA_CCRn)
Field
Description
Options
SYNC
Sync Event 20 options (plus no sync)
FS
Frame Sync 0: elem sync, 1: frame sync
PRIO
Priority
0: low, 1: hi
EN
Ch enable
0: disable, 1: enable
AUTO INIT
Auto init
0: none, 1: auto init
SRC/DST AMODE Addr index none, +, elem indx, frm indx
What other registers need to be set up?
ESIEE, Slide 34
ESIEE
Answer?
EXT_INT4
0
0 (or 1)
1
0
frm indx/ none
Copyright © 2003 Texas Instruments. All rights reserved.
DMA Transfer - Example
Problem: - Transfer a block of pixels from SARAM to a D/A
- Output via McBSP/DMA and sync transfer to D/A (ready)
16-bit pixels
(SARAM)
8 9 10 11
14 15 16 17
20 21 22 23
Src: mem_8
DMA_CSSA_Un DMA_CSSA_Ln
mem_8[23:16] mem_8[15:0]
SRC starting BYTE Address
McBSP
DXR
DMA
D
D/A
Dest: DXR
Ready
EXT_INT4
DMA_CDSA_Un DMA_CDSA_Ln
DXR[23:16]
DXR[15:0]
DEST starting BYTE Address
Note: data labels, e.g. mem_8 must be <<1 to form byte address
DMA_CENn
4
DMA_CFNn
3
# of Elements
# of Frames
ESIEE, Slide 35
ESIEE
DMA_CEIn
2
DMA_CFIn
6
Element Index
(in bytes)
Frame Index
(in bytes)
Copyright © 2003 Texas Instruments. All rights reserved.
Other DMA Issues
Auto-Initialization:
- Each channel contains “config” and “working” register sets. When
auto-init is enabled, the “working registers” are reloaded from the
“config” registers (which you can access via I/O memory)
- Continuous operation: can change init/reload registers during current
block transfer. Next transfer uses new values. Does not stop DMA.
- Repetitive Operation: same init/reload registers used every time
Refer to the documentation for a complete list of the DMA registers
ESIEE, Slide 36
ESIEE
Copyright © 2003 Texas Instruments. All rights reserved.