《電子技術應用》
您所在的位置:首頁 > 模擬設計 > 業界動態 > ADSP2106x中DMA的應用

ADSP2106x中DMA的應用

2009-02-19
作者:禹衛東 吳淑梅

  摘 要: 直接內存存取(DMA)是DSP芯片中用于快速數據交換的重要技術,對AD公司的浮點系列芯片ADSP2106x中的DMA的應用進行了詳細介紹,并給出實際應用中的一些例子。
  關鍵詞: DMA 浮點系列芯片ADSP2106x


1 DMA概述
  直接內存存取(DMA)對計算機系統是非常重要的。它可以使CPU在運行指令的同時,系統能實現從外部存儲器或設備中存取數據,也可以在CPU不參與的情況下,由專用的DMA設備存取數據。
  對于浮點DSP芯片來講,DMA的作用更是重要。眾所周知,DSP芯片主要是面向實時的信號處理,其核心的運算部件具有很高的運算速度,常以MFLOPS(每秒百萬次浮點運算)來衡量。ADSP2106x為120MFLOPS,但該速度是以存儲在芯片內部存儲器中的程序和數據為前提的。在DSP內部往往采用多總線的哈佛結構,數據總線和程序總線相互獨立,即指令的存取和數據的存取并行不悖;另外在ADSP2106x內部還有各種接口總線,用以提高數據的流通能力。但在芯片的外部,所有的總線都合并在一起了。因此為了發揮DSP核心運算單元的高速運算能力,首先必須把程序和數據傳輸到芯片的內存中,這通常需要DMA操作來實現。
  另一方面,DSP系統總要與各種外部信號打交道,它從外部輸入數字信號,經過各種算法的處理后,再輸出給其他設備。不僅如此,對于浮點DSP系統,數據的輸入和輸出常常是連續不斷的。試想,如果用DSP的核心部件來完成數據的輸入和輸出,它高速的運算能力又如何發揮得出來呢?所以,浮點系列的DSP芯片大都把DMA控制部分直接集成到了芯片上,用DMA來完成數據的輸入和輸出。
  高效的DSP系統通常采用圖1所示的結構。在內存中開辟出四塊緩存區,兩個作為輸入緩存,兩個作為輸出緩存,用來實現輸入、輸出的乒乓切換。核心處理單元直接從輸入緩存中取數運算,然后把運算結果寫入輸出緩存;而數據從外部接口的輸入和輸出則完全由DMA來實現,不需核心處理單元的參與。只要核心處理單元的運算速度和DMA的數據率滿足要求,圖1所示的結構就可以完成連續的數據流輸入和輸出。當然,從外部看,數據的輸入和輸出是連續的,但在芯片內部卻是分段處理的。分段處理雖然帶來一些誤差,但只要緩存的數據足夠長,就可以使誤差降到允許的范圍。因為間隔越長,前后數據間的相關性越小,相互間的影響就越小,故分段處理是可行的。由于分段處理,也給DSP芯片的結構帶來了一個重要影響,那就是盡可能地增加其內部存儲器的容量。對于ADSP21060,其內部的SRAM容量達4Mbit,可以滿足大多數分段處理的需要。
  下面首先對ADSP2106x中的DMA做概要介紹,然后對幾種典型的DMA操作進行詳細分析。


2 ADSP2106x中的DMA
  ADSP2106x中的片內DMA控制器可以同時控制10個通道的DMA,完成下列類型的數據傳輸操作:
  ·內存<=>外存或外部存儲器映射設備
  ·內存<=>其他ADSP2106x的內存
  ·內存<=>主機接口
  ·內存<=>串行口
  ·內存<=>Link口
  ·內存<=>外部設備
  ·外存<=>外部設備
  豐富的數據流向可以使ADSP2106x實現對各種外設的接口;另外,由于ADSP2106x的內存是雙口SRAM,因此在進行上述DMA操作的同時,核心處理單元仍可以讀寫內存,使DMA操作與內部運算處理達到高度的并行性。當然,應盡量避免二者同時對同一內存地址進行讀寫。
  每個DMA通道都有一個(或兩個)用FIFO實現的數據緩存器,最大的緩沖深度為6級,用以提高DMA數據傳輸率。所有的DMA數據傳輸都是通過這10個數據緩存器來完成的,這些緩存器如表1所示。其中通道1、3、6、7都是兩個緩存器共用一個DMA通道。所有數據緩存器作為I/O寄存器被映射到內存的前256個地址中。


  DMA的編程是通過內部核心處理單元或外部主機對片內有關的I/O寄存器設置來實現的,這些I/O口寄存器也被映射到內存的前256個地址上。與DMA操作有關的I/O寄存器除了前面的數據緩存器外,主要還包括:
  ·DMA控制寄存器:DMAC6~9,LCTL,STCTL0~1,SRCTL0~1。
  ·地址-計數寄存器:II0~9,IM0~9,C0~9,EI6~9,EM6~9,EC6~9。
  ·鏈式操作指針寄存器:CP0~9。
  ·二維操作寄存器(也可作DMA通用寄存器):GP0~9,DA0~5,DB0~5。
  ·DMA狀態寄存器:DMASTAT。
  DMA設置傳輸過程一般如下:
  (1)設置對應通道的地址-計數寄存器。
  (2)設置對應通道的DMA控制寄存器,并將其中的DMA使能位設為有效。
  (3)開始DMA數據傳輸。
  (4)DMA傳輸結束后,產生對應的中斷,程序對中斷進行處理。
