DMA學習筆記(一)

    DMA是DSP內的一個硬件模塊,它獨立於CPU在外圍設備和內存之間進行數據傳輸,解放了CPU。每個型號的DSP有多個個DMA,每個DMA有一定數量的Channel。每個Channel兩端分別綁定到外圍設備和內存。每個Channel可與哪種外圍設備綁定,這是在設計時固定下來的,要查詢參考手冊得知。

    在ADSP-SC589官方資料中給出了有關於DMA的五個例程,簡單的介紹了在ADI中可以直接調用的一些DMA相關函數。

    例程分別是MemCopyOneShot1D(單步一維傳輸)、MemCopyOneShot2D(單步二維傳輸)、MemCopyArrayMode(塊傳輸)、MemCopyListMode(鏈表傳輸)、MemCopyOneToMany(一到多傳輸)。具體程序的操作流程如下:

    1.在進行數據傳輸前,DSP需要先進行一系列初始化的配置,配置失敗則報錯

  

  2.在配置結束後打開一個DMA內存流,對傳輸的通道進行配置

    SC589中進行DMA傳輸的通道共有22條,其中有四條能作爲內存傳輸

    

  3.對DMA是否開啓回調模式進行配置。

  如果啓用了回調模式,內存dma管理器將使用特定的事件id嚮應用程序發送回調,以報告內存複製的完成情況。

   在非回調模式下,該示例連續向內存dma管理器查詢內存複製狀態,並使用內存dma管理器來標識數據傳輸的結束。存儲器dma流在數據傳輸完成時關閉。

  4.在DMA中所有傳輸都需要進行設置的基本參數有數據源地址、目標端地址和帶傳送數據的個數。

  如果想要將傳輸模式設置爲二維模式要注意對於鏈路只有一個公共的DMA二維設置位,當設置爲二維模式後所有的鏈路都變成了二維模式,如果想要使用一維模式,將外循環次數定爲1即可。

  

    ADI可以直接用來調用的DMA傳輸函數:

    

    其中MemCopyOneShot1D、MemCopyOneShot2D爲單步模式下的一維和二維DMA傳輸。

    單步模式下每次只能對一個單元的數據進行讀或寫操作。

    MemCopyArrayMode爲塊傳輸模式。不同於單步傳輸模式,塊傳輸模式可以更改每次傳輸數據的大小,也可以選擇一維或二維方式下進行傳輸。

    MemCopyListMode爲鏈表傳輸模式。鏈式DMA的優點是能夠讓多個DMA自動進行傳輸,當配置好鏈式DMA的各塊參數後,當第一個DMA傳輸技術後會自動啓動第二個DMA,依次執行直到鏈中所有的DMA執行完畢。鏈式DMA省去了多次配置DMA參數的時間,也使得多個DMA的執行更加的緊湊。

   MemCopyOneToMany(一到多傳輸)爲將數據從內存或單個字符串傳輸到多個位置,其實是基於鏈表傳輸的一種應用。

   5.檢查傳輸是否已經完成

   

  6.檢查傳輸後的數據是否正確,並關閉DMA通道

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