?? dma.txt
字號:
NIOS II DMA
0
推薦NIOS DMA同樣是Altera SOPC Builder庫組件
DMA可用于存儲器之間、存儲器與外設、外設之間的數據傳輸,允許沒有CPU干預,完成固定長度或者可變長度的數據傳輸
DMA外設通過兩個Avalon主端口(一讀一寫)和一從端口控制。
典型DMA傳遞過程如下:
1。通過寫控制端口設置DMA的數據傳輸方式
2。啟動DMA外設,實施數據傳輸(CPU不干預)
3。DMA讀傳輸主端口從目標地址(內存或者外設)讀取數據,寫端口向目的地址(內存或者外設)寫數據。讀寫之間通過FIFO進行數據緩沖。
4。只指定字節數的數據傳輸完成或者傳輸了一個包結束(EOP)時,DMA將結束傳輸。DMA外設可以在傳輸結束時發出中斷請求。
5。傳輸當中或者結束后,都可以通過查看DMA的狀態寄存器來判斷傳輸在進行還是已經結束
主要寄存器: status 第0位:done
第1位:busy
第2位:reop(讀取當前數據包結束)
第3位:weop(寫當前數據包結束)
第4位:len(完成一次DMA傳輸,len置1)
readaddress(主讀取起始地址),存放的是傳輸數據的源地址,其寬度由用戶在SOPC中自己定義。(與外設匹配)
writeaddress(主寫入起始地址),與上類似
length ,存放讀寫端口之間需要傳輸的字節數,長度寄存器寬度由系統生成時的設置決定,DMA每完成一次寫傳輸,length寄存器值減一,當減為0時,len位使能。其寄存器的值按照字節數計算,雙字傳輸,必須是4的倍數,字的傳輸,當然是2的倍數啦!!
control 寄存器: 位0: byte 字節傳輸
位1: hw 字傳輸
位2: word 雙字傳輸
位3: go DMA 使能
位4: i_en 中斷使能
位5:reen 讀數據包使能
位6:ween寫數據包使能
位7:leen ,置1時,DMA在傳輸完length數目數據的時候結束傳輸(已經知道傳輸數據量),若設置0,則不會停止,使用于數據量不確定的場合。
位8:rcon 從固定地址讀取
位9:wcon 從固定地址寫入
讀數據的地址每次訪問遞增1.2.4個字節,具體是幾取決去傳輸的是字節、字、或者半字,若rcon置1,則地址不遞增。
當done&&i_en == 1時候,dma向外設發出中斷請求,典型的中斷處理程序首先讀取狀態寄存器的len,reop,weop位來判斷中斷原因。然后,寫轉臺寄存器清除中斷,處理后,進行下一次DMA傳輸。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -