chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于DMA數(shù)據(jù)傳輸方案實(shí)現(xiàn)工業(yè)級(jí)高速串口驅(qū)動(dòng)的應(yīng)用設(shè)計(jì)

電子設(shè)計(jì) ? 來(lái)源:?jiǎn)纹瑱C(jī)與嵌入式系統(tǒng)應(yīng)用 ? 作者:邢麗華;高志鵬; ? 2021-06-10 15:16 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

作者:邢麗華;高志鵬;袁德殿

1 概 述

由于串口在電報(bào)通信、工控和數(shù)據(jù)采集等領(lǐng)域有著廣泛的應(yīng)用,絕大多數(shù)嵌入式處理器都內(nèi)置了通用異步收發(fā)器UART)。UART數(shù)據(jù)傳輸主要通過(guò)中斷或DMA的方式實(shí)現(xiàn)。

中斷方式是在接收到數(shù)據(jù)或需要發(fā)送數(shù)據(jù)時(shí)產(chǎn)生中斷,在中斷服務(wù)程序中讀寫UART的緩沖區(qū)(FIFO)實(shí)現(xiàn)數(shù)據(jù)傳輸。由于串口通信速率一般比較低(典型值不超過(guò)115 200 bps),大多數(shù)嵌入式系統(tǒng)都采用中斷方式來(lái)傳輸串口數(shù)據(jù)。然而,中斷服務(wù)程序需要占用CPU的時(shí)間,而串口速度的提升也必將導(dǎo)致CPU更頻繁地響應(yīng)UART中斷,這勢(shì)必會(huì)造成嵌入式系統(tǒng)的性能下降。

DMA數(shù)據(jù)傳輸無(wú)需CPU的參與,是一種更加高效的數(shù)據(jù)傳輸方式。現(xiàn)有的DMA數(shù)據(jù)傳輸方案都是基于DMA塊傳輸方式(即Block DMA)。這種方式下每次傳輸完一個(gè)數(shù)據(jù)塊后產(chǎn)生一個(gè)DMA中斷,在高速串口通信中,頻繁的DMA中斷仍然會(huì)影響系統(tǒng)的性能。本文基于散列DMA(seatter DMA)的傳輸方式提出了一套完整的工業(yè)級(jí)高速串口驅(qū)動(dòng)設(shè)計(jì)方案,實(shí)現(xiàn)了波特率高達(dá)12 Mbps的UART數(shù)據(jù)傳輸。

2 DMA數(shù)據(jù)傳輸?shù)奶攸c(diǎn)

DMA(Direct Memory Access,直接存儲(chǔ)器訪問(wèn)),是指數(shù)據(jù)在內(nèi)存與I/O設(shè)備間的直接傳輸,數(shù)據(jù)操作由DMA控制器(DMAC)完成而不需要CPU的參與,大大提高了CPU的利用率。因此,DMA是高速數(shù)據(jù)傳輸?shù)睦硐敕绞健@肈MA進(jìn)行數(shù)據(jù)傳輸時(shí)應(yīng)注意以下幾點(diǎn):

①DMA傳輸需要占用系統(tǒng)總線,在此期間CPU不能使用總線。如果外設(shè)在進(jìn)行數(shù)據(jù)傳輸時(shí)不能有任何的間斷,就必須保證傳輸期間DMAC對(duì)系統(tǒng)總線的獨(dú)占,這可能會(huì)影響其他需要使用總線進(jìn)行數(shù)據(jù)傳輸?shù)脑O(shè)備。所以,系統(tǒng)總線在DMA傳輸期間是否可被搶占,要依據(jù)嵌入式系統(tǒng)的特定環(huán)境來(lái)決定。

②DMA傳輸存在緩存一致性(cache coherency)問(wèn)題。如圖1所示,DMAC和CPU是兩個(gè)平行的單元,CPU總是通過(guò)數(shù)據(jù)緩存來(lái)訪問(wèn)內(nèi)存中的數(shù)據(jù),而DMAC則直接訪問(wèn)內(nèi)存。如果內(nèi)存中的數(shù)據(jù)被DMAC更新,而數(shù)據(jù)緩存中的數(shù)據(jù)尚未被更新,CPU獲得的某些地址的值可能并不是內(nèi)存中的真實(shí)值。為了避免這個(gè)問(wèn)題,可在DMAC更新完內(nèi)存數(shù)據(jù)后或CPU讀取被更新過(guò)的數(shù)據(jù)前刷新數(shù)據(jù)緩存,或是使用不被數(shù)據(jù)緩存映射的非緩存(non-cacheable)內(nèi)存區(qū)域。

