999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于ARM-Linux和單片機的數據通信系統設計

2013-08-20 04:59:06姜秀杰
電子設計工程 2013年21期
關鍵詞:單片機系統

楊 斌 , 滿 峰 , 姜秀杰 , 劉 波

(1.中國科學院 空間科學與應用研究中心,北京 100190;2.中國科學院研究生院 北京 100049)

在前些年,很多嵌入式產品都是基于單片機而開發設計的。隨著嵌入式技術的發展,原來產品的功能開始變得不足和落后,例如,以前基于單片機的產品很多沒有以太網功能和文件管理功能,且擴展性差。增加和更新產品功能成為保持原來產品競爭力的關鍵。此時,單片機的局限性便顯示出來。單片機雖然開發簡單、價格低廉,但資源卻較少[1]。如果直接將單片機更換成高端的處理器,難度和工作量都將會很大。所以,在原來系統中增加功能強大的處理器,例如ARM,是一個很好的解決方法。ARM的高性能、低功耗使其成為現代流行嵌入式系統的首選。而且現在的中高端ARM可以嵌入Linux操作系統,這使開發軟件變得方便、安全和高效。單片機主要有RS232、I2C、SPI總線,現在已有的產品,ARM和單片機通信主要是通過串口,但通信速率較低。本文使用恩智普公司的ARM9處理器LPC3250和CYGNAL公司的C8051F120單片機,設計并實現了嵌入式Linux下ARM9和單片機基于SPI[2]總線的數據通信接口。

1 系統硬件設計

系統的硬件連接圖如圖1所示。

圖1 硬件連接圖Fig.1 Hardware connection diagram

系統中,LPC3250與C8051F121通過SSP總線相連接。SSP總線兼容 SPI、4線SSI或Microwire總線。在系統中,SSP被配置為SPI的幀格式與單片機通信。C8051F120的 P0.2、P0.3、P0.4、P0.5經過數字交叉開關的選擇,依次對應 SPI/SSP接口的 SCK、MISO、MOSI、NSS。 其中,SCK 是時鐘信號;MOSI是主設備數據輸出和從設備數據輸入信號;MISO是從設備數據輸出和主設備數據輸入信號;NSS是片選信號。

ARM與單片機除了通過SPI總線相連接外,還將ARM的GPO_20端口與單片機的外部中斷0端口相連接。單片機的P1.6端口經過數字交叉開關的選擇,被設置為外部中斷0端口。此連接用于ARM每秒給單片機提供一個外部中斷信號,單片機根據此中斷更新發送數據。

2 單片機程序設計

單片機在系統中作為SPI從設備,與ARM通信的程序包括4個模塊:與SPI總線和外部中斷0相關的初始化;SPI中斷處理函數;外部中斷0中斷處理函數;更新發送數據。

2.1 初始化

初始化模塊是其他功能模塊的前提,其他功能模塊的實現都要依據初始化后單片機的狀態編寫代碼。

對 SPI的初始化包括: 配置 P0.2、P0.3、P0.4、P0.5為 SPI管腳;將C8051F120配置為SPI從設備;選擇四線制SPI,同時把 NSS管腳設置為輸入;使能SPI;使能SPI中斷;將SPI中斷設置為高優先級以保證數據傳輸過程中不會被打斷。

對于外部中斷0的初始化,本系統首先將P1.6設置為/INT0端口,并將外部中斷0配置為下降沿觸發,然后開啟外部中斷,并將外部中斷0的優先級設置為高以保證每一個外部中斷產生時,都能按時響應。

2.2 SPI中斷處理函數

單片機SPI中斷處理函數主要功能是將發送給ARM的數據寫入SPI0DAT寄存器,并預裝入移位寄存器中,等待ARM讀取。SPI中斷處理函數的流程如圖2所示。

圖2 SPI中斷處理函數流程圖Fig.2 SPI interrupt handler flow chart

引起SPI中斷的中斷源有4個,所以,進入SPI中斷處理函數后,首先對中斷源進行判斷,“SPI0CN|0x0F=0x8F?”是為了確定SPI中斷是否是由一字節數據傳輸結束引起。是,則用軟件清除SPI的中斷標志;如果不是,則要重新初始化SPI。由于SPI是全雙工通信,接收以字節與發送以字節同時完成,所以清除中斷后需要讀接收數據寄存器,然后判斷接收緩沖器是否為空,這可以確保ARM傳送過來的數據被讀取成功,同時,能防止下次數據傳輸結束后,由于這次接收緩沖器中數據未被讀取而導致SPI的接收溢出標志被置位引起SPI中斷。在讀取數據之后,寫下次發送給ARM數據之前,還要判斷發送緩沖器是否為空,這可以防止SPI的寫沖突標志被置位引起SPI中斷。確保發送緩沖區為空后,可以把數據寫入SPI0DAT數據寄存器,等待ARM提供SCK時鐘時,按位發送數據。

2.3 外部中斷0中斷處理函數

在外部中斷0的中斷處理函數中,為了減少中斷處理的時間,本系統定義了一個全局變量INT0_Flag作為自定義中斷標志,在外部中斷0產生時,只將INT0_Flag賦值為1。然后在main()函數中查詢INT0_Flag,當它為1時,更新待發送數據。

2.4 main函數

在main函數中,首先要調用初始化函數,完成外部中斷0和SPI相關的初始化,然后循環查詢外部中斷0的自定義中斷標志INT0_Flag。每當INT0_Flag在外部中斷0的中斷處理函數中被賦值為1后,main函數中將更新一組待發送數據。

因為C8051F120通過SPI每次只能傳送一個字節,所以在發送數據前,先把待發送的數據轉換成ASCII碼,然后把所有數據轉換成的ASCII碼存放在一個char型的一維數組中,在SPI中斷處理函數中,此一維數組中的數據依次被賦值給SPI0DAT數據寄存器。為了防止上一秒數據未被ARM全部讀取,而影響下一秒ARM讀取的數據,在每次更新待發送數據后,都將指向一維數據的指針指向數組的第0個字節,SPI中斷處理函數中,通過此指針給SPI0DAT賦值。 main函數的程序流圖如圖3所示。

圖3 main函數流程圖Fig.3 Flow chart of main function

3 ARM-Linux下對單片機的驅動程序設計

LPC3250與C8051F120通信包括兩個模塊,一個是SPI數據傳輸,另一個是LPC3250給C8051F120提供外部中斷信號,所以驅動程序也包括兩個:SPI驅動程序、中斷信號產生驅動程序。

3.1 SPI驅動程序設計

開發Linux設備驅動有一個固定模型,開發的重點和難點是 struct cdev結構的struct file_operations結構中[3-5]函數指針方法的實現。file_operations結構中函數指針有很多,根據功能需求,本系統只實現該結構中的部分函數,并羅列如下:

結構的第一個字段幾乎在所有情況下都被初始化為THIS_MODULE,此處可以不管,但必不可少。

open提供給驅動程序以初始化的能力[6]。c8051f120_open要完成的任務包括:復用管腳選擇;控制器使能、主/從機選擇;幀長度設置、時鐘和相位極性設置、通信速率設置、禁止中斷。LPC3250的SPI管腳與SSP管腳復用,如果使用SPI控制器控制管腳,則只能半雙工通信;如果使用SSP控制器控制SPI總線通信,可以實現全雙工。由于單片機端的SPI是全雙工,所以系統中將SPI/SSP復用管腳配置為SSP管腳。LPC3250的SSP控制SPI總線通信每幀長度可以設置為4到16位,考慮到C8051F120作為從SPI設備時,一次只能傳輸一個字節,所以把LPC3250的數據長度設置為8位。通信速率設置為500K。時鐘和相位極性和單片機端的設置一致即可。c8051f120_open部分代碼如下:

由于SPI的全雙工特性,同時進行讀寫操作,所以,c8051f120_write只通過copy_from_user函數接收應用程序要發送給單片機的數據,并將其保存在內核空間的數據結構中,等待c8051f120_read函數讀單片機的同時把此數據發送給單片機。

c8051f120_read函數是LPC3250與C8051F120通信的重點,它讀取C8051F120中的數據,并通過 copy_to_user函數傳給應用程序。c8051f120_read函數的程序流程如圖4所示。

圖4 c8051f120_read函數流程圖Fig.4 Flow chart of c8051f120_read function

當應用程序通過read系統調用進入c8051f120_read后,先拉低片選信號。然后檢查接收FIFO是否為空,因為LPC3250每秒讀取一組數據,為了將數據和時間對應起來,每次讀取前,需要確保接收FIFO為空。然后,讀取N個數據后。每次讀取數據的方法:啟動一次數據傳輸,并通過查詢SSP0狀態寄存器SSP0SR的第4位是否為0來確定數據傳輸是否結束。傳輸結束后,當接收FIFO中有數后,讀取數據,并轉換成char類型后存放在char型的一維數組中。如此,讀取N個數據后,將一維數組中的N個字節通過copy_to_user函數傳遞的應用程序所在的用戶空間,并返回傳遞字節數。

c8051f120_release對應著系統調用中的close函數。它需要完成這個驅動所涉及的配置寄存器的復位。在c8051f120_release中,只需做與c8051f120_open相反的任務,將SSP控制器相關的寄存器復位,然后給出文件關閉的打印提示。

3.2 單片機中斷信號產生驅動設計

此驅動程序與SPI通信的驅動程序在結構上是一樣的,都是要實現struct file_operations結構中函數。此驅動模塊只實現了open、release和write函數。

在open中,設置GPO_20輸出高電平。在write中,先把GPO_20輸出電平拉低2ms,然后再拉高。在release中,GPO_20輸出電平拉。

4 Linux應用程序設計與測試

系統應用程序一方面實現系統功能,另一方面可以對驅動程序進行測試。此處介紹的應用程序主要用于測試使用。應用程序的流程如圖5所示。

圖5 Linux下應用程序流程圖Fig.5 Application flow chart under Linux

程序中,先讀單片機數據,然后再向單片機發送秒脈沖信號,讓其進入外部中斷0更新待發送數據,這樣做的原因是,系統讀取數據并通過以太網發送數據和向SD卡存儲數據所用時間很短,所以在此之后讓單片機產生中斷,單片機可以有1秒的時間更新數據。

