新聞中心

EEPW首頁 > 模擬技術(shù) > 設(shè)計應(yīng)用 > 基于linux的全彩LED顯示屏脫機控制系統(tǒng)設(shè)計

基于linux的全彩LED顯示屏脫機控制系統(tǒng)設(shè)計

作者: 時間:2013-09-28 來源:網(wǎng)絡(luò) 收藏
it-text-size-adjust: auto; orphans: 2; widows: 2; webkit-text-stroke-width: 0px">  每個區(qū)域都包含一個播放列表(playlist)。每個播放列表由一系列顯示項目(playitem)組成。 顯示項目的概念是指在某個顯示區(qū)域上進(jìn)行一次完整的顯示過程。如一段視頻播放,一幅圖片定時顯示,文字的運動顯示等。程序采用了面向?qū)ο蟮脑O(shè)計思想,將不同類型的顯示項目的共性抽象出來,以方便不斷擴展的新的顯示項目和客戶定制的顯示內(nèi)容。

  所有的顯示項目,無論其內(nèi)容如何,都可以抽象為一個隨時間變化的狀態(tài)機。每個顯示項目在時間的推移下在其所屬的區(qū)域中完成自身的顯示,也就是完成一個從初始化到結(jié)束的狀態(tài)轉(zhuǎn)換過程。因此,playitem是一個抽象基類。每種類型的顯示項目只需重新實現(xiàn)playitem提供的公共調(diào)用接口即可。

  每個區(qū)域具有一個播放線程,該線程不斷地從playlist中取出一個顯示項目,執(zhí)行其狀態(tài)轉(zhuǎn)換接口完成顯示過程。這種設(shè)計允許不同類型的顯示項目混合排列在同一個顯示列表下,極大的增加了播放過程安排的靈活性。

  多區(qū)域顯示設(shè)計模型如圖2示。

基于linux的全彩LED顯示屏脫機控制系統(tǒng)設(shè)計

  圖2 多區(qū)域顯示模型

  4.2.2基于SM501的2D加速顯示接口設(shè)計

  顯示層的設(shè)計旨在提供一套可移植的、使用方便的2D顯示接口,包括基于區(qū)域內(nèi)部坐標(biāo)的應(yīng)用顯示層接口和基于屏幕坐標(biāo)而與硬件無關(guān)的底層顯示接口。應(yīng)用顯示層給顯示項目playitem提供簡單的基于區(qū)域坐標(biāo)的顯示接口。基于屏幕坐標(biāo)的底層顯示直接工作在SM501硬件之上,最大化利用了SM501硬件加速能力,同時還提供了可移植的接口。在移植到其他的2D硬件上只需要重新實現(xiàn)底層顯示接口即可。

  由于硬件設(shè)計上SM501處于slave mode與S3C2440連接,SM501不能訪問系統(tǒng)內(nèi)存,所有要進(jìn)行加速操作的顯示內(nèi)容必須存放在SM501的獨立顯存上,這樣不方便移植 DirectFB作為底層顯示接口。因此本文按照通用的2D顯示接口,獨立實現(xiàn)了一套基于屏幕坐標(biāo)的通用底層2D顯示接口。

  在實現(xiàn)上通過mmap把SM501的控制寄存器和獨立顯存全部從內(nèi)核空間映射到用戶空間,這樣在程序中可以直接訪問SM501的寄存器和管理本地顯存,避免了在顯示時應(yīng)用程序與內(nèi)核之間的數(shù)據(jù)交換,顯示加速作用得以充分發(fā)揮?;趯M501的直接訪問,底層顯示層實現(xiàn)了一套基本接口,包括顯存分配與釋放和基本2D加速操作如畫線(line)、矩形填充(fill_rect),位圖復(fù)制(bitblt)、縮放(bitblt_stretch)、色空間轉(zhuǎn)換(CSC)等。其中對視頻播放性能影響最大的是縮放和色空間轉(zhuǎn)換。

  SM501的繪圖引擎(Draw Engine)包括兩個部分,2D繪圖引擎和CSC顏色空間轉(zhuǎn)換模塊。2D繪圖引擎主要用來繪制直線(基于Bresenham算法),矩形填充,復(fù)制(Bitblt),旋轉(zhuǎn)復(fù)制(Rotation bitblt)??s放與顏色空間轉(zhuǎn)換功能都是通過CSC模塊來實現(xiàn)。CSC模塊可以實現(xiàn)YUV422,YUV420,RGB565,RGB888幾種色彩空間及格式轉(zhuǎn)換到RGB565和RGB888,色空間轉(zhuǎn)換隱含了縮放功能。

  顯存分配與釋放管理是對映射到用戶空間的Frame buffer進(jìn)行的。實現(xiàn)上使用空閑鏈表的方法,并且采用最先適應(yīng)的原則。最先適應(yīng)分配算法有利于保留更大的連續(xù)內(nèi)存塊給那些一次性內(nèi)存需求量大的分配請求。由于視頻解碼后色空間轉(zhuǎn)換和縮放必須使用硬件加速來實現(xiàn),因此總是預(yù)留1M的顯存空間給視頻顯示使用。在顯存不足的情況下,通過malloc分配系統(tǒng)內(nèi)存。相應(yīng)的所有顯示層接口的地址參數(shù)均被設(shè)計成為自動識別地址屬于系統(tǒng)內(nèi)存還是獨立顯存,如果地址屬于系統(tǒng)內(nèi)存,則表明當(dāng)前顯存不足,于是使用軟件的方法實現(xiàn)繪圖操作。在釋放顯存時,程序若識別參數(shù)地址為系統(tǒng)內(nèi)存,將調(diào)用free去完成釋放。

  在多個顯示區(qū)域同時顯示的情況下,顯存的分配與釋放管理以及所有的基于硬件加速的2D操作均被互斥地調(diào)用,以避免多線程同時對SM501資源進(jìn)行爭用帶來的與時間相關(guān)的執(zhí)行錯誤。

  由于SM501加速操作只能使用本地幀存的物理地址,而通過mmap映射得到的是進(jìn)程空間的虛擬地址,顯存分配得到的地址也是基于映射后的地址,因此寫入SM501寄存器中作為地址的操作數(shù)必須將進(jìn)程空間地址轉(zhuǎn)化為實現(xiàn)的幀存物理地址。轉(zhuǎn)化方法就是用顯

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

led顯示器相關(guān)文章:led顯示器原理




關(guān)鍵詞: linux 全彩LED 顯示屏 脫機控制

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