浮點系列芯片ADSP2116中DMA的應(yīng)用

來源:IC解密中的DMA
2.1   ADSP2116中DMA的數(shù)據(jù)傳輸類型
ADSP2116中的DMA包含14條獨立通道,可完成下列類型的數(shù)據(jù)傳輸操作:
●片內(nèi)存儲器與片外存儲器或片外設(shè)備之間的傳輸操作;
●片內(nèi)存儲器與其它ADSP2116的片內(nèi)存儲器之間的傳輸操作;
●片內(nèi)存儲器與主處理器之間的傳輸操作;
●片內(nèi)存儲器與串行口之間的傳輸操作;
●片內(nèi)存儲器與Link口之間的傳輸操作;
●片內(nèi)存儲器與SPI口之間的傳輸操作;
●片外存儲器與片外設(shè)備之間的傳輸操作。
2.2 ADSP2116 中與DMA有關(guān)的寄存器
   DMA的編程實際上是通過內(nèi)部核心處理單元或外部主機對片內(nèi)有關(guān)的I/O寄存器設(shè)置來完成的,與DMA有關(guān)的I/O寄存器如表1所列。控制寄存器主要用來設(shè)置數(shù)據(jù)傳輸?shù)姆较颉?shù)據(jù)格式、是否鏈式等操作;參數(shù)寄存器用來設(shè)置數(shù)據(jù)傳輸?shù)牡刂贰?shù)目等信息;數(shù)據(jù)緩存器則主要用來緩存?zhèn)鬏數(shù)臄?shù)據(jù),以提高數(shù)據(jù)的傳輸率。這些I/O寄存器都被映射到片內(nèi)存儲器的前256個地址上。
2.3 ADSP2116中DMA一般傳輸過程的設(shè)置
DMA一般傳輸過程的設(shè)置步驟如下:
(1)設(shè)置對應(yīng)通道的參數(shù)寄存器
(2)設(shè)置對應(yīng)通道的DMA控制寄存器,并將其中的DMA使能位設(shè)為有效
(3)開始DMA數(shù)據(jù)傳輸
(4)DMA傳輸結(jié)束后,產(chǎn)生對應(yīng)的中斷,并通過程序?qū)χ袛噙M行處理。
2.4 ADSP2116x中的鏈式DMA
   為了減少由DMA引起的中斷,ADSP2116x中的DMA控制器提供了鏈式DMA功能。所謂鏈式DMA,是指在當前的DMA結(jié)束時,I/O處理器能夠自動加載DMA參數(shù)并開始下一個DMA傳輸。利用這種特性,程序能夠設(shè)置多個具有不同屬性的DMA傳輸。在鏈式DMA過程中,通常先把每次DMA傳輸?shù)挠嘘P(guān)參數(shù)寫成一個傳輸控制塊(TCB),并把它們存儲在片內(nèi)。傳輸過程中,在當前的DMA結(jié)束時,I/O處理器將對鏈式指針寄存器(CPx)進行控制以使其指向存儲在片內(nèi)的下一個TCB。
   CPx在鏈式DMA中具有非常重要的作用,它是一個19位的寄存器,其中低18位是偏移地址,在ADSP2116x中,這組偏移地址加上0x00040000后才是片內(nèi)存儲器中的實際地址,其中最高一位為中斷控制位。該位在被設(shè)置的情況下,I/O處理器將在鏈式DMA結(jié)束時產(chǎn)生一個中斷,實際上CPx指向的是TCB的最大地址,在TCB中,各有關(guān)DMA參數(shù)寄存器的排列順序如表2所列。表中的“x”代表所用到的DMA通道。鏈式DMA傳輸過程的設(shè)置步驟如下:
(1)在片內(nèi)存儲器中設(shè)置好所有的TCB
(2)設(shè)置對應(yīng)通道的控制寄存器,并將其中的DMA使能位和鏈式使能位設(shè)為有效
(3)將第一個TCB的最大地址寫到CPx中,并開始鏈式DMA的傳輸
(4)傳輸結(jié)束后,產(chǎn)生對應(yīng)的中斷。
有兩點要特別注意:第一是鏈式DMA只能發(fā)生在同一DMA通道內(nèi);二是SPI口不支持鏈式DMA。