Linux驅動開發(二)—DMA的使用(一)

1 DMA概念

DMA顧名思義就是指設備和內存之間、內存和外部存儲設備之間進行直接的數據讀寫操作,而不需要CPU的參與。

2 DMA原理

       DMA傳輸需要由DMA控制器DMAC進行,當需要進行DMA傳輸的時候,DMA控制器會發出佔用總線的請求,當CPU響應DMA的請求時,暫時放棄對總線的控制權,當DMA傳輸結束的時候,DMAC會向I/O接口發出結束命令,並將總線控制權交還給CPU。一個完整的DMA傳輸過程必須經過DMA請求、DMA響應、DMA傳輸、DMA結束4個步驟。

3 DMA傳輸過程


4 DMA硬件控制管腳

在Linux驅動開發中,使用DMA可能要操作DMAC(DMA控制器)的幾個管腳介紹如下:

1.數據總線:用於傳輸數據;

2.地址總線:用於選擇存儲器地址;

3.數據傳送信號:MEMR爲存儲器讀操作信號,MEMW爲存儲器寫操作信號,IOR爲外設讀操作信號,IOW爲外設寫操作信號;

4.DRQ:DMA請求信號,外設向DMA控制器提出要求操作DMA操作的申請信號;

5.DACK:DMA應答信號,DMAC響應外設提出的DMA請求操作;

6.HOLD:總線請求信號,DMAC向CPU發出的臨時佔用總線的信號;

7.HLDA:總線響應信號,CPU向DMAC發出的允許臨時讓出總線控制權的信號;

5 驅動開發中DMA使用—代碼編寫框架

1.DMA初始化:DMA通道申請、DMA傳輸方向設置(MEM->MEM、MEM->DEV、DEV->MEM)、DMA數據傳輸設置(每次傳輸一個字節或者多個字節);

2.DMA源地址和目的地址設置:DMA源地址爲內存的物理地址,DMA目的地址爲外設的數據寄存器的物理地址;

3.DMA傳輸開始函數調用;

4.DMA傳輸結束函數調用;

 OK,這個章節就簡單介紹DMA的概念,接下來的章節,將通過實際項目代碼闡述驅動開發中DMA的使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章