The UDMA driver provides API to program the DMA module of the DMSS subsystem to setup and initiate DMA transfers.
Features Supported
Supports both BCDMA and Packet DMA instances
Supports all DMA operations from both instances from all the cores in the SOC except M4F core
UDMA block copy for memory to memory transfer
PDMA module to initiate transfers to/from PDMA peripherals like UART, McASP, McSPI, ADC, MCAN
DMA transfer to/from from native PSIL peripherals like CPSW, SA2UL
Event and interrupt management like DMA completion, channel chaining, interrupt sharing using Interrupt Aggregator (IA)
Resources management across instances and cores for DMA channels, RX flow, Interrupt Aggregator (IA), Interrupt Routers (IR), Global events, Ring Accelerator (RA)
Interaction with DMSC RM module via SCICLIENT for all non-RealTime (NRT) configuration
SysConfig Features
Note
It is strongly recommend to use SysConfig where it is available instead of using direct SW API calls. This will help simplify the SW application and also catch common mistakes early in the development cycle.
Selection of UDMA instances - BCDMA, PKTDMA
Option to skip default global event registration done as part of Udma_init API
Option to provide user function for virtual to physical and physical to virtual address translation
Ability of add and configure BCDMA block copy channels
Ability to enable interrupt mode for the channel
Ability to specify the number of ring entries for the channel
Based on above parameters, the SysConfig generated code does below as part of Drivers_open and Drivers_close functions
Channel open/close - the handle can be retrieved by the application using g<User_Config_Name>BlkCopyChHandle global variable
Set default channel configuration
Allocates required ring memories and pass them to channel configuration
Register user specified callback when interrupt mode is enabled
Features NOT Supported
UDMA driver is not supported for M4F core as the DMSS is present only in the main domain
Important Usage Guidelines
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