3 幾種常用的DMA操作
  在基于ADSP2106x的DSP系統的開發過程中,最常用到以下幾種DMA操作:內存與外存、內存與主機、內存與外設、內存與Link口間的數據交換。
3.1 內存與外存間的DMA
  內存與外存間的DMA傳輸可用DMA通道6~9這四個通道中的任一個。這里用一個例子來說明,假如要把內存地址0x26000~0x263ff中的1024個數用DMA通道6傳送到外存0x400000~4003ff中,可用下面的編程來實現:
  /* 設置內存地址-計數寄存器*/
  R0=0x26000;
  DM(II6)=R0; /*設置內存起始地址*/
  R0=1;
  DM(IM6)=R0; /*設置內存地址增加值*/
  R0=1024;
  DM(C6)=R0; /*設置內存讀數次數*/
  /*設置外存地址-計數寄存器*/
  R0=0x400000;
  DM(EI6)=R0; /*設置外存起始地址*/
  R0=1;
  DM(EM6)=R0; /*設置外存地址增加值 */
  R0=1024;
  DM(EC6)=R0; /*設置外存寫數次數*/
  R0=0x0205;
  DM(DMAC6)=R0;/*設置DMA控制寄存器DMAC6 */
  /*設置為Master和從內存讀數方式,并使能DMA */
  /*DMA通道6開啟DMA傳數操作*/
  這里需要說明兩點:(1)I/O寄存器不能用立即數來直接賦值,而要通過通用寄存器R0~15或USTAT0~1來賦值;(2)在ADSP2106x中,由于數據的寬度有8、16、32和48幾種方式,通過DMA傳輸時,內存和外部接口上的寬度可以不同,因此對應的讀寫次數可能不同,故內部計數器和外部計數器要分別設置。
  對于外部存儲器映射設備,其接口地址是固定的,此時內存與該外設間DMA的編程更加簡單。比如某外設的地址設在0x400000,要把內存0x26000~0x263ff中的1024個數用DMA通道6傳送到該外設接口上,只需把上面程序中的EM6設為0即可。
