![]() |
RT-Thread RTOS
An open source embedded real-time operating system
|
#include <dma.h>
Data Fields | |
| struct rt_dma_chan *(* | request_chan )(struct rt_dma_controller *ctrl, struct rt_device *slave, void *fw_data) |
| rt_err_t(* | release_chan )(struct rt_dma_chan *chan) |
| rt_err_t(* | start )(struct rt_dma_chan *chan) |
| rt_err_t(* | pause )(struct rt_dma_chan *chan) |
| rt_err_t(* | stop )(struct rt_dma_chan *chan) |
| rt_err_t(* | config )(struct rt_dma_chan *chan, struct rt_dma_slave_config *conf) |
| rt_err_t(* | prep_memcpy )(struct rt_dma_chan *chan, rt_ubase_t dma_addr_src, rt_ubase_t dma_addr_dst, rt_size_t len) |
| rt_err_t(* | prep_cyclic )(struct rt_dma_chan *chan, rt_ubase_t dma_buf_addr, rt_size_t buf_len, rt_size_t period_len, enum rt_dma_transfer_direction dir) |
| rt_err_t(* | prep_single )(struct rt_dma_chan *chan, rt_ubase_t dma_buf_addr, rt_size_t buf_len, enum rt_dma_transfer_direction dir) |
DMA controller operations vtable.
Each DMA controller driver provides implementations of these operations. start, stop, and config are mandatory; the rest are optional.
| struct rt_dma_chan*(* rt_dma_controller_ops::request_chan) (struct rt_dma_controller *ctrl, struct rt_device *slave, void *fw_data) |
Request a DMA channel (optional)
| [in] | ctrl | DMA controller |
| [in] | slave | Device requesting the channel |
| [in] | fw_data | Device tree cell args (NULL for mem-to-mem) |
| rt_err_t(* rt_dma_controller_ops::release_chan) (struct rt_dma_chan *chan) |
Release a DMA channel (optional)
| [in] | chan | Channel to release |
| rt_err_t(* rt_dma_controller_ops::start) (struct rt_dma_chan *chan) |
Start a prepared transfer (mandatory)
| [in] | chan | Channel with a successfully prepared transfer |
| rt_err_t(* rt_dma_controller_ops::pause) (struct rt_dma_chan *chan) |
Pause a running transfer (optional)
If not implemented, the framework falls back to stop().
| [in] | chan | Channel to pause |
| rt_err_t(* rt_dma_controller_ops::stop) (struct rt_dma_chan *chan) |
Stop a running transfer (mandatory)
| [in] | chan | Channel to stop |
| rt_err_t(* rt_dma_controller_ops::config) (struct rt_dma_chan *chan, struct rt_dma_slave_config *conf) |
Configure a DMA channel (mandatory)
| [in] | chan | Channel to configure |
| [in] | conf | Slave configuration |
| rt_err_t(* rt_dma_controller_ops::prep_memcpy) (struct rt_dma_chan *chan, rt_ubase_t dma_addr_src, rt_ubase_t dma_addr_dst, rt_size_t len) |
Prepare a memory-to-memory transfer (optional)
| [in] | chan | DMA channel |
| [in] | dma_addr_src | Source physical address |
| [in] | dma_addr_dst | Destination physical address |
| [in] | len | Transfer length in bytes |
| rt_err_t(* rt_dma_controller_ops::prep_cyclic) (struct rt_dma_chan *chan, rt_ubase_t dma_buf_addr, rt_size_t buf_len, rt_size_t period_len, enum rt_dma_transfer_direction dir) |
Prepare a cyclic (repeating) transfer (optional)
| [in] | chan | DMA channel |
| [in] | dma_buf_addr | Buffer physical address |
| [in] | buf_len | Total buffer length in bytes |
| [in] | period_len | Bytes per period (callback interval) |
| [in] | dir | Transfer direction |
| rt_err_t(* rt_dma_controller_ops::prep_single) (struct rt_dma_chan *chan, rt_ubase_t dma_buf_addr, rt_size_t buf_len, enum rt_dma_transfer_direction dir) |
Prepare a single (one-shot) transfer (optional)
| [in] | chan | DMA channel |
| [in] | dma_buf_addr | Buffer physical address |
| [in] | buf_len | Transfer length in bytes |
| [in] | dir | Transfer direction |