DMA數(shù)據(jù)傳輸可分為塊傳輸和散列傳輸兩種方式。在DMA傳輸數(shù)據(jù)的過(guò)程中,要求源物理地址和目標(biāo)物理地址必須是連續(xù)的。但是在某些計(jì)算機(jī)體系中(如IA架構(gòu)),連續(xù)的存儲(chǔ)器地址在物理上不一定是連續(xù)的,所以DMA傳輸要分成多次完成。傳輸完一塊物理上連續(xù)的數(shù)據(jù)后引發(fā)一次中斷,然后進(jìn)行下一塊物理上連續(xù)的數(shù)據(jù)傳輸,這就是DMA塊傳輸方式(Block DMA)。散列傳輸是在塊傳輸方式上發(fā)展起來(lái)的,它與一個(gè)傳輸鏈表相關(guān),如圖2所示。該鏈表可以是單向結(jié)構(gòu)或環(huán)形結(jié)構(gòu)。控制字中包含數(shù)據(jù)位寬、數(shù)據(jù)塊大小、當(dāng)前塊傳輸結(jié)束是否引發(fā)中斷等控制信息。DMA塊傳輸可看作是只含有一個(gè)節(jié)點(diǎn),且下一節(jié)點(diǎn)指針總是指向當(dāng)前節(jié)點(diǎn)的散列傳輸。采用散列DMA方式能更靈活、高效地傳輸數(shù)據(jù)。

3 在SPEAR300平臺(tái)上實(shí)現(xiàn)高速串口

3.1 硬件平臺(tái)

SPEAR300是ST公司在ARM926EJ-S核的基礎(chǔ)上開(kāi)發(fā)的高性能嵌入式處理器。其最高工作頻率為333MHz,有8個(gè)獨(dú)立的DMA通道,支持散列DMA;UART支持DMA傳輸,發(fā)送和接收FIFO大小均為16字節(jié),在192 MHz的外設(shè)總線(APB)頻率下支持的最高波特率為12 Mbps,如果提高APB的頻率還可以獲得更高的波特率。本文的硬件平臺(tái)是以SPEAR300為核心的人機(jī)界面產(chǎn)品,主要外設(shè)包括觸摸屏、液晶顯示模組、網(wǎng)口和串口(串口要支持最高波特率為12 Mbps的西門子MPI通信協(xié)議)。

3.2 驅(qū)動(dòng)程序設(shè)計(jì)

串口驅(qū)動(dòng)程序的核心是實(shí)現(xiàn)數(shù)據(jù)高效穩(wěn)定的收發(fā)。為了實(shí)現(xiàn)UART的高速數(shù)據(jù)傳輸,UART中斷設(shè)置為最高優(yōu)先級(jí);同時(shí)在操作系統(tǒng)中允許中斷嵌套,打開(kāi)UART接收超時(shí)中斷RTI并使能UART的DMA傳輸。這樣,當(dāng)UART的發(fā)送FIFO數(shù)據(jù)減少到設(shè)定的參考值(FIFOLevel)時(shí),發(fā)送DMA傳輸就會(huì)被觸發(fā)。同樣,當(dāng)接收FIFO的數(shù)據(jù)增長(zhǎng)到設(shè)定值時(shí),接收DMA傳輸就會(huì)被觸發(fā)。為了減少DMA傳輸被觸發(fā)的次數(shù)同時(shí)保證數(shù)據(jù)被及時(shí)傳輸,發(fā)送FIFO Level設(shè)定為2字節(jié),而接收FIFOLevel設(shè)定為14字節(jié),將發(fā)送和接收的FIFO Level分別設(shè)定為0和16字節(jié)是有很大風(fēng)險(xiǎn)的。MPI協(xié)議要求傳輸?shù)囊粠瑪?shù)據(jù)不能有間斷,所以在使用DMA傳輸U(kuò)ART數(shù)據(jù)時(shí)DMAC必須獨(dú)占系統(tǒng)總線。為了避免產(chǎn)生緩存一致性問(wèn)題,使用2塊非緩存內(nèi)存區(qū)域存放待發(fā)送的數(shù)據(jù)和已接收到的數(shù)據(jù)。

