第一篇:基于ARM的指紋識(shí)別門(mén)禁系統(tǒng)設(shè)計(jì)_圖文.
課程設(shè)計(jì)任務(wù)書(shū)
學(xué)生姓名: 廖年強(qiáng) 專業(yè)班級(jí): 06自動(dòng)化
指導(dǎo)教師: 謝川 工作單位: 重慶工商大學(xué) 計(jì)信學(xué)院
題 目: 基于ARM的指紋識(shí)別門(mén)禁系統(tǒng)設(shè)計(jì)
已知技術(shù)參數(shù)和設(shè)計(jì)要求:
1、硬件主要選擇基于Xscale內(nèi)核的PXA255處理器;
2、傳感器為美國(guó)豪威公司的CMOS圖像傳感器FPS200;
3、設(shè)計(jì)系統(tǒng)的硬件和軟件部分;
4、硬件包括指紋識(shí)別模塊、數(shù)據(jù)處理模塊等;
5、軟件部分包括系統(tǒng)初始化, 指紋處理識(shí)別, 電控鎖控制部分等;
6、以小組為單位完成本任務(wù),每個(gè)小組最多5人;
要求完成的主要任務(wù):(包括課程設(shè)計(jì)工作量及其技術(shù)要求,以及說(shuō)明書(shū)撰寫(xiě)等具體要求)
1、完成元器件選型,設(shè)計(jì)硬件電路,并提供protel電路圖;
2、設(shè)計(jì)中給出最小系統(tǒng)的電路圖擴(kuò)展相應(yīng)的電路,并根據(jù)要求最終形成一個(gè)完整的電路圖,并完成所有源代碼;
3、每個(gè)組員完成不少于3000字的課程設(shè)計(jì)報(bào)告且報(bào)告內(nèi)容不同。
4、課題指標(biāo)從學(xué)生實(shí)際出發(fā),難易適中,經(jīng)過(guò)努力都能夠完成任務(wù),并有所收獲。
時(shí)間安排:2009~2010學(xué)年第一學(xué)期17~18周 指導(dǎo)教師簽名: 年 月 日 教研室主任簽名: 年 月 日
重慶工商大學(xué)課程設(shè)計(jì)成績(jī)?cè)u(píng)定表
學(xué)院:計(jì)信學(xué)院 班級(jí):06自動(dòng)化2班 學(xué)生姓名:廖年強(qiáng) 學(xué)號(hào):2006003921
優(yōu)秀
項(xiàng)目 分值
(100>x≥90 參考標(biāo)準(zhǔn) 參考標(biāo)準(zhǔn) 參考標(biāo)準(zhǔn)
(90>x≥80 參考標(biāo)準(zhǔn)
(80>x≥70(70>x≥60 參考標(biāo)準(zhǔn)
良好
中等
及格
不及格(x<60
評(píng)分
學(xué)習(xí)態(tài)度 15 學(xué)習(xí)態(tài)度認(rèn)真,科學(xué)作風(fēng)嚴(yán)謹(jǐn),嚴(yán)格保證設(shè)計(jì)時(shí)間并按任務(wù)書(shū)中規(guī)定的進(jìn)度開(kāi)展各項(xiàng)工作 學(xué)習(xí)態(tài)度比較認(rèn)真,科學(xué)作風(fēng)良好,能按期圓滿完成任務(wù)書(shū)規(guī)定的任務(wù) 學(xué)習(xí)態(tài)度尚好,遵守組織紀(jì)律,基本保證設(shè)計(jì)時(shí)間,按期完成各項(xiàng)工作
學(xué)習(xí)態(tài)度尚可,能遵守組織紀(jì)律,能按期完成任務(wù)
學(xué)習(xí)馬虎,紀(jì)律渙散,工作作風(fēng)不
嚴(yán)謹(jǐn),不能保證設(shè)計(jì)時(shí)間和進(jìn)度
技術(shù)水平與實(shí)際能力 25 設(shè)計(jì)合理、理論分析與計(jì)算正確,實(shí)驗(yàn)數(shù)據(jù)準(zhǔn)確,有很強(qiáng)的實(shí)際動(dòng)手能力、經(jīng)濟(jì)分析能力和計(jì)算機(jī)應(yīng)用能力,文獻(xiàn)查閱能力強(qiáng)、引用合設(shè)計(jì)合理、理論分析與計(jì)算正確,實(shí)驗(yàn)數(shù)據(jù)比較準(zhǔn)確,有較強(qiáng)的實(shí)際動(dòng)手能力、經(jīng)濟(jì)分析能力和計(jì)算機(jī)應(yīng)用能力,設(shè)計(jì)合理,理論分析與計(jì)算基本正確,實(shí)驗(yàn)數(shù)據(jù)比較準(zhǔn)確,有一定的實(shí)際動(dòng)手能力,主要文獻(xiàn)引用、調(diào)查調(diào)研比設(shè)計(jì)不合理,理論
設(shè)計(jì)基本合分析與計(jì)理,理論分算有原則析與計(jì)算無(wú)錯(cuò)誤,實(shí) 大錯(cuò),實(shí)驗(yàn)驗(yàn)數(shù)據(jù)不數(shù)據(jù)無(wú)大錯(cuò) 可靠,實(shí)
際動(dòng)手能力差,文獻(xiàn)引用、理、調(diào)查調(diào)研文獻(xiàn)引用、非常合理、可調(diào)查調(diào)研比信 較合理、可
信
較可信
調(diào)查調(diào)研有較大的問(wèn)題
創(chuàng)新 10
有較大改進(jìn)有重大改進(jìn)或
或新穎的見(jiàn)獨(dú)特見(jiàn)解,有
解,實(shí)用性一定實(shí)用價(jià)值
尚可
有一定改進(jìn)
有一定見(jiàn)解 觀念陳舊
或新的見(jiàn)解
論文(計(jì)算書(shū)、圖紙50 撰寫(xiě)質(zhì)量 結(jié)構(gòu)嚴(yán)謹(jǐn),邏輯性強(qiáng),層次清晰,語(yǔ)言準(zhǔn)確,文字流暢,完全符合規(guī)范化要求,書(shū)寫(xiě)工整或用計(jì)算機(jī)打印成文;圖紙非常工整、清晰
結(jié)構(gòu)合理,符合邏輯,文章層次分明,語(yǔ)言準(zhǔn)確,文字流暢,符合規(guī)范化要求,書(shū)寫(xiě)工整或用計(jì)算機(jī)打印成文;圖紙工整、清晰
結(jié)構(gòu)合理,層次較為分明,文理通順,基本達(dá)到規(guī)范化要求,書(shū)寫(xiě)比較工整;圖紙比較工整、清晰
結(jié)構(gòu)基本合理,邏輯基本清楚,文字尚通順,勉強(qiáng)達(dá)到規(guī)范化要求;圖紙比較工整
內(nèi)容空泛,結(jié)構(gòu)混亂,文字表達(dá)不清,錯(cuò)別字較多,達(dá)不到規(guī)范化要求;圖紙不工整或不清晰
指導(dǎo)教師評(píng)定成績(jī):
指導(dǎo)教師簽名: 年 月 日
基于ARM的指紋識(shí)別門(mén)禁系統(tǒng)設(shè)計(jì)
計(jì)信學(xué)院 06自動(dòng)化2班 廖年強(qiáng) 2006003921 【摘 要】 本設(shè)計(jì)介紹了基于ARM的指紋識(shí)別門(mén)禁系統(tǒng)的軟硬件設(shè)計(jì)。其中硬件主要是Intel 公司基于Xscale內(nèi)核的PXA255處理器和美國(guó)豪威公司的CMOS圖像傳感器FPS200。軟件設(shè)計(jì)包括系統(tǒng)初始化, 指紋處理識(shí)別, 電控鎖控制部分等。經(jīng)過(guò)實(shí)際測(cè)試該系統(tǒng)工作穩(wěn)定可靠, 達(dá)到了設(shè)計(jì)目的。
【關(guān)鍵詞】 ARM 門(mén)禁系統(tǒng) 指紋識(shí)別 TCP/IP 圖像
一、門(mén)禁系統(tǒng)概述
門(mén)禁系統(tǒng)(Access Contro l System , 又稱出入口控制系統(tǒng),是為保障人們生活、工作及財(cái)產(chǎn)安全, 對(duì)重要通道的出入口進(jìn)行管理與控制的系統(tǒng)。隨著技術(shù)的發(fā)展, 門(mén)禁系統(tǒng)已經(jīng)從傳統(tǒng)的卡式門(mén)禁系統(tǒng)發(fā)展到今天的生物特征識(shí)別門(mén)禁系統(tǒng)。生物特征識(shí)別門(mén)禁系統(tǒng)是以人體生物特征作為辨識(shí)條件的指紋比對(duì)、掌紋比對(duì)、語(yǔ)音比對(duì)等。這些生理特征相同的概率達(dá)到數(shù)十億分之一,因此具有無(wú)法仿冒與借用、不怕遺失、不用攜帶、不會(huì)遺忘,有著個(gè)體特征獨(dú)特性、唯一性、安全性的特點(diǎn),適用于高度機(jī)密性場(chǎng)所的安全保護(hù)。其中指紋識(shí)別發(fā)展最早, 使用也最廣泛。并逐漸與網(wǎng)絡(luò)集成。
二、PXA 255處理器和指紋傳感器FPS200簡(jiǎn)介
本系統(tǒng)采用Intel 公司基于Xscale 內(nèi)核的PXA255處理器。Xscale微架構(gòu)采用ARMV 5TE ISA 兼容指令集(浮點(diǎn)指令集除外,它以ARM 核為中心,在其周圍擴(kuò)展了指令和數(shù)據(jù)內(nèi)存管理(Inst ruct ion andDataM emo ryM anagement Unit, 指令、數(shù)據(jù)和微小數(shù)據(jù)高速緩(Instruction,Data and Mini-DataCache,寫(xiě)緩沖、全緩沖、掛起緩沖和分支目標(biāo)緩沖,電源管理單元, 性能監(jiān)測(cè)單元, 調(diào)試和JTAG 單元以及協(xié)處理器接口、MAC 協(xié)處理器、核心存儲(chǔ)總線等。FPS系列CMOS圖像傳感器芯片是美國(guó)豪威公司的產(chǎn)品。FPS200是高度集成的彩色攝像芯片, 可帶1/4鏡頭。支持多種格式, 內(nèi)設(shè)的SCCB(Serial Camera Cont ro lBus 串行控制總線接口, 提供簡(jiǎn)單控制方式。通過(guò)該接口, 我們可以對(duì)FPS200芯片內(nèi)部所有寄存器值進(jìn)行修改, 從而完成對(duì)FPS200的控制, 包括色彩飽和度的調(diào)整、gamma 校正等等。該芯片最高能達(dá)到每秒鐘30幀的傳輸速率, 并且用戶可以控制圖像質(zhì)量, 可以根據(jù)自己的需要選擇合適的圖像質(zhì)量。另外FPS200內(nèi)置了640×480分辨率的鏡像陣列,A/D轉(zhuǎn)換器, 并支持外部水平、垂直同步輸入格式, 數(shù)字視頻輸出、增益
控制、黑平衡和白平衡等在內(nèi)的控制寄存器功能模塊。其內(nèi)部框圖如圖1。
圖1 FPS200內(nèi)部結(jié)構(gòu)框圖
三、系統(tǒng)硬件設(shè)計(jì)
1、結(jié)構(gòu)框圖
系統(tǒng)的硬件架構(gòu)原理框圖如圖2所示,本系統(tǒng)主要實(shí)現(xiàn)指紋的識(shí)別、處理、特征模板提取、圖2 系統(tǒng)硬件結(jié)構(gòu)圖
結(jié)果顯示,以及完成個(gè)人身份識(shí)別/注冊(cè)功能。主要由ARM9處理、VGA控制及結(jié)果顯示等模塊組成。
2、指紋識(shí)別模塊
指紋識(shí)別模塊核心部分為FPS200傳感芯片,該芯片是一種觸摸式CMOS傳感器件,其傳感區(qū)域?yàn)?.28cm×1.50cm,500dpi分辨率,內(nèi)置有8位ADC,且有微處理器總線、SPI總線三種接口模式。其通過(guò)改變電容陣列的參數(shù)值可在一秒鐘內(nèi)掃描多副指紋圖像便自動(dòng)選擇最好的一幅。本指紋防盜系統(tǒng)采用了傳感器的USB模式傳感器的數(shù)據(jù)線直接與STR912x芯片擴(kuò)展口相接,對(duì)FPS200圖像傳感器進(jìn)行初始化控制和圖像讀取。指紋傳感電路如圖3所示。
圖3 指紋傳感電路
指紋采集電路的原理圖如圖4所示,其工作原理為:PXA255處理器通過(guò)I2C總線設(shè)置FPS200的寄存器,系統(tǒng)開(kāi)GPIO72(VSYNC的中斷使能并檢測(cè)中斷,當(dāng)GPIO72(V SYNC 中斷到來(lái)以后,打開(kāi)GPIO73(HREF中斷使能,關(guān)閉其它的中斷使能。當(dāng)GPIO73(HREF中斷到來(lái)以后, 打開(kāi)GPIO74(PCLK中斷使能, 關(guān)閉其它中斷。每當(dāng)GPIO74(PCLK中斷到來(lái), 就將GPI2Obuffer 里的GPIO64~GPIO71數(shù)據(jù)采集出來(lái), 保存到imgbuf數(shù)組中去。重復(fù)這一步一直到采滿382×240 次為止。將imgbuf按照每隔320 個(gè)元素就舍棄62個(gè)元素進(jìn)行處理,這樣得到的數(shù)據(jù)就是320×240 大小的灰度指紋圖像。
圖4 指紋采集電路原理圖
3、數(shù)據(jù)處理模塊
數(shù)據(jù)處理模塊主要完成指紋識(shí)別的整個(gè)處理過(guò)程,包括指紋圖像軟化、方向圖提取、圖像增強(qiáng)、二值化、圖像濾波、圖像細(xì)化等。該模塊采用了TMS320VC5402,使用FLASH和SDRAM分別作ARM處理器的程序存儲(chǔ)器。TMS320VC5402是16位定點(diǎn)DSP,采用改進(jìn)的哈佛結(jié)構(gòu)適應(yīng)遠(yuǎn)程通信等實(shí)時(shí)嵌入式的需要。為了提高速度,本文對(duì)一些核心的算法進(jìn)行了優(yōu)化。
4、全局邏輯控制單元
系統(tǒng)中大多數(shù)外圍器件與DSP 的握手信號(hào)都是通過(guò)可編程邏輯器件來(lái)完成的,CPLD電路設(shè)計(jì)按其所實(shí)現(xiàn)的功能可分為DSP尋址空間和芯片讀寫(xiě)信號(hào)兩個(gè)模塊,其中DSP尋址空間模塊根據(jù)DSP輸出的控制信號(hào)和數(shù)據(jù)空間選擇信號(hào)分時(shí)尋址SRAM和FLASH兩個(gè)存儲(chǔ)體。
四、系統(tǒng)軟件設(shè)計(jì)
指紋識(shí)別系統(tǒng)的主程序流程圖如圖5所示。目標(biāo)板上電后對(duì)整個(gè)識(shí)別系統(tǒng)進(jìn)行初始化操作,包括DSP系統(tǒng)的初始化和目標(biāo)板上外設(shè)的初始化,對(duì)他們進(jìn)行參數(shù)設(shè)置。初始化完成后開(kāi)始檢測(cè)指紋傳感器上是否有手指,如果有則進(jìn)行指紋圖像的識(shí)別識(shí)別完成后就對(duì)著枚指紋圖像進(jìn)行預(yù)處理工作,在預(yù)處理的前端,對(duì)識(shí)別進(jìn)來(lái)的這枚指紋進(jìn)行質(zhì)量評(píng)估,以判斷是否需要繼續(xù)進(jìn)行指紋圖像的預(yù)處理工作,若指紋質(zhì)量比較好則繼續(xù)進(jìn)行預(yù)處理和數(shù)據(jù)上傳;如果圖像的質(zhì)量很差,則作廢這枚指紋數(shù)據(jù)。
指紋圖像的識(shí)別是在中斷程序中開(kāi)始的,當(dāng)指紋傳感器上沒(méi)有手指時(shí),系統(tǒng)將進(jìn)入省電模式,通過(guò)指紋傳感器FPS200的手指自動(dòng)檢測(cè)中斷來(lái)喚醒系統(tǒng),并進(jìn)行一次指紋圖像識(shí)別、預(yù)處理和數(shù)據(jù)上傳。指紋登記個(gè)數(shù)≥3000枚。
圖5 軟件流程圖
系統(tǒng)設(shè)計(jì)完成后,可脫機(jī)值守工作。122×32點(diǎn)陣LCD實(shí)時(shí)顯示時(shí)鐘、操作狀態(tài),并具有15鍵操作鍵盤(pán),可獨(dú)立完成建檔及查詢功能。系統(tǒng)核查指紋1:N與1:1兩種方式兼容,提供RS232/R485、RJ45接口支持局域網(wǎng)連接。
五、結(jié)論及心得體會(huì)
本次設(shè)計(jì)主要介紹了基于ARM的指紋識(shí)別門(mén)禁系統(tǒng)的軟硬件設(shè)計(jì)。ARM體系結(jié)構(gòu)有豐富的接口, 在門(mén)禁、監(jiān)控等領(lǐng)域正發(fā)揮越來(lái)越重要的作用, 面向可集成, 可擴(kuò)展, 可移植的特定嵌入式系統(tǒng)越來(lái)越多的出現(xiàn)在工程領(lǐng)域。隨著性價(jià)比的提高和軟件開(kāi)發(fā)的成熟,ARM 在嵌入式領(lǐng)域的應(yīng)用會(huì)越來(lái)越廣泛。本文從指紋識(shí)別的可靠性及速度上考慮, 在門(mén)禁系統(tǒng)中以ARM 微處理器做控制器,充分利用了其高速的運(yùn)算處理能力。
通過(guò)此次課程設(shè)計(jì),我真真正正的意識(shí)到,在以后的學(xué)習(xí)中,要理論聯(lián)系實(shí)際,把我們所學(xué)的理論知識(shí)用到實(shí)際當(dāng)中,學(xué)習(xí)嵌入式更是如此,程序只有在經(jīng)常的寫(xiě)與讀的過(guò)程中才能提高,這就是我在這次課程設(shè)計(jì)中的最大收獲。
附:程序代碼:
//fps200.h #ifndef _FPS200_H_ #define _FPS200_H_
#define ROW_NUM 300
#define COL_NUM 256
#define FPS200_IOCRESET _IO(FPS200_IOC_MAGIC
#define FPS_RAH 0x00
#define FPS_RAL 0x01
#define FPS_CAL 0x02
#define FPS_REH 0x03
#define FPS_REL 0x04
#define FPS_CEL 0x05
#define FPS_DTR 0x06
#define FPS_DTR_TIME 0x70
#define FPS_DCR 0x07
#define FPS_DCR_CURRENT 0x6
#define FPS_CTRLA 0x08
#define FPS_CTRL_ASM_ARCH_EP7211_HA_GETSUB 0x04
#define FPS_CTRLA_GETIMG 0x02
#define FPS_CTRLA_GETROW 0x01
#define FPS_CTRLA_AINSEL 0x08
#define FPS_CTRLB 0x09
#define FPS_CTRLB_MODE 0xC0
#define FPS_CTRLB_RDY 0x20
#define FPS_CTRLB_AFDEN 0x08
#define FPS_CTRLB_AUTOINCEN 0x04
#define FPS_CTRLB_XTALSEL 0x02
#define FPS_CTRLB_ENABLE 0x01
#define FPS_CTRLC 0x0A
#define FPS_SRA_ASM_ARCH_EP7211_H 0x0B
#define FPS_SRA_GETSUB 0x04
#define FPS_SRA_GETIMG 0x02
#define FPS_SRA_GETROW 0x01
#define FPS_PGC 0x0C
#define FPS_PGC_VALUE 0x4//0xb
#define FPS_ICR 0x0D
#define FPS_ICR_IP1_RISE 0x80
#define FPS_ICR_IP0_RISE 0x40
#define FPS_ICR_IT1_LEVEL 0x20
#define FPS_ICR_IT0_LEVEL 0x10
#define FPS_ICR_IM1 0x08
#define FPS_ICR_IM0 0x04
#define FPS_ICR_IE1 0x02
#define FPS_ICR_IE0 0x01
#define FPS_ISR 0x0E
#define FPS_ISR_CLRINT 0x01
#define FPS_THR 0x0F
#define FPS_THR_THV 0x40
#define FPS_THR_THC 0x09
#define FPS_CIDH 0x10
#define FPS_CIDL 0x11
#define FPS_TST 0x12
#include
#undef PDEBUG
#ifdef fps200_DEBUG
# ifdef __KERNEL__
/* 調(diào)試的內(nèi)核空間*/
# define PDEBUG(fmt, args...printk(KERN_DEBUG“fps200: ” fmt, ## args # else
/* 用戶空間 */
# define PDEBUG(fmt, args...fprintf(stderr, fmt, ##args # endif #else
# define PDEBUG(fmt, args...調(diào)試*/
不
/*
#endif
#undef PDEBUGG
#define PDEBUGG(fmt, args.../*不調(diào)試*/
/* 設(shè)備結(jié)構(gòu)類型 */
typedef struct FPS200_Dev {
unsigned char flag;
void *data;
} FPS200_Dev;
/* 用于 ioctl */
#define FPS200_IOC_MAGIC 'k'
/*
* S代表 “Set” through a ptr
* G代表 “Get”: reply by setting through a pointer
* C代表 “Check” */
#define FPS200_IOCSDTR _IOC(_IOC_WRITE, FPS200_IOC_MAGIC, 1, 1
#define FPS200_IOCSDCR _IOC(_IOC_WRITE, FPS200_IOC_MAGIC, 2, 1
#define FPS200_IOCSPGC _IOC(_IOC_WRITE, FPS200_IOC_MAGIC, 3, 1
#define FPS200_IOCGDTR _IOC(_IOC_READ, FPS200_IOC_MAGIC, 4, 1
#define FPS200_IOCGDCR _IOC(_IOC_READ, FPS200_IOC_MAGIC, 5, 1
#define FPS200_IOCGPGC _IOC(_IOC_READ, FPS200_IOC_MAGIC, 6, 1
#define FPS200_IOCFCAP _IOC(_IOC_READ, FPS200_IOC_MAGIC,7, 4
#define FPS200_IOCGDATA _IOC(_IOC_READ, FPS200_IOC_MAGIC, 8, 4
#define FPS200_IOCEINT _IOC(_IOC_NONE, FPS200_IOC_MAGIC, 9, 0
#define FPS200_IOCDINT _IOC(_IOC_NONE, FPS200_IOC_MAGIC, 10, 0
#define FPS200_IOCCINT _IOC(_IOC_READ, FPS200_IOC_MAGIC, 11, 1
#define FPS200_IOCCRDY _IOC(_IOC_READ, FPS200_IOC_MAGIC, 12, 1
#define FPS200_IOCCLR _IOC(_IOC_NONE, FPS200_IOC_MAGIC, 13, 0
#define FPS200_IOC_MAXNR 13
int fps200_open(struct inode *inode, struct file *filp;
int fps200_release(struct inode *inode, struct file *filp;
int fps200_ioctl(struct inode *inode, struct file *filp,unsigned int cmd, unsigned long arg;
void fps_get_image(;
#endif /* _FPS200_H_ */
//fps200.c #ifndef __KERNEL__
# define __KERNEL__ #endif
#ifndef MODULE
# define MODULE #endif
#include
#include
#include
/* printk(*/
#include
#include
#include
#include
#include
#include
#include
iounmap(*/
#include
#include
#include
/* kmalloc(*/
/* everything...*/ /* size_t */ /* udelay(*/
/* ioremap(,/* error codes */
#include
#include
#include “fps200.h”
/* local definitions */
#define FPS200_VR 0xfd000000
#define FPS_INDEX(*(volatile unsigned char *FPS200_VR
#define FPS_DATA(*(volatile unsigned char *(FPS200_VR+1
#define FPS200_MAJOR 240
#define FPS200_NR_DEVS 0
#define FPS200_IRQ IRQ_EINT2
#define FPS200_DATASIZE 76800
int fps200_major = FPS200_MAJOR;
int fps200_nr_devs = FPS200_NR_DEVS;
fps200 devices(no use here */
// irq = 6
/* number of bare
MODULE_PARM(fps200_major,“i”;
MODULE_PARM(fps200_nr_devs,“i”;
MODULE_AUTHOR(“Nankai Unversity 5-304”;
MODULE_LICENSE(“GPL”;
struct file_operations fps200_fops = {
open: fps200_open,ioctl: fps200_ioctl,release: fps200_release };
struct file_operations *fps200_fop_array[]={
&fps200_fops,/* type 0 */
/* add more later */ };
#define FPS200_MAX_TYPE 0
FPS200_Dev *fps200_device;
void fps200_interrupt(int irq, void *dev_id, struct pt_regs *regs {
disable_irq(irq;
//fps_get_image(;
fps200_device->flag = 1;}
void fps_get_image(void {
int i = 0;
int j = 0;
FPS_INDEX = FPS_CTRLA;
FPS_DATA = FPS_CTRLA_GETIMG;
for(i=0;i<300;i++ {
FPS_INDEX = FPS_CTRLB;
while(!(FPS_CTRLB_RDY&FPS_DATA{udelay(1;};
for(j=0;j<256;j++ {
FPS_INDEX = FPS_CTRLB;
while(!(FPS_CTRLB_RDY&FPS_DATA{udelay(1;};
FPS_INDEX = FPS_CTRLA;
*((unsigned char *(fps200_device->data+i*256+j=FPS_DATA;
}
} }
int fps200_open(struct inode *inode, struct file *filp {
MOD_INC_USE_COUNT;
return(0;
}
int fps200_release(struct inode *inode, struct file *filp {
MOD_DEC_USE_COUNT;
return(0;}
int fps200_ioctl(struct inode *inode, struct file *filp,unsigned int cmd, unsigned long arg {
int err = 0;
int ret = 0;
unsigned char tmp;
if(_IOC_TYPE(cmd!= FPS200_IOC_MAGIC
return-ENOTTY;
if(_IOC_NR(cmd > FPS200_IOC_MAXNR
return-ENOTTY;
if(_IOC_DIR(cmd & _IOC_READ
err = verify_area(VERIFY_WRITE,(void *arg,_IOC_SIZE(cmd;
else if(_IOC_DIR(cmd & _IOC_WRITE
err = verify_area(VERIFY_READ,(void *arg,_IOC_SIZE(cmd;
if(err
return err;
switch(cmd
{
case FPS200_IOCSDTR:
ret = __get_user(tmp,(unsigned char *arg;
if(tmp > 0x7f
tmp = 0x7f;
FPS_INDEX = FPS_DTR;
FPS_DATA = tmp;
break;
case FPS200_IOCSDCR:
ret = __get_user(tmp,(unsigned char *arg;
if(tmp > 0x1f
tmp = 0x1f;
FPS_INDEX = FPS_DCR;
FPS_DATA = tmp;
break;
case FPS200_IOCSPGC:
ret = __get_user(tmp,(unsigned char *arg;
if(tmp > 0x0f
tmp = 0x0f;
FPS_INDEX = FPS_PGC;
FPS_DATA = tmp;
break;
case FPS200_IOCGDTR:
FPS_INDEX = FPS_DTR;
tmp = FPS_DATA;
ret = __put_user(tmp,(unsigned char *arg;
break;
case FPS200_IOCGDCR:
FPS_INDEX = FPS_DCR;
tmp = FPS_DATA;
ret = __put_user(tmp,(unsigned char *arg;
break;
case FPS200_IOCGPGC:
FPS_INDEX = FPS_PGC;
tmp = FPS_DATA;
ret = __put_user(tmp,(unsigned char *arg;
break;
case FPS200_IOCEINT:
enable_irq(FPS200_IRQ;
break;
case FPS200_IOCDINT:
disable_irq(FPS200_IRQ;
break;
case FPS200_IOCFCAP:
fps_get_image(;
case FPS200_IOCGDATA:
copy_to_user((void *arg, fps200_device->data,F(xiàn)PS200_DATASIZE;
ret = 0;
fps200_device->flag = 0;
break;
case FPS200_IOCCLR:
memset(fps200_device->data, 0, FPS200_DATASIZE;
fps200_device->flag = 0;
break;
case FPS200_IOCCINT:
if(((clps_readw(INTSR1&0x40 == 0
{
udelay(100;
if(((clps_readw(INTSR1&0x40 == 0
ret = __put_user(0x01,(unsigned char *arg;
else
ret = __put_user(0x0,(unsigned char *arg;
}
else
ret = __put_user(0x0,(unsigned char *arg;
break;
case FPS200_IOCCRDY:
ret = __put_user(fps200_device->flag,(unsigned char
*arg;
break;
default:
return-ENOTTY;
}
return ret;}
static int __init fps200_init_module(void {
int result;
char tmp;
if((result = check_region(FPS200_VR,2
{
printk(“<1> can't get I/O port address n”;
return(result;
}
if(!request_region(FPS200_VR,2,“fps200”
return-EBUSY;
SET_MODULE_OWNER(&fps200_fops;
result = register_chrdev(fps200_major, “fps200”,&fps200_fops;
if(result < 0
{
printk(“<1>fps200: can't get major %dn”,fps200_major;
return result;
}
if(fps200_major == 0
fps200_major = result;
/* read chip id first, if not equal 0x20xx, print error*/
FPS_INDEX = FPS_CIDH;
tmp = FPS_DATA;
if(tmp!= 0x20
{
printk(“<1>wrong chip ID, insmod fail.n”;
/* dynamic */
return-EIO;
}
/* row auto inc.inner 12MHz vibrator.no low-power state*/ FPS_INDEX = FPS_CTRLB;
FPS_DATA =(FPS_CTRLB_AFDEN|FPS_CTRLB_AUTOINCEN|FPS_CTRLB_ENABLE;
/* 等待30us */
udelay(35;
// 使時(shí)延大于 30us
/* 中斷 */
FPS_INDEX = FPS_ICR;
FPS_DATA =(FPS_ICR_IE0|FPS_ICR_IT0_LEVEL;
FPS_INDEX = FPS_THR;
FPS_DATA =(FPS_THR_THV | FPS_THR_THC;
/* DTR, DCR, PGC */
FPS_INDEX = FPS_DTR;
FPS_DATA = 0x23;
FPS_INDEX = FPS_DCR;
FPS_DATA = 0x1;
FPS_INDEX = FPS_PGC;
FPS_DATA = 0;
FPS_INDEX = FPS_RAL;
// raw 地址
FPS_DATA = 0;
FPS_INDEX = FPS_RAH;
FPS_DATA = 0;
FPS_INDEX = FPS_REL;
FPS_DATA = 0;
FPS_INDEX = FPS_REH;
/* other initial */
FPS_DATA = 0;
FPS_INDEX = FPS_CAL;
// column 地址
FPS_DATA = 0;
FPS_INDEX = FPS_CEL;
FPS_DATA = 0;
FPS_INDEX = FPS_CTRLC;
FPS_DATA = 0;
FPS_INDEX = FPS_CTRLA;
FPS_DATA = 0;// clear FPS_CTRLA_AINSEL
if(result
{
printk(“<1>can't get assigned irq.n”;
設(shè)置 irq */ /*
return-EIO;
}
fps200_device = kmalloc(sizeof(FPS200_Dev,GFP_KERNEL;
if(!fps200_device
{
FPS_INDEX = FPS_CTRLB;
FPS_DATA = 0;
return-ENOMEM;
}
memset(fps200_device, 0, sizeof(FPS200_Dev;
fps200_device->data = kmalloc(FPS200_DATASIZE,GFP_KERNEL;
if(!fps200_device
{
FPS_INDEX = FPS_CTRLB;
FPS_DATA = 0;
kfree(fps200_device;
return-ENOMEM;
}
memset(fps200_device->data, 0, FPS200_DATASIZE;
result = request_irq(FPS200_IRQ, fps200_interrupt,SA_INTERRUPT, “fps200”, NULL;
return(0;}
static void __exit fps200_cleanup_module(void {
設(shè)置 irq */
/*
kfree(fps200_device->data;
kfree(fps200_device;
FPS_INDEX = FPS_CTRLB;
FPS_DATA = 0;
release_region(FPS200_VR,2;
free_irq(FPS200_IRQ, NULL;
unregister_chrdev(fps200_major, “fps200”;}
module_init(fps200_init_module;
module_exit(fps200_cleanup_module;//main.c void main(void {
BYTE temp;
WORD port = 1001;
LocalMACAddr[0]=0x52;
LocalMACAddr[1]=0x54;
LocalMACAddr[2]=0x4c;
LocalMACAddr[3]=0x30;
LocalMACAddr[4]=0x2e;
LocalMACAddr[5]=0x2f;
LocalIPAddress = 0xc0a8020d;/* 本地地址192.168.2.14*/
ServerIPAddress = 0xc0a8020e;/* 目的地址192.168.2.13*/
/*初始化 */
SerialInitial(;
MemInitial(;
NetInInitial(;
RTLInitial(;
Start8019(;
InterruptInitial(;
// 建立一個(gè)ARP包
p[0] =0xff;
p[1] =0xff;
p[2] =0xff;
p[3] = 0xff;
p[4] = 0xff;
p[5] = 0xff;
p[6] = 0x52;
p[7] =0x54;
p[8] =0x4c;
p[9] =0x30;
p[10] =0x2e;
p[11] =0x2f;
p[12] = 0x08;
p[13] = 0x06;
p[14] = 0x00;
p[15] = 0x01;
p[16] = 0x08;
p[17] = 0x00;
p[18] = 0x06;
p[19] = 0x04;
p[20] = 0x00;
p[21] = 0x01;
// 發(fā)送ARP包
RTLSendPacket(p,60;
while(1;
#ifdef DEBUG
printf(“n-------bigine-------”;#endif
/* 處理 */
TCPBind(port;
if(TCPConnect(ServerIPAddress,1001 == TRUE
{
while(UserFunc(;
}
/* 延時(shí) */
for(temp;temp<255;temp++;
#ifdef DEBUG
printf(“n run over!”;#endif
Stop8019(;
while(1;}
/* 存儲(chǔ) */
第二篇:基于ARM的指紋識(shí)別門(mén)禁系統(tǒng)設(shè)計(jì)
HUBEI NORMAL UNIVERSITY
嵌入式課程設(shè)計(jì)報(bào)告
課題: 指紋識(shí)別門(mén)禁系統(tǒng)設(shè)計(jì)
姓名: 萬(wàn)苗
學(xué)號(hào): 20*** 院系: 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院
班級(jí): 1303班
導(dǎo)師: 曹杉杉
第 1 / 23頁(yè) 基于ARM的指紋識(shí)別門(mén)禁系統(tǒng)設(shè)計(jì)
【摘 要】 本設(shè)計(jì)介紹了基于ARM的指紋識(shí)別門(mén)禁系統(tǒng)的軟硬件設(shè)計(jì)。其中硬件主要是Intel 公司基于Xscale內(nèi)核的PXA255處理器和美國(guó)豪威公司的CMOS圖像傳感器FPS200。軟件設(shè)計(jì)包括系統(tǒng)初始化, 指紋處理識(shí)別, 電控鎖控制部分等。經(jīng)過(guò)實(shí)際測(cè)試該系統(tǒng)工作穩(wěn)定可靠, 達(dá)到了設(shè)計(jì)目的。
【關(guān)鍵詞】 ARM 門(mén)禁系統(tǒng) 指紋識(shí)別 TCP/IP 圖像
一、門(mén)禁系統(tǒng)概述
門(mén)禁系統(tǒng)(Access Contro l System), 又稱出入口控制系統(tǒng),是為保障人們生活、工作及財(cái)產(chǎn)安全, 對(duì)重要通道的出入口進(jìn)行管理與控制的系統(tǒng)。隨著技術(shù)的發(fā)展, 門(mén)禁系統(tǒng)已經(jīng)從傳統(tǒng)的卡式門(mén)禁系統(tǒng)發(fā)展到今天的生物特征識(shí)別門(mén)禁系統(tǒng)。生物特征識(shí)別門(mén)禁系統(tǒng)是以人體生物特征作為辨識(shí)條件的指紋比對(duì)、掌紋比對(duì)、語(yǔ)音比對(duì)等。這些生理特征相同的概率達(dá)到數(shù)十億分之一,因此具有無(wú)法仿冒與借用、不怕遺失、不用攜帶、不會(huì)遺忘,有著個(gè)體特征獨(dú)特性、唯一性、安全性的特點(diǎn),適用于高度機(jī)密性場(chǎng)所的安全保護(hù)。其中指紋識(shí)別發(fā)展最早, 使用也最廣泛。并逐漸與網(wǎng)絡(luò)集成。
二、PXA 255處理器和指紋傳感器FPS200簡(jiǎn)介
本系統(tǒng)采用Intel 公司基于Xscale 內(nèi)核的PXA255處理器。Xscale微架構(gòu)采用ARMV 5TE ISA 兼容指令集(浮點(diǎn)指令集除外),它以ARM 核為中心,在其周圍擴(kuò)展了指令和數(shù)據(jù)內(nèi)存管理(Inst ruct ion andDataM emo ryM anagement Unit), 指令、數(shù)據(jù)和微小數(shù)據(jù)高速緩(Instruction,Data and Mini-DataCache),寫(xiě)緩沖、全緩沖、掛起緩沖和分支目標(biāo)緩沖,電源管理單元, 性能監(jiān)測(cè)單元, 調(diào)試和JTAG 單元以及協(xié)處理器接口、MAC 協(xié)處理器、核心存儲(chǔ)總線等。FPS系列CMOS圖像傳感器芯片是美國(guó)豪威公司的產(chǎn)品。FPS200是高度集成的彩色攝像芯片, 可帶1/4鏡頭。支持多種格式, 內(nèi)設(shè)的SCCB(Serial Camera Cont ro lBus)串行控制總線接口, 提供簡(jiǎn)單控制方式。通過(guò)該接口, 我們可以對(duì)FPS200芯片內(nèi)部所有寄存器值進(jìn)行修改, 從而完成對(duì)FPS200的控制, 包括色彩飽和度的調(diào)整、gamma 校正等等。該芯片最高能達(dá)到每秒鐘30幀的傳輸速率, 并且用戶可以控制圖像質(zhì)量, 可以根據(jù)自己的需要選擇合適的圖像質(zhì)量。另外FPS200內(nèi)置了640×480
第 2 / 23頁(yè) 分辨率的鏡像陣列,A/D轉(zhuǎn)換器, 并支持外部水平、垂直同步輸入格式, 數(shù)字視頻輸出、增益 控制、黑平衡和白平衡等在內(nèi)的控制寄存器功能模塊。其內(nèi)部框圖如圖1:
圖1 FPS200內(nèi)部結(jié)構(gòu)框圖
第 3 / 23頁(yè)
三、系統(tǒng)硬件設(shè)計(jì)
1、結(jié)構(gòu)框圖
系統(tǒng)的硬件架構(gòu)原理框圖如圖2所示,本系統(tǒng)主要實(shí)現(xiàn)指紋的識(shí)別、處理、特征模板提取、結(jié)果顯示,以及完成個(gè)人身份識(shí)別/注冊(cè)功能。主要由ARM9處理、VGA控制及結(jié)果顯示等模塊組成。
第 4 / 23頁(yè)
2、指紋識(shí)別模塊
指紋識(shí)別模塊核心部分為FPS200傳感芯片,該芯片是一種觸摸式CMOS傳感器件,其傳感區(qū)域?yàn)?.28cm×1.50cm,500dpi分辨率,內(nèi)置有8位ADC,且有微處理器總線、SPI總線三種接口模式。其通過(guò)改變電容陣列的參數(shù)值可在一秒鐘內(nèi)掃描多副指紋圖像便自動(dòng)選擇最好的一幅。本指紋防盜系統(tǒng)采用了傳感器的USB模式傳感器的數(shù)據(jù)線直接與STR912x芯片擴(kuò)展口相接。
第 5 / 23頁(yè) 指紋采集電路的原理圖如圖4所示,其工作原理為:PXA255處理器通過(guò)I2C總線設(shè)置FPS200的寄存器,系統(tǒng)開(kāi)GPIO72(VSYNC)的中斷使能并檢測(cè)中斷,當(dāng)GPIO72(V SYNC)中斷到來(lái)以后,打開(kāi)GPIO73(HREF)中斷使能,關(guān)閉其它的中斷使能。當(dāng)GPIO73(HREF)中斷到來(lái)以后, 打開(kāi)GPIO74(PCLK)中斷使能, 關(guān)閉其它中斷。每當(dāng)GPIO74(PCLK)中斷到來(lái), 就將GPI2Obuffer 里的GPIO64~GPIO71數(shù)據(jù)采集出來(lái), 保存到imgbuf數(shù)組中去。重復(fù)這一步一直到采滿382×240 次為止。將imgbuf按照每隔320 個(gè)元素就舍棄62個(gè)元素進(jìn)行處理,這樣得到的數(shù)據(jù)就是320×240 大小的灰度指紋圖像。
圖4 指紋采集電路原理圖
第 6 / 23頁(yè)
3、數(shù)據(jù)處理模塊
數(shù)據(jù)處理模塊主要完成指紋識(shí)別的整個(gè)處理過(guò)程,包括指紋圖像軟化、方向圖提取、圖像增強(qiáng)、二值化、圖像濾波、圖像細(xì)化等。該模塊采用了TMS320VC5402,使用FLASH和SDRAM分別作ARM處理器的程序存儲(chǔ)器。TMS320VC5402是16位定點(diǎn)DSP,采用改進(jìn)的哈佛結(jié)構(gòu)適應(yīng)遠(yuǎn)程通信等實(shí)時(shí)嵌入式的需要。為了提高速度,本文對(duì)一些核心的算法進(jìn)行了優(yōu)化。
4、全局邏輯控制單元
系統(tǒng)中大多數(shù)外圍器件與DSP 的握手信號(hào)都是通過(guò)可編程邏輯器件來(lái)完成的,CPLD電路設(shè)計(jì)按其所實(shí)現(xiàn)的功能可分為DSP尋址空間和芯片讀寫(xiě)信號(hào)兩個(gè)模塊,其中DSP尋址空間模塊根據(jù)DSP輸出的控制信號(hào)和數(shù)據(jù)空間選擇信號(hào)分時(shí)尋址SRAM和FLASH兩個(gè)存儲(chǔ)體。
四、系統(tǒng)軟件設(shè)計(jì)
指紋識(shí)別系統(tǒng)的主程序流程圖如圖5所示。目標(biāo)板上電后對(duì)整個(gè)識(shí)別系統(tǒng)進(jìn)行初始化操作,包括DSP系統(tǒng)的初始化和目標(biāo)板上外設(shè)的初始化,對(duì)他們進(jìn)行參數(shù)設(shè)置。初始化完成后開(kāi)始檢測(cè)指紋傳感器上是否有手指,如果有則進(jìn)行指紋圖像的識(shí)別識(shí)別完成后就對(duì)著枚指紋圖像進(jìn)行預(yù)處理工作,在預(yù)處理的前端,對(duì)識(shí)別進(jìn)來(lái)的這枚指紋進(jìn)行質(zhì)量評(píng)估,以判斷是否需要繼續(xù)進(jìn)行指紋圖像的預(yù)處理工作,若指紋質(zhì)量比較好則繼續(xù)進(jìn)行預(yù)處理和數(shù)據(jù)上傳;如果圖像的質(zhì)量很差,則作廢這枚指紋數(shù)據(jù)。
指紋圖像的識(shí)別是在中斷程序中開(kāi)始的,當(dāng)指紋傳感器上沒(méi)有手指時(shí),系統(tǒng)將進(jìn)入省電模式,通過(guò)指紋傳感器FPS200的手指自動(dòng)檢測(cè)中斷來(lái)喚醒系統(tǒng),并進(jìn)行一次指紋圖像識(shí)別、預(yù)處理和數(shù)據(jù)上傳。指紋登記個(gè)數(shù)≥3000枚。系統(tǒng)設(shè)計(jì)完成后,可脫機(jī)值守工作。122×32點(diǎn)陣LCD實(shí)時(shí)顯示時(shí)鐘、操作狀態(tài),并具有15鍵操作鍵盤(pán),可獨(dú)立完成建檔及查詢功能。系統(tǒng)核查指紋1:N與1:1兩種方式兼容,提供RS232/R485、RJ45接口支持局域網(wǎng)連接。
第 7 / 23頁(yè)
五、結(jié)論及心得體會(huì)
本次設(shè)計(jì)主要介紹了基于ARM的指紋識(shí)別門(mén)禁系統(tǒng)的軟硬件設(shè)計(jì)。ARM體系結(jié)構(gòu)有豐富的接口, 在門(mén)禁、監(jiān)控等領(lǐng)域正發(fā)揮越來(lái)越重要的作用, 面向可集成, 可擴(kuò)展, 可移植的特定嵌入式系統(tǒng)越來(lái)越多的出現(xiàn)在工程領(lǐng)域。隨著性價(jià)比的提高和軟件開(kāi)發(fā)的成熟,ARM 在嵌入式領(lǐng)域的應(yīng)用會(huì)越來(lái)越廣泛。本文從指紋識(shí)別的可靠性及速度上考慮, 在門(mén)禁系統(tǒng)中以ARM 微處理器做控制器,充分利用了其高速的運(yùn)算處理能力。
通過(guò)此次課程設(shè)計(jì),我真真正正的意識(shí)到,在以后的學(xué)習(xí)中,要理論聯(lián)系實(shí)際,把我們所學(xué)的理論知識(shí)用到實(shí)際當(dāng)中,學(xué)習(xí)嵌入式更是如此,程序只有在經(jīng)常的寫(xiě)與讀的過(guò)程中才能提高,這就是我在這次課程設(shè)計(jì)中的最大收獲。
第 8 / 23頁(yè)
六、程序代碼:
//fps200.h #ifndef _FPS200_H_ #define _FPS200_H_ #define ROW_NUM 300 #define COL_NUM 256 #define FPS200_IOCRESET _IO(FPS200_IOC_MAGIC)#define FPS_RAH 0x00 #define FPS_RAL 0x01 #define FPS_CAL 0x02 #define FPS_REH 0x03 #define FPS_REL 0x04 #define FPS_CEL 0x05 #define FPS_DTR 0x06 #define FPS_DTR_TIME 0x70 #define FPS_DCR 0x07 #define FPS_DCR_CURRENT 0x6 #define FPS_CTRLA 0x08 #define FPS_CTRL_ASM_ARCH_EP7211_HA_GETSUB 0x04 #define FPS_CTRLA_GETIMG 0x02 #define FPS_CTRLA_GETROW 0x01 #define FPS_CTRLA_AINSEL 0x08 #define FPS_CTRLB 0x09 #define FPS_CTRLB_MODE 0xC0 #define FPS_CTRLB_RDY 0x20 #define FPS_CTRLB_AFDEN 0x08 #define FPS_CTRLB_AUTOINCEN 0x04 #define FPS_CTRLB_XTALSEL 0x02 #define FPS_CTRLB_ENABLE 0x01
第 9 / 23頁(yè) #define FPS_CTRLC 0x0A #define FPS_SRA_ASM_ARCH_EP7211_H 0x0B #define FPS_SRA_GETSUB 0x04 #define FPS_SRA_GETIMG 0x02 #define FPS_SRA_GETROW 0x01 #define FPS_PGC 0x0C #define FPS_PGC_VALUE 0x4//0xb #define FPS_ICR 0x0D #define FPS_ICR_IP1_RISE 0x80 #define FPS_ICR_IP0_RISE 0x40 #define FPS_ICR_IT1_LEVEL 0x20 #define FPS_ICR_IT0_LEVEL 0x10 #define FPS_ICR_IM1 0x08 #define FPS_ICR_IM0 0x04 #define FPS_ICR_IE1 0x02 #define FPS_ICR_IE0 0x01 #define FPS_ISR 0x0E #define FPS_ISR_CLRINT 0x01 #define FPS_THR 0x0F #define FPS_THR_THV 0x40 #define FPS_THR_THC 0x09 #define FPS_CIDH 0x10 #define FPS_CIDL 0x11 #define FPS_TST 0x12 #include
第 10 / 23頁(yè) # define PDEBUG(fmt, args...)fprintf(stderr, fmt, ##args)# endif #else # define PDEBUG(fmt, args...)
/* 不調(diào)試*/ #endif #undef PDEBUGG #define PDEBUGG(fmt, args...)
調(diào)試*/ /* 設(shè)備結(jié)構(gòu)類型 */ typedef struct FPS200_Dev { unsigned char flag;void *data;} FPS200_Dev;
/* 用于 ioctl */ #define FPS200_IOC_MAGIC 'k' /* * S代表 “Set” through a ptr * G代表 “Get”: reply by setting through a pointer * C代表 “Check” */ #define FPS200_IOCSDTR _IOC(_IOC_WRITE, FPS200_IOC_MAGIC, 1, 1)#define FPS200_IOCSDCR _IOC(_IOC_WRITE, FPS200_IOC_MAGIC, 2, 1)#define FPS200_IOCSPGC _IOC(_IOC_WRITE, FPS200_IOC_MAGIC, 3, 1)#define FPS200_IOCGDTR _IOC(_IOC_READ, FPS200_IOC_MAGIC, 4, 1)#define FPS200_IOCGDCR _IOC(_IOC_READ, FPS200_IOC_MAGIC, 5, 1)#define FPS200_IOCGPGC _IOC(_IOC_READ, FPS200_IOC_MAGIC, 6, 1)#define FPS200_IOCFCAP _IOC(_IOC_READ, FPS200_IOC_MAGIC,7, 4)
第 11 / 23頁(yè)
不
/* #define FPS200_IOCGDATA _IOC(_IOC_READ, FPS200_IOC_MAGIC, 8, 4)#define FPS200_IOCEINT _IOC(_IOC_NONE, FPS200_IOC_MAGIC, 9, 0)#define FPS200_IOCDINT _IOC(_IOC_NONE, FPS200_IOC_MAGIC, 10, 0)#define FPS200_IOCCINT _IOC(_IOC_READ, FPS200_IOC_MAGIC, 11, 1)#define FPS200_IOCCRDY _IOC(_IOC_READ, FPS200_IOC_MAGIC, 12, 1)#define FPS200_IOCCLR _IOC(_IOC_NONE, FPS200_IOC_MAGIC, 13, 0)#define FPS200_IOC_MAXNR 13 int fps200_open(struct inode *inode, struct file *filp);int fps200_release(struct inode *inode, struct file *filp);int fps200_ioctl(struct inode *inode, struct file *filp,unsigned int cmd, unsigned long arg);void fps_get_image();#endif /* _FPS200_H_ */ //fps200.c #ifndef __KERNEL__ # define __KERNEL__ #endif #ifndef MODULE # define MODULE #endif #include
*/ #include
*/ #include
everything...*/ #include
#include
#include
第 12 / 23頁(yè)
/* printk()/* kmalloc()
/* error codes */ /* size_t */
/* #include
/* udelay()*/ #include
/* ioremap(), iounmap()*/ #include
local definitions */ #define FPS200_VR 0xfd000000 #define FPS_INDEX(*(volatile unsigned char *)FPS200_VR)#define FPS_DATA(*(volatile unsigned char *)(FPS200_VR+1))#define FPS200_MAJOR 240 #define FPS200_NR_DEVS 0 #define FPS200_IRQ IRQ_EINT2
#define FPS200_DATASIZE 76800 int fps200_major = FPS200_MAJOR;int fps200_nr_devs = FPS200_NR_DEVS;
fps200 devices(no use here)*/ MODULE_PARM(fps200_major,“i”);MODULE_PARM(fps200_nr_devs,“i”);MODULE_AUTHOR(“Nankai Unversity 5-304”);MODULE_LICENSE(“GPL”);struct file_operations fps200_fops = { open: fps200_open, ioctl: fps200_ioctl, release: fps200_release };struct file_operations *fps200_fop_array[]={
第 13 / 23頁(yè)
/*
// irq = 6
/* number of bare &fps200_fops,/* type 0 */
/* add more later */ };#define FPS200_MAX_TYPE 0 FPS200_Dev *fps200_device;void fps200_interrupt(int irq, void *dev_id, struct pt_regs *regs){ disable_irq(irq);//fps_get_image();fps200_device->flag = 1;} void fps_get_image(void){ int i = 0;int j = 0;FPS_INDEX = FPS_CTRLA;FPS_DATA = FPS_CTRLA_GETIMG;for(i=0;i<300;i++){
FPS_INDEX = FPS_CTRLB;
while(!(FPS_CTRLB_RDY&FPS_DATA)){udelay(1);};
for(j=0;j<256;j++){
FPS_INDEX = FPS_CTRLB;
while(!(FPS_CTRLB_RDY&FPS_DATA)){udelay(1);};
FPS_INDEX = FPS_CTRLA;
*((unsigned char *)(fps200_device->data+i*256+j))=FPS_DATA;
} } } int fps200_open(struct inode *inode, struct file *filp){ MOD_INC_USE_COUNT;
第 14 / 23頁(yè) return(0);} int fps200_release(struct inode *inode, struct file *filp){ MOD_DEC_USE_COUNT;return(0);} int fps200_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg){ int err = 0;int ret = 0;unsigned char tmp;if(_IOC_TYPE(cmd)!= FPS200_IOC_MAGIC)return-ENOTTY;if(_IOC_NR(cmd)> FPS200_IOC_MAXNR)return-ENOTTY;if(_IOC_DIR(cmd)& _IOC_READ)err = verify_area(VERIFY_WRITE,(void *)arg, _IOC_SIZE(cmd));else if(_IOC_DIR(cmd)& _IOC_WRITE)err = verify_area(VERIFY_READ,(void *)arg, _IOC_SIZE(cmd));if(err)return err;switch(cmd){ case FPS200_IOCSDTR:
ret = __get_user(tmp,(unsigned char *)arg);
if(tmp > 0x7f)
tmp = 0x7f;
FPS_INDEX = FPS_DTR;
第 15 / 23頁(yè)
FPS_DATA = tmp;
break;case FPS200_IOCSDCR:
ret = __get_user(tmp,(unsigned char *)arg);
if(tmp > 0x1f)
tmp = 0x1f;
FPS_INDEX = FPS_DCR;
FPS_DATA = tmp;
break;case FPS200_IOCSPGC:
ret = __get_user(tmp,(unsigned char *)arg);
if(tmp > 0x0f)
tmp = 0x0f;
FPS_INDEX = FPS_PGC;
FPS_DATA = tmp;
break;case FPS200_IOCGDTR:
FPS_INDEX = FPS_DTR;
tmp = FPS_DATA;
ret = __put_user(tmp,(unsigned char *)arg);
break;case FPS200_IOCGDCR:
FPS_INDEX = FPS_DCR;
tmp = FPS_DATA;
ret = __put_user(tmp,(unsigned char *)arg);
break;case FPS200_IOCGPGC:
FPS_INDEX = FPS_PGC;
tmp = FPS_DATA;
ret = __put_user(tmp,(unsigned char *)arg);
break;case FPS200_IOCEINT:
第 16 / 23頁(yè)
enable_irq(FPS200_IRQ);
break;case FPS200_IOCDINT:
disable_irq(FPS200_IRQ);
break;case FPS200_IOCFCAP:
fps_get_image();case FPS200_IOCGDATA:
copy_to_user((void *)arg, fps200_device->data,F(xiàn)PS200_DATASIZE);
ret = 0;
fps200_device->flag = 0;
break;case FPS200_IOCCLR:
memset(fps200_device->data, 0, FPS200_DATASIZE);
fps200_device->flag = 0;
break;case FPS200_IOCCINT:
if(((clps_readw(INTSR1))&0x40)== 0)
{
udelay(100);
if(((clps_readw(INTSR1))&0x40)== 0)
ret = __put_user(0x01,(unsigned char *)arg);
else
ret = __put_user(0x0,(unsigned char *)arg);}
else
ret = __put_user(0x0,(unsigned char *)arg);
break;case FPS200_IOCCRDY:
ret = __put_user(fps200_device->flag,(unsigned char
*)arg);
第 17 / 23頁(yè)
break;default: return-ENOTTY;} return ret;} static int __init fps200_init_module(void){ int result;char tmp;if((result = check_region(FPS200_VR,2))){ printk(“<1> can't get I/O port address n”);return(result);} if(!request_region(FPS200_VR,2,“fps200”))return-EBUSY;SET_MODULE_OWNER(&fps200_fops);result = register_chrdev(fps200_major, “fps200”,&fps200_fops);if(result < 0){ printk(“<1>fps200: can't get major %dn”,fps200_major);return result;} if(fps200_major == 0)fps200_major = result;
/* read chip id first, if not equal 0x20xx, print error*/ FPS_INDEX = FPS_CIDH;tmp = FPS_DATA;if(tmp!= 0x20){
第 18 / 23頁(yè)
/* dynamic */ printk(“<1>wrong chip ID, insmod fail.n”);return-EIO;} /* row auto inc.inner 12MHz vibrator.no low-power state*/ FPS_INDEX = FPS_CTRLB;FPS_DATA =(FPS_CTRLB_AFDEN|FPS_CTRLB_AUTOINCEN|FPS_CTRLB_ENABLE);
/* 等待30us */ udelay(35);
// 使時(shí)延大于 30us
/* 中斷 */ FPS_INDEX = FPS_ICR;FPS_DATA =(FPS_ICR_IE0|FPS_ICR_IT0_LEVEL);FPS_INDEX = FPS_THR;FPS_DATA =(FPS_THR_THV | FPS_THR_THC);
/* DTR, DCR, PGC */ FPS_INDEX = FPS_DTR;FPS_DATA = 0x23;FPS_INDEX = FPS_DCR;FPS_DATA = 0x1;FPS_INDEX = FPS_PGC;FPS_DATA = 0;
/* other initial */ FPS_INDEX = FPS_RAL;
// raw 地址
FPS_DATA = 0;FPS_INDEX = FPS_RAH;FPS_DATA = 0;FPS_INDEX = FPS_REL;FPS_DATA = 0;FPS_INDEX = FPS_REH;
第 19 / 23頁(yè) FPS_DATA = 0;FPS_INDEX = FPS_CAL;
// column 地址
FPS_DATA = 0;FPS_INDEX = FPS_CEL;FPS_DATA = 0;FPS_INDEX = FPS_CTRLC;FPS_DATA = 0;FPS_INDEX = FPS_CTRLA;FPS_DATA = 0;// clear FPS_CTRLA_AINSEL
if(result){ printk(“<1>can't get assigned irq.n”);return-EIO;} fps200_device = kmalloc(sizeof(FPS200_Dev), GFP_KERNEL);if(!fps200_device){ FPS_INDEX = FPS_CTRLB;FPS_DATA = 0;return-ENOMEM;} memset(fps200_device, 0, sizeof(FPS200_Dev));fps200_device->data = kmalloc(FPS200_DATASIZE, GFP_KERNEL);if(!fps200_device){ FPS_INDEX = FPS_CTRLB;FPS_DATA = 0;
第 20 / 23頁(yè)
設(shè)置 irq */ /* kfree(fps200_device);return-ENOMEM;} memset(fps200_device->data, 0, FPS200_DATASIZE);
/* 設(shè)置 irq */ result = request_irq(FPS200_IRQ, fps200_interrupt, SA_INTERRUPT, “fps200”, NULL);return(0);} static void __exit fps200_cleanup_module(void){ kfree(fps200_device->data);kfree(fps200_device);FPS_INDEX = FPS_CTRLB;FPS_DATA = 0;release_region(FPS200_VR,2);free_irq(FPS200_IRQ, NULL);unregister_chrdev(fps200_major, “fps200”);} module_init(fps200_init_module);module_exit(fps200_cleanup_module);//main.c void main(void){ BYTE temp;WORD port = 1001;LocalMACAddr[0]=0x52;LocalMACAddr[1]=0x54;LocalMACAddr[2]=0x4c;LocalMACAddr[3]=0x30;LocalMACAddr[4]=0x2e;
第 21 / 23頁(yè) LocalMACAddr[5]=0x2f;LocalIPAddress = 0xc0a8020d;/* 本地地址192.168.2.14*/ ServerIPAddress = 0xc0a8020e;/* 目的地址192.168.2.13*/
/*初始化 */ SerialInitial();MemInitial();NetInInitial();RTLInitial();
Start8019();InterruptInitial();
// 建立一個(gè)ARP包
p[0] =0xff;p[1] =0xff;p[2] =0xff;p[3] = 0xff;p[4] = 0xff;p[5] = 0xff;p[6] = 0x52;p[7] =0x54;p[8] =0x4c;p[9] =0x30;p[10] =0x2e;p[11] =0x2f;p[12] = 0x08;p[13] = 0x06;p[14] = 0x00;p[15] = 0x01;p[16] = 0x08;p[17] = 0x00;p[18] = 0x06;
第 22 / 23頁(yè) p[19] = 0x04;p[20] = 0x00;p[21] = 0x01;
// 發(fā)送ARP包
RTLSendPacket(p,60);while(1);
#ifdef DEBUG printf(“n-------bigine-------”);#endif
/* 處理 */ TCPBind(port);if(TCPConnect(ServerIPAddress,1001)== TRUE){
while(UserFunc());}
/* 延時(shí) */ for(temp;temp<255;temp++);#ifdef DEBUG printf(“n run over!”);#endif
/* 存儲(chǔ) */ Stop8019();while(1);}
第 23 / 23頁(yè)
第三篇:基于ARM的IP網(wǎng)絡(luò)電話系統(tǒng)設(shè)計(jì).
海思工作室
杭州匯文教育咨詢有限公司 ——VoIP電話方案投標(biāo)書(shū) 海思工作室
海思工作室 VoIP電話方案投標(biāo)書(shū) 目 錄
一、公司介紹以及項(xiàng)目綜述...........................................................................................................1 1.1 公司介紹..........................................................................................................................1 1.2 公司在本項(xiàng)目中的優(yōu)勢(shì)..................................................................................................2 1.3 VoIP簡(jiǎn)述.........................................................................................................................2
二、項(xiàng)目技術(shù)方案...........................................................................................................................3 2.1 系統(tǒng)框架..........................................................................................................................3 2.2 項(xiàng)目目標(biāo)..........................................................................................................................4 2.2.1 系統(tǒng)實(shí)現(xiàn)基本功能...............................................................................................4 2.2.2 系統(tǒng)實(shí)現(xiàn)拓展功能...............................................................................................4 2.3 技術(shù)路線..........................................................................................................................4 2.3.1 VoIP電話基本傳輸過(guò)程......................................................................................4 2.3.2 VoIP電話的關(guān)鍵技術(shù)..........................................................................................5 2.3.3 嵌入式VoIP終端軟件的設(shè)計(jì)和實(shí)現(xiàn).................................................................6 2.4 使用與維護(hù)......................................................................................................................7 2.4.1 維護(hù)簡(jiǎn)介...............................................................................................................7 2.4.2 承諾與服務(wù)...........................................................................................................8
三、項(xiàng)目管理方案...........................................................................................................................8 3.1 項(xiàng)目計(jì)劃成熟度..............................................................................................................8
3.1.1 整體管理...............................................................................................................8 3.1.2 溝通管理...............................................................................................................9 3.1.3 項(xiàng)目的狀態(tài)周報(bào)制度.........................................................................................10 3.2 質(zhì)量控制管理................................................................................................................10 3.2.1 質(zhì)量基本規(guī)劃.....................................................................................................10 3.2.2 質(zhì)量保證.............................................................................................................11 3.2.3 質(zhì)量檢查.............................................................................................................11 3.3 配置管理........................................................................................................................11 3.4 風(fēng)險(xiǎn)控制........................................................................................................................11
四、項(xiàng)目實(shí)施.................................................................................................................................12 4.1 實(shí)施計(jì)劃........................................................................................................................12 4.2 所需的資源列表............................................................................................................12 4.2.1 硬件資源.............................................................................................................12 4.2.2 人力資源.............................................................................................................13 4.2.3 軟件資源.............................................................................................................13 4.3 項(xiàng)目報(bào)價(jià)........................................................................................................................13 Happy、Strive、Solidarity 0
海思工作室 VoIP電話方案投標(biāo)書(shū) VoIP電話方案投標(biāo)書(shū)
首先,感謝杭州匯文教育咨詢有限公司的關(guān)注,以及提供我們參與此次項(xiàng)目的機(jī)會(huì),讓我們工作室的學(xué)員們能夠更好地積累實(shí)戰(zhàn)經(jīng)驗(yàn),為踏上社會(huì)之路做充分的準(zhǔn)備。冀望于此次接觸機(jī)會(huì)及交流過(guò)程,能夠成為中國(guó)計(jì)量學(xué)院和杭州匯文教育咨詢有限公司打開(kāi)雙方合作之門(mén)的良好基石。
在調(diào)查和理解VoIP電話項(xiàng)目的目標(biāo),以及對(duì)VoIP電話相關(guān)背景分析的基礎(chǔ)上,我們撰寫(xiě)本文。旨在向杭州匯文教育咨詢有限公司介紹我們對(duì)此項(xiàng)目的思路及相關(guān)建議,且展示海思工作室在此次項(xiàng)目上的計(jì)劃與執(zhí)行能力。
一、公司介紹以及項(xiàng)目綜述 1.1 公司介紹
本公司全稱:海思工作室。公司成立于2010年3日12日,位于風(fēng)景秀麗的西子湖畔。海思是HSS(Happy、Strive、Solidarity)的諧音,代表著快樂(lè)、奮斗以及團(tuán)結(jié)的精神。海思的成員一致把這個(gè)作為心中的理念。
公司目前擁有12名人員,人員結(jié)構(gòu)分配合理。其中包括CEO&PM、CTO&SE、PJM&CFO、人事執(zhí)行經(jīng)理、客戶代表、軟件工程師、測(cè)試工程師等。其中公司里的不少精英在電子領(lǐng)域方面取得了許多獎(jiǎng)項(xiàng),因此本公司擅長(zhǎng)有關(guān)電子產(chǎn)品的開(kāi)發(fā),目前專業(yè)從事于一些嵌入式產(chǎn)品的技術(shù)研究和開(kāi)發(fā)。公司設(shè)有兩個(gè)技術(shù)團(tuán)隊(duì),分別進(jìn)行2個(gè)項(xiàng)目工程。團(tuán)隊(duì)成員各司其職,分工明確,工作嚴(yán)謹(jǐn)。公司成員從大一開(kāi)始就已經(jīng)學(xué)習(xí)掌握C語(yǔ)言知識(shí),距今已近三年,因此底蘊(yùn)深厚,對(duì)于C語(yǔ)言和嵌入式也是非常了解。部分成員在校期間曾獲多次獎(jiǎng)學(xué)金和各類獎(jiǎng)項(xiàng)。我們竭盡所能把一切資源投在產(chǎn)品開(kāi)發(fā)上,力求高效、質(zhì)優(yōu)、價(jià)廉、款佳。面對(duì)任何機(jī)遇與挑戰(zhàn),我們正以飽滿的熱情,堅(jiān)定不移的信心,在嵌入式的道路上闊步前進(jìn)。以一流的人才,一流的管理,一流的的服務(wù),立足中國(guó),面向世界,與您攜手并肩,共創(chuàng)美好的明天。
我們的理想和目標(biāo)是:生產(chǎn)出讓客戶滿意的產(chǎn)品。Happy、Strive、Solidarity 1
海思工作室 VoIP電話方案投標(biāo)書(shū) 1.2 VoIP簡(jiǎn)述
VoIP又稱IP電話或IP網(wǎng)絡(luò)電話,是Voice over IP的縮寫(xiě)。VoIP是建立在IP技術(shù)上的分組化、數(shù)字化語(yǔ)音傳輸技術(shù)。其基本原理是:通過(guò)語(yǔ)音壓縮算法對(duì)語(yǔ)音數(shù)據(jù)進(jìn)行壓縮編碼處理,然后把這些語(yǔ)音數(shù)據(jù)按IP等相關(guān)協(xié)議進(jìn)行打包,經(jīng)過(guò)IP網(wǎng)絡(luò)把數(shù)據(jù)包傳輸?shù)浇邮盏?,再把這些語(yǔ)音數(shù)據(jù)包串起來(lái),經(jīng)過(guò)解碼解壓處理后,恢復(fù)成原來(lái)的語(yǔ)音信號(hào),從而達(dá)到由IP網(wǎng)絡(luò)傳送語(yǔ)音的目的。VoIP系統(tǒng)把傳統(tǒng)電話的模擬信號(hào)轉(zhuǎn)換成計(jì)算機(jī)可聯(lián)入因特網(wǎng)傳送的IP數(shù)據(jù)包,同時(shí)也將收到的IP數(shù)據(jù)包轉(zhuǎn)換成聲音的模擬電信號(hào)。作為ngn(下一代網(wǎng)絡(luò))中的重要組成部
分,VoIP是面向未來(lái)、可持續(xù)發(fā)展的語(yǔ)音解決方案,可以為商業(yè)和家庭用戶提供質(zhì)優(yōu)價(jià)廉的IP語(yǔ)音服務(wù)。隨著ngn網(wǎng)絡(luò)技術(shù)的快速發(fā)展,VoIP的通信量也已得到快速增長(zhǎng),并以其低廉的價(jià)格優(yōu)勢(shì)迅速占有市場(chǎng)。VoIP最大的優(yōu)勢(shì)是能廣泛地采用Internet和全球IP互連的環(huán)境,提供比傳統(tǒng)業(yè)務(wù)更多、更好的服務(wù)。因此目前VoIP網(wǎng)絡(luò)電話在市場(chǎng)上有很大的潛力可以挖掘。VoIP電話的特點(diǎn):
帶寬和設(shè)備的使用率高。通信費(fèi)用低。易融于商業(yè)應(yīng)用。
1.3 公司在本項(xiàng)目中的優(yōu)勢(shì)
在研發(fā)VoIP網(wǎng)絡(luò)電話方面,我公司有著得天獨(dú)厚的優(yōu)勢(shì)。不少成員在有關(guān)方面有著深入的研究并獲得過(guò)許多獎(jiǎng)項(xiàng),并且我們有過(guò)開(kāi)發(fā)類似此類項(xiàng)目的先例。此項(xiàng)目,在Linux下比較容易實(shí)現(xiàn),而我公司成員對(duì)Linux上的一些操作比較熟悉。同時(shí)在配置S2440開(kāi)發(fā)板內(nèi)部設(shè)置方面,公司成員有比較強(qiáng)的設(shè)計(jì)能力。我們所有的成員都學(xué)過(guò)計(jì)算機(jī)網(wǎng)絡(luò)和數(shù)據(jù)通信與網(wǎng)絡(luò)課程等有關(guān)方面的課程,在制作VoIP網(wǎng)絡(luò)電話方面有著豐富的經(jīng)驗(yàn),另外,我公司的CTO,他在電子競(jìng)賽方面取得了驕人的成績(jī),獲得了學(xué)校的三等獎(jiǎng)。他本人也對(duì)此項(xiàng)目有著很大的信心。因此在技術(shù)的運(yùn)用上我公司有比較大的優(yōu)勢(shì)。此外,公司的一些成員同時(shí)還在參與另外一個(gè)類似的項(xiàng)目,客戶完全可以對(duì)我們的操作能力放心。我們承諾用性價(jià)比高的材料制作項(xiàng)目,因此在質(zhì)量方面客戶可以完全放心。同時(shí),我 Happy、Strive、Solidarity 2
們將對(duì)客戶給出最適合的價(jià)位和周到的售后服務(wù)工作,盡一切可能滿足客戶,讓客戶滿意。所以我們深信我們能夠在這個(gè)項(xiàng)目比其他公司取得更理想的成果,令客戶滿意。
二、項(xiàng)目技術(shù)方案 2.1 系統(tǒng)框架
當(dāng)一端的PC機(jī)通過(guò)軟件形式的IP電話進(jìn)行通話時(shí),另一端可以是軟件形式的IP電話,也可以是傳統(tǒng)的電話。但是傳統(tǒng)電話必須通過(guò)一個(gè)語(yǔ)音網(wǎng)關(guān),來(lái)將數(shù)字信號(hào)轉(zhuǎn)換成模擬信號(hào)。本方案是采用軟件形式的IP電話進(jìn)行通信。即通過(guò)兩塊開(kāi)發(fā)板實(shí)現(xiàn)簡(jiǎn)單的通話。
系統(tǒng)環(huán)境框圖如圖1所示,其中應(yīng)用服務(wù)器(Application server)是用來(lái)存放IP電話機(jī)的應(yīng)用和配置文件,當(dāng)一方的IP電話用戶需要讀取一些數(shù)據(jù)庫(kù)中的信息時(shí),就會(huì)到應(yīng)用服務(wù)器中來(lái)查找。MCU(Multipoint Control Unit)是用
圖1 系統(tǒng)環(huán)境框圖 電話 Happy、Strive、Solidarity 3 海思工作室 VoIP電話方案投標(biāo)書(shū)
2.2 項(xiàng)目目標(biāo)
2.2.1 系統(tǒng)實(shí)現(xiàn)基本功能
1.輸入對(duì)方的IP地址和自己希望對(duì)方看到自己的昵稱。2.可以撥號(hào)、掛斷、暫停、聲音調(diào)整等功能。3.可以進(jìn)行順暢地通話。
4.可進(jìn)行新用戶的注冊(cè)并把注冊(cè)信息存儲(chǔ)于服務(wù)器。2.2.2 系統(tǒng)實(shí)現(xiàn)拓展功能
1.PC端軟件形式的IP電話撥打普通電話。2.客戶端可對(duì)好友進(jìn)行增、刪、改、查操作。3.客戶端可實(shí)現(xiàn)文本短信功能。4.客戶端可實(shí)現(xiàn)來(lái)電顯示功能。5.客戶端之間可實(shí)現(xiàn)視頻聊天。6.實(shí)現(xiàn)呼叫詳細(xì)記錄功能。7.實(shí)現(xiàn)多人同時(shí)通話。2.3 技術(shù)路線
2.3.1 VoIP電話基本傳輸過(guò)程
語(yǔ)音信號(hào)在IP網(wǎng)絡(luò)上傳送之前要經(jīng)過(guò)從模擬信號(hào)到數(shù)字信號(hào)的轉(zhuǎn)換、語(yǔ)音壓縮算法對(duì)語(yǔ)音數(shù)據(jù)進(jìn)行壓縮編碼處理、數(shù)字語(yǔ)音封裝成IP數(shù)據(jù)報(bào)、IP數(shù)據(jù)報(bào)通過(guò)網(wǎng)絡(luò)傳送、IP分組解包、解碼解壓處理和數(shù)字語(yǔ)音還原到模擬信號(hào)等過(guò)程。整個(gè)過(guò)程如圖2所示。
圖2 VoIP的數(shù)據(jù)處理流程圖 Happy、Strive、Solidarity 4
海思工作室 VoIP電話方案投標(biāo)書(shū) 2.3.2 VoIP電話的關(guān)鍵技術(shù)
傳統(tǒng)的IP網(wǎng)絡(luò)主要是用來(lái)傳輸數(shù)據(jù)業(yè)務(wù),采用的是盡力而為的、無(wú)連接的技術(shù),因此沒(méi)有服務(wù)質(zhì)量保證,存在分組丟失、失序到達(dá)和時(shí)延抖動(dòng)等情況。數(shù)據(jù)業(yè)務(wù)對(duì)此要求不高,但話音屬于實(shí)時(shí)業(yè)務(wù),對(duì)時(shí)序、時(shí)延等有嚴(yán)格的要求。因此必須采取特殊措施來(lái)保障一定的業(yè)務(wù)質(zhì)量。VoIP電話的關(guān)鍵技術(shù)包括:信令技術(shù)、編碼技術(shù)、實(shí)時(shí)傳輸技術(shù)以及網(wǎng)絡(luò)傳輸技術(shù)等。信令技術(shù)
信令技術(shù)保證電話呼叫的順利實(shí)現(xiàn)和語(yǔ)音質(zhì)量,目前IP電話中比較流行的是H.323、會(huì)話發(fā)起協(xié)議(SIP)、MEGACO和MGCP。SIP是建立VoIP連接的IETF標(biāo)準(zhǔn)。SIP是一種應(yīng)用層控制協(xié)議,用于和一個(gè)或多個(gè)參與者創(chuàng)建、修改和終止會(huì)話。SIP的結(jié)構(gòu)與HTTP(客戶-服務(wù)器協(xié)議)相似??蛻魴C(jī)發(fā)出請(qǐng)求,并發(fā)送給服務(wù)器,服務(wù)器處理這些請(qǐng)求后給客戶機(jī)發(fā)送一個(gè)響應(yīng)。該請(qǐng)求與響應(yīng)形成一次事務(wù)。本方案采用SIP協(xié)議。編碼技術(shù)
話音壓縮編碼技術(shù)是VoIP電話技術(shù)的一個(gè)重要組成部分。目前,主要的編碼技術(shù)有G.711、G.726、G.728、G.729、G.723.1、iLBC等。其中G.729可將經(jīng)過(guò)采樣的64kbit/s話音以幾乎不失真的質(zhì)量壓縮至8kbit/s。由于在分組交換網(wǎng)絡(luò)中,業(yè)務(wù)質(zhì)量不能得到很好保證,因而需要話音的編碼具有一定的靈活性,即編碼速率、編碼尺度的可變可適應(yīng)性。G.729是8kbit/s的話音編碼標(biāo)準(zhǔn),現(xiàn)在的工作范圍擴(kuò)展至6.4~11.8kbit/s。G723.1采用5.3和6.3Kbit/s雙速率話音編碼,其話音質(zhì)量好,但是處理時(shí)延較大,它是目前已標(biāo)準(zhǔn)化的最低速率的話音編碼算法。G.711采用64kbit/sPCM語(yǔ)音編碼技術(shù),經(jīng)過(guò)G.711編碼后的語(yǔ)音已經(jīng)可以在公共電話網(wǎng)上或PBX上作為數(shù)字語(yǔ)音傳輸。本方案選用G.711編碼技術(shù)。實(shí)時(shí)傳輸技術(shù)
實(shí)時(shí)傳輸技術(shù)主要是采用實(shí)時(shí)傳輸協(xié)議RTP。RTP是提供端到端的包括音頻在內(nèi)的實(shí)時(shí)數(shù)據(jù)傳送的協(xié)議。RTP包括數(shù)據(jù)和控制兩部分,后者叫RTCP。RTP提供了時(shí)間標(biāo)簽和控制不同數(shù)據(jù)流同步特性的機(jī)制,可以讓接收端重組發(fā)送端的數(shù)據(jù)包,可以提供接收端到多點(diǎn)發(fā)送組的服務(wù)質(zhì)量反饋。Happy、Strive、Solidarity 5
海思工作室 VoIP電話方案投標(biāo)書(shū) 服務(wù)質(zhì)量(QoS)保證技術(shù)
VoIP電話中主要采用資源預(yù)留協(xié)議(RSVP)以及進(jìn)行服務(wù)質(zhì)量監(jiān)控的實(shí)時(shí)傳輸控制協(xié)議RTCP來(lái)避免網(wǎng)絡(luò)擁塞,保障通話質(zhì)量。網(wǎng)絡(luò)傳輸技術(shù)
VoIP電話中網(wǎng)絡(luò)傳輸技術(shù)主要是TCP和UDP,此外還包括網(wǎng)關(guān)互聯(lián)技術(shù)、路由選擇技術(shù)、網(wǎng)絡(luò)管理技術(shù)以及安全認(rèn)證和計(jì)費(fèi)技術(shù)等。由于實(shí)時(shí)傳輸協(xié)議RTP提供具有實(shí)時(shí)特征的、端到端的數(shù)據(jù)傳輸業(yè)務(wù),因此VoIP電話中可用UDP和RTP來(lái)傳送話音數(shù)據(jù)。在RTP報(bào)頭中包含裝載數(shù)據(jù)的標(biāo)識(shí)符、序列號(hào)、時(shí)間以及傳送監(jiān)
視等,通常RTP協(xié)議數(shù)據(jù)單元是用UDP分組來(lái)承載,而且為了盡量減少時(shí)延,話音凈荷通常都很短。IP、UDP和RTP報(bào)頭都按最小長(zhǎng)度計(jì)算。VoIP話音分組開(kāi)銷很大,采用RTP協(xié)議的VoIP電話格式,在這種方式中將多路話音插入話音數(shù)據(jù)段中,這樣提高了傳輸效率。
此外,靜音檢測(cè)技術(shù)和回聲消除技術(shù)也是VoIP電話中十分關(guān)鍵的技術(shù)。靜音檢測(cè)技術(shù)可有效剔除靜默信號(hào),從而使話音信號(hào)的占用帶寬進(jìn)一步降低到3.5kbit/s左右;回聲消除技術(shù)主要利用數(shù)字濾波器技術(shù)來(lái)消除對(duì)通話質(zhì)量影響很大回聲干擾,保證通話質(zhì)量。
2.3.3 嵌入式VoIP終端軟件的設(shè)計(jì)和實(shí)現(xiàn)
嵌入式VoIP終端軟件主要指系統(tǒng)層次結(jié)構(gòu)中協(xié)議棧和用戶程序兩個(gè)層次。協(xié)議棧層擔(dān)負(fù)SIP消息解析,UAS和UAC事務(wù)處理,多媒體流傳輸?shù)热蝿?wù)。主要包括SIP模塊、RTP模塊和語(yǔ)音處理模塊三個(gè)模塊。SIP模塊
系統(tǒng)選用了開(kāi)源協(xié)議棧oSIP。oSIP主要包括三個(gè)模塊:解析器模塊、狀態(tài)機(jī)模塊和工具模塊。解析器模塊:該模塊主要完成對(duì)SIP消息(INVITE、ACK、OPTIONS、CANCEL、BYE、REGISTER消息)結(jié)構(gòu)剖析、SDP消息結(jié)構(gòu)剖析以及URI結(jié)構(gòu)的剖析。此外,該模塊還可以解析一部分SIP頭域。狀態(tài)機(jī)模塊:SIP中是以事務(wù)為單位來(lái)描述各種請(qǐng)求和響應(yīng)的交互過(guò)程的。該模塊主要完成對(duì)某個(gè)SIP事務(wù)(注冊(cè)過(guò)程、呼叫過(guò)程等)狀態(tài)的記錄,并在特定狀態(tài)下觸發(fā)相應(yīng) Happy、Strive、Solidarity 6
海思工作室 VoIP電話方案投標(biāo)書(shū) 的時(shí)間或回調(diào)函數(shù)?;卣{(diào)函數(shù)為上層應(yīng)用程序控制SIP會(huì)話提供了豐富的接口。工具模塊:該模塊為可選項(xiàng),主要提供一些處理SDP協(xié)商及會(huì)話等的一些工具。RTP模塊
本系統(tǒng)的RTP模塊采用開(kāi)源的RTP協(xié)議棧oRTP,利用該協(xié)議棧可以較方便的實(shí)現(xiàn)對(duì)實(shí)時(shí)媒體的傳輸和控制,如對(duì)本地待發(fā)數(shù)據(jù)的RTP封裝,對(duì)接收到的RTP包拆包以及通過(guò)對(duì)網(wǎng)絡(luò)RTCP監(jiān)測(cè),適當(dāng)?shù)恼{(diào)整本地的編解碼器策略。語(yǔ)音處理模塊
語(yǔ)音處理模塊的工作是完成語(yǔ)音信號(hào)的采集、編碼、解碼和回放,分為語(yǔ)音數(shù)據(jù)發(fā)送和語(yǔ)音數(shù)據(jù)接收兩個(gè)部分。語(yǔ)音數(shù)據(jù)發(fā)送的過(guò)程為:通過(guò)編解碼芯片完成語(yǔ)音信號(hào)的脈沖編碼調(diào)制(PCM),將模擬信號(hào)轉(zhuǎn)化成數(shù)字信號(hào);采用選定的編碼標(biāo)
準(zhǔn)對(duì)數(shù)字信號(hào)進(jìn)行壓縮編碼;加上RTP頭和其它頭部字段,封裝數(shù)據(jù)包送到UDP協(xié)議層傳輸,完成音頻信號(hào)的發(fā)送。2.4 使用與維護(hù) 2.4.1 維護(hù)簡(jiǎn)介 軟件系統(tǒng)的維護(hù)
提供每臺(tái)機(jī)器操作系統(tǒng)的安裝與配置,另外,還提供使用過(guò)程中的技術(shù)支持和應(yīng)用培訓(xùn)工作。前者是每個(gè)軟件項(xiàng)目都必須具備的,后者在實(shí)際操作中,管理人員的培訓(xùn)有利于系統(tǒng)的穩(wěn)定運(yùn)行。數(shù)據(jù)備份
數(shù)據(jù)備份工作的關(guān)鍵是制度的建立,除了技術(shù)上的要求外,數(shù)據(jù)備份的流程、所使用的介質(zhì)、備份的周期、檔案的管理等都必須形成一整套的制度和規(guī)定。人員培訓(xùn)
系統(tǒng)的使用和管理是否恰當(dāng),直接影響系統(tǒng)運(yùn)行的穩(wěn)定性。因此系統(tǒng)維護(hù)工作還包括對(duì)管理人員、使用人員的培訓(xùn)。培訓(xùn)應(yīng)針對(duì)不同對(duì)象采用不同的培訓(xùn)方法和內(nèi)容,其目的是讓管理人員能及時(shí)發(fā)現(xiàn)問(wèn)題,排除簡(jiǎn)單故障;使用人員能按操作流程和規(guī)章使用網(wǎng)絡(luò)。Happy、Strive、Solidarity 7
海思工作室 VoIP電話方案投標(biāo)書(shū) 2.4.2 承諾與服務(wù) 文檔提供承諾
項(xiàng)目系統(tǒng)在開(kāi)發(fā)、安裝、發(fā)布后,并且經(jīng)過(guò)客戶驗(yàn)收后,向客戶提交符合國(guó)家軟件開(kāi)發(fā)標(biāo)準(zhǔn)的有關(guān)文檔。文檔清單如下: 《項(xiàng)目需求文檔》 《用戶使用手冊(cè)》 《客戶培訓(xùn)文檔》 維護(hù)承諾
項(xiàng)目系統(tǒng)在開(kāi)發(fā)、安裝、發(fā)布后: 第一年提供免費(fèi)維護(hù)支持。第二年開(kāi)始有償維護(hù)支持。系統(tǒng)安裝
項(xiàng)目系統(tǒng)在開(kāi)發(fā)完成后,在硬件到位的前提下負(fù)責(zé)軟件的安裝調(diào)試。安裝承諾:免費(fèi)提供系統(tǒng)安裝、使用、技術(shù)培訓(xùn)和維護(hù)的資料及介質(zhì)。服務(wù)響應(yīng)承諾 無(wú)論軟件發(fā)生何種故障(不可抗拒因素及自然災(zāi)害出外),我們承諾在4 小時(shí)內(nèi)做出反應(yīng),24小時(shí)內(nèi)完成修復(fù)。平時(shí)提供7*24小時(shí)的技術(shù)支持承諾。
三、項(xiàng)目管理方案 3.1 項(xiàng)目計(jì)劃成熟度 3.1.1 整體管理
項(xiàng)目的整體管理是做一個(gè)項(xiàng)目之前一個(gè)比較重要的過(guò)程,它包括了項(xiàng)目計(jì)劃的制定和項(xiàng)目計(jì)劃的執(zhí)行。在項(xiàng)目的計(jì)劃制定中,我們小組每個(gè)人都行動(dòng)起來(lái),去找資料,整體的了解這個(gè)項(xiàng)目,把一些有關(guān)的信息都羅列出來(lái),然后大家一起再進(jìn)行刷選、一起討論,把整體的一個(gè)思路搞清楚。Happy、Strive、Solidarity 8
海思工作室 VoIP電話方案投標(biāo)書(shū) 3.1.2 溝通管理 項(xiàng)目會(huì)議制定(1)定期的會(huì)議
會(huì)議的目標(biāo):溝通項(xiàng)目狀態(tài),提出項(xiàng)目問(wèn)題、風(fēng)險(xiǎn)和依賴條件;協(xié)調(diào)項(xiàng)目資源; 對(duì)項(xiàng)目提出建議,問(wèn)題的解決方法,行動(dòng)計(jì)劃。會(huì)議的時(shí)間:每周周日下午6點(diǎn)。
參加人員:甲乙兩方的項(xiàng)目經(jīng)理,和各自項(xiàng)目經(jīng)理制定的幾個(gè)工作人員。
主要內(nèi)容:更新項(xiàng)目狀態(tài),包括:項(xiàng)目的狀態(tài)信息,時(shí)間進(jìn)度表;問(wèn)題,風(fēng)險(xiǎn),技術(shù)和管理;對(duì)提出的問(wèn)題的討論和決定計(jì)劃;甲乙雙方做會(huì)議記錄,并討論下一步行動(dòng)計(jì)劃。(2)不定期的會(huì)議
會(huì)議的目標(biāo):使項(xiàng)目全體人員明確目前項(xiàng)目的狀態(tài)、問(wèn)題、解決方法。會(huì)議的時(shí)間:根據(jù)實(shí)際情況需要確定。
參加人員:全體項(xiàng)目人員。
會(huì)議內(nèi)容:項(xiàng)目狀態(tài),存在的問(wèn)題及解決方法;下階段項(xiàng)目計(jì)劃。(3)重大問(wèn)題匯報(bào)會(huì)議
會(huì)議的目標(biāo):匯報(bào)項(xiàng)目進(jìn)行中發(fā)現(xiàn)的重大問(wèn)題,討論并決定采取的方案。會(huì)議的時(shí)間:出現(xiàn)重大情況時(shí)。
參加人員:?jiǎn)栴}發(fā)起人,全體的項(xiàng)目人員。
會(huì)議的內(nèi)容:匯報(bào)項(xiàng)目出現(xiàn)的重大問(wèn)題,找出解決方案,制定計(jì)劃。(4)項(xiàng)目?jī)?nèi)部討論
會(huì)議的目標(biāo):對(duì)項(xiàng)目組內(nèi)部遇到的問(wèn)題進(jìn)行討論,找出解決方案,并討論決定采 取何行動(dòng)。
會(huì)議的時(shí)間:根據(jù)開(kāi)發(fā)的進(jìn)程和狀態(tài)。參加人員:所有有關(guān)該項(xiàng)目的人員。
會(huì)議內(nèi)容:討論出現(xiàn)的各種相關(guān)問(wèn)題,找出解決方案,決定行動(dòng)計(jì)劃。溝通手段(1)開(kāi)會(huì)或直接交談
Happy、Strive、Solidarity 9
海思工作室 VoIP電話方案投標(biāo)書(shū)
按需要組織會(huì)議進(jìn)行溝通,或直接找相關(guān)的人進(jìn)行討論,注意記錄溝通和討論結(jié)果,重要問(wèn)題討論必須有書(shū)面會(huì)議記錄。(2)電話或電話會(huì)議
通過(guò)電話的方式進(jìn)行信息溝通。對(duì)比較重要的事情,需要包括開(kāi)發(fā)地點(diǎn)以外的人員,則需要利用電話會(huì)議的方式進(jìn)行討論,溝通。(3)電子郵件
建立項(xiàng)目組電子郵件系統(tǒng)及與外界聯(lián)系的電子郵件系統(tǒng)。3.1.3 項(xiàng)目的狀態(tài)周報(bào)制度
項(xiàng)目的各組人員每周寫(xiě)下周報(bào),包括的內(nèi)容:上一周所完成的內(nèi)容,這周計(jì)劃將要完成的內(nèi)容。每一組統(tǒng)一上交到已方的項(xiàng)目經(jīng)理處,再有乙方項(xiàng)目經(jīng)理在每周的定期會(huì)議上提交給甲方的項(xiàng)目經(jīng)理。甲方項(xiàng)目經(jīng)理根據(jù)周報(bào)情況,做總結(jié)形成項(xiàng)目組的狀態(tài)周報(bào),記錄在案。3.2 質(zhì)量控制管理 3.2.1 質(zhì)量基本規(guī)劃
(1)質(zhì)量目標(biāo):針對(duì)VoIP電話,保證100%的滿足項(xiàng)目的需求,并做到正確性和精確性,用戶滿意度達(dá)90%以上,甲乙雙方應(yīng)針對(duì)項(xiàng)目的質(zhì)量目標(biāo)進(jìn)行質(zhì)量管理。
(2)質(zhì)量管理原則: 1客戶滿足優(yōu)先?!?2開(kāi)發(fā)人員的責(zé)任?!?3持續(xù)的改進(jìn)?!?4可進(jìn)行維護(hù)的?!?/p>
(3)質(zhì)量保證計(jì)劃:合同生效后,甲乙雙方應(yīng)在質(zhì)量方針、質(zhì)量目標(biāo)、質(zhì)量原則及項(xiàng)目范圍等的前提下建立質(zhì)量保證計(jì)劃,明確相關(guān)干系人質(zhì)量管理職責(zé)、項(xiàng)目質(zhì)量管理任務(wù)的定義與責(zé)任人、需遵守的制度、規(guī)程、規(guī)范與標(biāo)準(zhǔn)、質(zhì)量控制的方法、工具、記錄與跟蹤等,便以此為基礎(chǔ),有效地開(kāi)展質(zhì)量管理活動(dòng)。(4)測(cè)試要求:在初步的測(cè)試當(dāng)中,產(chǎn)品通過(guò)甲乙雙方的認(rèn)同。在進(jìn)一步的改 Happy、Strive、Solidarity 10
海思工作室 VoIP電話方案投標(biāo)書(shū) 進(jìn)后,要通過(guò)評(píng)審及試用戶的肯定。3.2.2 質(zhì)量保證
(1)規(guī)則的指導(dǎo):雙方項(xiàng)目經(jīng)理組織各自的項(xiàng)目人員做有關(guān)制度、規(guī)程、標(biāo)準(zhǔn)等等的指導(dǎo)。
(2)文檔的管理:每期的文檔要有統(tǒng)一且有序的文檔標(biāo)號(hào),所有的文檔必須經(jīng)項(xiàng)目經(jīng)理或質(zhì)量保證人員的審核通過(guò),正式提交件必須經(jīng)過(guò)相關(guān)評(píng)審認(rèn)可。雙方必須明確文檔的存儲(chǔ)人員。
(3)問(wèn)題跟蹤:乙方負(fù)責(zé)指定專人對(duì)項(xiàng)目實(shí)施過(guò)程中出現(xiàn)的問(wèn)題與缺陷進(jìn)行跟蹤解決,每周出具相關(guān)統(tǒng)計(jì)信息。
(4)質(zhì)量匯報(bào):雙方項(xiàng)目經(jīng)理應(yīng)本著實(shí)事求是的原則,向雙方管理層及時(shí)準(zhǔn)確地匯報(bào)項(xiàng)目情況,保證項(xiàng)目的可視性。3.2.3 質(zhì)量檢查
甲乙雙方應(yīng)就項(xiàng)目進(jìn)展情況定期進(jìn)行質(zhì)量檢查工作,保證項(xiàng)目按既定計(jì)劃,保證質(zhì)量地實(shí)施。乙方應(yīng)配合甲方有關(guān)項(xiàng)目管理部門(mén)進(jìn)行質(zhì)量檢查,并及時(shí)根據(jù)檢查結(jié)果,進(jìn)行跟蹤解決。3.3 配置管理
配置庫(kù)分為文檔庫(kù)和代碼庫(kù)。文檔庫(kù)管理項(xiàng)目的所有有關(guān)文檔,代碼庫(kù)就管理項(xiàng)目中的所有代碼。配置庫(kù)按照項(xiàng)目的進(jìn)行階段,有序的存放。經(jīng)測(cè)試和審核,配
置庫(kù)統(tǒng)一由甲方管理,不得向任何無(wú)關(guān)人員透露,也不得對(duì)任何項(xiàng)進(jìn)行任何的更改。
3.4 風(fēng)險(xiǎn)控制
做什么項(xiàng)目都存在風(fēng)險(xiǎn),所以我們不保證一定不存在風(fēng)險(xiǎn),但盡可能的把風(fēng)險(xiǎn)降至最低。我們的目標(biāo)是實(shí)現(xiàn)項(xiàng)目的需求,但對(duì)我們而言,剛接受做一個(gè)項(xiàng)目,可以說(shuō)存在難度,不管是技術(shù)上,還是管理上…我們盡自己最大的努力去完成它。當(dāng)我們發(fā)現(xiàn)問(wèn)題及時(shí)的討論并找出解決方案,從自個(gè)方面尋找資料、信息,每一次都進(jìn)行組內(nèi)溝通和交流,力爭(zhēng)把項(xiàng)目做的好,降低項(xiàng)目的風(fēng)險(xiǎn)程度。Happy、Strive、Solidarity 11
海思工作室 VoIP電話方案投標(biāo)書(shū)
四、項(xiàng)目實(shí)施 4.1 實(shí)施計(jì)劃
詳見(jiàn)附件:VoIP.mpp。4.2 所需的資源列表 4.2.1 硬件資源
1、兩塊 S2440 嵌入式開(kāi)發(fā)板
(1)S3C2440A:32bit ARM920T內(nèi)核,標(biāo)稱工作頻率:400MHz(2)系統(tǒng)時(shí)鐘:內(nèi)部PLL產(chǎn)生400MHz CPU內(nèi)核工作頻率,外部總線頻率:100~133MHz(3)100MHz以太網(wǎng)控制器(4)音頻輸入輸出接口(5)觸摸屏(6)5V電源
Happy、Strive、Solidarity 12
海思工作室 VoIP電話方案投標(biāo)書(shū)
(7)支持的操作系統(tǒng):WINCE /Linux
2、PC機(jī)(1)CPU(2)內(nèi)存
(3)硬盤(pán)
(4)網(wǎng)卡:普通以太網(wǎng)卡一塊或無(wú)線以太網(wǎng)卡一塊(IEEE 802.11g、IEEE 802.11b網(wǎng)絡(luò)標(biāo)準(zhǔn))(5)顯示器
(6)普通鍵盤(pán)/鼠標(biāo)一個(gè)
3、兩個(gè)攝像頭
4、兩個(gè)耳麥(耳機(jī)+麥克)
5、兩根網(wǎng)線 4.2.2 人力資源
1、相關(guān)專業(yè)的研發(fā)人員
2、資深專家的技術(shù)指導(dǎo)(如有需要)
3、檢測(cè)人員 4.2.3 軟件資源
1、LINUX系統(tǒng)開(kāi)發(fā)平臺(tái)
2、語(yǔ)音壓縮編碼、語(yǔ)音解碼
3、視頻壓縮編碼、視頻解碼
4、INTERNET接入環(huán)境
4.3 項(xiàng)目報(bào)價(jià)
Happy、Strive、Solidarity 13
海思工作室 VoIP電話方案投標(biāo)書(shū) Happy、Strive、Solidarity 14
第四篇:嵌入式系統(tǒng)ARM實(shí)驗(yàn)報(bào)告
南京郵電大學(xué)通信與信息工程學(xué)院
實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)名稱:實(shí)驗(yàn)一基于ADS開(kāi)發(fā)環(huán)境的設(shè)計(jì)
實(shí)驗(yàn)二嵌入式Linux交叉開(kāi)發(fā)環(huán)境的建立 實(shí)驗(yàn)三嵌入式Linux環(huán)境下的程序設(shè)計(jì)
課程名稱嵌入式系統(tǒng)B
班級(jí)學(xué)號(hào)B13010711 姓名馬俊民
開(kāi)課時(shí)間 2015/2016學(xué)年第1學(xué)期
實(shí)驗(yàn)一基于ADS開(kāi)發(fā)環(huán)境的程序設(shè)計(jì)
一、實(shí)驗(yàn)?zāi)康?/p>
1、學(xué)習(xí)ADS開(kāi)發(fā)環(huán)境的使用;
2、學(xué)習(xí)和掌握ADS環(huán)境下的匯編語(yǔ)言及C語(yǔ)言程序設(shè)計(jì);
3、學(xué)習(xí)和掌握匯編語(yǔ)言及C語(yǔ)言的混合編程方法。
二、實(shí)驗(yàn)內(nèi)容
1、編寫(xiě)和調(diào)試匯編語(yǔ)言程序;
2、編寫(xiě)和調(diào)試C語(yǔ)言程序;
3、編寫(xiě)和調(diào)試匯編語(yǔ)言及C語(yǔ)言的混合程序;
4、編寫(xiě)程序測(cè)試多寄存器傳送指令的用法。
三、實(shí)驗(yàn)原理
ADS全稱為ARM Developer Suite,是ARM公司推出的新一代ARM集成開(kāi)發(fā)工具?,F(xiàn)在常用的ADS版本是ADS1.2,它取代了早期的ADS1.1和ADS1.0。
ADS用于無(wú)操作系統(tǒng)的ARM系統(tǒng)開(kāi)發(fā),是對(duì)裸機(jī)(可理解成一個(gè)高級(jí)單片機(jī))的開(kāi)發(fā)。ADS具有極佳的測(cè)試環(huán)境和良好的偵錯(cuò)功能,它可使硬件開(kāi)發(fā)工作者更深入地從底層去理解ARM處理器的工作原理和操作方法,為日后自行設(shè)計(jì)打基礎(chǔ),為BootLoader的編寫(xiě)和調(diào)試打基礎(chǔ)。
1.ADS軟件的組成
ADS由命令行開(kāi)發(fā)工具、ARM運(yùn)行時(shí)庫(kù)、GUI開(kāi)發(fā)環(huán)境(CodeWarrior和AXD)、實(shí)用程序、支持軟件等組成。
2.GUI開(kāi)發(fā)環(huán)境
ADS GUI開(kāi)發(fā)環(huán)境包含CodeWarrior和AXD兩種,其中Code Warrior是集成開(kāi)發(fā)工具,而AXD是調(diào)試工具。
使用匯編語(yǔ)言進(jìn)行編程簡(jiǎn)單、方便,適用于初始化硬件代碼、啟動(dòng)代碼等。匯編語(yǔ)言具有一些相同的基本特征:
1.一條指令一行。
2.使用標(biāo)號(hào)(label)給內(nèi)存單元提供名稱,從第一列開(kāi)始書(shū)寫(xiě)。3.指令必須從第二列或能區(qū)分標(biāo)號(hào)的地方開(kāi)始書(shū)寫(xiě)。4.注釋必須跟在指定的注釋字符后面,一直書(shū)寫(xiě)到行尾。
在ARM匯編程序中,每個(gè)段必須以AREA作為段的開(kāi)始,以碰到下一個(gè)AREA作為該段的結(jié)束,段名必須唯一。程序的開(kāi)始和結(jié)束需以ENTRY和END來(lái)標(biāo)識(shí)。嵌入式C語(yǔ)言設(shè)計(jì)是利用基本的C語(yǔ)言知識(shí),面向嵌入式工程實(shí)際應(yīng)用進(jìn)行程序設(shè)計(jì)。為了使單獨(dú)編譯的C語(yǔ)言程序和匯編程序之間能夠相互調(diào)用,必須為子程序之間的調(diào)用規(guī)定一定的規(guī)則。ATPCS就是ARM程序和Thumb程序中子程序調(diào)用的基本規(guī)則。
四、實(shí)驗(yàn)過(guò)程與關(guān)鍵代碼分析
1.創(chuàng)建項(xiàng)目工程
在File菜單中選擇New命令,打開(kāi)一個(gè)新建工程對(duì)話框。在Project選項(xiàng)卡下,選擇ARM Executable Image, 然后在Project name文本框里輸入項(xiàng)目名稱,點(diǎn)擊確定。彈出工程窗口。
選擇File菜單中的New命令,選擇File標(biāo)簽頁(yè),在File name文本框中輸入要?jiǎng)?chuàng)建的文件名。匯編程序以.s結(jié)尾,c程序以.c結(jié)尾。在Location文本框中指定文件的存放位置,選中Add to Project,在Targets中選中DebugRel,單擊確定關(guān)閉窗口。
2.用匯編語(yǔ)言設(shè)計(jì)程序?qū)崿F(xiàn)10的階乘
AREA EXAMPLE, CODE, READONLY ENTRY start MOV R0, #10 MOV R1, #1 LOOP MUL R0, R0, R1 SUB R0, R0, 1 CMP R0, #1 BHI LOOP END 在這個(gè)程序中,我們首先對(duì)R0和R1賦值,將R0作為一個(gè)變量,而R1作為一個(gè)存貯階乘值的寄存器。在每進(jìn)行一次乘法之后,將R0減1。同時(shí)在做完減法后進(jìn)行判斷,如果此時(shí)R0大于1,則返回繼續(xù)乘法,否則結(jié)束程序,輸出結(jié)果。
3.用調(diào)用子程序的方法實(shí)現(xiàn)1!+2!+3!+?+10!,代碼如下: asmp.s
AREA JC, CODE, READONLY
EXPORT JCP
ENTRY JCP
ADD R3, R0, #1
MOV R2, #1
MOV R1, #1 LOOP MUL R0, R1, R2
MOV R1, R0
ADD R2, R2, #1
CMP R2, R3
BNE LOOP
NOP
NOP
MOV PC, LR
END
PROGC.c #include
int main(){ int res=0;int m=10;int i;for(i=1;i<=m;i++)
res=res+JCP(i);printf(“The result =%dn”,res);return 0;} 在這個(gè)程序中,主程序由c語(yǔ)言完成作求和,子程序由匯編語(yǔ)言寫(xiě)成作階乘。
5.實(shí)現(xiàn)字符串的逆序復(fù)制TEXT1=“HELLO”=>TEXT2=“OLLEH”
AREA invstring, CODE, READONLY start
ADR R1,TEXT1
ADR R2,TEXT2
MOV R3, #0 LOOP
LDRB R0,[R1], #1
ADD R3,R3,#1
CMP R0,#0
BNE LOOP
SUB R1,R1,#2
LOOP1
LDRB R0,[R1], #-1
STRB R0,[R2], #1
SUB R3,R3, #1
CMP R3,#1
BNE LOOP1
MOV R5,#&55
TEXT1
TEXT2 NOP =“HELLO”,0 ALIGN =“OELLH” END
五、實(shí)驗(yàn)小結(jié)
在這次實(shí)驗(yàn)中,學(xué)會(huì)了如何使用匯編程序進(jìn)行編程。對(duì)匯編程序編程一些基本的要求有了一定的了解,學(xué)習(xí)了C語(yǔ)言的語(yǔ)法和在其中調(diào)用匯編程序的方法。學(xué)會(huì)了利用CodeWarrior IDE開(kāi)發(fā)C和ARM匯編代碼。學(xué)會(huì)了在AXD中進(jìn)行代碼調(diào)試的方法和過(guò)程,對(duì)AXD的調(diào)試有初步的了解。,實(shí)驗(yàn)二嵌入式Linux交叉開(kāi)發(fā)環(huán)境的建立
一、實(shí)驗(yàn)?zāi)康?/p>
1、掌握嵌入式Linux交叉開(kāi)發(fā)環(huán)境的建立方法
2、學(xué)習(xí)和掌握Linux常用命令
3、學(xué)習(xí)和掌握vi編輯器的使用
二、實(shí)驗(yàn)內(nèi)容
1、搭建嵌入式Linux交叉開(kāi)發(fā)環(huán)境
2、熟悉Linux的常用命令
3、熟悉vi編輯器的常用命令
三、實(shí)驗(yàn)原理
Linux系統(tǒng)是UNIX系統(tǒng)的分支,是UNIX的微機(jī)版。Linux具有異常豐富的驅(qū)動(dòng)程序資源,支持各種主流的硬件設(shè)備與技術(shù)。Linux包含了現(xiàn)代的UNIX操作系統(tǒng)的所有功能特性,這些功能包括多任務(wù)、虛擬內(nèi)存、虛擬文件系統(tǒng)、進(jìn)程間通信、對(duì)稱所處理器、多用戶支持等。
Vi編輯器是所有UNIX和Linux下的標(biāo)準(zhǔn)編輯器。它包含3種工作模式。嵌入式系統(tǒng)是專用的計(jì)算機(jī)系統(tǒng),它對(duì)系統(tǒng)的功能、可靠性、成本、體積、功耗等有嚴(yán)格的要求。大部分嵌入式系統(tǒng)沒(méi)有大容量存儲(chǔ)設(shè)備,一般不能安裝大型開(kāi)發(fā)軟件,系統(tǒng)的開(kāi)發(fā)需要采用交叉開(kāi)發(fā)模式。
四、實(shí)驗(yàn)過(guò)程與關(guān)鍵代碼分析
實(shí)驗(yàn)用的是UP-NetARM2410-S試驗(yàn)箱,里面配有三星的芯片S3c2410X。打開(kāi)電腦上VMWare軟件,在Windows系統(tǒng)下啟動(dòng)虛擬機(jī)里的Linux系統(tǒng)。接著需要
1.宿主機(jī)的環(huán)境搭建
下載并運(yùn)行VMWare,根據(jù)向?qū)?chuàng)建一臺(tái)新虛擬機(jī)并選擇Linux作為客戶操作系統(tǒng),再根據(jù)向?qū)О惭bRedHat Linux 9.0。
2.虛擬機(jī)中啟動(dòng)Linux操作系統(tǒng)
使用root登陸,用戶名為root,密碼為123456。之后對(duì)共享文件設(shè)置進(jìn)行調(diào)整:打開(kāi)settings界面,打開(kāi)shared folders功能,同時(shí)將路徑設(shè)置到有課前下載的軟件的目錄下。
3.開(kāi)發(fā)工具軟件的安裝(1)安裝gcc 打開(kāi)Linux后,打開(kāi)終端窗口,在共享的目錄下找到install.sh并運(yùn)行,命令如下: ls./ install.sh 安裝程序?qū)⒆詣?dòng)建立/arm2410s目錄,并將所有的開(kāi)發(fā)軟件包安裝到/arm2410s 目錄下,同時(shí)自動(dòng)配置編譯環(huán)境,建立合適的符號(hào)鏈接。安裝完成后在目錄/opt/host/armv4l/bin/下應(yīng)該能看到主編譯器。(2)配置PATH路徑
vi.bash.profile 將里面PATH變量改為PATH=$PATH:$HOME/bin:/opt/host/armv41/bin/;存盤(pán)后執(zhí)行
source.bash_profile 以后armv4l-unknown-linux-gcc將被自動(dòng)搜索到
4.宿主機(jī)上的開(kāi)發(fā)環(huán)境配置(1)配置IP地址
ifconfig eth0 192.168.0.121 命令配置了宿主機(jī)的IP地址。然后打開(kāi)網(wǎng)絡(luò)配置窗口,重新探測(cè)MAC地址。重新激活。(2)關(guān)閉防火墻
單擊“Red”菜單→“系統(tǒng)設(shè)置”→“安全級(jí)別”→打開(kāi)“安全級(jí)別配置”窗口,選擇“無(wú)防火墻選項(xiàng)。”(3)配置NFS。
單擊“Red”菜單→“系統(tǒng)設(shè)置”→“服務(wù)器設(shè)置”→“服務(wù)”,在“服務(wù)配置”窗口中勾選nfs,單擊“開(kāi)始”(4)NFS設(shè)置
單擊“Red”菜單→“系統(tǒng)設(shè)置”→“服務(wù)器設(shè)置”→“NFS服務(wù)器”,打開(kāi)“NFS服務(wù)器配置”窗口,設(shè)置NFS共享。
然后在NFS服務(wù)器中增加主機(jī)IP地址的鏈接許可和目錄。完成配置。
5.目標(biāo)機(jī)的信息輸出
Windows系統(tǒng)下,“開(kāi)始”→“所有程序”→“附件”→“通訊”→“超級(jí)終端”,新建一個(gè)通信終端。區(qū)號(hào)、電話號(hào)碼隨意輸入。設(shè)置每秒位數(shù)為“115200”,數(shù)據(jù)位為“8”,無(wú)奇偶校驗(yàn),停止位為“1”,無(wú)數(shù)據(jù)流控制。單擊“確定”。
6.程序的運(yùn)行
打開(kāi)超級(jí)終端,啟動(dòng)Linux,屏幕顯示:
[/mnt/yaffs] 在超級(jí)終端上執(zhí)行掛載命令:
[/mnt] mount –t nfs 192.168.0.121:/arm2410s /mnt/nfs 掛載成功后可執(zhí)行程序。
五、實(shí)驗(yàn)小結(jié)
在這次實(shí)驗(yàn)中,學(xué)會(huì)建立Linux交叉開(kāi)發(fā)環(huán)境,學(xué)會(huì)了ls和vi,cd等常用的Linux命令,并掌握了Vi編輯器的使用方法。同時(shí)知道了如何在搭建失敗時(shí)尋找錯(cuò)誤進(jìn)行排錯(cuò)。
實(shí)驗(yàn)三嵌入式Linux環(huán)境下的程序設(shè)計(jì)
一、實(shí)驗(yàn)?zāi)康?/p>
1、掌握嵌入式Linux環(huán)境下的程序設(shè)計(jì)方法
2、學(xué)會(huì)編寫(xiě)Makefile文件
二、實(shí)驗(yàn)內(nèi)容
1、熟悉嵌入式教學(xué)實(shí)驗(yàn)箱的使用
2、編寫(xiě)C程序和Makefile文件
3、編譯程序產(chǎn)生可執(zhí)行程序
4、完成主機(jī)的掛載和程序的執(zhí)行
三、實(shí)驗(yàn)原理
在嵌入式Linux環(huán)境下的程序設(shè)計(jì)方法有一下幾個(gè)步驟:
1.編寫(xiě)源程序
2.編寫(xiě)Makefile文件 3.編譯程序
4.運(yùn)行和調(diào)試程序
5.將生產(chǎn)的可執(zhí)行文件加入文件系統(tǒng)。
前三個(gè)步驟在宿主機(jī)上完成,后面的步驟在目標(biāo)機(jī)上完成。
四、實(shí)驗(yàn)過(guò)程與關(guān)鍵代碼分析
1.建立工作目錄
mkdir hello cd hello
2.編寫(xiě)源程序
用vi編輯器編輯Hello.c文件
vi Hello.c 在Vi中輸入源程序如下:
#include
printf(“hello world n”);}
3.編寫(xiě)Makefile文件
vi Makefile 在vi中編輯Makefile文件如下:
CC= armv4l-unknown-linux-gcc EXEC = hello OBJS = hello.o CFLAGS += LDFLAGS+=-static all: $(EXEC)$(EXEC):(OBJS)$(CC)$(LDFLAGS)–o $@ $(OBJS)clean:
-rm –f $(EXEC)*.elf *.gdb *.o
4.編譯程序
在hello目錄下運(yùn)行“make”來(lái)編譯程序。
make clean
make 編譯成功后,生成可執(zhí)行文件Hello.o。
5.下載調(diào)試
在宿主機(jī)上啟動(dòng)nfs服務(wù),并將/arms2410s設(shè)置為共享目錄。接下來(lái)啟動(dòng)超級(jí)終端,建立通訊,掛載。
[/mnt] mount –t nfs 192.168.0.121:/arm2410s /mnt/nfs 掛載成功后,進(jìn)入/mnt/nfs,再進(jìn)入/mnt/nfs/hello,直接運(yùn)行剛剛編譯生成的可執(zhí)行文件Hello.o,查看運(yùn)行結(jié)果
cd hello./hello 可以看見(jiàn)“Hello world”
只需要掛載一次便可,只要實(shí)驗(yàn)箱沒(méi)有重啟,就可以一直保持連接。反復(fù)修改、編譯、調(diào)試,直至程序調(diào)試通過(guò)。
6.可執(zhí)行文件加入文件系統(tǒng)
程序調(diào)試通過(guò)后,可以把可執(zhí)行文件拖放到usr/bin目錄下,然后使用mkcramfs制作工具生成新的文件系統(tǒng)。當(dāng)系統(tǒng)啟動(dòng)后,就可以在相應(yīng)目錄下執(zhí)行可執(zhí)行程序hello.五、實(shí)驗(yàn)小結(jié) 在這次實(shí)驗(yàn)中,學(xué)會(huì)了在嵌入式Linux環(huán)境下設(shè)計(jì)程序。同時(shí)知道了如何對(duì)目標(biāo)機(jī)進(jìn)行掛載。以及如何在發(fā)現(xiàn)掛載不成功尋找錯(cuò)誤進(jìn)行修改。另外在編譯文件時(shí)需要注意的也都有所了解。
實(shí)驗(yàn)四多線程程序設(shè)計(jì)
一、實(shí)驗(yàn)?zāi)康?、2、二、實(shí)驗(yàn)內(nèi)容1、2、3、4、三、實(shí)驗(yàn)原理
四、實(shí)驗(yàn)過(guò)程與關(guān)鍵代碼分析
五、實(shí)驗(yàn)小結(jié)
3+
第五篇:門(mén)禁系統(tǒng)管理制度
長(zhǎng)春農(nóng)村商業(yè)銀行股份有限公司
門(mén)禁系統(tǒng)管理制度
第一章 總則
第一條
為規(guī)范長(zhǎng)春農(nóng)村商業(yè)銀行股份有限公司(以下簡(jiǎn)稱“本行”)安全保衛(wèi)工作,有效防止盜竊、搶劫、詐騙、破壞和治安災(zāi)害事故,維護(hù)正常的工作秩序,根據(jù)公安部、中國(guó)人民銀行、銀監(jiān)部門(mén)的有關(guān)要求,結(jié)合本行實(shí)際,本行特安裝了門(mén)禁管理系統(tǒng)。
第二條
本行門(mén)禁管理系統(tǒng)屬感應(yīng)式卡出入管理控制系統(tǒng)(簡(jiǎn)稱門(mén)禁系統(tǒng)),具有對(duì)門(mén)戶出入控制、實(shí)時(shí)監(jiān)控、保安防盜報(bào)警等多種功能,它主要方便內(nèi)部員工或住戶出入,杜絕外來(lái)人員隨意進(jìn)出,既方便了內(nèi)部管理,又增強(qiáng)了內(nèi)部的保安。
第二章 門(mén)禁系統(tǒng)管理人員
第三條
本辦法所稱門(mén)禁系統(tǒng)管理人員,是指總行科技部門(mén)禁系統(tǒng)專門(mén)管理人員。系統(tǒng)管理人員應(yīng)當(dāng)遵紀(jì)守法、政治過(guò)硬、業(yè)務(wù)精通、恪盡職守。違反國(guó)家法律、法規(guī)和受到行政處分的人員,不得從事系統(tǒng)管理工作。系統(tǒng)管理人員變動(dòng),應(yīng)向上級(jí)科技管理部門(mén)備案。系統(tǒng)管理人員應(yīng)定期接受政治思想教育、職業(yè)道德教育、安全保密教育。第三章 門(mén)禁信息數(shù)據(jù)管理權(quán)限分配
第四條
門(mén)禁管理系統(tǒng)由科技部專人管理權(quán)限 第五條
門(mén)禁卡是實(shí)名發(fā)卡制,根據(jù)各部門(mén)的需求實(shí)際情況,有人事部門(mén),安全保衛(wèi)部門(mén)監(jiān)督發(fā)卡。(詳情見(jiàn)門(mén)禁卡管理制度)
第六條
門(mén)禁系統(tǒng)由科技部分為專人管理,設(shè)置AB崗。門(mén)禁卡權(quán)限由各部門(mén)經(jīng)理簽發(fā),由人事部門(mén),安全保衛(wèi)部門(mén)監(jiān)督,科技部發(fā)卡。
第四章
門(mén)禁系統(tǒng)使用情況記錄及管理
第七條
門(mén)禁系統(tǒng)在實(shí)時(shí)監(jiān)控界面可以實(shí)時(shí)的顯示出當(dāng)前門(mén)禁工作的情況,包括成員進(jìn)出信息、門(mén)狀態(tài)、報(bào)警信息。門(mén)禁系統(tǒng)的監(jiān)控流水記錄,保留三個(gè)月。(詳見(jiàn)OCS7.1門(mén)禁系統(tǒng)說(shuō)明書(shū))
第八條
主要有三大部分組成:文字監(jiān)控、緊急門(mén)區(qū)、電子圖監(jiān)控。
(一)文字監(jiān)控:以文字的形式實(shí)時(shí)顯示監(jiān)控記錄,包括:刷卡信息(含進(jìn)/出信息)、門(mén)狀態(tài)信息、緊急信息。
(二)緊急門(mén)區(qū):通過(guò)設(shè)置可以對(duì)相應(yīng)門(mén)區(qū)下的所有房門(mén)進(jìn)行緊急開(kāi)/關(guān)門(mén)、緊急取消等操作。
(三)電子圖監(jiān)控:以電子圖的形式實(shí)時(shí)顯示監(jiān)控信息,并可以對(duì)房門(mén)進(jìn)行相應(yīng)的控制管理。
第五章 門(mén)禁系統(tǒng)控制及應(yīng)急措施 第九條
門(mén)禁監(jiān)控
門(mén)禁系統(tǒng)有可以實(shí)現(xiàn)實(shí)時(shí)監(jiān)控。(詳見(jiàn)OCS7.1門(mén)禁系統(tǒng)說(shuō)明書(shū)),第十條
門(mén)禁系統(tǒng)中常用報(bào)警參數(shù)有:火警、防盜、強(qiáng)行進(jìn)入、門(mén)超時(shí)報(bào)警、水位檢測(cè)報(bào)警、煤氣檢測(cè)報(bào)警、防撬報(bào)警、讀卡機(jī)斷網(wǎng)。
(一)火警、防盜、水位檢測(cè)、煤氣檢測(cè)報(bào)警:在門(mén)禁系統(tǒng)中提供了報(bào)警信息的接口,需要外圍設(shè)備的支持,門(mén)禁控制器接收到外圍檢測(cè)設(shè)備產(chǎn)生的信號(hào),控制器響應(yīng)這個(gè)觸發(fā)信號(hào)后,馬上進(jìn)行處理。例如產(chǎn)生火警后,控制器會(huì)自動(dòng)開(kāi)門(mén),防盜警會(huì)自動(dòng)關(guān)門(mén)等。設(shè)置:控制器內(nèi)置8個(gè)TTL輸入點(diǎn),在軟件中把相應(yīng)的輸入點(diǎn)設(shè)置為對(duì)應(yīng)的報(bào)警功能即可。
(二)讀卡器斷網(wǎng)報(bào)警:當(dāng)讀卡器和門(mén)禁控制器失去聯(lián)系,控制器會(huì)發(fā)生報(bào)警,紅色指示
燈閃爍,同時(shí)軟件監(jiān)控時(shí)會(huì)發(fā)出警示,提醒操作員及時(shí)處理。
(三)門(mén)超時(shí)報(bào)警,需要安裝門(mén)磁設(shè)備,如果在設(shè)置的時(shí)間內(nèi),房門(mén)沒(méi)有關(guān)上,控制器就會(huì)產(chǎn)生報(bào)警,紅色指示燈閃爍,同時(shí)軟件監(jiān)控時(shí)會(huì)發(fā)出警示,提醒操作員及時(shí)處理。
第六章、附則
第十一條 本辦法由長(zhǎng)春農(nóng)村商業(yè)銀行股份有限公司負(fù)責(zé)制訂、解釋和修改。第十二條 本辦法自發(fā)布之日起執(zhí)行