<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 設(shè)計應(yīng)用 > 智能手機電話短信實驗?zāi)K設(shè)計

          智能手機電話短信實驗?zāi)K設(shè)計

          作者: 時間:2010-10-09 來源:網(wǎng)絡(luò) 收藏

          0 引言

          本文引用地址:http://www.ex-cimer.com/article/260735.htm

          隨著嵌入式技術(shù)和通信技術(shù)的發(fā)展,在手機領(lǐng)域,已成為手機發(fā)展的主流趨勢。目前在領(lǐng)域,從處理器選型、操作系統(tǒng)選擇以及應(yīng)用程序開發(fā)都是研究的熱點。在高校計算機相關(guān)專業(yè)的課程中也越來越多地涉及到的相關(guān)內(nèi)容,越來越多的學(xué)生也都投入到智能手機的學(xué)習(xí)和開發(fā)陣營中來。因此,為這些學(xué)生提供相關(guān)的實驗設(shè)備顯得很必要。本文提出基于三星S3C2410芯片為核心構(gòu)建智能手機硬件實驗平臺,并結(jié)合無線通信模塊實現(xiàn)智能手機電話短消息功能。為學(xué)生進行智能手機相關(guān)的實驗提供了平臺,通過本平臺,學(xué)生可以自己動手完成智能手機設(shè)計時的各種軟件開發(fā),改變了傳統(tǒng)的驗證式的實驗平臺模式,有利于學(xué)生創(chuàng)新能力的培養(yǎng)。

          1 智能手機軟硬件實驗平臺設(shè)計

          手機的硬件實現(xiàn)方式主要有3種:
          (1)只用基帶芯片,通常稱作功能手機;
          (2)基帶芯片加協(xié)處理器,這類產(chǎn)品是在功能手機的基礎(chǔ)上增強了多媒體處理功能;
          (3)基帶處理器加應(yīng)用處理器。這是智能手機所采用的設(shè)計,基帶處理器用于通信,應(yīng)用處理器用于多媒體和其他應(yīng)用。

          在設(shè)計智能手機硬件平臺時,需要注意以下幾個方面:
          (1)應(yīng)用處理器應(yīng)具有足夠高的主頻用以保證系統(tǒng)的運行速度,使各種應(yīng)用能夠運行暢通;
          (2)系統(tǒng)應(yīng)有足夠的內(nèi)存空間用以保存應(yīng)用程序和用戶數(shù)據(jù);
          (3)具備良好的人機交互界面,用戶可以方便地進行操作?;鶐幚砥餍阅芊€(wěn)定,保證用戶實時通信。

          1.1 硬件平臺設(shè)計

          硬件主要包括調(diào)試接口、存儲系統(tǒng)、GSM/GPRS通信模塊、人機交互模塊。核心控制器芯片采用三星公司的S3C2410處理器,頻率穩(wěn)定運行在203 MHz。作為實驗平臺,完成智能手機的基本功能,不要求大量數(shù)據(jù)處理,因而203 MHz的主頻能夠保證系統(tǒng)的運行速度。系統(tǒng)采用64 MB SDRAM和64 MB NANDFLASH作為存儲系統(tǒng),從而保證系統(tǒng)和用戶的存儲空間。通信上,應(yīng)用處理器通過UART2連接基帶處理器即GSM/GPRS通信模塊,GSM/GPRS模塊采用SIMCOM公司的SIM300模塊,該模塊具備完善的GSM/GPRS三頻/四頻解決方案,支持GSM通話及短消息收發(fā)和 GPRS數(shù)據(jù)傳輸,可以方便地通過AT命令進行控制。系統(tǒng)通過LCD顯示圖形操作界面,采用觸摸屏代替?zhèn)鹘y(tǒng)鍵盤操作,界面更友好,操作更方便。同時提供擴展接口用于學(xué)生擴展智能手機的其他功能,如利用以太網(wǎng)接口實現(xiàn)網(wǎng)頁瀏覽等。整個系統(tǒng)的硬件框圖如圖1所示。

          1.2 系統(tǒng)軟件平臺設(shè)計

          系統(tǒng)軟件平臺的功能是為應(yīng)用程序開發(fā)提供平臺。系統(tǒng)軟件以操作系統(tǒng)和嵌入式GUI Qtopia為基礎(chǔ)來設(shè)計的,整個軟件平臺的架構(gòu)如圖2所示。

          1.2.1 Bootloader

          Bootloader是系統(tǒng)上電后運行的第一段代碼,主要工作是完成硬件的初始化和為加載操作系統(tǒng)準(zhǔn)備好條件。它的實現(xiàn)是依賴于硬件的,不同體系結(jié)構(gòu)開發(fā)板的Bootloader變化很大。為了更好地支持目標(biāo)板的硬件設(shè)備,該系統(tǒng)選擇在ADS1.2集成開發(fā)環(huán)境下開發(fā)自己的Bootloa-der。 Bootloader的實現(xiàn)過程主要分為以下2個階段:

          (1)主要進行與CPU內(nèi)核以及存儲設(shè)備密切相關(guān)的初始化處理工作,這部分的代碼通常用ARM匯編指令編寫,包含在start.S文件中。通常包括一些步驟:
          ①硬件初始化工作。包括關(guān)閉看門狗;屏蔽所有中斷;設(shè)置處理器時鐘和工作頻率;初始化外部寄存器;初始化堆棧指針。
          ②為階段(2)準(zhǔn)備RAM空間,并把階段(2)的代碼拷貝倒RAM,跳轉(zhuǎn)倒階段(2)的入口點。

          (2)完成一般的啟動流程以及提供目標(biāo)板設(shè)備的驅(qū)動支持,這部分會被拷貝倒RAM中執(zhí)行,這段代碼通常由C語言來實現(xiàn),具有較強的可讀性和移植性。
          通常包括一下步驟:
          ①通過set_gpios()函數(shù)完成通用I/0設(shè)置;
          ②通過mere_map_init(),mmu_init()函數(shù)完成內(nèi)存映射和內(nèi)存管理單元初始化;
          ③初始化MTD設(shè)備,使用mtd_dev_init()函數(shù);
          ④拷貝NAND FLASH中的Kernel映像文件和根文件系統(tǒng)映像到RAM空間中;
          ⑤跳轉(zhuǎn)到內(nèi)核的第一條指令處。

          至此,Bootloader的任務(wù)結(jié)束,接下來的任務(wù)由操作系統(tǒng)完成。

          1.2.2 操作系統(tǒng)的剪裁、移植

          操作系統(tǒng)負(fù)責(zé)對整個的外圍設(shè)備進行管理和對各個軟件任務(wù)進行調(diào)度。這對于智能手機而言是非常重要的。操作系統(tǒng)采用開源、免費的Linux,基于 2.6版本進行移植,主要移植過程包括建立開發(fā)環(huán)境、下載內(nèi)核源碼、修改配置文件、配置內(nèi)核、編譯內(nèi)核、編譯模塊幾個步驟,因為移植的過程大致相同,這里只做簡單介紹:

          (1)宿主機上的交叉編譯工具采用arm-linux-gcc-3.4.1 ;
          (2)修改commom-smdk.c文件,為NANDFLASH設(shè)置分區(qū);
          (3)修改配置文件fs/Kconfig,使內(nèi)核支持啟動時掛載devfs;
          (4)配置內(nèi)核;
          (5)編譯內(nèi)核與模塊,用Busy-box工具制作yaffs文件系統(tǒng)。

          1.2.3 嵌入武GUI Qtopia的移植

          嵌入式GUI用于開發(fā)短信、電話應(yīng)用程序圖形界面,本文采用Trolltech公司的Qtopia作為圖形界面庫,采用版本是Qtopia-core-opensou rce-src-4.4.3。移植的主要工作有:
          (1)修改qmouselinuxtp_qws.h文件,使Qtopia支持觸摸屏;
          (2)配置、編譯、安裝;
          (3)拷貝相關(guān)的庫文件到開發(fā)板,并設(shè)置環(huán)境變量。

          2 應(yīng)用程序設(shè)計

          電話和短信應(yīng)用程序是智能手機最基本也是最核心的應(yīng)用。應(yīng)用程序設(shè)計的主要工作包括:應(yīng)用程序的流程設(shè)計、通信模塊和應(yīng)用處理器的串口通信以及電話和短消息應(yīng)用程序界面開發(fā)。

          2.1 電話/短信應(yīng)用程序流程

          應(yīng)用程序采用定時器函數(shù)來控制整個程序的流程。定時器每200 ms觸發(fā)1次。

          新電話、新短信的檢測流程如圖3所示,應(yīng)用程序初始化需要對GSM/GPRS通信模塊與應(yīng)用處理器之間的接口進行初始化,此外還要定義1個200 ms觸發(fā)的定時器。系統(tǒng)初始化完畢之后,定時器觸發(fā)開始讀串口數(shù)據(jù)進行判斷。當(dāng)串口無數(shù)據(jù)時,等待下一次定時器出發(fā);當(dāng)串口有數(shù)據(jù)時,將串口的數(shù)據(jù)進行判斷;當(dāng)數(shù)據(jù)中有新短信提示符時,按照PDU短信的解碼格式對該短信進行解碼,并調(diào)用UI界面提示用戶新短信到達,詢問用戶是否閱讀;當(dāng)數(shù)據(jù)中有新電話提示符時,調(diào)用UI界面,詢問用戶是否接聽。

          當(dāng)需要發(fā)送短信或撥號時,應(yīng)用程序流程如圖4所示。當(dāng)用戶調(diào)用發(fā)信界面編輯好短信,并輸入完收信方,點擊發(fā)送鈕時,應(yīng)用程序首先判斷短信中心號碼和接收信息號碼是否正確,若不正確,提示用戶錯誤;若號碼和號碼格式均正確,便對要發(fā)送的短信內(nèi)容按照進行PDU短信格式進行編碼,并向串口寫AT命令以便將該短信發(fā)送出去。撥號和掛斷電話的流程很簡單,只需要向串口寫入ATD+所撥號碼以及ATH就可,當(dāng)撥號錯誤時,提示用戶撥號錯誤。

          2.2 通信模塊串口通信的實現(xiàn)

          串口是連接智能手機應(yīng)用處理器和GSM/GPRS通信模塊的接口,串口通信流程是打開串口、串口的初始化設(shè)置、讀/寫串口、關(guān)閉串口,如圖5所示。

          在應(yīng)用程序初始化時初始化時需要對串口進行初始化,對串口的初始化主要是設(shè)置串口的一些參數(shù),包括以下幾個部分:保存以前的串口設(shè)置、建立新的配置、設(shè)置波特率、設(shè)置數(shù)據(jù)位、設(shè)置奇偶位、激活當(dāng)前配置、處理要寫入的引用對象、設(shè)置最少字符和等待時間、設(shè)置停止位。只有串口初始化完畢之后,應(yīng)用程序才能對串口進行相應(yīng)操作。

          2.3 用程序用戶界面的設(shè)計

          用戶界面是人機交互的接口。本文采用Linux下常用的界面設(shè)計工具Qt來設(shè)計應(yīng)用程序所需的各種UI界面。本文設(shè)計的撥打電話、發(fā)送短信的界面如圖6所示。

          當(dāng)點擊界面上的按鈕如撥號、發(fā)送時,利用其信號和槽機制,將其和底層相應(yīng)的函數(shù)如撥號函數(shù)、發(fā)信函數(shù)相關(guān)聯(lián)就可以實現(xiàn)撥號和發(fā)送信息的功能。用戶就可以利用該界面進行撥打電話和發(fā)送短信了。

          3 結(jié)語

          本文設(shè)計了一種基于的智能手機實驗?zāi)K。構(gòu)建了智能手機軟、硬件平臺,并完成了電話短信的應(yīng)用程序設(shè)計。為學(xué)生進行智能手機開發(fā)的相關(guān)實驗提供了平臺。目前,本平臺已應(yīng)用于北京化工大學(xué)通信實驗室創(chuàng)新型實驗平臺中,并為學(xué)生進行智能手機實驗進行服務(wù)。在后續(xù)的設(shè)計中,考慮將嵌入式數(shù)據(jù)庫移植到應(yīng)用程序中以實現(xiàn)電話短信中的名片夾以及收件箱等功能,并開發(fā)基于該硬件平臺下的其他應(yīng)用程序如MP3播放等模塊以提供給學(xué)生進行試實驗和學(xué)習(xí)。



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();