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