《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > ARM中基于DMA的高效UART通訊及其應用
ARM中基于DMA的高效UART通訊及其應用
摘要: 在UART通訊中,通過采取DMA方式,直接將UART接收的數據轉移到設定好的RAM區,然后設置相應的全局標志,通知主程序數據可用就可以了。開發人員不需要到UART的緩沖區中讀取數據,直接讀RAM就可以了。與采用中斷方式或者查詢方式的串行口通訊方式相比較,不僅僅可以節省CPU通訊時用于接收數據的時間,同時可以防止UART接收的數據由于沒有及時被讀取而丟失,提高了通訊的可靠性。
關鍵詞: ARM DMA控制器 UART
Abstract:
Key words :

 

1、引言

由于UART串行口的廣泛應用,在傳統的8位和16位的處理器以及32位處理器中,一般都帶有UART串行口。傳統的基于UART的數據通訊中,采用的方式一般有兩種,查詢式和中斷式。查詢方式下CPU的負擔較重,浪費了處理器的能力,不能夠很好的處理其他的事件;中斷方式可以在接收到信息或需要發送數據時產生中斷,在中斷服務程序中完成數據的接收與發送。相對于查詢方式,中斷方式的CPU利用率要高。在CPU任務簡單的系統中,使用中斷方式確實是一種好方法。但是在復雜的系統中,比如移動機器人,處理器需要處理串行口通信,多個傳感器數據的采集以及處理,實時軌跡的生成,運動軌跡插補以及位置閉環控制等等任務,牽扯到多個中斷的優先級分配問題。為了保證數據發送與接收的可靠性,需要把UART的中斷優先級設計較高,但是系統可能還有其他的需要更高優先級的中斷,必須保證其定時的準確,這樣就有可能造成串行通訊的中斷不能及時響應,從而造成數據丟失。為此,筆者在采用S3c44b0x設計移動機器人控制器時,為了保證串行通訊的數據及時可靠的接收,同時兼顧其它任務不受影響,采用了基于DMA和中斷方式相結合的UART串行通信方式。DMA是 Direct Memory Access的縮寫,意思是“存儲器直接訪問”,它是一種高速的數據傳輸操作,允許在外部設備和存儲器之間直接讀/寫數據,即不通過CPU,也不需要 CPU干預。整個數據傳輸操作是在一個稱作DMA控制器的控制下進行的。CPU除了在數據傳輸開始和結束時做一點處理外,在傳輸過程中可以進行其他的工作。這樣,在大部分時間里,CPU和輸入/輸出設備都處于并行的操作狀態。其基本原理可以查閱教科書,此處不贅述。這里僅介紹S3c44c0x的DMA控制器。

2、S3c44b0x中的DMA控制器和UART的特性

S3c44b0x采用ARM7TDMI核,具有4 通道的DMA控制器,并且對應有4個中斷。其中兩個DMA通道稱做ZDMA(通用DMA),連接在SSB(系統總線)上,另外兩個DMA通道稱做 BDMA(橋DMA),連接于SSB和SPB(外設總線)之間的接口層。連接于SSB上的ZDMA控制器可以用于從存儲器到存儲器,從存儲器到固定目標的 I/O存儲器,和從I/O 設備到存儲器之間的數據傳輸。另外的兩個BDMA 控制器主要作用是在外部存儲器和內部外設之間傳輸數據,這里的I內部外設包括SIO,IIS,TIMER和UART等。BDMA與ZDMA可以通過軟件啟動,也可以通過硬件啟動。此設計中我們使用UART0,與其對應的DMA通道為BDMA0。其控制器框圖如圖1所示。

S3c44b0x的UART單元提供2個獨立的異步串行I/O口,每個口均可以工作于中斷模式或者DMA模式,即 UART可以產生內部中斷請求或者DMA請求,在CPU的串行I/O口之間傳送數據,支持高達115.2KBPS的傳輸速率,每個UART通道包含2個 16位的分別用于發送和接收的FIFO通道。

6.jpg

3、硬件電路設計

由于S3c44b0x自帶支持UART的DMA控制器,所以關于DMA硬件部分不需要作任何的工作。S3C44B0X的I/O口電壓為3.3V,而PC機一端的串口采用RS232電平,所以中間要經過電平轉換,在此采用SP3232E芯片。連接電路如圖2所示。    

 

