雜記:Atmel sama5d3 DMA Controller (DMAC)

DMA Controller (DMAC)
概述:
dma從源讀然後寫到目的地址,通過一個或者多個AMBA buses.
每個源目的對需要一個通道,最簡單配置的dmac有一個主控接口和一個通道
每次dmac傳輸會有兩次AMBA傳輸發生,
dmac通過apb接口配置


3 AHB-Lite 主接口
支持Peripheral-to-Memory, Memory-to-Peripheral, 
Peripheralto-Peripheral and Memory-to-Memory
從源到目的可獨立運行在8 16 32 bit模式
硬件軟件觸發
多緩衝順序操作支持
不同源目的支持自增自減不變尋址模式
仲裁模式Modified Round Robin and Fixed Priority
可配置長度 AMBA AHB Burst
用apb接口配置dmac
8通道 dmac0和dmac1

16請求線 dmac0

22 請求線dmac1

內置fifo

通道鎖和總線鎖

寄存器寫保護



dmac處理外總線和內存的傳輸,

需要配置 SIF and/or DIF bitfields in the DMAC_CTRLBx和DSCR_IF,需要與MATRIX配置相適應


dmac0主要連接外總線和內存 接受apb0的觸發
HSMCI0 Receive/transmit 0
SPI0 Transmit 1
SPI0 Receive 2
USART0 Transmit 3
USART0 Receive 4
USART1 Transmit 5
USART1 Receive 6
TWI0 Transmit 7
TWI0 Receive 8
TWI1 Transmit 9
TWI1 Receive 10
UART0 Transmit 11
UART0 Receive 12
SSC0 Transmit 13
SSC0 Receive 14
SMD Transmit 15
SMD Receive 16


dmac1主要連接外總線和內存 接受apb1的觸發
HSMCI1 Receive/transmit 0
HSMCI2 Receive/transmit 1
ADC Receive 2
SSC1 Transmit 3
SSC1 Receive 4
UART1 Transmit 5
UART1 Receive 6
USART2 Transmit 7
USART2 Receive 8
USART3 Transmit 9
USART3 Receive 10
TWI2 Transmit 11
TWI2 Receive 12
DBGU Transmit 13
DBGU Receive 14
SPI1 Transmit 15
SPI1 Receive 16
SHA Transmit 17
AES Transmit 18
AES Receive 19
TDES Transmit 20
TDES Receive 21


dmac中斷線連接中斷控制器,需要配置


外部源,dmac讀的掛在amba上面的設備,dmac會把讀的數據放在fifo中,發送給目的

外部目的,把fifo中數據發送給的對象

內存,不需要握手的時刻就緒的源或者目的

可編程仲裁策略,Modified Round Robin and Fixed Priority可以在ARB_CFG bit in the Global Configuration Register (DMAC_GCFG)配置

固定優先級與通道號相對,數字越大優先越高

通道由一對源和目的組成,如果源或目的不是內存,則需要握手,握手接口可以編輯

dmac是ahb總線上的控制端,可以讀寫別的從設備

握手,用來請求,回答,控制dmac的傳輸,分爲硬件握手,軟件握手,可控制單一或者分塊傳輸

硬件握手用硬件信號

軟件握手用寄存器


內存傳輸,buffer直接轉成一系列的AMBA bursts and AMBA single transfers.

非內存傳輸,buffer先轉成DMAC transactions (single and chunks)然後是一系列的AMBA bursts and AMBA single transfers.


兩種transaction  非內存

single transfer 長度爲1
chunk transfer 長度可編輯,增量式傳輸,但不超過16beats


damc傳輸,軟件控制buffer的數量,一旦damc傳輸完成,通道會被硬件關閉且產生中斷,然後可以再次被編輯啓用。


Multi-buffer DMAC transfer: 內存
chaining (linked list pointers), 由descriptor pointer (DSCR)指向內存中的linked list item (LLI),LLI用來告訴buffer的地址和下一個DSCR在哪

auto-reloading of channel registers, 自動在每個buffer傳完後充填原來值。

contiguous buffers.下一個buffer的地址


畫中畫模式,每傳輸一定量的數據後,地址會自動的加一個被編輯的增量

通道鎖,在傳輸的時候鎖住控制端

總線鎖,保持一個通道的對amba總線的主要控制權


內存傳輸沒有握手,一旦使能立馬就會開始,如果從設備沒有準備好,會插入等待狀態,最好不要超過16個

如果有握手,從設備會通知dmac,所以不需要等待狀態


軟件握手用寄存器,硬件握手用特定的接口。

軟需要damc時,會產生中斷,在中斷處理函數中寫寄存器來握手,此時從設備是控制端

The SRC_H2SEL/DST_H2SEL bit in the Channel Configuration Register (DMAC_CFGx) 要清除

如果從設備不是控制端,Software Last Transfer Flag Register (DMAC_LAST)沒用,且相關寄存器也被忽視


Software Chunk Transfer Request Register (DMAC_CREQ[2x])寫1,使能源數據塊傳輸請求

DMAC_CREQ[2x+1]寫1,使能目的數據塊請求 ,x爲通道號碼

Software Single Request Register (DMAC_SREQ[2x]))寫1,使能源單獨傳輸請求

DMAC_SREQ[2x+1]寫1,使能目的單獨傳輸請求x爲通道號碼


DMAC_SREQ[x] or DMAC_SREQ[2x+1]會被硬件清除,當完成傳輸

軟件可以輪詢這些寄存器,當寄存器對都爲零,傳輸完成


然後是各種類型源和目的的組合配置方法

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