3.2 內存與主機間的DMA
  在ADSP2106x芯片上包含了一個主機(host)接口,可以使其方便地與通用16位或32位計算機相連接,此時,通用計算機就作為ADSP2106x的主機,它可對ADSP2106x的片內存儲器進行訪問。通常情況下,為了減少主機對ADSP2106x尋址的地址線根數,以降低硬件復雜性,主機往往只對ADSP2106x的I/O寄存器(有256個)尋址,尋址的地址線只需8根[1]。BittWare公司的ADSP2106xEZ-LAB開發板即采用了此種方式。在這種情況下,主機與ADSP2106x內存間的數據交換大多是通過DMA完成的。下面通過運行在微機上的一段C語言程序來說明,此時EZ-LAB板插入微機的ISA總線插槽上,微機作為ADSP2106x的主機,ADSP2106x的I/O寄存器可由微機通過ISA總線上的I/O口來訪問。該程序把數據d[1024]通過DMA通道6加載到ADSP2106x內存0x26000~0x263ff中。具體程序如下:
  #include″conio.h″
  #include ″def21060.h″ /*ADSP I/O寄存器地址定義文件*/
  #include ″stdio.h″
  #define ADDR 0x402 /*定義ADSP地址線對應的ISA總線I/O口地址*/
  #define DATA 0x404 /*定義ADSP數據線對應的ISA總線I/O口地址*/
  main()
  { int n,d[1024];
  /*設置ADSP中DMA通道6的地址-計數寄存器及控制寄存器*/
  outpw(ADDR,II6); /*尋址起始地址寄存器II6*/
  outpw(DATA,0x6000);/*設置II6的低16位*/
  outpw(DATA,0x2); /*設置II6的高16位*/
  outpw(ADDR,IM6); /*尋址地址增加寄存器IM6*/
  outpw(DATA,1); /*設置IM6的低16位*/
  outpw(DATA,0); /*設置IM6的高16位*/
  outpw(ADDR,C6); /*尋址計數寄存器C6*/
  outpw(DATA,1024); /*設置C6的低16位*/
  outpw(DATA,0); /*設置C6的高16位*/
  outpw(ADDR,DMAC6); /*尋址DMA控制寄存器DMAC6 */
  outpw(DATA,0x41);/*設置DMAC6的低16位*/
  outpw(DATA,0); /*設置DMAC6的高16位*/
  /*ADSP的DMA通道6設為16/32位模式,并開啟就緒,等待微機傳數*/
  /*微機向DMA通道6的數據緩存器EPB0中連續寫入數據d[.]*/
  outpw(ADDR,EPB0); /*尋址DAM通道6的數 據緩存器EPB0*/
  for(n=0;n<1024;n++)
  { outpw(DATA,d[n]); /*寫數據d[n]*/
  outpw(DATA,0); /*高16位寫0*/
  }
  }
  對以上程序需要說明的有兩點:(1)ADSP2106x的地址線和數據線是通過ISA總線上兩個I/O口地址(ADDR和DATA)來訪問的;(2)ISA總線為16位,而ADSP2106x的I/O寄存器和內存的數據都為32位,因此微機要用高、低16位分別傳輸,同時把DMA6設置為16/32位模式。關于EZ-LAB的詳細情況可參見文獻[1]。
3.3 內存與外設間的DMA
  對于某些外部設備,其輸入或輸出是與某個外部時鐘同步的,而與ADSP2106x的讀寫時鐘不相干。當這樣的設備與ADSP2106x接口時,通常的做法是在接口端加FIFO或雙口RAM,把ADSP2106x的讀寫與該外設的輸入或輸出時鐘隔離開來。但ADSP2106x芯片本身提供了更靈活、更高效的方式,即DMA通道7和8的握手DMA方式(Handshake),可以完全省去FIFO或RAM,其典型應用電路如圖2所示。


  圖中以8位數據線寬度為例,以DMA通道7為輸出,對應的握手信號為DMAR1和DMAG1;以DMA通道8為輸入,對應的握手信號為DMAR2和DMAG2。整個電路只用到了最常用的74273和74374芯片,外設的讀寫時鐘最高可達40MHz。在這種握手DMA方式中,外設不占用ADSP2106x的外部地址總線。關于上面電路的詳細情況,在此不再贅述。
  下面給出設置握手DMA的對應程序。這里假設要從外設2中輸入1024個數據到內存0x26000~0x264ff中,則需對DMA通道8進行如下編程:
  /*設置內存地址-計數寄存器*/
  R0=0x26000;
  DM(II8)=R0; /*設置內存起始地址*/
  R0=1;
  DM(IM8)=R0; /*設置內存地址增加值*/
  R0=1024;
  DM(C8)=R0; /*設置內存寫數次數*/
  /*設置外存計數寄存器*/
  R0=1;
  DM(EM8)=R0; /*設置外存地址增加值*/
  R0=1024;
  DM(EC8)=R0; /*設置外存輸入次數*/
  R0=0x401;
  DM(DMAC8)=R0; /*設置DMA控制寄存器 DMAC8*/
  /*設置為Handshake和向內存寫數方式,并使能DMA*/
  /*DMA通道8開啟,等待外設的輸入時鐘,每接 收到一個時鐘,輸入一次*/
  對上面程序需要說明的是:雖然電路中沒有用到外存地址,但外存計數寄存器EM7和EC7也必須設置。
  如果要向外設1中輸入數據,則需要對DMA7進行類似的編程。
