在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于DMA數據傳輸方案實現工業級高速串口驅動的應用設計

電子設計 ? 來源:單片機與嵌入式系統應用 ? 作者:邢麗華;高志鵬; ? 2021-06-10 15:16 ? 次閱讀

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

1 概 述

由于串口在電報通信、工控和數據采集等領域有著廣泛的應用,絕大多數嵌入式處理器都內置了通用異步收發器UART)。UART數據傳輸主要通過中斷或DMA的方式實現。

中斷方式是在接收到數據或需要發送數據時產生中斷,在中斷服務程序中讀寫UART的緩沖區(FIFO)實現數據傳輸。由于串口通信速率一般比較低(典型值不超過115 200 bps),大多數嵌入式系統都采用中斷方式來傳輸串口數據。然而,中斷服務程序需要占用CPU的時間,而串口速度的提升也必將導致CPU更頻繁地響應UART中斷,這勢必會造成嵌入式系統的性能下降。

DMA數據傳輸無需CPU的參與,是一種更加高效的數據傳輸方式。現有的DMA數據傳輸方案都是基于DMA塊傳輸方式(即Block DMA)。這種方式下每次傳輸完一個數據塊后產生一個DMA中斷,在高速串口通信中,頻繁的DMA中斷仍然會影響系統的性能。本文基于散列DMA(seatter DMA)的傳輸方式提出了一套完整的工業級高速串口驅動設計方案,實現了波特率高達12 Mbps的UART數據傳輸。

2 DMA數據傳輸的特點

DMA(Direct Memory Access,直接存儲器訪問),是指數據在內存與I/O設備間的直接傳輸,數據操作由DMA控制器(DMAC)完成而不需要CPU的參與,大大提高了CPU的利用率。因此,DMA是高速數據傳輸的理想方式。利用DMA進行數據傳輸時應注意以下幾點:

①DMA傳輸需要占用系統總線,在此期間CPU不能使用總線。如果外設在進行數據傳輸時不能有任何的間斷,就必須保證傳輸期間DMAC對系統總線的獨占,這可能會影響其他需要使用總線進行數據傳輸的設備。所以,系統總線在DMA傳輸期間是否可被搶占,要依據嵌入式系統的特定環境來決定。

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

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

3 在SPEAR300平臺上實現高速串口

3.1 硬件平臺

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

3.2 驅動程序設計

串口驅動程序的核心是實現數據高效穩定的收發。為了實現UART的高速數據傳輸,UART中斷設置為最高優先級;同時在操作系統中允許中斷嵌套,打開UART接收超時中斷RTI并使能UART的DMA傳輸。這樣,當UART的發送FIFO數據減少到設定的參考值(FIFOLevel)時,發送DMA傳輸就會被觸發。同樣,當接收FIFO的數據增長到設定值時,接收DMA傳輸就會被觸發。為了減少DMA傳輸被觸發的次數同時保證數據被及時傳輸,發送FIFO Level設定為2字節,而接收FIFOLevel設定為14字節,將發送和接收的FIFO Level分別設定為0和16字節是有很大風險的。MPI協議要求傳輸的一幀數據不能有間斷,所以在使用DMA傳輸UART數據時DMAC必須獨占系統總線。為了避免產生緩存一致性問題,使用2塊非緩存內存區域存放待發送的數據和已接收到的數據。

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

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

3.3 驅動測試

本文的設計方案直接應用于工業級的HMI產品,必須經過嚴格的測試。利用3臺西門子S7系列PLC和1臺產品樣機搭建令牌網,使用西門子MPI協議進行測試,并利用數據分析工具ProfiTrace監測通信過程。測試結果表明,2 400 bps~12 Mbps的各個波特率下都能進行穩定的數據通信。

結 語

本文詳細介紹了DMA數據傳輸的特點和散列DMA的工作方式。在此基礎上,提出了一套基于散列DMA的高速串口驅動設計方案,發送數據完全由DMAC完成,無需觸發任何中斷,接收1幀不超過接收區閾值的數據最多產生1次RTI中斷。和現有的各種利用DMA塊傳輸進行串口數據通信的方案相比,中斷次數大幅減少,大大提高了數據傳輸的效率。在應用了本方案的人機界面產品上,實現了波特率高達12 Mbps的穩定數據傳輸。對于在其他平臺上設計實現高速串口,本方案是一個很好的參考。

責任編輯:gt

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19436

    瀏覽量

    231312
  • 嵌入式
    +關注

    關注

    5095

    文章

    19189

    瀏覽量

    307972
