5.14. UDMA

5.14.1. Introduction

UDMA is the DMA engine used to do direct memory access (DMA) between different peripherals like McASP, SPI, UART and memory (DDR, L2, L3, MSMC) without CPU intervention in next generation TI SoCs like J721S2. The DMA architecture specifies the data structures used by standard communications modules to facilitate direct memory access (DMA) and to provide a consistent application programming interface (API) to the host software in multi-core devices. The data structures and the API used to manipulate them will be jointly referred to as Navigator Subsystem (NAVSS).

The UDMA driver provides API to program the DMA portion of the Navigator Subsystem (NAVSS) to setup and initiate transfers. Below are the high level features supported by the driver |


  • Both Main and MCU NAVSS instances

  • Supports all DMA operations from these instances from all the cores in the SOC

  • UDMAP block copy using native NAVSS channels

  • PDMA module to initiate transfers to/from PDMA peripherals like UART, McASP, McSPI, ADC, MCAN

  • DMA transfer to/from from native PSIL peripherals like EMAC, CPSW, SA2UL

  • Event and interrupt management like DMA completion, channel chaining, interrupt sharing using IA

  • Resources management across instances and cores for UDMAP DMA channels,RX flow, External UTC channel (DRU), interrupt aggregators (IA), interrupt routers (IR),global events, ring accelerators (RA)

  • Interaction with DMSC RM module via SCICLIENT for all non-RealTime (NRT) configuration

  • Supports both RTOS and baremetal

Notes


  • UDMA driver doesn’t manage/allocate the descriptor and RA memory.The caller need to allocate and provide the required memory.

  • UDMA driver doesn’t use any global variables. All the required object memory like channel, driver instance, event etc should be allocated by the caller

This document has detailed API description that user can use to make use of the UDMA driver.

5.14.2. User Interface

For details about individual fields of this library structure, see the PDK doxygen documentation

5.14.2.1. APIs

The UDMA driver API can be broadly divided into the following categories


  • UDMAP native channel API

  • PDMA channel operations

  • Event and interrupt API

  • Ring API

In addition to above drivers the UDMA package also includes many sample examples which show how to use the drivers in different ways. Many of these sample examples use a common set of APIs which a user may find useful to refer to for use in their final application.

API reference for application:

#include <ti/drv/udma/udma.h>

5.14.3. Application

5.14.3.1. Examples