3.4 內存與Link口間的DMA
  ADSP2106x具有很強的并行工作能力,不需加任何外部仲裁電路,6片ADSP2106x和一個主機就可以很方便連在一起并行工作。它們之間的數據交換既可以通過共享的外部數據、地址總線來實現,也可采用點對點的Link口來完成。6個Link口是ADSP2106x芯片所獨有的高速數據接口;每個Link口包含4根數據線、一個時鐘線和一個應答信號線,最高的數據傳輸率為40Mbyte/s。
  用Link口進行片間數據交換,通常情況下都要采用DMA方式,這樣才能將其優點充分發揮。在使用DMA方式進行Link口通訊時,除了要進行地址-計數寄存器的設置外,還要進行傳輸速率選擇寄存器(LCOM)和緩存-口配對寄存器(LAR)的設置;最后設置DMA控制寄存器LCTL,并開啟DMA操作。
  假設有兩片ADSP2106x,它們相互間用Link5口相連;我們要把第一片內存0x26000~0x263ff中的1024個數用Link5口傳輸到第二片的內存0x23000~0x23fff處,則兩片ADSP2106x的DMA編程設置如下:
  /*第一片*/
  r0=0x3f000;
  dm(LCOM)=r0; /*把Link口設為2x clock */
  r0=0xfff7f;
  dm(LAR)=r0; /*link port5--> link buffer2, 對應DMA通道4*/
  r0=0x26000;
  dm(II4)=r0; /*設置起始地址*/
  r0=1024;
  dm(C4)=r0; /*設置讀數次數*/
  r0=1;
  dm(IM4)=r0; /*設置地址增加值*/
  r0=0xb00;
  dm(LCTL)=r0; /*enable output DMA */
  /*第二片*/
  r0=0x3f000;
  dm(LCOM)=r0; /*把Link口設為2x clock*/
  r0=0xfff7f;
  dm(LAR)=r0; /*link port5-->link buffer 2,對應DMA通道4*/
  r0=0x23000;
  dm(II4)=r0; /*設置起始地址*/
  r0=1024;
  dm(C4)=r0; /*設置讀數次數*/
  r0=1;
  dm(IM4)=r0; /*設置地址增加值*/
  r0=0x300;
  dm(LCTL)=r0; /* enable input DMA*/
  對于上面的兩段程序,應分別加載到兩片ADSP2106x中。需要說明的是:Link Buffer 2對應DMA通道4。如果把其他的Link Buffer與Link口5配對,則需設置與該Buffer對應的DMA通道。
  ADSP2106x中DMA操作功能強大,形式多樣,除了本文所介紹的部分外,還有鏈式DMA、二維DMA等,因此要全部掌握并熟練應用是有一定難度的。通過對各種DMA的應用,可以使數據進出芯片變得更加流暢,也可以使其核心處理單元的運算能力發揮到極致。