發(fā)送數(shù)據(jù)時(shí),待發(fā)送的數(shù)據(jù)量總是已知的。先構(gòu)造一個(gè)傳輸節(jié)點(diǎn),數(shù)據(jù)源地址為數(shù)據(jù)包的首地址,目的地址為UART寄存器,數(shù)據(jù)位寬為8,下一節(jié)點(diǎn)指針(PTR_NEXT)為空。當(dāng)前數(shù)據(jù)包發(fā)送結(jié)束前,如果PTR_NEXT被更新,則下一個(gè)數(shù)據(jù)包的傳輸自動(dòng)開(kāi)始。當(dāng)前數(shù)據(jù)包是否發(fā)送完畢,可通過(guò)讀取DMAC寄存器DMACCnControl的TransferSize字段得知。整個(gè)發(fā)送數(shù)據(jù)的過(guò)程無(wú)需觸發(fā)任何中斷,流程圖如圖3所示。如果采用DMA塊傳輸方式,就需要在每次傳輸完畢后產(chǎn)生DMA中斷,重新裝載數(shù)據(jù)到內(nèi)存中的發(fā)送數(shù)據(jù)區(qū)以發(fā)送下一個(gè)數(shù)據(jù)包。

接收數(shù)據(jù)時(shí),對(duì)方發(fā)過(guò)來(lái)的數(shù)據(jù)量一般是未知的。構(gòu)造含有100個(gè)節(jié)點(diǎn)的循環(huán)鏈表結(jié)構(gòu),每個(gè)節(jié)點(diǎn)對(duì)應(yīng)的傳輸塊大小為接收FIFO Level。數(shù)據(jù)源地址為UART數(shù)據(jù)寄存器的地址,首節(jié)點(diǎn)的目的地址為接收數(shù)據(jù)內(nèi)存區(qū)域的首地址,此后節(jié)點(diǎn)的目的地址每次向后偏移(FIFO Level×2)個(gè)字節(jié),數(shù)據(jù)位寬為16(8個(gè)數(shù)據(jù)位,4個(gè)狀態(tài)位,4個(gè)保留位)。當(dāng)接收到的數(shù)據(jù)達(dá)到接收內(nèi)存區(qū)域的80%(RECV_TH)時(shí),需要通知數(shù)據(jù)發(fā)送方停止數(shù)據(jù)傳輸,在第80個(gè)節(jié)點(diǎn)處設(shè)置DMA中斷,該節(jié)點(diǎn)為閾值節(jié)點(diǎn)。采用本文的設(shè)計(jì)方案接收1幀不超過(guò)RECV_TH大小的數(shù)據(jù),最多產(chǎn)生一次RTI中斷。當(dāng)接收到的數(shù)據(jù)量少于FIFOLevel時(shí)不會(huì)觸發(fā)DMA接收,在RTI中斷中把UART接收FIFO中的數(shù)據(jù)復(fù)制到內(nèi)存中的數(shù)據(jù)接收區(qū),同時(shí)使DMA接收節(jié)點(diǎn)的目的地址向后偏移相應(yīng)的長(zhǎng)度并更新閾值節(jié)點(diǎn)的位置。接收數(shù)據(jù)流程如圖4所示。如果采用DMA塊傳輸方式,就必須額外使用一個(gè)環(huán)形數(shù)據(jù)緩沖區(qū)(Ring Buffer),每次接收到指定大小的數(shù)據(jù)塊后產(chǎn)生DMA中斷,在中斷服務(wù)程序中將接收到的數(shù)據(jù)復(fù)制到環(huán)形數(shù)據(jù)緩沖區(qū)中。

3.3 驅(qū)動(dòng)測(cè)試

本文的設(shè)計(jì)方案直接應(yīng)用于工業(yè)級(jí)的HMI產(chǎn)品,必須經(jīng)過(guò)嚴(yán)格的測(cè)試。利用3臺(tái)西門子S7系列PLC和1臺(tái)產(chǎn)品樣機(jī)搭建令牌網(wǎng),使用西門子MPI協(xié)議進(jìn)行測(cè)試,并利用數(shù)據(jù)分析工具ProfiTrace監(jiān)測(cè)通信過(guò)程。測(cè)試結(jié)果表明,2 400 bps~12 Mbps的各個(gè)波特率下都能進(jìn)行穩(wěn)定的數(shù)據(jù)通信。

結(jié) 語(yǔ)

