日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

嵌入式:ARM的DMA设计

發布時間:2024/1/18 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 嵌入式:ARM的DMA设计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

      • 一、DMA工作原理
        • 1. S3C2410結構框圖
        • 2. DMA請求源
        • 3. DMA傳輸過程
        • 4. S3C2410 DMA 的基本時序
        • 5. DMA的服務模式
        • 6. S3C2410 DMA 的兩種控制協議
        • 7. S3C2410 DMA 的三種協議類型
      • 二、S3C2410A的DMA控制器
        • 1. 6個DMA控制寄存器。
        • 2. 3個DMA狀態寄存器
      • 三、DMA編程實例

一、DMA工作原理

所謂DMA方式,即直接存儲器存取(Direct Memory Acess),在DMA控制器的控制下,不通過CPU控制,高速地和I/O設備和存儲器之間交換數據。

S3C2410具有一個4通道DMA控制器。該DMA控制器位于系統總線(AHB)和外設總線(APB)之間。每個DMA通道均能在系統總線和(或)外設總線之間執行一次數據搬移。這樣可以有四種DMA數據搬移:

(1)源設備和目標都在系統總線AHB上

(2)源設備在系統總線AHB,而目標設備位于外圍總線APB

(3)源設備在外圍總線APB,而目標設備位于系統總線AHB

(4)源設備和目標都在外圍總線APB上

DMA請求可以被軟件、片內外設請求或者外部引腳請求來發起。

1. S3C2410結構框圖

2. DMA請求源

4通道DMA

這里nXDREQ0 和nXDREQ1表示兩個外部源, I2SSDO 和I2SSDI表示IIS 的發送和接收。

3. DMA傳輸過程

采用DMA方式進行數據傳輸的具體過程如下:
(1)外設向DMA控制器發出DMA請求;

(2)DMA控制器向CPU發出總線請求信號;

(3)CPU執行完現行的總線周期后,向DMA控制器發出響應請求的回答信號;

(4)CPU將控制總線、地址總線及數據總線讓出,由DMA控制器進行控制;

(5)DMA控制器向外部設備發出DMA請求回答信號;

(6)進行DMA傳送;

(7)數據傳送完畢,DMA控制器通過中斷請求線發出中斷信號。CPU在接收到中斷信號后,轉入中斷處理程序進行后續處理。

(8)中斷處理結束后,CPU返回到被中斷的程序繼續執行。CPU重新獲得總線控制權。

4. S3C2410 DMA 的基本時序

nXDREQ請求生效并經過2CLK周期同步后,nXDACK響應并開始生效,但至少還要經過3CLK的周期延遲,DMA控制器才可獲得總線的控制權,并開始數據傳輸。

5. DMA的服務模式

共有兩種服務模式,一種是單一服務模式(single service),另外一種是整體服務模式(whole service)。

在單一服務模式下,一次請求服務一次,服務完畢后等待DMA 請求再一次來臨才能進行新的服務。這種模式下一次請求傳輸的數據量為:Data Size = Atomic transfer size (字節)

在整體服務模式下,使用DMA 計數器(TC),每傳輸一個原子傳輸該計數器減1,直到DMA計數器的值減為零,才等待下一次DMA請求。Data Size = Atomic transfer size × TC(字節)

Atomic transfer:指的是DMA的單次原子操作,它可以是Unit模式(傳輸1個data size),也可以是burst模式(傳輸4個data size)

單次原子操作期間,總線將被Hold,其它DMA請求不被響應

6. S3C2410 DMA 的兩種控制協議

  • 請求模式:If XnXDREQ remains asserted, the next transfer starts immediately. Otherwise it waits for XnXDREQ to be asserted.
  • 握手模式:If XnXDREQ is deasserted, DMA deasserts XnXDACK in 2cycles. Otherwise it waits until XnXDREQ is deasserted.

7. S3C2410 DMA 的三種協議類型

  • 單一服務請求
  • 單一服務握手
  • 整體服務握手:

二、S3C2410A的DMA控制器

要進行DMA操作,首先要對S3C2410A的相關寄存器進行正確配置。每個DMA通道有9個控制寄存器,因此對于4通道的DMA控制器來說總共有36個寄存器。其中每個DMA通道的9個控制寄存器中有6個用于控制DMA傳輸,另外3個用于監控DMA控制器的狀態。

  • DMA初始源寄存器(DISRC)
  • DMA初始源控制寄存器(DISRCC)
  • DMA初始目標地址寄存器(DIDST)
  • DMA初始目標控制寄存器(DIDSTC)
  • DMA控制寄存器(DCON)
  • DMA屏蔽觸發寄存器(DMASKTRIG)
  • DMA狀態寄存器(DSTAT)
  • DMA當前源寄存器(DCSRC)
  • DMA當前目標寄存器(DCDST)

1. 6個DMA控制寄存器。

2. 3個DMA狀態寄存器

三、DMA編程實例

舉例:使用DMA方式實現從存儲器到串口0進行數據發送。

#define SEND_DATA (*(volatile unsigned char *) 0x30200000) #define SEND_ADDR ((volatile unsigned char *) 0x30200000) //待發送數據的起始地址 void Main(void){volatile unsigned char* p = SEND_ADDR;int i;Target_Init();Delay(1000);SEND_DATA = 0x41; //初始化要發送的數據for (i = 0; i < 128; i++){*p++ = 0x41 + i;} rUCON0 = rUCON0 & 0xff3 | 0x8; //Uart設置成DMA形式rDISRC0 = (U32)(SEND_ADDR); //DMA0 初始化rDISRCC0 = (0<<1)|(0<<0); //源=AHB,傳送后地址增加rDIDST0 = (U32)UTXH0; //發送FIFO緩沖區地址rDIDSTC0 = (1<<1)|(1<<0); //目標=APB,地址固定//設置DMA0控制寄存器:握手模式,與APB同步,使能中斷,單位傳輸,單個模式,目標=UART0,//硬件請求模式,不自動加載,半字,計數器初值=50rDCON0=(0<<31)|(0<<30)|(1<<29)|(0<<28)|(0<<27)|(1<<24)|(1<<23)|(1<<22)|(0<<20)|(50);rDMASKTRIG0 = (1<<1); //打開DMA通道0while(1); }

總結

以上是生活随笔為你收集整理的嵌入式:ARM的DMA设计的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。