趙夢諜,曾志斌
(中國傳媒大學(xué)理工部,北京 100024)
隨著ARM技術(shù)的廣泛應(yīng)用,在嵌入式系統(tǒng)中基于ARM微核的嵌入式處理器已經(jīng)成為市場主流。而嵌入式Linux操作系統(tǒng)則以其開源免費,內(nèi)核可裁剪,功能多等優(yōu)點而得到廣泛應(yīng)用。目前,面向ARM架構(gòu)的嵌入式Linux系統(tǒng)已成為了產(chǎn)品控制系統(tǒng)的主流選擇[1]。出于性能、體積、效果多方面考慮,本文采用基于ARM為核心,并在處理器上構(gòu)建嵌入式Linux操作系統(tǒng),然后在此基礎(chǔ)上進行系統(tǒng)控制和人機交互。
本設(shè)計的基于I2C的射頻激勵器人機交互系統(tǒng)框架如圖1所示。由ARM主控板,基帶編碼模塊,射頻輸出模塊,射頻處理4個部分構(gòu)成[2]。
控制人員通過點擊控制板外接的獨立按鍵板來操控上層應(yīng)用程序,實現(xiàn)設(shè)備參數(shù)的修改。這套設(shè)備內(nèi)部模塊采用了I2C作為內(nèi)部通信協(xié)議,完成設(shè)備內(nèi)模塊參數(shù)的相互傳遞;通過中斷機制和FrameBuffer機制實現(xiàn)了按鍵的控制和LCD液晶屏的顯示,完成人機交互。
圖1 控制板整體結(jié)構(gòu)
I2C(Inter-IntegratedCircuit)總線是由PHILIPS公司開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設(shè)備。I2C總線是有數(shù)據(jù)線SDA和時鐘SCL構(gòu)成的串行總線,可發(fā)送和接收數(shù)據(jù)[3]。在控制板和其它三塊受控板之間、IC與IC之間進行雙向傳遞,最高傳送速率可達100kbps。各種被控電路均并聯(lián)在這條總線上,每個電路都有唯一的地址。每個電路既是主控器(或被空器),又是發(fā)送器(或接收器)。
I2C總線在傳送數(shù)據(jù)過程中共有三類信號,它們分別是:開始信號、結(jié)束信號和應(yīng)答信號。
開始信號:SCL為高電平時,SDA由高電平向低電平跳變,開始傳送信號。
結(jié)束信號:SCL為低電平時,SDA由低電平向高電平跳變,結(jié)束傳送信號。
應(yīng)答信號:接受數(shù)據(jù)的IC在接收到8bit數(shù)據(jù)后,向發(fā)送數(shù)據(jù)的IC發(fā)出特定的低電平,表示已經(jīng)收到數(shù)據(jù)。控制板向受控板發(fā)出一個信號后,等待受控板發(fā)出一個應(yīng)答信號,控制板收到應(yīng)答信號后,根據(jù)實際情況做出是否繼續(xù)傳遞信號的判斷。若未收到應(yīng)答信號,則判斷為受控板出現(xiàn)故障。
基于FrameBuffer的LCD液晶顯示。FrameBuffer譯作幀緩沖,是一個標準的字符型設(shè)備,主設(shè)備號是29。FrameBuffer機制模仿顯卡功能,將顯卡硬件結(jié)構(gòu)抽象成為一系列的數(shù)據(jù)結(jié)構(gòu),可以通過FrameBuffer的讀寫直接對顯卡進行操作。用戶可以將FrameBuffer看成是顯示內(nèi)存的一個映射,將其映射到進程地址空間之后,就可以直接進行讀寫操作,并立即顯示在LCD液晶屏上。
FrameBuffer的顯示緩沖區(qū)位于Linux的內(nèi)核動態(tài)地址空間中。而在Linux中,每個應(yīng)用程序都有自己的虛擬地址空間,應(yīng)用程序是不能直接訪問物理緩沖區(qū)地址的[4]。為此,幀緩沖設(shè)備,通過映射操作,將FrameBuffer的物理地址映射到用戶空間的一段虛擬地址中,然后用戶就可以通過讀寫這段虛擬地址訪問屏幕緩沖區(qū)在屏幕上顯示。FrameBuffer與應(yīng)用程序的交互如圖2所示。
圖2 FrameBuffer與應(yīng)用程序的交互
控制系統(tǒng)是整套設(shè)備的核心,在設(shè)計控制板的過程中,必須考慮到所有需要接口和芯片,如圖3所示.
圖3 控制板的結(jié)構(gòu)設(shè)計
網(wǎng)卡芯片是為用戶在后期提供遠程控制使用,以便用戶遠程觀測激勵器的運行情況。I2C接口是控制板與其他模塊通信的手段,以實現(xiàn)控制板對其他模塊的控制。R232接口是在調(diào)試過程中的重要接口。OTG接口可以讓用戶通過PC的USB接口快速方便的為控制板系統(tǒng)進行升級使用[5]。SD讀卡器則為了給控制板提供多途徑的啟動方式和快速燒錄整套系統(tǒng)程序提供方便。LCD接口和按鍵接口是為了用于外接LCD屏幕和獨立按鍵板實現(xiàn)的人機交互。
控制板與其余3塊模塊的交互實現(xiàn)如下圖4所示。
圖4 IIC實現(xiàn)機制
控制板首先發(fā)送的8位數(shù)據(jù),其中前7位表示模塊的地址,第8位表示數(shù)據(jù)傳送方向。若是0,這是控制板給通信發(fā)送數(shù)據(jù);若是1,則是通信模塊給控制板傳遞數(shù)據(jù)。激勵器中每個模塊都有唯一的地址。三個模塊同時接收到這8位數(shù)據(jù)進行比對,若不是本模塊地址即忽略;若是本模塊地址,則回應(yīng)一個ACK信號。在接收數(shù)據(jù)結(jié)束后,控制板向通信模塊發(fā)送結(jié)束信號P,完成本次數(shù)據(jù)通信,即對激勵器參數(shù)的修改。
LCD液晶屏是設(shè)備與人交互的重要工具。本文采用基于FrameBuffer的LCD顯示方式,具體實現(xiàn)如圖5所示。大多傳統(tǒng)的LCD液晶顯示屏都采用設(shè)定刷新時間作為屏幕更新的途徑,就是即設(shè)定一個刷新周期,計數(shù)器一旦計數(shù)到達刷新周期,即刻將實際內(nèi)存中的數(shù)據(jù)全部寫入LCD映射的虛擬內(nèi)存,不管用戶是否對內(nèi)存進行了操作。這樣做的缺點是,必須設(shè)定較小的刷新周期,才能使獲得用戶獲得的實時性感受。并且,由于用戶對整個LCD液晶屏的寫操作往往只是針對一部分點陣的修改而并全部內(nèi)容的更替,又必須在非常短的時間內(nèi)進行反復(fù)操作,這造成了導(dǎo)致了對CPU資源的浪費不必要的開銷[6]。本文采用了實時逐字對比的方式進行屏幕的刷新,一旦用戶有所操作,便會對實際內(nèi)存造成修改,而后,對產(chǎn)生改變的字節(jié)進行單獨的修改和更替,大大提高了用戶體驗。
圖5 LCD驅(qū)動實現(xiàn)邏輯圖
首先,LCD是有256*64個像素點構(gòu)成,每個像素點由黑色和白色兩色組成,所以分配一塊大小為16384字節(jié)的內(nèi)存作為顯存。其次,LCD初始化操作,注冊一個主設(shè)備號為29,次設(shè)備號為4的設(shè)備給系統(tǒng),讓系統(tǒng)可以檢測到一個容量為16384字節(jié)的存儲空間。再次,配置寄存器,即將控制LCD顯示的I/O通過readl和writel操作配置成對應(yīng)的輸出,然后將實際內(nèi)存的數(shù)據(jù)讀給LCD所映射的虛擬內(nèi)存。最后逐個字節(jié)對比LCD映射的虛擬內(nèi)存和實際的數(shù)據(jù)內(nèi)存,若是該字節(jié)相同,則不操作;若該字節(jié)不相同,則用實際內(nèi)存中的數(shù)據(jù)替代LCD映射的虛擬內(nèi)存數(shù)據(jù),從而LCD屏幕可實時顯示,同時遠遠降低了對CPU的占用率。
通過對激勵器的整體調(diào)試,發(fā)現(xiàn)激勵器可以按照預(yù)期的效果進行工作??刂瓢迮c其余3塊板可以做到完整通信。控制板基本完成所需要的控制操作,按鍵板可以通過用戶對按鍵的點擊實現(xiàn)數(shù)據(jù)的修改功能,同時LCD液晶屏可以完全顯示激勵器的實時工作狀態(tài),從而實現(xiàn)人機交互。
[1]張綺文,謝建雄,謝勁心.ARM嵌入式模塊與綜合系統(tǒng)設(shè)計實例精講[M].北京:電子工業(yè)出版社,2007.
[2]顧海軍,趙曉暉,王洪革.用DSP主機端口實現(xiàn)虛擬I2C總線主控器[J].吉林大學(xué)學(xué)報,2004,22(1):13-17.
[3]王佳斌,戴在平.模擬I2C總線從器件的一種方法[J].華僑大學(xué)學(xué)報(自然科學(xué)版),2004,25(2):206-209.
[4]劉云鑫,張耀雪.一個基于ARM & Linux的嵌入式實時操作系統(tǒng)[J].計算機工程與應(yīng)用,2013,(23):167-173.
[5]劉云鑫,張耀雪.一個基于ARM & Linux的嵌入式實時操作系統(tǒng)[J].計算機工程與應(yīng)用,2013,(23):167-173.
[6]馮明亮.基于ARM & Linux的嵌入式網(wǎng)絡(luò)控制系統(tǒng)的研究與設(shè)計[J].西南科技大學(xué)學(xué)報,2012,(04):110-123.