7.jpg

4、基于DMA和中斷相結合的通訊軟件設計

在以S3C44B0X為核心組成的移動機器人中,采用3路PWM定時器驅動3個直流電機,通用的GPIO口和A/D口連接外部的紅外和超聲以及激光傳感器,使用UART0完成與上位機(PC)的數據交換,這些數據是單向的(從上位機發送給S3c44b0x),主要是上位機傳給機器人控制器的各種命令信息,但是命令信息的發送時間上是不具有規律性的,即間隔時間不定。為了充分的利用CPU,減少數據丟失的風險,我們利用UART的DMA模式來完成數據的接收。軟件部分主要是針對具體的應用,對DMA控制器以及UART作適當的初始化。UART的初始化比較簡單,主要是通訊數據格式、波特率等的設置,這些與其他控制器相同,只要設置相關的寄存器即可。注意UART設置成不使用自動流控制,不使用紅外線傳輸模式,關鍵要注意UART0設置成DMA模式而不是中斷模式,并且要使能FIFO緩沖區(根據需要,使用16字節的接收緩沖區),這樣在接收緩沖區滿時,會產生DMA請求而不是中斷請求。限于篇幅,具體的寄存器定義以及串行口的初始化不做詳悉介紹,可以參考文獻[1][2]。

DMA控制器的初始化也比較簡單,主要是相關寄存器的設置。與BDMA0相關的在本系統中用到的寄存器以及相關定義見表1,具體寄存器的名稱定義以及物理地址見參考文獻[1][2]。

表1  S3c44b0x的BDMA相關寄存器的定義
4.jpg
 
在初始化時要正確設置目標(緩沖區的)首地址、數據傳輸的方向、源寄存器的首地址、地址指針是否遞增以及遞增方向、DMA計數器等等。相關代碼以及注釋如下:
#define  RAM_ADDRESS  0xc200000  //定義接收數據的緩沖區,根據硬件而定。在我們的系統中擴展的SDRAM 存儲空間從0x0C00000~0x0C7fffff,占用S3c44b0x的bank 6。
#define  size  16  //定義DMA的計數器,根據需要設定,可以選擇的選項是4、8、2和16
char *Buf;
Buf=(unsigned char*) RAM_ADDRESS;  //指針指向起始地址
BDISRC0=(11<<28)+(int)(rURxH0);    /*以字節為單位傳送;因為DMA操作時是將UART的寄存器中的數據讀出放置到設定的緩沖區,所以源寄存器的地址應該是固定到;UART的接收保存寄存器rURxH0,同時位[29:28]應該設置成 0b11。*/
BDIDES0=(10<<30)+(01<<28)+ Buf); /*傳輸方向模式設定為從內部設備(UART口)到外部存儲器(SDRAM),目標存儲器(SDRAM)使用地址遞增的方向,將數據順次放置到緩沖區中*/
BDICNT0=(10<<30)+(1<<26)+(3<<22)+(1<<21)+(0& lt;<20)+size;/*設置UART0使用BDMA0通道,在DMA計數到0時自動重載和自動啟動,計數結束產生中斷,每次DMA操作移動 16字節數據到設定地緩沖區*/
BDICNT0 |= (1<<20);//使能DMA
BDCON0 = 0x0<<2;//允許外部DMA請求

數據接收:這一部分工作由初始化好后的DMA控制器依靠硬件來完成。接收數據不定時,初始化UART0的接收緩沖區為16字節,當接收緩沖區滿時,會產生DMA請求,然后在DMA控制器的控制下,將UART的接收FIFO中的16字節的數據轉移到指定的緩沖區中(SRAM),當數據轉移完畢(DMA 計數到0)后,要做兩件事情:一是自動重載和自動啟動,即自動重新設置好目標(緩沖區)首地址和源地址(UART接收寄存器)以及DMA計數器,準備好下次DMA請求;另外產生DMA中斷。DMA中斷服務程序要做的工作很簡單,只要對全局標志RECEIVE_FLAG置位,通知主程序有新的命令需要處理。這樣主程序可以直接處理RAM中的數據,而不需要花費時間去讀取UART的接收緩沖區。                                 

數據處理:當主程序通過查詢全局標志RECEIVE_FLAG,如果為1,則知道有新的命令,可以直接讀取命令緩沖區,同時對RECEIVE_FLAG清零。然后按照一定的算法對接收的數據做出解析,這部分內容不做重點討論。

