FX3 Programmers Manual, Doc. # 001-64707 Rev. *C 71
FX3 Firmware
be directed to one consumer in an interleaved fashion with CPU intervention.
One-to-Many Manual Channel
This channel is defined as DMA_TYPE_MANUAL_ONE_TO_MANY is a variation of the manual
channel. It is defined by one valid producer sockets, more than valid consumer socket, and a
predetermined amount of buffering; each of these is a user programmable parameter.
This type of channel is used when the data flow from one producer has to be directed to more than
one consumer (at least 2 consumers) in an interleaved fashion with CPU intervention.
Multicast Channel
This channel is defined as DMA_TYPE_MULTICAST. It is defined by one valid producer socket,
more than once valid consumer socket, and a predetermined amount of buffering; each of these is a
user programmable parameter.
This type of channel is used when the data flow from one producer has to be directed to more than
one consumer. Here both the consumer receive the same data. This model provides RAID1 type of
data traffic.
5.2.4.3 DMA Buffering
The buffering requirements of the DMA channels are handled by the channel functions. The amount
of buffering required (size of buffer and number of buffers) must be specified at the time of channel
creation. If channel creation is successful, the requisite buffers are successfully allocated. The
buffers are allocated from the block pool. The FX3 user application does not have to allocate any
buffers for the DMA channels.
5.2.4.4 DMA APIs
These consist of APIs to
■ Create and destroy a DMA channel
■ Set up a data transfer on a DMA channel
■ Suspend and resume a DMA channel
■ Abort and reset a DMA channel
■ Receive data into a specified buffer (override mode)
■ Transmit data from a specified buffer (override mode)
■ Wait for the current transfer to complete
■ Get the data buffers from the DMA channel
■ Commit the data buffers for transfer
■ Discard a buffer from the DMA channel
5.2.5 RTOS and OS primitives
The FX3 firmware uses ThreadX, a real-time operating system (RTOS). The firmware framework
invokes the RTOS as part of the overall system initialization.
All the ThreadX primitives are made available in the form of an RTOS library. The calls are presented
in a generic form; the ThreadX specific calls are covered with wrappers. These wrappers provide an
OS independent way of coding the user application.
These include APIs for:
■ Threads
❐ Thread create and delete