S3C44B0X和μC/OS-Ⅱ應(yīng)用于嵌入式智能家居設(shè)計(jì)
隨著社會(huì)經(jīng)濟(jì)的飛速發(fā)展及計(jì)算機(jī)控制技術(shù)等科技的進(jìn)步,人們對(duì)自身的生活和工作環(huán)境有了更高的要求,由此對(duì)家居智能化控制系統(tǒng)的要求也越來(lái)越緊迫。設(shè)計(jì)家居智能化控制系統(tǒng),對(duì)促進(jìn)住宅現(xiàn)代化建設(shè)具有重要意義。
家居智能化控制系統(tǒng)就是指利用先進(jìn)的計(jì)算機(jī)技術(shù)、網(wǎng)絡(luò)通信技術(shù)、綜合布線(xiàn)技術(shù),將與家居生活相關(guān)的各種子系統(tǒng)有機(jī)結(jié)合,從而進(jìn)行統(tǒng)籌管理,使家居生活更加舒適、安全、有效。
近年來(lái),嵌入式系統(tǒng)設(shè)備全面滲透到人們?nèi)粘I畹母鱾€(gè)領(lǐng)域,本文針對(duì)智能家居嵌入式系統(tǒng)的軟硬件設(shè)計(jì)需求,以S3C44B0X為處理器進(jìn)行智能家居系統(tǒng)的硬件設(shè)計(jì),以實(shí)現(xiàn)μC/OS-Ⅱ在S3C44B0X上的移植。
1 軟硬件選擇
目前主要的嵌入式處理器類(lèi)型有386EX,SC-400,Power PC,MIPS,ARM/Strong,ARM系列等,其中ARM以其小體積、低功耗、低成本、高性能成為嵌入式處理器首選。S3C44B0X是Samsung公司推出的16/32位RISC處理器,基于ARM7TDMI內(nèi)核,提供3級(jí)流水線(xiàn)結(jié)構(gòu)。它一方面具有ARM處理器低功耗、高性能的特點(diǎn),同時(shí)又具有非常豐富的片上資源。其特點(diǎn)如下:
(1)內(nèi)置鎖相環(huán)(PLL),系統(tǒng)主頻最高達(dá)66 MHz;
(2)8路10位ADC,I2C,I2S總線(xiàn)控制器,6個(gè)PWM定時(shí)器;
(3)4種工作模式,正常、慢速、閑置和停止,可以根據(jù)需要切換系統(tǒng)工作方式,使系統(tǒng)功耗降低到最低限度;
(4)內(nèi)置彩色LCD控制器(最大支持256色的DSTN),71個(gè)通用可編程I/O口和實(shí)時(shí)時(shí)鐘(RTC)。
由此可以看出,S3C44BOX具有高性能、低功耗、接口資源豐富的特點(diǎn)。這些特點(diǎn)可以較好地滿(mǎn)足家居智能控制系統(tǒng)的設(shè)計(jì)需要。作為家居智能控制系統(tǒng),除了具有局域網(wǎng)接口、PSTN接口、RS 485接口、藍(lán)牙接口外,還應(yīng)提供音頻視頻接口、HUB接口、報(bào)警傳感器接口等。這些接口可以實(shí)現(xiàn)音頻視頻自動(dòng)切換、多臺(tái)PC同時(shí)上網(wǎng)、與各PC機(jī)結(jié)合完成家庭設(shè)備管理等功能。
μC/OS-Ⅱ是一種源碼公開(kāi)的實(shí)時(shí)嵌入式操作系統(tǒng)。它完全是占先式的實(shí)時(shí)內(nèi)核,是基于優(yōu)先級(jí)的,即總是讓就緒態(tài)中優(yōu)先級(jí)最高的任務(wù)先運(yùn)行,因此實(shí)時(shí)性比非占先式的內(nèi)核要好。它包含了實(shí)時(shí)內(nèi)核、任務(wù)管理、時(shí)間管理、任務(wù)問(wèn)通信同步(信號(hào)量、郵箱、消息隊(duì)列)和內(nèi)存管理等功能;它的絕大部分代碼用C語(yǔ)言編寫(xiě),可移植性強(qiáng)。目前,μC/OS-Ⅱ絕大多數(shù)可以在8位、16位、32位以至64位微處理器、微控制器、數(shù)字信號(hào)處理器(DSP)上運(yùn)行。
2 智能家居硬件設(shè)計(jì)
在選定了處理器之后,外圍電路就可按要求進(jìn)行設(shè)計(jì)。其硬件框圖如圖1所示,主要包括:
2.1 存儲(chǔ)器系統(tǒng)
其中靜態(tài)存儲(chǔ)器由FLASH組成,用于存儲(chǔ)智能家居中的嵌入式操作系統(tǒng)、HTTP服務(wù)器、家庭網(wǎng)絡(luò)服務(wù)器以及支持各種服務(wù)所需的文件系統(tǒng)。動(dòng)態(tài)存儲(chǔ)器采用SDRAM,以提高系統(tǒng)的允許速度和采用操作系統(tǒng)來(lái)保證系統(tǒng)的穩(wěn)定性,整個(gè)智能家居系統(tǒng)軟件平臺(tái)存儲(chǔ)在FLASH中,在系統(tǒng)啟動(dòng)時(shí),將從FLASH中運(yùn)行Boot-loader,解壓縮操作系統(tǒng),并將其搬移到SDRAM中,完成搬移之后,所有程序從SDRAM中運(yùn)行。其中,F(xiàn)LASH選用SST公司生產(chǎn)的SST39VF160芯片。39VF160采用CMOS工藝設(shè)計(jì),支持1 M的地址空間,20條地址總線(xiàn),16條數(shù)據(jù)總線(xiàn)。SDRAM選用Hynix公司生產(chǎn)的HY57V641620芯片。HY57V641620存儲(chǔ)容量為4組×16 M(8 MB),由于采用行/列地址鎖存機(jī)制,由行列地址共同構(gòu)成20條地址線(xiàn),完成1 M的尋址范圍。
2.2 輸入/輸出系統(tǒng)
包含LCD液晶顯示、鍵盤(pán)以及微型打印機(jī)等,可以基本滿(mǎn)足測(cè)試數(shù)據(jù)等顯示以及人機(jī)交互的需要。
2.3 外部通訊接口
包括RS 232串口、以太網(wǎng)接口。RS 232接口用于系統(tǒng)同PC機(jī)之間的通訊,可以把測(cè)試系統(tǒng)保存的數(shù)據(jù)導(dǎo)出來(lái),本系統(tǒng)采用國(guó)際通用的RS 232C作為串行接口;以太網(wǎng)接口則可以把整個(gè)測(cè)試系統(tǒng)連接到互聯(lián)網(wǎng)上,從而實(shí)現(xiàn)該測(cè)試系統(tǒng)的遠(yuǎn)程監(jiān)控。
2.4 藍(lán)牙通信模塊
在家居控制器上使用藍(lán)牙技術(shù)主要是為了給家居控制器的各個(gè)功能模塊提供無(wú)線(xiàn)傳輸?shù)姆绞健T诩揖又醒肟刂破魃峡梢圆捎盟{(lán)牙模塊加開(kāi)放藍(lán)牙協(xié)議的方式開(kāi)發(fā)藍(lán)牙功能,綜合考慮成本、結(jié)構(gòu)等因素,信息家電可以采用藍(lán)牙模塊加單片機(jī)的方式實(shí)現(xiàn)藍(lán)牙功能。將整個(gè)藍(lán)牙核心協(xié)議棧移植到單片機(jī)中顯然不合實(shí)際,可以采用這樣的開(kāi)發(fā)方案:在藍(lán)牙HCI層的基礎(chǔ)上,根據(jù)信息家電信息傳輸?shù)膶?shí)際需求,建立相關(guān)協(xié)議,利用單片機(jī)直接和藍(lán)牙硬件模塊交換HCI指令,實(shí)現(xiàn)信息交互。單片機(jī)采集信息家電的相關(guān)信息通過(guò)藍(lán)牙模塊發(fā)送出去,藍(lán)牙模塊也可以將接收到的命令用HCI指令傳遞給單片機(jī)執(zhí)行。
2.5 溫度、濕度檢測(cè)和實(shí)時(shí)時(shí)鐘實(shí)現(xiàn)模塊
主要實(shí)現(xiàn)對(duì)室內(nèi)環(huán)境的監(jiān)控,便于控制系統(tǒng)采取適當(dāng)?shù)姆绞娇刂剖覂?nèi)環(huán)境。其中溫度采用溫度傳感器實(shí)現(xiàn),實(shí)時(shí)時(shí)鐘采用S3C440BX自帶的RTC模塊實(shí)現(xiàn)。
3 μC/OS-Ⅱ在S3C44B0X上的移植
μC/OS-Ⅱ在S3C44B0X上的移植,需要修改3個(gè)與ARM體系相關(guān)的文件:OS_CPU.H,OS_CPU_C.C,OS_CPU.ASM。在μC/OS-Ⅱ的移植過(guò)程中,采用ADS作為編譯器,ADS由一套完備的應(yīng)用程序構(gòu)成,可用來(lái)編寫(xiě)和調(diào)試ARM系列的RISC處理器的應(yīng)用程序,并可通過(guò)主機(jī)和實(shí)時(shí)分析工具讓使用者對(duì)應(yīng)用程序進(jìn)行完整的分析,加速實(shí)時(shí)嵌入式系統(tǒng)的開(kāi)發(fā)和測(cè)試。
3.1 設(shè)置OS_CPU.H中與處理器和編譯器相關(guān)的代碼
這部分代碼的定義主要包括數(shù)據(jù)類(lèi)型的定義、開(kāi)關(guān)中斷代碼的宏定義、任務(wù)切換時(shí)執(zhí)行代碼的定義和堆棧增長(zhǎng)方向的定義。在S3C44B0X中,所有的任務(wù)堆棧都是用OS_TSK聲明數(shù)據(jù)類(lèi)型,用OS_ENTER_CRITI-CAL()和OS_EXIT_CRITICAL()實(shí)現(xiàn)開(kāi)關(guān)中斷,用結(jié)構(gòu)常量OS_STK_GROWTH來(lái)指定堆棧的生長(zhǎng)方式。
3.2 編寫(xiě)與操作系統(tǒng)相關(guān)的函數(shù)OS_CPU_C.C
μC/OS-Ⅱ定義了6個(gè)函數(shù)在該文件中,其中OSTa-skStklnit()是任務(wù)堆棧初始化函數(shù),其他5個(gè)函數(shù)都是Hook函數(shù),即OSTaskCreateHook(),OSTaskDelHook(),OSTaskSwHook( ),OSTaskStatHook( ),OsTimeTickHook()等接口函數(shù),是系統(tǒng)預(yù)留給用戶(hù)添加功能的,只要聲明,可以不包含代碼,當(dāng)用戶(hù)需要額外擴(kuò)展功能時(shí),在這5個(gè)函數(shù)中選擇加入就可。實(shí)際上需要修改的只有OSTaskStklnit()函數(shù),該函數(shù)用來(lái)初始化任務(wù)堆棧,使得任務(wù)堆棧建立時(shí)與發(fā)生1次中斷后的堆棧結(jié)構(gòu)相同。S3CA4B0X的堆棧結(jié)構(gòu)如圖2所示。在修改OSTaskStklnit()函數(shù)時(shí)應(yīng)依照該結(jié)構(gòu)進(jìn)行。
3.3 編寫(xiě)與處理器相關(guān)的函數(shù)OS_CPU.ASM
這部分代碼是對(duì)處理器的寄存器進(jìn)行操作,必須用匯編語(yǔ)言來(lái)編寫(xiě),包括以下4個(gè)子函數(shù):
3.3.1 OSStanHighRdy()
運(yùn)行優(yōu)先級(jí)最高的就緒任務(wù),此函數(shù)是在OS-Start()多任務(wù)啟動(dòng)后,負(fù)責(zé)從最高優(yōu)先級(jí)任務(wù)的TCB控制塊中獲得該任務(wù)的堆棧指針SP,通過(guò)SP依次將CPU現(xiàn)場(chǎng)恢復(fù),這時(shí),系統(tǒng)就將控制權(quán)交給用戶(hù)創(chuàng)建的該任務(wù)進(jìn)程,直到該任務(wù)堵塞或者被其他更高優(yōu)先級(jí)的任務(wù)搶占CPU。該函數(shù)僅在多任務(wù)啟動(dòng)時(shí)被執(zhí)行一次,之后多任務(wù)的調(diào)度和切換由以下函數(shù)實(shí)現(xiàn)。
3.3.2 OSCtxsw()
可實(shí)現(xiàn)任務(wù)級(jí)的上下切換,任務(wù)級(jí)切換是通過(guò)SWI或者TRAP人為制造的中斷來(lái)實(shí)現(xiàn)。ISR的向量地址必須指向OSCtxSw(),這一中斷完成的功能為:保存任務(wù)的環(huán)境變量(主要是寄存器的值,通過(guò)入棧來(lái)實(shí)現(xiàn)),將當(dāng)前SP存入任務(wù)控制塊中,載入就緒最高優(yōu)先級(jí)任務(wù)的SP,恢復(fù)就緒態(tài)最高優(yōu)先級(jí)任務(wù)的環(huán)境變量,中斷返回,以完成任務(wù)級(jí)的切換。
3.3.3 OSIntCtxSw()
中斷級(jí)的任務(wù)切換,在時(shí)鐘中斷ISR中(中斷服務(wù)例程)如果發(fā)現(xiàn)有高優(yōu)先級(jí)等待的時(shí)鐘信號(hào)到來(lái),則在中斷中退出后并不返回被中斷任務(wù),而是直接調(diào)度高優(yōu)先級(jí)的任務(wù)執(zhí)行,從而能夠盡快地讓高優(yōu)先級(jí)任務(wù)得到響應(yīng),保證系統(tǒng)的實(shí)時(shí)性能。其原理基本上與任務(wù)級(jí)的切換相同,但是由于進(jìn)人中斷時(shí)已經(jīng)保存了被中斷任務(wù)的CPU現(xiàn)場(chǎng),因此不再進(jìn)行類(lèi)似的操作,只需對(duì)堆棧指針做相應(yīng)調(diào)整。
3.3.4 OSTicklSR()
OSTickISR()是一個(gè)周期性函數(shù),為內(nèi)核提供時(shí)鐘節(jié)拍中斷。頻率越高、系統(tǒng)負(fù)荷越大、其周期的大小決定了內(nèi)核所能給應(yīng)用系統(tǒng)提供的最小時(shí)間間隔。一般只限于毫秒級(jí)(跟處理器有關(guān)),對(duì)于要求更加苛刻的任務(wù),需要用戶(hù)自己建立中斷來(lái)解決。該函數(shù)具體內(nèi)容:保存寄存器,調(diào)用OSIntEnter(),調(diào)用OSTimeTick(),調(diào)用OSIntExit(),恢復(fù)寄存器,中斷返回。但注意不要在OSStaut()之前調(diào)用OSTickISR()。
完成以上3個(gè)程序的改寫(xiě),μC/OS-Ⅱ就可以在S3C44BOX上正確運(yùn)行。
4 結(jié)語(yǔ)
家居智能控制系統(tǒng)是家庭內(nèi)外信息交換和家電控制的平臺(tái)。本文采用SAMSUNG公司的S3C44BOX芯片設(shè)計(jì)硬件和軟件,克服8位單片機(jī)處理速度慢、接口資源和存儲(chǔ)資源不足的限制。在實(shí)驗(yàn)調(diào)試過(guò)程中,該系統(tǒng)運(yùn)行狀況良好、工作穩(wěn)定。證明其設(shè)計(jì)是實(shí)用、有效的。但智能家居嵌入式系統(tǒng)是一個(gè)比較大的系統(tǒng),目前只是涉及到其中核心部分,其他部分還需繼續(xù)探討。