亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于DSP2812的雙緩沖串口程序設(shè)計

        2011-06-02 01:33:38湖南湘潭江南機器集團有限公司林明輝
        電子世界 2011年12期
        關(guān)鍵詞:發(fā)送數(shù)據(jù)字節(jié)寄存器

        湖南湘潭江南機器集團有限公司 王 剛 林明輝

        引言

        TMS32OF2812是國內(nèi)廣大的工程技術(shù)人員非常熟悉一種DSP芯片,它速度快,功能強,廣泛應(yīng)用于電機控制,電力電子等領(lǐng)域。如何高效可靠的實現(xiàn)DSP與上位PC機或其它從機間的串行通訊,是DSP系統(tǒng)開發(fā)的一個基本問題。本文將以DSP2812為例,針對這一問題展開討論,并給出一種切實可行的解決方案。

        1.常用串口收發(fā)程序及其存在的問題

        常用的串口發(fā)送程序如下所示,以DSP2812的SCIA發(fā)送一字節(jié)數(shù)據(jù)為例:

        DSP每收到一個字節(jié)的數(shù)據(jù)都會進入中斷,當(dāng)接收的數(shù)據(jù)量較大時,會占用較多的CPU資源,效率低。

        2.FIFO控制寄存器設(shè)置和使用隊列數(shù)據(jù)結(jié)構(gòu)的說明

        DSP2812含有一個16級深度的發(fā)送/接收FIFO。使用FIFO可以減少收發(fā)數(shù)據(jù)的延遲和對CPU資源的占用,高效的實現(xiàn)串口數(shù)據(jù)收發(fā)。

        FIFO是一個緩沖寄存器,通過FIFO發(fā)送數(shù)據(jù)時,可以一次性連續(xù)寫入多個數(shù)據(jù)(最多16個),DSP會自動將這些數(shù)據(jù)發(fā)送出去,無需CPU干預(yù),還可以設(shè)置發(fā)送完成后進中斷;通過FIFO接收數(shù)據(jù)時,經(jīng)由設(shè)置SCIFFRX寄存器,可以實現(xiàn)接收若干個字節(jié)的數(shù)據(jù)后(最多16個)進入中斷,在中斷中處理這些數(shù)據(jù),這就減少了接受多個數(shù)據(jù)時,CPU進中斷的次數(shù),提高了效率。

        (1)如何訪問FIFO

        寫發(fā)送FIFO通過SCITXBUF寄存器,讀接收FIFO通過SCIRXBUF寄存器。

        (2)FIFO中斷

        FIFO模式有兩個中斷,一個用于FIFO發(fā)送,一個用于FIFO接收。對于FIFO發(fā)送中斷來說,當(dāng)使能FIFO,且使能TXFIFO中斷后,標準的TXINT將不再起作用,該中斷僅作為SCI FIFO發(fā)送中斷工作;對于串行接收中斷而言,RXINT中斷是SCI FIFO接收、接收錯誤和接收FIFO溢出的共同中斷。

        FIFO發(fā)送和接收中斷都可以設(shè)置為匹配中斷。對FIFO發(fā)送來說,SCIFFTX寄存器中的位TXFFST4-O表明當(dāng)前的發(fā)送FIFO中有多少個字節(jié)的數(shù)據(jù),位TXFFIL4-O為用戶設(shè)定的接收FIFO中斷匹配級別,當(dāng)TXFFST4-O的值小于或等于TXFFIL4-O的值時,產(chǎn)生發(fā)送匹配中斷;對FIFO接收來說,SCIFFRX寄存器中的位RXFIFST4-O表明當(dāng)前接收FIFO中有多少個字節(jié)的數(shù)據(jù),位RXFFIL4-O為用戶設(shè)定的發(fā)送FIFO中斷匹配級別,當(dāng)RXFIFST4-O的值大于或等于RXFFIL4-O的值時,產(chǎn)生接收匹配中斷。

        FIFO寄存器可以設(shè)置為:

        在作文教學(xué)這方面,寄宿制學(xué)校不單是學(xué)生學(xué)會學(xué)習(xí),更重要的是讓學(xué)生能夠主動學(xué)習(xí),這種主動是自律的,不是在老師的強迫之下做的,主動發(fā)現(xiàn)生活的美,更重要的是讓學(xué)生通過寫作了解自己生活的環(huán)境,發(fā)展自己,升華自己,充分享受學(xué)習(xí)和收獲的喜悅,只有這樣才能更好地積累生活素材,才能進行“生活寫作”的改革和發(fā)展。

        /*使能FIFO,發(fā)送FIFO空,禁用TXFIFO中斷,清除TXFIFO中斷標志,使能TXFFIVL匹配中斷,匹配值為O,即:當(dāng)TXFIFO中數(shù)據(jù)為O時進入發(fā)送中斷。*/

        SciaRegs.SCIFFTX.all=OxeO6O;

        /*清RXFFOVF標志,使能FIFO接收,接收FIFO空,清除RXFFINT中斷標志,使能RXFFIVL匹配中斷,匹配值為16,即:FIFO中的數(shù)據(jù)大于等于16時進入發(fā)送中斷*/

        SciaRegs.SCIFFRX.all=Ox6O7O;

        /*禁止串口自動檢測波特率*/

        SciaRegs.SCIFFCT.all=O;

        程序使用隊列數(shù)據(jù)結(jié)構(gòu),可以更好的將串口程序模塊化。同時,利用隊列對串行數(shù)據(jù)再做一級緩沖,不僅保證了數(shù)據(jù)的順序,而且解除了使用FIFO最多一次寫入16個字節(jié)的限制,最多能寫入的數(shù)據(jù)個數(shù)取決于隊列緩沖區(qū)的大小,而這是由用戶定義的。只要發(fā)送隊列緩沖區(qū)中有待發(fā)送的數(shù)據(jù),就采用中斷間歇性的進行發(fā)送。串行接收采用類似方式,接收到一定數(shù)量的數(shù)據(jù)后再通知上層程序,CPU不必頻繁進入中斷。

        隊列是一種先入先出的線性表,它只允許在表的一端寫入數(shù)據(jù),而在另一端讀取數(shù)據(jù)。它的操作一般有以下函數(shù):

        //獲取隊列中的數(shù)據(jù),buf為指向隊列的指針,rdata為指向讀到的數(shù)據(jù)的指針

        QueueRead(unsigned char *rdata,void *buf);

        //向隊列中寫入數(shù)據(jù),buf為指向隊列的指針,wdata為要寫入的數(shù)據(jù)

        QueueWrite(void *buf,unsigned char wdata);

        //獲取隊列中元素個數(shù)

        QueueNData(void *Buf)

        本文使用了兩個隊列來對串行數(shù)據(jù)進行緩沖,一個是DSP串行發(fā)送數(shù)據(jù)的隊列TxQueue,另一個是DSP串行接收數(shù)據(jù)的隊列RxQueue。各有1OO級深度。

        3.串行發(fā)送

        利用隊列和FIFO的串口發(fā)送程序由兩部分組成。一部分是供主程序調(diào)用的應(yīng)用型函數(shù),另一部分為中斷程序,它完成數(shù)據(jù)的發(fā)送。以下是一個應(yīng)用型函數(shù)的例子,DSP2812串行發(fā)送一個字節(jié)的數(shù)據(jù):

        SciaSendChar(unsigned char sChar)函數(shù)由主函數(shù)調(diào)用,它將要發(fā)送的數(shù)據(jù)入隊。而后使能FIFO發(fā)送中斷。

        在上文的FIFO設(shè)置中,已設(shè)置當(dāng)TXFIFO中數(shù)據(jù)為O時進入發(fā)送中斷,由于串行通訊開始前TXFIFO中并無數(shù)據(jù),所以一旦FIFO發(fā)送中斷打開,就立即進入該中斷程序。

        串行發(fā)送中斷程序的一種寫法:

        串行數(shù)據(jù)的發(fā)送是在中斷中完成的,只要發(fā)送隊列中還有數(shù)據(jù),就會間歇性進入該中斷,中斷程序會判斷當(dāng)前發(fā)送隊列還有多少個元素等待發(fā)送,若不足16個,則把數(shù)據(jù)全部寫入FIFO,若大于16個,則寫入16個,寫入FIFO的數(shù)據(jù),DSP會自動發(fā)送出去,無需CPU的干預(yù)。當(dāng)發(fā)送隊列中無數(shù)據(jù)時,則判定為發(fā)送完,關(guān)閉中斷,防止因FIFO空而反復(fù)進入該中斷。

        若CPU有其他的關(guān)鍵進程需要響應(yīng),則可以把該關(guān)鍵進程的中斷優(yōu)先級設(shè)置得高于串行發(fā)送中斷,這樣在發(fā)送數(shù)據(jù)時依然可以響應(yīng)關(guān)鍵進程。

        4.串行接收

        利用FIFO的串行接收程序同樣由兩部分組成,一部分是串行接收中斷,另一部分是從串行接收隊列中取數(shù)的程序。

        串行接收中斷的一種實現(xiàn)方法:在上文的FIFO設(shè)置中,我們令FIFO中的數(shù)據(jù)大于等于16時進入串行接收中斷,中斷程序只需要取出數(shù)據(jù)并將之存往串行接收隊列RxQueue即可。在這里有一個隱含的約定,即,串行接收的數(shù)據(jù)數(shù)量必須大于等于16字節(jié),否則由于串行接收匹配中斷的執(zhí)行條件不滿足,將導(dǎo)致該中斷不執(zhí)行,無法處理FIFO接收的數(shù)據(jù)。

        在主函數(shù)或其他中斷程序(如定時中斷)中再處理RxQueue中接收到的數(shù)據(jù),這樣處理起來非常靈活,實際應(yīng)用中可根據(jù)需要編寫程序。下面給出在主函數(shù)中處理RxQueue的一個簡單例子供參考。

        總結(jié)

        本文提出了一種工程上實用的DSP串行通訊的方法。該方法采用DSP的FIFO和數(shù)據(jù)隊列對串行數(shù)據(jù)進行了兩級雙向緩沖,利用中斷完成數(shù)據(jù)收發(fā),有實時性好,可靠性高等優(yōu)點,可以方便的移植到其他芯片上,有一定的通用性。該程序已在作者的一個項目中得到應(yīng)用,運行穩(wěn)定。

        [1]TMS320x281x Serial Communications Interface(SCI)Reference Guide.TI公司,2009,7.

        [2]嚴蔚敏,吳偉民編著.數(shù)據(jù)結(jié)構(gòu)(C語言版)[M].2002,9.

        [3]陳明計,等編著.嵌入式實時操作系統(tǒng)Small RTOS51原理與應(yīng)用[M].2005,7.

        猜你喜歡
        發(fā)送數(shù)據(jù)字節(jié)寄存器
        移動自組網(wǎng)中MAC層協(xié)議研究
        No.8 字節(jié)跳動將推出獨立出口電商APP
        Lite寄存器模型的設(shè)計與實現(xiàn)
        No.10 “字節(jié)跳動手機”要來了?
        基于馬爾科夫鏈的LoRaWAN網(wǎng)絡(luò)節(jié)點性能分析
        帶標記方式的CRDSA++協(xié)議性能分析*
        簡談MC7字節(jié)碼
        分簇結(jié)構(gòu)向量寄存器分配策略研究*
        使用IPSec安全傳輸數(shù)據(jù)
        高速數(shù)模轉(zhuǎn)換器AD9779/AD9788的應(yīng)用
        成 人色 网 站 欧美大片在线观看 | 日韩精品中文字幕综合| 久久国产精品美女厕所尿尿av| 中文人妻av久久人妻水蜜桃| 国产av一区二区精品久久凹凸| 亚洲色偷偷综合亚洲AVYP| 中文字幕视频一区二区| 久久亚洲av成人无码国产最大| 国产在线一区二区三区av| 欧美日韩区1区2区3区| 国产一区二区三区在线观看免费版| 亚洲最大免费福利视频网| 一本一道波多野结衣av中文| 狠狠久久精品中文字幕无码| 久久五月精品中文字幕| 色偷偷激情日本亚洲一区二区| 欧美成人免费全部| av无码精品一区二区乱子| 国产特黄a三级三级三中国| 久久人人爽av亚洲精品| 国产精品成人免费视频网站京东| 亚洲国产成人资源在线桃色| 成人爽a毛片在线播放| 欧美日韩亚洲中文字幕二区| 欧美在线三级艳情网站| 日本精品国产1区2区3区| 粉嫩国产av一区二区三区| 大陆极品少妇内射aaaaaa| 亚洲国产另类久久久精品小说| 国产91九色免费视频| 大ji巴好深好爽又大又粗视频| 久热在线播放中文字幕| 亚洲精品2区在线观看| 亚洲精品成人无百码中文毛片| 国产精品久久久久久久久岛| 国产精品午夜波多野结衣性色| 国产女人av一级一区二区三区| 色综合久久久久综合99| 国产精品开放小视频| 亚洲一区二区丝袜美腿| 天天综合网网欲色|