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