本文詳細(xì)介紹了DMA數(shù)據(jù)傳輸?shù)奶攸c(diǎn)和散列DMA的工作方式。在此基礎(chǔ)上,提出了一套基于散列DMA的高速串口驅(qū)動(dòng)設(shè)計(jì)方案,發(fā)送數(shù)據(jù)完全由DMAC完成,無(wú)需觸發(fā)任何中斷,接收1幀不超過(guò)接收區(qū)閾值的數(shù)據(jù)最多產(chǎn)生1次RTI中斷。和現(xiàn)有的各種利用DMA塊傳輸進(jìn)行串口數(shù)據(jù)通信的方案相比,中斷次數(shù)大幅減少,大大提高了數(shù)據(jù)傳輸?shù)男?。在?yīng)用了本方案的人機(jī)界面產(chǎn)品上,實(shí)現(xiàn)了波特率高達(dá)12 Mbps的穩(wěn)定數(shù)據(jù)傳輸。對(duì)于在其他平臺(tái)上設(shè)計(jì)實(shí)現(xiàn)高速串口,本方案是一個(gè)很好的參考。

責(zé)任編輯:gt

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    20069

    瀏覽量

    242804
  • 嵌入式
    +關(guān)注

    關(guān)注

    5175

    文章

    19977

    瀏覽量

    324433
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    CW32L052單片機(jī)支持DMA實(shí)現(xiàn)高速數(shù)據(jù)傳輸

    CW32L052支持DMA(Direct Memory Access),即直接內(nèi)存訪問(wèn),無(wú)需CPU干預(yù),實(shí)現(xiàn)高速數(shù)據(jù)傳輸。
    的頭像 發(fā)表于 02-27 11:36 ?1785次閱讀

    基于FPGA的高速LVDS數(shù)據(jù)傳輸

    高速LVDS數(shù)據(jù)傳輸方案和協(xié)議基于FPGA的高速LVDS數(shù)據(jù)傳輸本人在北京工作6年,從事FPGA外圍接口設(shè)計(jì),非常熟悉
    發(fā)表于 03-01 18:47

    怎么實(shí)現(xiàn)基于FPGA的具有流量控制機(jī)制的高速串行數(shù)據(jù)傳輸系統(tǒng)設(shè)計(jì)?

    本文介紹了基于Xilinx Virtex-6 FPGA的高速串行數(shù)據(jù)傳輸系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn),系統(tǒng)包含AXI DMA和GTX串行收發(fā)器,系統(tǒng)增加了流量控制機(jī)制來(lái)保證
    發(fā)表于 05-25 06:45

    在散列DMA上如何去實(shí)現(xiàn)高速串口驅(qū)動(dòng)設(shè)計(jì)?

    DMA數(shù)據(jù)傳輸的特點(diǎn)是什么?在SPEAR300平臺(tái)上如何去實(shí)現(xiàn)高速串口?一種基于散列DMA
    發(fā)表于 05-28 07:03

    如何去實(shí)現(xiàn)串口開(kāi)啟DMA進(jìn)行數(shù)據(jù)傳輸

    STM32CubeMX筆記-串口開(kāi)啟DMA進(jìn)行數(shù)據(jù)傳輸
    發(fā)表于 02-21 07:25

    DMA進(jìn)行數(shù)據(jù)傳輸和CPU進(jìn)行數(shù)據(jù)傳輸的疑問(wèn)

    求大佬解答,本人正在學(xué)習(xí)STM32單片機(jī)中DMA直接數(shù)據(jù)存儲(chǔ)部分的內(nèi)容 看了DMA簡(jiǎn)介后,也上手過(guò)實(shí)例代碼,但是沒(méi)有實(shí)際的項(xiàng)目經(jīng)驗(yàn),所以有以下疑問(wèn): DMA外設(shè)在進(jìn)行
    發(fā)表于 05-25 17:18

    基于FPDP的高速數(shù)據(jù)傳輸系統(tǒng)設(shè)計(jì)

    基于FPDP的高速數(shù)據(jù)傳輸系統(tǒng)設(shè)計(jì) 隨著電子技術(shù)的高速發(fā)展,越來(lái)越多的信號(hào)處理系統(tǒng),需要高速數(shù)據(jù)采集和大吞吐量的
    發(fā)表于 12-01 09:41 ?2336次閱讀
    基于FPDP的<b class='flag-5'>高速</b><b class='flag-5'>數(shù)據(jù)傳輸</b>系統(tǒng)設(shè)計(jì)

    基于PXI總線的數(shù)據(jù)傳輸接口設(shè)計(jì)與實(shí)現(xiàn)方案

    使用PCI9054 提供的DMA 傳輸方式,并由其Local 端配置和啟動(dòng)DMA 傳輸來(lái)完成數(shù)字頻譜數(shù)據(jù)
    發(fā)表于 09-22 18:06 ?4590次閱讀
    基于PXI總線的<b class='flag-5'>數(shù)據(jù)傳輸</b>接口設(shè)計(jì)與<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>方案</b>

    SOPC實(shí)現(xiàn)的PCI總線高速數(shù)據(jù)傳輸系統(tǒng)

    本文提出一種采用可編程片上系統(tǒng)SOPC實(shí)現(xiàn)偵察接收機(jī)PCI總線高速數(shù)據(jù)傳輸系統(tǒng)的設(shè)計(jì)方案
    發(fā)表于 02-10 11:20 ?1666次閱讀
    SOPC<b class='flag-5'>實(shí)現(xiàn)</b>的PCI總線<b class='flag-5'>高速</b><b class='flag-5'>數(shù)據(jù)傳輸</b>系統(tǒng)

    基于Zynq-7000的SRIO高速數(shù)據(jù)傳輸設(shè)計(jì)與實(shí)現(xiàn)

    為了滿足2ynq-7000系列芯片的SRIO數(shù)據(jù)傳輸要求,提出了一種基于FPGA控制DMA傳輸進(jìn)行SRIO通信的設(shè)計(jì)方案,并完成了ARM與FPGA核間高吞吐率的
    發(fā)表于 12-21 11:37 ?31次下載
    基于Zynq-7000的SRIO<b class='flag-5'>高速</b><b class='flag-5'>數(shù)據(jù)傳輸</b>設(shè)計(jì)與<b class='flag-5'>實(shí)現(xiàn)</b>

    DMA數(shù)據(jù)傳輸(源代碼分享)

    手頭項(xiàng)目也需要加入DMA數(shù)據(jù)傳輸,以最大限度地提升CPU效率,于是測(cè)試了一下XMEGA的DMA模塊,把一塊內(nèi)存中的數(shù)據(jù)DMA
    的頭像 發(fā)表于 04-27 09:22 ?9897次閱讀

    DMA數(shù)據(jù)傳輸在SPEAR300實(shí)現(xiàn)高速串口驅(qū)動(dòng)設(shè)計(jì)

    DMA數(shù)據(jù)傳輸無(wú)需CPU的參與,是一種更加高效的數(shù)據(jù)傳輸方式?,F(xiàn)有的DMA數(shù)據(jù)傳輸方案都是基于
    發(fā)表于 04-04 12:23 ?1894次閱讀
    <b class='flag-5'>DMA</b><b class='flag-5'>數(shù)據(jù)傳輸</b>在SPEAR300<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>高速</b><b class='flag-5'>串口</b><b class='flag-5'>驅(qū)動(dòng)</b>設(shè)計(jì)

    STM32CubeMX-串口開(kāi)啟DMA進(jìn)行數(shù)據(jù)傳輸

    STM32CubeMX筆記-串口開(kāi)啟DMA進(jìn)行數(shù)據(jù)傳輸
    發(fā)表于 12-27 18:40 ?7次下載
    STM32CubeMX-<b class='flag-5'>串口</b>開(kāi)啟<b class='flag-5'>DMA</b>進(jìn)行<b class='flag-5'>數(shù)據(jù)傳輸</b>

    高速數(shù)據(jù)傳輸藍(lán)牙雙模模塊方案

    高速數(shù)據(jù)傳輸藍(lán)牙雙模方案 高速數(shù)據(jù)傳輸透?jìng)髂J绞且环N直接傳輸模式,
    發(fā)表于 08-19 15:28 ?1次下載

    如何實(shí)現(xiàn)MQTT協(xié)議數(shù)據(jù)傳輸?

    的首選。藍(lán)蜂物聯(lián)網(wǎng)推出的MQTT網(wǎng)關(guān),正是為了滿足這一需求,幫助用戶輕松實(shí)現(xiàn)設(shè)備與云平臺(tái)之間的數(shù)據(jù)傳輸和交互。 藍(lán)蜂MQTT網(wǎng)關(guān)是—款工業(yè)級(jí)面向現(xiàn)場(chǎng)設(shè)備接入、
    的頭像 發(fā)表于 11-15 17:23 ?1642次閱讀