收藏 人收藏

    評論

    相關推薦

    CW32L052單片機支持DMA實現高速數據傳輸

    CW32L052支持DMA(Direct Memory Access),即直接內存訪問,無需CPU干預,實現高速數據傳輸
    的頭像 發表于 02-27 11:36 ?1053次閱讀

    基于FPGA的高速LVDS數據傳輸

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

    怎么實現基于FPGA的具有流量控制機制的高速串行數據傳輸系統設計?

    本文介紹了基于Xilinx Virtex-6 FPGA的高速串行數據傳輸系統的設計與實現,系統包含AXI DMA和GTX串行收發器,系統增加了流量控制機制來保證
    發表于 05-25 06:45

    在散列DMA上如何去實現高速串口驅動設計?

    DMA數據傳輸的特點是什么?在SPEAR300平臺上如何去實現高速串口?一種基于散列DMA
    發表于 05-28 07:03

    如何去實現串口開啟DMA進行數據傳輸

    STM32CubeMX筆記-串口開啟DMA進行數據傳輸
    發表于 02-21 07:25

    DMA進行數據傳輸和CPU進行數據傳輸的疑問

    求大佬解答,本人正在學習STM32單片機中DMA直接數據存儲部分的內容 看了DMA簡介后,也上手過實例代碼,但是沒有實際的項目經驗,所以有以下疑問: DMA外設在進行
    發表于 05-25 17:18

    基于FPDP的高速數據傳輸系統設計

    基于FPDP的高速數據傳輸系統設計 隨著電子技術的高速發展,越來越多的信號處理系統,需要高速數據采集和大吞吐量的
    發表于 12-01 09:41 ?2176次閱讀
    基于FPDP的<b class='flag-5'>高速</b><b class='flag-5'>數據傳輸</b>系統設計

    基于PXI總線的數據傳輸接口設計與實現方案

    使用PCI9054 提供的DMA 傳輸方式,并由其Local 端配置和啟動DMA 傳輸來完成數字頻譜數據
    發表于 09-22 18:06 ?4282次閱讀
    基于PXI總線的<b class='flag-5'>數據傳輸</b>接口設計與<b class='flag-5'>實現</b><b class='flag-5'>方案</b>

    SOPC實現的PCI總線高速數據傳輸系統

    本文提出一種采用可編程片上系統SOPC實現偵察接收機PCI總線高速數據傳輸系統的設計方案
    發表于 02-10 11:20 ?1501次閱讀
    SOPC<b class='flag-5'>實現</b>的PCI總線<b class='flag-5'>高速</b><b class='flag-5'>數據傳輸</b>系統

    基于Zynq-7000的SRIO高速數據傳輸設計與實現

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

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

    手頭項目也需要加入DMA數據傳輸,以最大限度地提升CPU效率,于是測試了一下XMEGA的DMA模塊,把一塊內存中的數據DMA
    的頭像 發表于 04-27 09:22 ?9262次閱讀

    DMA數據傳輸在SPEAR300實現高速串口驅動設計

    DMA數據傳輸無需CPU的參與,是一種更加高效的數據傳輸方式。現有的DMA數據傳輸方案都是基于
    發表于 04-04 12:23 ?1659次閱讀
    <b class='flag-5'>DMA</b><b class='flag-5'>數據傳輸</b>在SPEAR300<b class='flag-5'>實現</b><b class='flag-5'>高速</b><b class='flag-5'>串口</b><b class='flag-5'>驅動</b>設計

    STM32CubeMX-串口開啟DMA進行數據傳輸

    STM32CubeMX筆記-串口開啟DMA進行數據傳輸
    發表于 12-27 18:40 ?7次下載
    STM32CubeMX-<b class='flag-5'>串口</b>開啟<b class='flag-5'>DMA</b>進行<b class='flag-5'>數據傳輸</b>

    高速數據傳輸藍牙雙模模塊方案

    高速數據傳輸藍牙雙模方案 高速數據傳輸透傳模式是一種直接傳輸模式,
    發表于 08-19 15:28 ?1次下載

    如何實現MQTT協議數據傳輸

    的首選。藍蜂物聯網推出的MQTT網關,正是為了滿足這一需求,幫助用戶輕松實現設備與云平臺之間的數據傳輸和交互。 藍蜂MQTT網關是—款工業面向現場設備接入、
    的頭像 發表于 11-15 17:23 ?1217次閱讀
    主站蜘蛛池模板: 亚洲欧美精品一区二区 | 国产亚洲精品aa在线看 | 国产在线高清精品二区色五郎 | 97影院理论片在线观看 | 四虎现在的网址入口 | av大片| 日本在线一区 | 亚洲伦理一区二区三区 | 国产亚洲新品一区二区 | 天天操夜夜逼 | 377p亚洲欧洲日本大胆色噜噜 | 一级三级黄色片 | 四虎永久精品视频在线 | 色妞影视 | 久久香蕉国产精品一区二区三 | 精品在线一区二区 | 激情综合在线 | 午夜影视免费 | 韩国在线视频 | 午夜精品网站 | 成人性视屏 | avtt天堂网永久资源 | 免费看黄色一级毛片 | 99热在线获取最新地址 | 黄网站视频观看免费 | 天天综合天天添夜夜添狠狠添 | 特级全黄一级毛片免费 | 鲁丝一区二区三区 | 他也色在线视频 | 亚洲成a人片77777kkk | 噜噜噜久久 | 中文字幕va一区二区三区 | 欧美乱理伦另类视频 | 一级在线免费视频 | 在线播放网址 | 天天插天天干天天射 | 国产nv精品你懂得 | 激情五月亚洲色图 | 性网站免费 | 在线欧美激情 | 1000部啪啪未满十八勿入 |