全志SDK資料,全志H3_dma介面使用說明書

SZX511發表於2019-05-28

2. Dmaengine 框架

2.1.基本概述 

 Dmaengine 是 linux 核心 dma 驅動框架,針對 DMA 驅動的混亂局面核心社群提出了一個全新的框架驅動,目標在統一 dma API 讓各個模組使用 DMA 時不用關心硬體細節,同時程式碼複用提高。並且實現非同步的資料傳輸,降低機器負載。


2.1.1.術語約定

DMA: Direct Memory Access(直接記憶體存取)

Channel: DMA 通道

Slave: 從通道,一般指裝置通道

Master: 主通道,一般指記憶體


2.1.2.功能簡介

 Dmaengine 向使用者提供統一的介面,不同的模式下使用不同的 DMA 介面,省去使用過多的關注硬體介面。


2.2.基本結構


2.3.模式 

2.3.1. 記憶體複製 

純粹地記憶體複製,即從指定的源地址複製到指定的目的地址。傳輸完畢會發生一箇中斷,並呼叫回函式。


2.3.2. 雜湊表 

雜湊模式是把不連續的記憶體塊直接傳輸到指定的目的地址。當傳輸完畢會發生一箇中斷,並呼叫回撥函式。

上述的雜湊複製操作是針對於 Slave 裝置而言的,它支援的是 Slave 與 Master 之間的複製,還有另一雜湊複製是專門對記憶體進行操作的,即 Master 與 Master 之間進行操作,具體形式圖如下:


2.3.3. 迴圈快取 

迴圈模式就是把一塊 Ring buffer 切成若干片,週而復始的傳輸,每傳完一個片會發生一箇中斷,同時呼叫回撥函式。


3. 介面介紹

3.1.通道相關

struct dma_chan *dma_request_channel(dma_cap_mask_t *mask,

 dma_filter_fn fn, void *fn_param);


功能:申請一個可用通道

引數:mask 所有申請的傳輸型別的掩碼。

fn DMA 驅動私有的過濾函式。

fn_param 傳入的私有引數。

返回:返回一個通道資料指標。


void dma_release_channel(struct dma_chan *chan)


功能:釋放一個通道

引數:所需要釋放的通道指標


3.2.配置相關


int dmaengine_slave_config(struct dma_chan *chan, struct dma_slave_config *config)


功能:配置一個從通道傳輸

引數:chan 通道結構指標

 config 配置資料指標

返回:非零表示失敗,零表示成功


struct dma_slave_config {

enum dma_transfer_direction direction;

dma_addr_t src_addr;

dma_addr_t dst_addr;

enum dma_slave_buswidth src_addr_width;

enum dma_slave_buswidth dst_addr_width;

u32 src_maxburst;

u32 dst_maxburst;

bool device_fc;

unsigned int slave_id;

}


direction: 傳輸方向,取值 MEM_TO_DEV DEV_TO_MEM MEM_TO_MEM DEV_TO_DEV

src_addr: 源地址,必須是實體地址;

dst_addr: 目的地址,必須是實體地址;

src_addr_width: 源資料寬度,byte 整數倍,取值 1,2,4,8;

dst_addr_width: 目的資料寬度,取值同上;

src_max_burst: 源突發長度,取值 1,4,8;

dst_max_burst: 目的突發長度,取值同上;


slave_id: 從通道 id 號,此處用作 DRQ 的設定,使用 sunxi_slave_id(d, s)宏設定,具體取值參照

include/linux/sunxi-dma.h 裡使用;


3.3.傳輸相關


struct dma_async_tx_descriptor *dmaengine_prep_slave_single(struct dma_chan *chan, 

 dma_addr_t buf, size_t len, enum dma_transfer_direction dir, 

 unsigned long flags)


功能:準備一次單包傳輸

引數:chan 通道指標;

 buf 需要傳輸地址;

 dir 傳輸方向,此處為 DMA_MEM_TO_DEV,DMA_DEV_TO_MEM

 flags 傳輸標誌;

返回:返回一個傳輸描述符指標。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31529038/viewspace-2645924/,如需轉載,請註明出處,否則將追究法律責任。

相關文章