<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > EDA/PCB > 設(shè)計(jì)應(yīng)用 > 基于PSoC3的多通訊接口時(shí)的DMA設(shè)計(jì)

          基于PSoC3的多通訊接口時(shí)的DMA設(shè)計(jì)

          作者: 時(shí)間:2011-03-24 來(lái)源:網(wǎng)絡(luò) 收藏

            通過(guò)拖曳到原理圖編輯器可以放置 模塊,每次拖曳的 會(huì)使用一個(gè)通道。 模塊的輸入輸出地址等需要在代碼中進(jìn)行配置,而通過(guò)原理圖配置的都是控制管腳和控制信息。在原理圖上DMA 模塊的表現(xiàn)如下圖7 所示。

          DMA 模塊

          圖7 DMA 模塊

            它的輸入輸出的管腳共有三個(gè)。

            nrq - 輸出管腳。該管教用于表征DMA的傳輸完成,用來(lái)通知中斷控制器產(chǎn)生中斷或者用來(lái)觸發(fā)其他邏輯。當(dāng)完成傳輸之后DMA會(huì)生成一個(gè)2個(gè)總線周期的脈沖。

            drq - 輸入管腳(可選)。該管腳是可選管腳,只有在觸發(fā)條件選擇為硬件的時(shí)候才可見(jiàn)。該管腳可以連接到產(chǎn)生DMA事務(wù)請(qǐng)求的模塊,觸發(fā)條件可以配置成電平觸發(fā)或邊沿觸發(fā)。

            trq - 輸入管腳(可選)。該管腳是可選管腳,只有在結(jié)束條件選為硬件時(shí)才可見(jiàn)。該管腳觸發(fā)之后,DMA會(huì)停止數(shù)據(jù)傳輸。

            在配置完成硬件連接以后,使用配置向?qū)?lái)完成對(duì)DMA的如下參數(shù)的配置:

            ·Byte Per Burst - 每次執(zhí)行Burst傳輸傳送的字節(jié)數(shù)

            ·Transaction Descriptor 的數(shù)量

            ·Endian (Big / Little)的配置

            ·傳輸?shù)淖止?jié)數(shù)

            ·目標(biāo)地址

            ·源地址

            ·地址遞增模式

            ·TD連接模式

            在PSoC Creator中打開(kāi)DMA向?qū)?,選擇要配置的DMA,進(jìn)入第一個(gè)頁(yè)面如圖8所示。

          DMA 向?qū)?-配置

          圖8 DMA 向?qū)?-配置

            該界面主要配置目標(biāo)和源地址的范圍。支持地址段在SRAM,FLASH,EEPROM中。其次是配置Burst的字節(jié)數(shù)以及該DMA中的事務(wù)描述符的數(shù)量和連接關(guān)系。在完成該步驟之后,會(huì)進(jìn)入下個(gè)配置界面,主要配置其他的詳細(xì)參數(shù)。如圖9 所示。

          DMA詳細(xì)配置

          圖9 DMA詳細(xì)配置

            在圖9中輸入事務(wù)描述符號(hào)的參數(shù)。其中最為常用而且重要的參數(shù)包括:源地址,目標(biāo)地址,地址遞增模式,以及事務(wù)描述符的連接模式。在完成該步驟之后,點(diǎn)擊下一步,就會(huì)生成相應(yīng)的配置代碼,如圖10所示。

          DMA 生成代碼

          圖10 DMA 生成代碼

            復(fù)制上述代碼到程序的初始化模塊中,并對(duì)需要的地方進(jìn)行細(xì)微的修改,就可以完成DMA的初始化。在程序運(yùn)行時(shí),DMA會(huì)根據(jù)請(qǐng)求自動(dòng)把數(shù)據(jù)從源地址搬運(yùn)到目標(biāo)地址。

            3.2 DMA應(yīng)用于多通訊端口實(shí)例

            DMA的數(shù)據(jù)傳輸可以極大提高基于系統(tǒng)的吞吐率。以一個(gè)系統(tǒng)為例,該系統(tǒng)通過(guò)SPI接收別的系統(tǒng)的輸入,并通過(guò)UART傳送到主機(jī)系統(tǒng)中。圖11給出了基于傳統(tǒng)MCU和基于 DMA的兩種程序流程圖進(jìn)行比較(不考慮兩種傳送速率不匹配的情況)。

          (a) 傳統(tǒng)MCU設(shè)計(jì) (b) PSoC3 DMA的設(shè)計(jì)

          圖11 (a) 傳統(tǒng)MCU設(shè)計(jì) (b) DMA的設(shè)計(jì)

            傳統(tǒng)的MCU需要初始化SPI和UART通訊模塊,并配置兩者的中斷。當(dāng)SPI的Buffer滿(mǎn)了之后,就產(chǎn)生中斷,中斷程序首先中止新的SPI傳輸,然后檢測(cè)UART的Buffer,如果不為空就等待舊的數(shù)據(jù)傳送完。為空之后就把SPI的數(shù)據(jù)復(fù)制到TX Buffer 并打開(kāi)SPI接收后續(xù)數(shù)據(jù)。

            基于PSoC3 DMA的設(shè)計(jì)中,可以基于原理圖實(shí)現(xiàn)上述的邏輯。如圖12所示。

          系統(tǒng)邏輯圖

          圖12 系統(tǒng)邏輯圖

            當(dāng)SPI的Full信號(hào)和UART的Empty信號(hào)同時(shí)有效的時(shí)候,觸發(fā)DMA傳輸,把SPI Buffer中的數(shù)據(jù)傳送到UART的Buffer中。不需要CPU的干預(yù)就能夠完成多通訊口之間的數(shù)據(jù)共享。

            該通訊實(shí)例只是為了表明DMA在多通訊端口數(shù)據(jù)傳輸中的作用。在實(shí)際的實(shí)現(xiàn)中,DMA可以操作的通訊端口包括:

            ·USB的端點(diǎn)

            ·UART的Buffer

            ·SPI的Buffer

            ·I2S的Buffer

            ·其他各種自定義的通訊協(xié)議

            通過(guò)DMA可以高效的實(shí)現(xiàn)之間的如下操作:

            ·各通訊端口之間的數(shù)據(jù)搬移

            ·通訊端口Buffer到PSoC3數(shù)字和模擬模塊之間的傳輸

            ·通訊端口Buffer自動(dòng)存放到內(nèi)存之中

            ·內(nèi)存到通訊口的數(shù)據(jù)搬移

            ·數(shù)字、模擬模塊到通訊口的數(shù)據(jù)搬移

            四、 總結(jié)

            Cypress PSoC3處理器集成了多種可編程的數(shù)字模擬資源以及布線資源,以及一些專(zhuān)用的通訊和控制設(shè)備,可以極大地方便各種嵌入式系統(tǒng)的應(yīng)用。PSoC Creator作為PSoC3的開(kāi)發(fā)工具,能夠提供基于原理圖,功能組件的設(shè)計(jì)模式。使得用戶(hù)能夠用簡(jiǎn)單有效的方式來(lái)完成復(fù)雜的可編程系統(tǒng)設(shè)計(jì)。

            通訊作為嵌入式系統(tǒng)的重要部分,在傳統(tǒng)設(shè)計(jì)中需要占用一定的CPU時(shí)間來(lái)處理。本文介紹的基于PSoC3的新設(shè)計(jì)方式,采用DMA高效的處理嵌入式系統(tǒng)通訊而不占用CPU處理時(shí)間,同時(shí)還可以基于PSoC3的靈活配置實(shí)現(xiàn)多路DMA并行操作以降低系統(tǒng)硬件成本。這種新方式能夠極大地提高基于PSoC3系統(tǒng)的吞吐能力和系統(tǒng)運(yùn)行效率。


          上一頁(yè) 1 2 3 下一頁(yè)

          關(guān)鍵詞: PSoC3 DMA 通訊接口

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();