參考文獻
1 吳淑梅,禹衛東.ADSP2106x信號處理板的開發設計. 青年學術交流會論文集,中科院電子所,1998.12

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
99国产精品久久久久久久成人热| 久久嫩草精品久久久久| 性伦欧美刺激片在线观看| 日韩亚洲欧美在线观看| 亚洲激情校园春色| 精品福利电影| 永久域名在线精品| 伊人久久久大香线蕉综合直播| 国产专区综合网| 狠狠操狠狠色综合网| 国产真实乱子伦精品视频| 国产欧美日韩综合一区在线观看| 国产精品久久久久久久免费软件 | 亚洲在线电影| 午夜精品久久久| 性做久久久久久| 欧美综合国产| 91久久视频| 日韩一区二区免费看| aa级大片欧美| 亚洲一区二区三区高清不卡| 亚洲午夜小视频| 午夜亚洲一区| 久久精品一区二区三区不卡牛牛 | 久久久五月天| 乱码第一页成人| 欧美电影在线观看完整版| 欧美激情综合网| 欧美日韩日韩| 国产精品午夜久久| 国产亚洲精品自拍| 亚洲国产另类精品专区| 亚洲另类在线一区| 亚洲男人的天堂在线aⅴ视频| 欧美一区二区日韩| 亚洲国产一区二区视频| 一本色道久久加勒比精品| 亚洲专区免费| 久久精品一区二区三区不卡牛牛| 美女网站久久| 欧美午夜精品电影| 国产亚洲欧美日韩一区二区| 亚洲第一精品影视| 中文av一区特黄| 久久精品国产在热久久| 亚洲美女视频在线免费观看| 亚洲小说区图片区| 久久久久久久久岛国免费| 欧美国产日韩精品免费观看| 国产精品电影网站| 国模套图日韩精品一区二区| 91久久精品日日躁夜夜躁欧美 | 国产精品www色诱视频| 国产一区二区三区在线播放免费观看| 亚洲成人在线网站| 一区二区三区精品| 一区二区三区.www| 欧美一区国产二区| 欧美va亚洲va日韩∨a综合色| 欧美日韩中文字幕在线| 国产日产欧产精品推荐色| **性色生活片久久毛片| 亚洲视频狠狠| 亚洲国产一区二区三区青草影视| 亚洲一区成人| 免费欧美日韩| 国产女精品视频网站免费| 亚洲国产你懂的| 亚洲永久免费视频| 日韩亚洲国产欧美| 久久久久国产一区二区三区四区 | 国产精品电影观看| 一区在线免费观看| 亚洲一二三区在线观看| 亚洲啪啪91| 久久精品国产99| 欧美先锋影音| 亚洲国产一区二区三区高清 | 久久精品国产在热久久 | 欧美视频一区二区| 在线高清一区| 亚洲欧美一区二区视频| 日韩午夜黄色| 久久综合一区二区| 国产欧美精品日韩精品| 艳妇臀荡乳欲伦亚洲一区| 亚洲国产精品久久人人爱蜜臀 | 久久久777| 国产精品久久91| 亚洲经典在线看| 亚洲国产日韩欧美综合久久| 久久gogo国模啪啪人体图| 欧美午夜女人视频在线| 亚洲三级毛片| 亚洲国产日韩欧美在线动漫| 久久精品国产2020观看福利| 国产精品萝li| 9久草视频在线视频精品| 亚洲精品少妇30p| 老司机精品导航| 国内伊人久久久久久网站视频| 亚洲欧美另类国产| 亚洲欧美激情一区二区| 欧美视频官网| 99re热这里只有精品免费视频| 91久久久一线二线三线品牌| 久久婷婷激情| 国外成人免费视频| 久久超碰97人人做人人爱| 久久精品视频免费播放| 国产精品永久免费在线| 亚洲影院色在线观看免费| 亚洲欧美日韩成人| 国产精品视频免费在线观看| 一区二区免费看| 亚洲影视中文字幕| 欧美色欧美亚洲另类七区| 日韩视频在线观看| 亚洲视频1区2区| 国产精品video| 一区二区三区免费看| 亚洲午夜精品久久| 欧美视频精品一区| 亚洲无线视频| 午夜一区在线| 国产日韩精品一区二区| 香蕉久久国产| 久久综合导航| 亚洲电影在线免费观看| 日韩视频中文| 欧美天堂亚洲电影院在线观看| 日韩亚洲视频| 午夜久久久久| 国产午夜精品全部视频播放| 久久成人18免费观看| 免费成人毛片| 亚洲精品久久久久| 亚洲一区二区三区久久| 国产精品免费在线| 久久国产高清| 欧美福利一区| 亚洲视频axxx| 久久久精彩视频| 亚洲高清视频在线| 亚洲午夜精品久久久久久app| 国产精品福利影院| 欧美一区二区精品在线| 免费欧美视频| 一本久久a久久精品亚洲| 欧美在线不卡| 亚洲福利专区| 亚洲午夜免费视频| 国产亚洲a∨片在线观看| 亚洲国产精品第一区二区三区| 欧美精品日韩三级| 亚洲一区高清| 六月丁香综合| 中文国产一区| 久久一区中文字幕| 亚洲欧洲精品一区二区| 亚洲女性喷水在线观看一区| 国产一区二区三区日韩欧美| 亚洲乱码久久| 国产欧美高清| 亚洲三级免费| 国产精品视频一区二区三区| 久久精品视频免费观看| 欧美人在线观看| 亚洲欧美日韩精品一区二区| 另类酷文…触手系列精品集v1小说| 亚洲乱码国产乱码精品精可以看 | 欧美在线不卡视频| 欧美日韩国产一中文字不卡| 小黄鸭精品aⅴ导航网站入口| 噜噜噜噜噜久久久久久91| 一区二区不卡在线视频 午夜欧美不卡在 | 午夜精品在线| 亚洲级视频在线观看免费1级| 亚洲欧美视频一区二区三区| 在线观看欧美日韩| 亚洲欧美日韩一区在线观看| 在线免费日韩片| 性久久久久久久久| 最新69国产成人精品视频免费| 性亚洲最疯狂xxxx高清| 亚洲欧洲日夜超级视频| 久久不射电影网| 亚洲美女av在线播放| 久久久久国产一区二区三区四区| 亚洲美女色禁图| 美女视频黄 久久| 午夜精品久久久久久久久久久久久| 欧美成人午夜激情| 欧美在线高清| 国产精品欧美日韩一区| 亚洲国产三级在线| 国产情侣久久| 亚洲综合第一| 日韩亚洲国产精品| 欧美成人亚洲|