摘 要:將μC/OS-II實時嵌入式操作系統(tǒng)移植到EPSON八位單片機上來開發(fā)短信息電話機。此電話機除普通電話的通用功能外,還增加了短消息收/發(fā)功能、信息瀏覽與查閱功能、信息點播與信息訂閱功能等。
關(guān)鍵詞:短信息電話機 實時操作系統(tǒng) μC/OS-II
1 背 景
后PC時代的到來,使人們開始越來越多地接觸到一個新的概念——嵌入式產(chǎn)品。手機、PDA(如商務(wù)通)等均屬于手持式嵌入式產(chǎn)品,VCD機、機頂盒等也屬于嵌入式產(chǎn)品,而車載GPS系統(tǒng)、數(shù)控機床、網(wǎng)絡(luò)冰箱等同樣都屬于嵌入式產(chǎn)品。信息電器具有信息服務(wù)功能,如網(wǎng)絡(luò)瀏覽、視頻點播、文字處理、電子郵件、個人數(shù)字助理等。后PC時代,家用電器將向數(shù)字化和網(wǎng)絡(luò)化發(fā)展,計算機都將嵌入到電視機、冰箱、微波爐、電話等中,并通過家庭控制中心與Internet連接,轉(zhuǎn)變?yōu)橹悄芫W(wǎng)絡(luò)家電;還可以實現(xiàn)遠程醫(yī)療、遠程教育等。據(jù)估計未來十年間,信息家電(網(wǎng)絡(luò)冰箱、機頂盒、家庭網(wǎng)關(guān)、數(shù)字機頂盒等)總量可達到1~1.5億臺,總市場需求將達到900~1500億元。
Short Messages Phone(短信息電話機)是一種操作簡便、成本低廉的固定電話信息終端產(chǎn)品。它集成了網(wǎng)絡(luò)和智能電話的優(yōu)點,是一種基于信息網(wǎng)絡(luò)的,具有交互功能的信息終端產(chǎn)品,可以通過固定電話網(wǎng)絡(luò)與信息中心進行數(shù)據(jù)雙向傳送。
2 系統(tǒng)功能及其實現(xiàn)方案
2.1 功能特點
短信息電話機除了實現(xiàn)普通電話機的通用功能外,還增加了短消息收/發(fā)、信息瀏覽與查閱、信息點播、信息訂閱、電話簿、來電號碼顯示與存儲、通話記錄、來電轉(zhuǎn)移、呼叫等待、呼叫限制、對屏幕的灰度進行設(shè)置、對回執(zhí)進行設(shè)置以及時鐘和日歷功能、鬧鐘功能、特色鈴聲功能、記事本功能等。
短信息電話機還可以和信息中心在線交互,查看信息中心提供的信息(例如天氣預(yù)報、電視預(yù)告、電影預(yù)告、股價查詢、話費查詢、區(qū)號郵編查詢、新聞欄目、彩票信息等等),還可以訂閱一些自己喜歡的信息。在線瀏覽的信息取決于信息中心提供的信息。
短信息電話機就像是一個固定的手機。手機的功能幾乎它都具備。
2.2 硬件方案
。1)MCU的選擇
MCU是整個方案的核心,由它來處理CPE(客戶端設(shè)備)與IIS(集成信息系統(tǒng)),控制整個電話機的各個功能部件。由于人機界面對速度的要求不是很高,數(shù)據(jù)通信速度也相對較低,一般的8位MCU就能夠滿足方案的要求。我們選擇EPSON 的EOC88系列的E0C88104芯片。
(2)數(shù)據(jù)信號的解/編碼
、 FSK信號的解碼。FSK(頻移鍵控)的解碼選用臺灣華邦公司的W91030。它是用同步串口與MCU連接的,不僅能提供FSK的解碼,而且還能提供CAS信號的檢測(CAS信號是IIS與CPE連接時下傳的一個很重要的握手信號)和振鈴檢測,是一款很實用的芯片,但它的成本較高。如果用分離器件,也能做到FSK解碼,但這樣做沒有經(jīng)過驗證,風(fēng)險較大。
、 DTMF信號的解碼。選用的是9170,這一款芯片是很通用的。
、 DTMF信號的編碼。選用的是臺灣華邦公司的W91082,同樣是以同步串口與MCU相連接。
、 FSK的編碼。FSK信號的編碼不是必需的,考慮到FSK傳送的效率要比DTMF高20~28倍,當(dāng)然最好選用FSK上傳方式。由于相應(yīng)的FSK的編碼器件價位很高,本方案采用了低成本的軟件方式作為后備模塊。
(3)語音電路
目前選用的是Philips公司的TEA1098。該器件集成了普通話音放大、消側(cè)音及免提功能,實用方便,但價位有點高。考慮到我們初次接觸電話電路,而且這部分也不是關(guān)鍵技術(shù),為了縮短研發(fā)周期,選擇這款芯片是比較合適的。
2.3 軟件方案
本系統(tǒng)選用μC/OS-II操作系統(tǒng),將其移植到所選的MCU上。在main中建立一個起始任務(wù)
StartTask。
int main (void){
OSInit();
OSTaskCreate((void*)StartTask,(void*)0X00,(OS_STK ) &StartTaskStk[START_TASK_STK_SIZE-1],0);
OSStart();
return 0;
}
起始任務(wù)中,首先建立一系列的信號量和郵箱:
Sem_Int_Ring = OSSemCreate(0) ;喚醒振鈴任務(wù)
Sem_Any_SMTask = OSSemCreate(0) ;喚醒短消息任務(wù)
Sem_Int_Keyboard = OSSemCreate(0) ;喚醒鍵盤任務(wù)
Sem_Int_ClockTask = OSSemCreate(0) ;喚醒時鐘中斷
Mbox_Any_UI= OSMboxCreate((void *)0);喚醒UI任務(wù)
Mbox_Int_Hook= OSMboxCreate((void *)0);喚醒摘掛機任
;務(wù)
然后,用OSTaskCreate()函數(shù)建立6個任務(wù)。任務(wù)名分別為:HandsetTask(摘/掛機任務(wù))、RingTask(響鈴任務(wù))、KeyTask(鍵盤任務(wù))、SmTask(短消息任務(wù))、UITask(用戶界面(UI)任務(wù))、ClockTask(時鐘任務(wù))。最后,在起始任務(wù)中將它本身刪除掉。
。1)摘/掛機任務(wù)
當(dāng)拿起聽筒或放下聽筒時,就產(chǎn)生中斷。在中斷中,調(diào)用OSMboxPost(Mbox_Int_Hook,Msg_Int_Hook)來喚醒摘/掛機任務(wù),同時清除中斷標(biāo)志。Msg_Int_Hook[0]=0x00為摘機,Msg_Int_Hook[0]=0x01為掛機。
摘/掛機任務(wù)不斷調(diào)用OSMboxPend(Mbox _Int_Hook,0,&err)來獲得信箱。獲得信箱后,根據(jù)Msg_Int_Hook[0]中的值,就知道是摘機還是掛機,然后調(diào)用OSMboxPost(Mbox_Any_UI,Msg_Any_UI)來喚醒UI任務(wù)。Msg_Any_UI [0]=任務(wù)號1,Msg_Any_UI [1]=0x00為摘機,Msg_Any_UI [1]=0x01為掛機。
在掛機的時候,如果先前是在響鈴的時候摘機的,那么UI任務(wù)把它當(dāng)做已接來電處理;如果不是在響鈴的時候摘機的,那么在掛機的時候把它當(dāng)做已撥電話處理。
。2)振鈴任務(wù)
當(dāng)鈴聲來到時,就產(chǎn)生中斷。在這個中斷中,調(diào)用OSSemPost(Sem_Int_Ring)來喚醒振鈴任務(wù)。
響鈴任務(wù)調(diào)用OSSemPend(Sem_Int_Ring,0,&err)來獲得信號量。獲得信號量后,就把下傳的號碼接收下來;根據(jù)號碼就可以知道是短信息,還是普通電話。