5、試驗及結論                

為了驗證基于DMA的通訊的有效性,筆者做了對比試驗。把負責軌跡插補的定時中斷優先級設計成最高(中斷時間間隔50毫秒,中斷服務程序執行時間約需要30毫秒),然后一個機器人采用中斷方式接收上位機連續發送的100組命令,另一個采用基于DMA的方式接收上位機連續發送的100組命令。然后在機器人主程序中通過讀取UART的狀態寄存器判斷出現錯誤(主要是數據溢出錯誤,即緩沖區有接收數據而沒有及時讀取,被新的數據覆蓋)的次數。軟件采用C語言,用ADS1.2編譯調試。試驗結果如表2。實驗證明了第二種方式的有效性。

表2:對比試驗結果
5.jpg

本文作者的創新點在于:在UART通訊中,通過采取DMA方式,直接將UART接收的數據轉移到設定好的RAM區,然后設置相應的全局標志,通知主程序數據可用就可以了。開發人員不需要到UART的緩沖區中讀取數據,直接讀RAM就可以了。與采用中斷方式或者查詢方式的串行口通訊方式相比較,不僅僅可以節省CPU通訊時用于接收數據的時間,同時可以防止UART接收的數據由于沒有及時被讀取而丟失,提高了通訊的可靠性。

