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