新聞中心

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

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

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

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

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

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

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

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

          4.2.2基于SM501的2D加速顯示接口設計

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

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

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

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

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

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

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

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

        led顯示器相關文章:led顯示器原理




        評論


        相關推薦

        技術專區(qū)

        關閉
        主站蜘蛛池模板: 青阳县| 榆社县| 锦州市| 深圳市| 芜湖县| 城市| 翁牛特旗| 新和县| 武清区| 峨边| 临泉县| 新昌县| 蒲城县| 万山特区| 方城县| 法库县| 临夏市| 文昌市| 合肥市| 蓬安县| 嵊泗县| 盐边县| 吕梁市| 永丰县| 平谷区| 乌拉特前旗| 博客| 泽州县| 雷山县| 汉阴县| 定襄县| 漯河市| 安福县| 乐至县| 广州市| 菏泽市| 马鞍山市| 砀山县| 同江市| 天津市| 墨玉县|