uDMA Controller
23 uDMA Controller
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
23.1 Introduction
The microDMA (uDMA) API provides functions to configure the uDMA (Direct Memory Access) con-
troller. The uDMA controller is designed to work with the ARM Cortex-M4 processor and provides
an efficient and low-overhead means of transferring blocks of data in the system.
The uDMA controller has the following features:
dedicated channels for supported peripherals
one channel each for receive and transmit for devices with receive and transmit paths
dedicated channel for software initiated data transfers
channels can be independently configured and operated
an arbitration scheme that is configurable per channel
two levels of priority
subordinate to Cortex-M4 processor bus usage
data sizes of 8, 16, or 32 bits
address increment of byte, half-word, word, or none
maskable device requests
optional software initiated transfers on any channel
interrupt on transfer completion
The uDMA controller supports several different transfer modes, allowing for complex transfer
schemes. The following transfer modes are provided:
Basic mode performs a simple transfer when request is asserted by a device. This is ap-
propriate to use with peripherals where the peripheral asserts the request line whenever data
should be transferred. The transfer will stop if request is de-asserted, even if the transfer is
not complete.
Auto-request mode performs a simple transfer that is started by a request, but will always
complete the entire transfer, even if request is de-asserted. This is appropriate to use with
software initiated transfers.
Ping-Pong mode is used to transfer data to or from two buffers, switching from one buffer to
the other as each buffer fills. This mode is appropriate to use with peripherals as a way to
ensure a continuous flow of data to or from the peripheral. However, it is more complex to set
up and requires code to manage the ping-pong buffers in the interrupt handler.
Memory scatter/gather mode is a complex mode that provides a way to set up a list of trans-
fer “tasks” for the uDMA controller. Blocks of data can be transferred to and from arbitrary
locations in memory.
April 8, 2013 271