Lines Matching +full:peripheral +full:- +full:to +full:- +full:memory
3 Direct Memory Access (DMA)
9 Direct Memory Access (Controller) is a commonly provided type of co-processor that can typically
10 offload transferring data to and from peripherals and memory.
12 The DMA API is not a portable API and really cannot be as each DMA has unique memory requirements,
13 peripheral interactions, and features. The API in effect provides a union of all useful DMA
15 peripheral devices for vendors where the DMA IP might be very similar but have slight variances.
17 The DMA drivers in general do not handle cache coherency; this is left up to the developer as
27 From an API point of view, a DMA channel is a single-owner object, meaning the drivers should not
28 attempt to wrap a channel with kernel synchronization primitives such as mutexes or semaphores. If
32 This enables the entire API to be low-cost and callable from any call context, including ISRs where
33 it may be very useful to start/stop/suspend/resume/reload a channel transfer.
35 Transfer Descriptor Memory Management
38 Drivers should not attempt to use heap allocations of any kind. If object pools are needed for
40 ISR-allowable calls. Many drivers choose to create a simple static descriptor array per channel with
47 the form of API calls. Every driver is expected to maintain its own channel state tracking. The busy
65 init -> CONFIGURED [label=dma_config];
67 CONFIGURED -> RUNNING [label=dma_start];
68 CONFIGURED -> CONFIGURED [label=dma_stop, headport=c, tailport=e];
69 CONFIGURED -> CONFIGURED [label=dma_config, headport=c, tailport=w];
71 RUNNING -> CONFIGURED [label=dma_stop];
72 RUNNING -> RUNNING [label=dma_start];
73 RUNNING -> RUNNING [label=dma_resume, headport=w];
74 RUNNING -> SUSPENDED [label=dma_suspend];
76 SUSPENDED -> SUSPENDED [label=dma_suspend];
77 SUSPENDED -> RUNNING [label=dma_resume];
78 SUSPENDED -> CONFIGURED [label=dma_stop];