通過以太網接收和SD卡上的已存數據以及單片機實際所發數據可以驗證ARM和單片機的數據通信系統。測試表明,本文所介紹的系統,完全滿足LPC3250和C8051F120的通信要求。

5 結 論

根據項目需求,文中設計了基于ARM-Linux和單片機的數據通信系統,成功的實現了LPC3250和C8051F120基于SPI總線的通信。該系統通信速率高,數據處理能力強,擴展性好,且穩定、可靠,具有實際的工程應用價值,且對于其他單片機和ARM的通信系統也有一定的參考價值。

[1]陳萍,姜秀杰.基于FPGA的CAN總線通信系統[J].計算機測量與控制,2009,17(12):2482-2484.

CHEN Ping,JIANG Xiu-jie.System for CAN BUS communication based on FPGA[J].Computer Measurement&Control, 2009,17(12):2482-2484.

[2]易志明,林凌.SPI串行總線接口及其實現[J].自動化與儀器儀表,2002(6):45-48.

YIZhi-ming,LIN Ling.SPIserialbus interface and implementation[J].Automation&Instrumentation,2002(6):45-48.

[3]蔡堯,崔峰.Linux環境下基于MPC8250的SPI接口驅動程序開發[J].電子元器件應用,2007,9(11):12-15.

CAI Yao,CUI Feng.SPI interface and driver development based on MPC8250 under Linux.Electronic Component&Device Applications,2007,9(11):12-15.

[4]李俊.嵌入式Linux設備驅動開發詳解[M].北京:人民郵電出版社,2008.

[5]張雷.嵌入式Linux設備驅動程序設計與實現[D].成都:西南交通大學,2011.

[6]魏永明,耿岳.Linux設備驅動程序[M].北京:中國電力出版社,2006.

猜你喜歡
單片機系統
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
基于單片機的SPWM控制逆變器的設計與實現
電子制作(2019年13期)2020-01-14 03:15:28
基于PowerPC+FPGA顯示系統
基于單片機的層次漸變暖燈的研究
電子制作(2019年15期)2019-08-27 01:12:10
基于單片機的便捷式LCF測量儀
電子制作(2019年9期)2019-05-30 09:42:02
半沸制皂系統(下)
小議PLC與單片機之間的串行通信及應用
電子制作(2018年12期)2018-08-01 00:48:04
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
主站蜘蛛池模板: 秋霞国产在线| 久久综合丝袜日本网| 国产欧美日韩在线一区| 亚洲视频无码| 伊人AV天堂| 免费女人18毛片a级毛片视频| 欧美精品另类| 国产一线在线| 欧美国产日韩另类| 国产一区二区影院| 亚洲免费三区| 精品伊人久久久香线蕉| 国产精品三级av及在线观看| 91精品啪在线观看国产91九色| 中文字幕亚洲另类天堂| 中文字幕伦视频| 内射人妻无码色AV天堂| 国产jizzjizz视频| 久久精品人人做人人爽电影蜜月| 国产永久在线视频| 国产二级毛片| 99久久国产自偷自偷免费一区| 国产第一页亚洲| Jizz国产色系免费| 国内老司机精品视频在线播出| 国产亚洲精品97AA片在线播放| 国产精品太粉嫩高中在线观看| 中文字幕永久在线观看| 久久综合成人| 色妞永久免费视频| 自偷自拍三级全三级视频| 国产精品人成在线播放| 亚洲首页在线观看| 久热re国产手机在线观看| 亚洲香蕉伊综合在人在线| 91精品啪在线观看国产| 国产欧美日韩在线一区| 国产网站在线看| 狠狠干欧美| 亚洲中文字幕23页在线| 夜夜爽免费视频| 亚洲成在人线av品善网好看| 在线看AV天堂| 国产精品jizz在线观看软件| 久久亚洲AⅤ无码精品午夜麻豆| 亚洲精品第1页| 在线日本国产成人免费的| 国产成人精品男人的天堂| 日韩成人高清无码| 亚洲Av激情网五月天| 国产丝袜第一页| 亚洲毛片一级带毛片基地| 久久99精品久久久久久不卡| 午夜福利免费视频| 亚洲av片在线免费观看| 欧美成人第一页| 久草视频精品| 亚洲一区波多野结衣二区三区| 亚洲天堂视频网站| 91精品啪在线观看国产91九色| 欧美亚洲另类在线观看| 丝袜久久剧情精品国产| 日韩视频免费| 性色在线视频精品| 亚洲天堂首页| 欧美亚洲激情| 国产尤物在线播放| 色婷婷在线播放| 四虎AV麻豆| 天天操精品| 久久国产精品波多野结衣| 色综合成人| 91精品久久久久久无码人妻| 色综合激情网| 91在线播放免费不卡无毒| 亚洲黄色激情网站| 免费看久久精品99| 综合色88| 国产丝袜一区二区三区视频免下载| 91免费国产在线观看尤物| 91色综合综合热五月激情| 国产精品深爱在线|