基于PSoC5 UDB的DMA傳輸
PSoC5支持24個(gè)DMA通道和多達(dá)128個(gè)事務(wù)描述符(TDs),DMA主控制器對(duì)通道的請(qǐng)求按照優(yōu)先級(jí)進(jìn)行仲裁,單個(gè)DMA的通道可以傳輸高達(dá)64KB的數(shù)據(jù)。DMA通道如圖3所示:
本文引用地址:http://www.ex-cimer.com/article/131359.htm圖3,DMA通道及TDs
2,設(shè)計(jì)思路
從圖2可以看出,要訪問(wèn)SRAM可以通過(guò)CPU直接訪問(wèn),也可以采用DMA通過(guò)Spoke0來(lái)訪問(wèn)。若有外部的并行數(shù)據(jù)(如8bit并行接口)要連續(xù)不斷的寫進(jìn)SRAM,如圖4所示的應(yīng)用。此時(shí)外部數(shù)據(jù)可以通過(guò)Spoke1的IO Interface進(jìn)入PSoC5,也可通過(guò)Spoke6的UDB Interface接受后存放在UDB中?! ?/p>
圖4,應(yīng)用需求
本文將介紹通過(guò)PSoC5 的UDB 采集數(shù)據(jù)并暫存在datapath的FIFO中, 然后通過(guò)DMA搬運(yùn)到SRAM中的設(shè)計(jì)方案。由于外部數(shù)據(jù)是連續(xù)傳輸進(jìn)PSoC5的,所以在設(shè)計(jì)中采用PING-PONG FIFO以保證連續(xù)數(shù)據(jù)不丟失。如下圖5所示采用兩個(gè)datapath一共4個(gè)FIFO,每個(gè)FIFO是4個(gè)字節(jié)深度,數(shù)據(jù)將根據(jù)每個(gè)FIFO的狀態(tài)依次填入FIFO中,每個(gè)FIFO滿之后將啟動(dòng)DMA將數(shù)據(jù)從FIFO中搬運(yùn)到SRAM中。系統(tǒng)一開始4 FIFO都為空,OV7670 sensor的數(shù)據(jù)首先存放到FIFO0_0中,填滿4字節(jié)數(shù)據(jù)后FIFO0_0的滿標(biāo)志置1表示FIFO0_0已滿,用該FIFO0_0的滿標(biāo)志觸發(fā)DMA0將數(shù)據(jù)搬運(yùn)到SRAM中。同時(shí)OV7670的數(shù)據(jù)將繼續(xù)暫存到FIFO0_1中,依次類推?! ?/p>
圖5, 數(shù)據(jù)流傳輸示意圖
評(píng)論