參考文獻:
(1)嵌入式系統開發與應用,田澤編著,北京航空航天大學出版社,2005年5月第一版;
(2)S3C44B0X RISC MICROPROCESSOR ,SAMSUNG ElECTRONICS
(3)ARM微控制器基礎與實戰,周立功等編著,北京航空航天大學出版社,2003年11月第1版.
(4) 魏永清 萬寶年,具有軟件模擬FIFO緩沖區的串口通信模塊設計,微計算機信息 2006年第7-2期:64-66 

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          国产伦精品一区二区三区视频孕妇| 国产精品a级| 久久久精品2019中文字幕神马| 欧美伦理一区二区| 欧美电影在线观看| 永久91嫩草亚洲精品人人| 欧美大片在线影院| 麻豆九一精品爱看视频在线观看免费| 欧美激情久久久久久| 性色av一区二区怡红| 国产一区二区电影在线观看| 欧美久久综合| 国产亚洲制服色| 亚洲第一天堂无码专区| 午夜精品久久久久久99热| 国产视频一区二区三区在线观看| 亚洲一区在线免费| 久久久不卡网国产精品一区| 在线观看中文字幕不卡| 在线看日韩av| 国产精品国产三级国产普通话三级| 精品88久久久久88久久久| 国产视频一区在线| 一区二区国产精品| 国产亚洲成av人片在线观看桃| 亚洲开发第一视频在线播放| 久久久久成人精品| 久久天天狠狠| 亚洲欧美一区二区激情| 久久久精品国产免费观看同学| 在线免费一区三区| 国产精品人人做人人爽| 亚洲国产高清在线观看视频| 亚洲精品视频在线播放| 一区二区激情视频| 欧美日韩精品免费观看视一区二区| 激情成人亚洲| 久久久久9999亚洲精品| 国产深夜精品福利| 亚洲一级在线观看| 亚洲成色www久久网站| 欧美女同视频| 久久精品成人欧美大片古装| 国产精品第一页第二页第三页| 国产精品日韩一区二区三区| 欧美电影免费观看高清完整版| 国产伦精品一区二区三| 欧美剧在线观看| 欧美日韩一区国产| 亚洲欧美日韩国产综合精品二区| 黑丝一区二区| 久久精彩免费视频| 亚洲精品欧美日韩专区| 久久激情综合| 性8sex亚洲区入口| 欧美一区二区三区久久精品| 欧美日一区二区在线观看| 99在线视频精品| 亚洲香蕉伊综合在人在线视看| 欧美午夜电影在线| 欧美精品一区二区三区蜜臀| 欧美成人免费va影院高清| 国产精品人人做人人爽人人添| 国产婷婷色一区二区三区| 在线电影国产精品| 免费一级欧美在线大片| 久久久国产精彩视频美女艺术照福利| 在线观看欧美成人| 亚洲视频精品| 麻豆精品一区二区综合av| 欧美日韩在线播放| 在线日韩欧美| 欧美视频在线看| 99爱精品视频| 在线精品福利| 国产亚洲精品福利| 欧美国产综合一区二区| 在线精品国精品国产尤物884a| 亚洲国产免费| 国产一区二区三区电影在线观看| 99精品视频免费| 国产精品视频午夜| 久久狠狠婷婷| 欧美区一区二| 99国产一区二区三精品乱码| 亚洲经典在线| 国产欧美日韩精品丝袜高跟鞋| 国产一区二区中文| 欧美亚洲一区三区| 欧美国产亚洲精品久久久8v| 精品1区2区3区4区| 国产精品久久波多野结衣| 欧美一区二区三区电影在线观看| 久久人人97超碰人人澡爱香蕉| 国内精品久久久久影院色| 国产日本欧美一区二区三区| 国产亚洲一区在线| 欧美一区二区在线观看| 亚洲欧美在线播放| 国产精品www994| 日韩一二在线观看| 狠狠狠色丁香婷婷综合久久五月| 国产欧美一区二区三区国产幕精品| 欧美精品色一区二区三区| 国产日韩欧美综合一区| 乱中年女人伦av一区二区| 免费亚洲网站| 日韩视频免费大全中文字幕| 国产精品v欧美精品∨日韩| 亚洲精品国产精品国产自| 亚洲综合999| 亚洲第一页自拍| 亚洲人体一区| 一区二区高清在线观看| 国产情人节一区| 在线视频日韩精品| 欧美日韩国产色站一区二区三区| 一区二区三区产品免费精品久久75| 怡红院精品视频在线观看极品| 91久久精品www人人做人人爽| 在线观看中文字幕亚洲| 欧美黄网免费在线观看| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲成人直播| 亚洲激情在线激情| 国产一区二区中文| 夜夜嗨av一区二区三区网站四季av| 欧美精品在线免费播放| 亚洲成色777777在线观看影院| 国产精品国产自产拍高清av王其| 久久成人羞羞网站| 麻豆精品在线播放| 免费在线亚洲| 国产无一区二区| 久久久91精品国产| 国产在线不卡精品| 噜噜噜噜噜久久久久久91| 美日韩免费视频| 99精品免费网| 在线观看日韩国产| 欧美成人精品激情在线观看| 国产精品视频| 欧美日韩国产一级| 亚洲精品国产品国语在线app| 亚洲精品视频免费在线观看| 国产一区二区三区免费不卡| 国产精品久久久一本精品| 国产亚洲精品久久久久婷婷瑜伽| 亚洲国产成人tv| 久久综合九色欧美综合狠狠| 国产精品国产三级国产普通话蜜臀| 欧美日韩另类视频| 欧美色欧美亚洲另类二区| 欧美视频导航| 亚洲美女在线视频| 性欧美video另类hd性玩具| 亚洲午夜精品在线| 欧美在线观看网站| 欧美日本精品在线| 欧美人与性禽动交情品| 久久精品一区二区三区不卡牛牛| 欧美视频二区| 亚洲视频专区在线| 麻豆九一精品爱看视频在线观看免费| 亚洲精品免费一二三区| 欧美精品九九| 国产一区亚洲一区| 欧美chengren| 亚洲区中文字幕| 欧美日韩一区二区三| 国产精品亚洲а∨天堂免在线| 欧美日本中文字幕| 久久久久国产一区二区三区四区| 亚洲国产成人久久综合一区| 亚洲美女av网站| 国产最新精品精品你懂的| 国产亚洲人成a一在线v站| 国产精品捆绑调教| 国产午夜精品美女毛片视频| 亚洲第一精品久久忘忧草社区| 国产日本欧美视频| 欧美主播一区二区三区| 亚洲国产精品久久久久秋霞蜜臀| 狠久久av成人天堂| 国内成人在线| 亚洲四色影视在线观看| 午夜精品影院在线观看| 欧美一级淫片播放口| 亚洲午夜日本在线观看| 国产精品亚洲一区| 一本色道久久综合狠狠躁的推荐| 开元免费观看欧美电视剧网站| 在线观看欧美日本| 久久久综合网| 精品成人久久| 欧美成人a∨高清免费观看| 欧美四级在线观看| 欧美日韩高清在线观看| 欧美日韩精品一本二本三本| 亚洲制服av| 牛夜精品久久久久久久99黑人| 久久视频国产精品免费视频在线| 亚洲人成绝费网站色www| 一区二区三区精品在线| 中文国产成人精品久久一| 欧美国产成人精品| 欧美日韩色婷婷| 国产精品theporn| 国产欧美日韩激情| 欧美精品午夜视频| 欧美激情一区二区三区在线| 亚洲一区二区日本| 在线不卡免费欧美| 亚洲动漫精品| 亚洲免费观看高清完整版在线观看熊| 欧美日韩一区免费| 在线观看国产欧美| 国产精品欧美日韩一区二区| 男人天堂欧美日韩| 国产精品视频xxx| 亚洲欧美在线x视频| 亚洲精选成人| 国产一区激情| 这里只有视频精品| 国产欧美日本一区二区三区| 欧美一区2区三区4区公司二百| 欧美一区二区三区四区在线观看地址| 欧美日韩一区二区视频在线| 亚洲国产高清aⅴ视频| 欧美性做爰猛烈叫床潮| 久久精品国产视频| 国产精品永久免费在线| 欧美成人中文字幕在线| 玖玖在线精品| 国产精品红桃| 国产亚洲一区二区在线观看| 欧美中文字幕视频在线观看| 欧美精品午夜| 国产伊人精品| 欧美黑人国产人伦爽爽爽| 久久久噜噜噜久久狠狠50岁| 国产精品久久久久影院色老大| 久久国产福利国产秒拍| 一本色道久久加勒比精品| 中文成人激情娱乐网| 国产综合香蕉五月婷在线| 国产在线欧美日韩| 极品尤物av久久免费看| 欧美777四色影视在线| 日韩视频―中文字幕| 亚洲一区高清| 影音先锋亚洲精品| 亚洲视频欧美视频| 久久综合精品国产一区二区三区| 国产精品久久久999| 国产综合香蕉五月婷在线| 久久久久久亚洲综合影院红桃| 国产亚洲精品bt天堂精选| 亚洲激情视频网| 欧美精品九九99久久| 国产欧美日韩在线视频| 久久五月激情| 欧美成人免费网站| 亚洲精选久久| 久久不射网站| 蜜臀久久99精品久久久久久9| 亚洲综合首页| 久久亚洲综合色一区二区三区| 久久久国产视频91| 国产日韩精品一区二区三区在线| 国产精品美女久久久久久免费| 国产精品日韩二区| 欧美国产成人在线| 国产精品女人久久久久久| 一区二区三区国产在线| 欧美日韩一区二区在线| 国产中文一区| 亚洲午夜精品久久久久久app| 欧美偷拍一区二区| 欧美激情亚洲精品| 久久久噜噜噜久久中文字幕色伊伊| 日韩天堂在线视频| 久久天天躁狠狠躁夜夜av| 久久精品国产精品亚洲精品| 国语自产精品视频在线看| 亚洲伊人一本大道中文字幕| 久久久蜜臀国产一区二区| 午夜日韩激情| 国产精品日韩| 欧美精品97| 欧美精品少妇一区二区三区| 亚洲在线观看视频| 亚洲第一主播视频| 好吊一区二区三区| 美女黄毛**国产精品啪啪| 久久精品国产99国产精品澳门| 久久免费视频网站| 国产自产2019最新不卡| 国产欧美日韩综合一区在线播放| 国产精品theporn| 美女国内精品自产拍在线播放| 亚洲欧美国产高清| 久久久久久久精| 欧美精品乱码久久久久久按摩| 亚洲一区二区视频在线观看| 亚洲免费影视第一页| 欧美jizz19hd性欧美| 国产日韩欧美在线一区| 国产一区二区看久久| 激情婷婷欧美| 午夜精品久久久久久久99樱桃| 国产一区二区精品丝袜| 国产午夜亚洲精品不卡| 欧美日韩国产小视频在线观看| 亚洲美女啪啪| 在线视频精品一| 亚洲视频一二三| 亚洲日韩欧美一区二区在线| 伊人精品成人久久综合软件| 亚洲视频一区二区免费在线观看| 国产精品呻吟| 久久久www免费人成黑人精品| 欧美日韩另类视频| 欧美日韩123| 91久久夜色精品国产网站| 欧美激情一区二区三区在线视频| 欧美系列一区| 老司机aⅴ在线精品导航|