基于S1C33L11的JPEG圖像實時顯示和數(shù)據(jù)傳送系統(tǒng)的設(shè)計
摘 要:本文介紹了將mC/OS-II嵌入式操作系統(tǒng)移植到S1C33L11微處理器的方法,并給出了以S1C33L11為核心構(gòu)成的一個JPEG圖像實時顯示和數(shù)據(jù)傳送系統(tǒng)的設(shè)計方案。
關(guān)鍵詞:S1C33L11;JPEG;嵌入式系統(tǒng);mC/OS-II
引言
近年來,隨著微處理器性能的不斷提高,嵌入式應(yīng)用越來越廣泛?;谀硞€操作系統(tǒng)的實時、多任務(wù)系統(tǒng)的設(shè)計和應(yīng)用成為微處理器應(yīng)用的熱點。S1C33L11是由精工愛普生推出的32位高速、低功耗和低電壓微處理器。本文介紹了將mC/OS-II嵌入式操作系統(tǒng)移植到S1C33L11微處理器的方法,并給出了以S1C33L11為核心構(gòu)成的JPEG圖像實時顯示和數(shù)據(jù)傳送系統(tǒng)的設(shè)計方案。
mC/OS-II的移植
mC/OS-Ⅱ的源碼絕大部分是用移植性很強的ANSI C寫的,只是和微處理器硬件相關(guān)的那部分采用匯編語言,這樣把mC/OS-II移植到S1C33L11中主要是要修改與處理器有關(guān)的代碼,如:OS_CPU.H、OS_CPU_C.C 、OS_CPU_A.ASM。
OS_CPU.H文件
OS_CPU.H文件主要是定義和處理器有關(guān)的數(shù)據(jù)類型及有關(guān)中斷禁止、中斷允許、堆棧的增長方向的設(shè)置。
S1C33L11處理器所使用的編譯器中規(guī)定char為8位有符號數(shù)、short為16位有符號數(shù)、int和long都是32位有符號數(shù)。S1C33L11中堆棧的增長方向為從高地址到低地址。
OS_CPU_C.C文件
在OS_CPU_C.C文件中包含6個簡單的C函數(shù),而和移植密切相關(guān)的是OSTaskInit()函數(shù),它的功能是模擬中斷發(fā)生時處理器壓棧過程,把CPU的寄存器內(nèi)容壓到任務(wù)堆棧中。
在S1C33L11中,堆棧是32位的,中斷的產(chǎn)生是先把PC壓棧然后是PSR壓棧。S1C33L11中OSTaskInit()函數(shù)模擬壓棧過程是:首先任務(wù)函數(shù)地址壓棧然后是PSR值壓棧,接著是16個32位通用寄存器(R15~R0)的壓棧模擬、AHR、ALR和SP的壓棧模擬,最后返回棧頂?shù)闹羔樀刂贰F渲蠵SR的值為 0x00000010設(shè)為中斷使能。
OS_CPU_A.ASM文件
在OS_CPU_A.ASM文件中包含四個匯編語言的函數(shù):OSStartHighRdy()、OSCtxSw()、OSIntCtxSw()和OSTickISR()。
OSStartHighRdy()函數(shù)由OSStart()函數(shù)調(diào)用,功能是運行優(yōu)先級最高的就緒任務(wù)。在這個函數(shù)的移植中,關(guān)鍵之一是從OSTCB HighRdy中得到所指堆棧中的SP,其二是出棧操作。由于在本移植中SP是最后壓棧的,在出棧時,應(yīng)是彈出完16個通用寄存器后的SP值才是中斷返回指令執(zhí)行前的SP,因而在出棧操作時彈出的SP值不傳給SP。
OSCtxSw()是一個任務(wù)級的任務(wù)切換函數(shù)。在S1C33L11系統(tǒng)上,它通過執(zhí)行0號軟中斷的指令來實現(xiàn)任務(wù)切換。這個函數(shù)中移植的關(guān)鍵點是壓棧操作,因為根據(jù)OSTaskInit()函數(shù)中所設(shè)置的堆棧順序,最后壓棧的是SP,把SP的值壓入棧中后SP的值減少了4字節(jié),而這個減小了4字節(jié)后的SP值才是需要壓入棧中的SP的真正的值。做壓棧操作時要對此進行處理。
OSIntCtxSw()是一個中斷級的任務(wù)切換函數(shù),由于中斷的產(chǎn)生可能會引起任務(wù)切換,在中斷服務(wù)程序的最后會調(diào)用OSIntExit()函數(shù)檢查任務(wù)就緒狀態(tài),如果需要進行任務(wù)切換,將調(diào)用OSIntCtxSw()。由于在調(diào)用OSIntCtxSw()之前已經(jīng)發(fā)生了中斷,因而在進入這個函數(shù)后應(yīng)對SP的值進行相應(yīng)的更改,之后的代碼和OSCtxSw()中的一樣。
OSTickISR()是mC/OS-II的時鐘節(jié)拍器,mC/OS-II的時鐘節(jié)拍頻率在10到100之間,通常為了計算方便而設(shè)為整數(shù)。在S1C33L11中用16位定時器0來做節(jié)拍器。
JPEG圖像實時顯示和
數(shù)據(jù)傳送系統(tǒng)設(shè)計
多任務(wù)系統(tǒng)的設(shè)計是以S1C33L11微處理器為核心,以mC/OS-II為操作系統(tǒng),通過USB總線實現(xiàn)JPEG圖像的實時顯示和數(shù)據(jù)傳送的系統(tǒng)。其中USB與PC機通信是利用mC/OS-II的信號量通信機制通過對循環(huán)隊列的操作來實現(xiàn),JPEG圖像解碼是通過S1C33L11自帶的JPEG解碼器來實現(xiàn),并通過S1C33L11自帶的LCDC控制器實現(xiàn)在彩色LCD上的顯示。
系統(tǒng)硬件
在系統(tǒng)硬件上兩個重要的控制器是S1C33L11 內(nèi)置的USB功能控制器和JPEG編解碼器。
S1C33L11 USB功能控制器
S1C33L11 USB功能控制器支持USB1.1協(xié)議的全速模式。支持控制、塊、同步和中斷4種傳輸方式及4個通用通道(Epr(r=a,b,c,d))和一個控制通道(Endpoint0),并為每個通道提供1KB的FIFO。
S1C33L11 JPEG編解碼器
在S1C33L11中,JPEG編解碼器包括在LCDC 模塊中,基于JPEG基線系統(tǒng)(Baseline Standard),滿足JPEG Part-2(ISO/IEC10918-2)的兼容性測試要求。圖像支持最大640*480分辨率,量化表提供兩個壓縮表和4個解壓縮表,哈夫曼表為每個AC(交流系數(shù))和DC(直流系數(shù))提供兩個表。在編碼處理中可插入標志最大可達36字節(jié)。在整個解碼過程中被自動傳送和處理的標志有SOI、SOFO、SOS、DQT、DHT、DRI、RSTm和EOI。解碼器支持YUV4:4:4、YUV4:2:2、YUV4:1:1和YUV4:2:0,編碼器支持YUV4:2:2格式,不支持RGB格式。圖像數(shù)據(jù)處理速率在640*480分辨率下一般少于1/15秒。此外,S1C33L11的JPEG編碼器目前只能夠把從照相接口(Camera Interface)引入的YUV數(shù)據(jù)流通過捕捉調(diào)整器(Capture Resizer)壓縮成JPEG圖像,來自顯示緩沖數(shù)據(jù)的JPEG編碼不被支持。
硬件組成
JPEG圖像實時顯示和數(shù)據(jù)傳送系統(tǒng)電路框圖如圖1所示,包括S1C33L11FOOA1、STN TFT 彩色LCD(SHARP 的LQ022B8DD05)、鍵盤和片外擴展的4M*16bit FLASH和1M*16bit SRAM(EPSON 的S1H0J646B2T)。
系統(tǒng)軟件
JPEG解碼與顯示
JPEG解碼與顯示流程框圖如圖2所示。
USB雙向通信的設(shè)計
USB雙向通信在基本傳輸方式上采用USB塊傳輸,由USB初始化、USB中斷處理、控制傳輸和塊傳輸幾部分組成。在實現(xiàn)雙向通信上,具體通信機制是:嵌入式應(yīng)用程序通過讀寫循環(huán)隊列(OUT循環(huán)隊列和IN循環(huán)隊列各一個)和信號量狀態(tài)與USB 硬件模塊中的OUT 和IN FIFO相互通信,而USB下位機與上位機(PC)的讀寫通信則通過上位機對自定義控制包的讀寫來實現(xiàn),最后通過循環(huán)隊列、信號量、控制包三者的結(jié)合來達到USB雙向通信的目的。
JPEG圖像實時顯示和數(shù)據(jù)的發(fā)送設(shè)計
JPEG數(shù)據(jù)處理和顯示作為一個任務(wù),通過讀取USB OUT循環(huán)隊列和信號量狀態(tài)接收來自PC機的JPEG圖像數(shù)據(jù),并進行LCD顯示處理。當(dāng)JPEG解碼器解碼和LCDC驅(qū)動LCD顯示時,USB做為另一個任務(wù)仍可接收JPEG數(shù)據(jù),從而達到JPEG數(shù)據(jù)的實時顯示。同樣,數(shù)據(jù)的發(fā)送和PC機的數(shù)據(jù)接收也可實現(xiàn)實時性。
系統(tǒng)整體設(shè)計
系統(tǒng)中除了mC/OS-II的空閑任務(wù)外,還有數(shù)據(jù)存儲任務(wù)、JPEG數(shù)據(jù)處理和顯示任務(wù)、數(shù)據(jù)發(fā)送任務(wù)、鍵盤中斷任務(wù)和USB運行任務(wù)。數(shù)據(jù)存儲任務(wù)優(yōu)先級為30,用于USB數(shù)據(jù)的存儲;JPEG數(shù)據(jù)處理和顯示任務(wù)優(yōu)先級為15,用于JPEG數(shù)據(jù)的處理和顯示;數(shù)據(jù)發(fā)送任務(wù)優(yōu)先級為20,用于向USB IN循環(huán)隊列寫入數(shù)據(jù);鍵盤任務(wù)的優(yōu)先級為10,通過讀取鍵盤中斷設(shè)置的事件狀態(tài)進行相應(yīng)的處理,主要是USB運行任務(wù)、JPEG數(shù)據(jù)的處理和顯示任務(wù)、數(shù)據(jù)發(fā)送任務(wù)的加載和卸載以及發(fā)出信號量通知數(shù)據(jù)存儲任務(wù)進入就緒態(tài)等;USB運行任務(wù)的優(yōu)先級為5,通過讀取USB中斷設(shè)置的事件狀態(tài)從硬件USB FIFO中讀取和發(fā)送數(shù)據(jù)。
軟件系統(tǒng)的整體設(shè)計框圖如圖3所示。
結(jié)語
把uC/OS-II移植到S1C33L11中,并以S1C33L11為核心構(gòu)成一個JPEG圖像實時顯示和數(shù)據(jù)傳送系統(tǒng),不僅系統(tǒng)設(shè)計簡潔,硬件集成度高,而且具有較強的抗干擾能力和系統(tǒng)穩(wěn)定性。以S1C33L11為微處理器構(gòu)成的多任務(wù)系統(tǒng)在實時多任務(wù)系統(tǒng)中,特別在多媒體系統(tǒng)中,具有很高的性價比和應(yīng)用前景。■
評論