IrDA模塊與HCG8HC908AP64的紅外系統(tǒng)設(shè)計(jì)_第1頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、irda模塊與hcg8hc908ap64的紅外系統(tǒng)設(shè)計(jì) 隨著系統(tǒng)及技術(shù)的飛快進(jìn)展,針對(duì)移動(dòng)手持終端的專用芯片獲得了長足進(jìn)展。芯片的ram和rom的容量越大,在上面跑操作系統(tǒng)也越來越簡單。是當(dāng)今流行的操作系統(tǒng)之一。因?yàn)槠鋬?nèi)核茁壯、運(yùn)行高效、源碼開放,并且linux是免費(fèi)的操作系統(tǒng),再加上其良好的可移植性等技術(shù)優(yōu)勢(shì),使其已經(jīng)成為嵌入式操作系統(tǒng)的主流。設(shè)備驅(qū)動(dòng)程序是linux操作系統(tǒng)中的一個(gè)重要的組成部分,現(xiàn)在不斷升級(jí)的linux內(nèi)核中,增強(qiáng)最多的就是驅(qū)動(dòng)程序。因?yàn)閘inux是開放源代碼的,給我們提供了一個(gè)絕好的機(jī)會(huì)來分析和改造設(shè)備驅(qū)動(dòng)程序,使其滿足自己的特別應(yīng)用,這樣在嵌入式產(chǎn)品中,就可以為自己特

2、有的外圍設(shè)備編寫一個(gè)設(shè)備驅(qū)動(dòng)程序。因?yàn)閕rda技術(shù)的蓬勃進(jìn)展,提供了各種信息家電設(shè)備之間的無線銜接的最佳挑選,數(shù)據(jù)傳輸,成本低廉、銜接便利、容易易用、結(jié)構(gòu)緊湊,在小型嵌入式移動(dòng)設(shè)備中也得到了廣泛的應(yīng)用。配備有紅外技術(shù)移動(dòng)電話、個(gè)人數(shù)字助理、筆記本電腦都已登陸市場(chǎng),因此,嵌入式設(shè)備的irda模塊的開發(fā)有著廣大的市場(chǎng)前景。本文將具體講解基于inte1的pxa255處理器的sitsang開發(fā)平臺(tái)紅外模塊的設(shè)計(jì),其中包括linux下的irda驅(qū)動(dòng)程序的開發(fā)和基于mc68hc908ap64紅外放射器的軟硬件設(shè)計(jì)兩個(gè)部分。1 linux下irda模塊的設(shè)計(jì)1.1 linux下的設(shè)備驅(qū)動(dòng)程序簡介系統(tǒng)調(diào)用是操

3、作系統(tǒng)內(nèi)核和應(yīng)用程序之間的接口,驅(qū)動(dòng)程序是操作系統(tǒng)內(nèi)核和機(jī)器硬件之間的接el,也是應(yīng)用層和實(shí)際硬件設(shè)備之間的軟件。一個(gè)驅(qū)動(dòng)程序就是一個(gè)函數(shù)和數(shù)據(jù)結(jié)構(gòu)的集合,它的目的就是實(shí)現(xiàn)一個(gè)容易的管理設(shè)備的接口。內(nèi)核用這個(gè)接口哀求驅(qū)動(dòng)程序控制設(shè)備的io操作。設(shè)備驅(qū)動(dòng)程序?yàn)閼?yīng)用程序屏蔽了硬件的詳情,這樣在應(yīng)用程序看來,硬件設(shè)備只是一個(gè)設(shè)備文件,應(yīng)用程序可以像操作一般文件一樣對(duì)硬件設(shè)備舉行操作。linux操作系統(tǒng)支持三種不同類型的設(shè)備,即字符設(shè)備、塊設(shè)備和網(wǎng)絡(luò)接口,相應(yīng)地有三種類型的設(shè)備驅(qū)動(dòng)程序。本文主要研究字符型設(shè)備的驅(qū)動(dòng)程序。設(shè)備驅(qū)動(dòng)程序是內(nèi)核的一部分,主要完成以下的功能:對(duì)設(shè)備初始化和釋放;把數(shù)據(jù)從內(nèi)核傳

4、送到硬件和從硬件讀取數(shù)據(jù);讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù)和回送應(yīng)用程序哀求的數(shù)據(jù);檢測(cè)和處理設(shè)備浮現(xiàn)的錯(cuò)誤。因?yàn)閼?yīng)用程序是通過設(shè)備文件同硬件打交道,對(duì)設(shè)備文件的操作方式不外乎就是一些系統(tǒng)調(diào)用,如open、read、write、close等等。linux操作系統(tǒng)是通過一組固定的接口把系統(tǒng)調(diào)用和驅(qū)動(dòng)程序關(guān)聯(lián)起來的。這組入口點(diǎn)是由每個(gè)設(shè)備的設(shè)備驅(qū)動(dòng)程序組成了一個(gè)數(shù)據(jù)結(jié)構(gòu)來向系統(tǒng)提供的,它提供了字符型設(shè)備驅(qū)動(dòng)程序所需的操作。這是一個(gè)十分關(guān)鍵的數(shù)據(jù)結(jié)構(gòu):struet file_operationsstruct modul*owner;loft t(*llseek)(struet file*10flf_

5、t,int);ssize t(*read)(struct file*,char*,size_t,10ff_t);ssize tf*write)(struct file*,const char*size_t,10ff_t*);int f*readdir)(struct file*,void*,filldir_t);unsigned int(*poll)(struct file*,struct poll_table_struct*);int(*ioctl)(struct inode*struct file*,unsigned int,unsigned long);int(*mmap)(struet

6、 file*,struct vm_area_struct*)int(*open)(struct inode*,stmct file*);int(*flush)(struct nle*);int(*release)(struct inode*,stmct file*);這個(gè)結(jié)構(gòu)的每一個(gè)成員的名字都對(duì)應(yīng)著一個(gè)系統(tǒng)調(diào)月。應(yīng)用程序利用系統(tǒng)調(diào)用在對(duì)設(shè)備文件舉行諸如readwrite操作時(shí),系統(tǒng)調(diào)用通過設(shè)備文件的主設(shè)備號(hào)找到相應(yīng)的設(shè)備驅(qū)動(dòng)程序,然后讀取這個(gè)數(shù)據(jù)結(jié)構(gòu)相應(yīng)的函數(shù)指針,接著把控制權(quán)交給該函數(shù)。這是linux的設(shè)備驅(qū)動(dòng)程序工作的基本原理。既然是這樣,編寫設(shè)備驅(qū)動(dòng)程序的主要工作就是編寫子函數(shù),并填充

7、me_operations的各個(gè)域。多數(shù)狀況下,只需為上面結(jié)構(gòu)中的少數(shù)辦法編寫服務(wù)函數(shù),其它均設(shè)為null。已經(jīng)提到,應(yīng)用程序是通過設(shè)備文件來與實(shí)際的硬件打交道的。每個(gè)設(shè)備文件都有其文件屬性(cb),表示是字符設(shè)備還是塊設(shè)備。另外每個(gè)文件都有兩個(gè)設(shè)備號(hào):第一個(gè)是主設(shè)備號(hào),標(biāo)識(shí)驅(qū)動(dòng)程序;其次個(gè)是從設(shè)備號(hào),標(biāo)識(shí)用法同一個(gè)設(shè)備驅(qū)動(dòng)程序的不同的硬件設(shè)備,比如有兩個(gè)軟盤,就可以用從設(shè)備號(hào)來區(qū)別它們。設(shè)備文件的主設(shè)備號(hào)必需與設(shè)備驅(qū)動(dòng)程序在記下時(shí)申請(qǐng)的主設(shè)備號(hào)全都,否則用戶進(jìn)程將無法拜訪到驅(qū)動(dòng)程序。1.2 irda模塊驅(qū)動(dòng)程序irda是一種便宜、近距離、無線、低功耗、保密性強(qiáng)的通信技術(shù),適合于低成本、跨平臺(tái)

8、、點(diǎn)對(duì)點(diǎn)高速數(shù)據(jù)銜接,尤其是嵌入式系統(tǒng);主要應(yīng)用于無線數(shù)據(jù)傳輸,有時(shí)也用于無線網(wǎng)絡(luò)接入和近程遙控。irda制定了無數(shù)紅外通信協(xié)議,其中irda1.0協(xié)議基于異步uart,最高通信速率在115 2kbps,簡稱sir(seria infrared,串行紅外協(xié)議),采納31 6 endec編解碼機(jī)制。我們所要實(shí)現(xiàn)的就是基于sir的irda驅(qū)動(dòng)。它的放射強(qiáng)度與接收敏捷度因不同器件、不同應(yīng)用設(shè)計(jì)而強(qiáng)弱不一,用法時(shí)只能以半雙工方式舉行紅外通信。我們的設(shè)計(jì)思想是sitsang板只作為接收端,而基于mc68hc908ap64紅外放射器作為發(fā)送端。其中file_operations結(jié)構(gòu)中的ioctl()函數(shù)可

9、以舉行發(fā)送或接收的狀態(tài)切換。原sitsang板載linux系統(tǒng)所帶的irda驅(qū)動(dòng)程序是作為網(wǎng)絡(luò)部分編寫的,用法過于復(fù)雜,且在處理數(shù)據(jù)收發(fā)時(shí)需要做一些自己的處理和驗(yàn)證規(guī)章,所以我們用法標(biāo)準(zhǔn)串口在linux下自己編寫了一個(gè)irda的設(shè)備驅(qū)動(dòng)程序。這樣在用法時(shí),可以按照自己的需要作相應(yīng)的更改,比較靈便。在irda驅(qū)動(dòng)程序中主要實(shí)現(xiàn)了s_r_read()、s_r_write()、silopen()、sir_close()、silioctl()及sir_handle_irq()中斷處理程序六個(gè)函數(shù)。相應(yīng)的接口結(jié)構(gòu)如下所示:static struct file_operations silfops=ioc

10、tl: sir ioctl,read: siread,write: sir_write,open: slr_open,release:sir close1.2.1 sir_handle_irq函數(shù)用戶空間進(jìn)程通過接口函數(shù)進(jìn)入到內(nèi)核,內(nèi)核再調(diào)用驅(qū)動(dòng)程序相應(yīng)的io函數(shù)。irda驅(qū)動(dòng)程序是字符類型的驅(qū)動(dòng)程序,我們用中斷的方式實(shí)現(xiàn)內(nèi)核與設(shè)備之間的數(shù)據(jù)傳輸。當(dāng)驅(qū)動(dòng)程序在啟動(dòng)后設(shè)備就掛起自己,直到串口完成操作并發(fā)出一個(gè)中斷哀求(irq)。當(dāng)irq產(chǎn)生時(shí),注冊(cè)的中斷處理程序sir_handlejrq得以運(yùn)行。在sir_handle_irq中,程序通過相應(yīng)的寄存器操作得到接收的數(shù)據(jù),并將數(shù)據(jù)存入到一個(gè)內(nèi)部緩沖

11、中。1.2.2 sir open和sir_ciose函數(shù)sir_open函數(shù)的主要功能就是遞增用法計(jì)數(shù)和設(shè)備初始化操作。這里把設(shè)置并初始化sitsang板上的紅外設(shè)備放在了sir_open函數(shù)中,這樣在每次打開irda設(shè)備時(shí),紅外設(shè)備都會(huì)被正確地設(shè)置,確保了紅外硬件的正常工作。另外,把申請(qǐng)?jiān)O(shè)備中斷號(hào)的工作也放到了sir_open函數(shù)中,這樣irda設(shè)備所占用的中斷號(hào),在沒有用法irda設(shè)備時(shí)也可以被其它設(shè)備分享。static int sir sopen(struct inode*inode,struet *filp)計(jì)數(shù)器加1;申請(qǐng)?jiān)O(shè)備中斷號(hào);設(shè)置sitsang板上的紅外設(shè)備并初始化;sir_

12、close()函數(shù)所作的工作與sir_open()的正巧相反,計(jì)數(shù)器減1,注銷設(shè)備中斷號(hào)。1.2.3 sir_ioctl函數(shù)因?yàn)樗梅ǖ募t外收發(fā)器hsdl-3200只能以半雙工方式舉行紅外通信,所以就需要指令舉行接收和發(fā)送狀態(tài)的轉(zhuǎn)換。ioctl函數(shù)的主要功能就是對(duì)硬件設(shè)備舉行控制,因此在sirioctl函數(shù)中實(shí)現(xiàn)了這一功能。static int silioctl(stmctitlode*inode,structfile*mp,unsigned_int cmd,unsignedlogarg)swltell(cmd)case接收:設(shè)置接收寄存器;break:case發(fā)送:設(shè)置發(fā)送寄存器;break

13、;default:1.2.4 sir_read和sir_write函數(shù)這兩個(gè)函數(shù)主要完成讀取應(yīng)用程序傳送給內(nèi)核設(shè)備文件的數(shù)據(jù)和回送應(yīng)用程序哀求的數(shù)據(jù),并把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù)的通信過程。這也是在囫圇驅(qū)動(dòng)程序中最重要的部分。當(dāng)用戶調(diào)用read()函數(shù)時(shí),內(nèi)核相應(yīng)地調(diào)用sir_read()函數(shù)。在sir_read()中,通過推斷硬件寄存器是否有新數(shù)據(jù)到來而打算是否從設(shè)備讀取數(shù)據(jù),然后用法內(nèi)核提供的copy touser(void*to,const void*from,unsigned long count)函數(shù)將數(shù)據(jù)返回應(yīng)用程序。write()函數(shù)的實(shí)現(xiàn)與read()函數(shù)的實(shí)現(xiàn)過程

14、正巧相反。在sir_write()中,通過調(diào)用copy_from user_form_user(void*to,const void*from,unsigned long count,)函數(shù)來完成把數(shù)據(jù)從用戶的應(yīng)用程序傳送給硬件設(shè)備。1.2.5實(shí)現(xiàn)模式設(shè)備驅(qū)動(dòng)程序的主體完成了,現(xiàn)在要把驅(qū)動(dòng)程序嵌入內(nèi)核。實(shí)現(xiàn)llnux下irda設(shè)備驅(qū)動(dòng)功能主要有兩種形式:一是通過內(nèi)核來舉行加載,需要用戶在etcrc.d名目中定義的初始啟動(dòng)腳本中寫入指令,當(dāng)內(nèi)核啟動(dòng)的時(shí)候,就開頭加載irda設(shè)備驅(qū)動(dòng)程序,內(nèi)核啟動(dòng)完成之后,irda驅(qū)動(dòng)功能也隨即實(shí)現(xiàn)了,但是增大了內(nèi)核;其次是通過模塊加載的形式。比較兩者,其次種形式

15、越發(fā)靈便,在此著重對(duì)模塊加載形式舉行研究。模塊設(shè)計(jì)是llnux中特有的技術(shù),它使linux內(nèi)核功能更簡單擴(kuò)展。采納模塊來設(shè)計(jì)linux設(shè)備驅(qū)動(dòng)程序會(huì)很輕松,并且能夠形成固定的模式。任何人只要依照這個(gè)模式去設(shè)計(jì),都能設(shè)計(jì)出優(yōu)良的設(shè)備驅(qū)動(dòng)程序。先簡要概述一下基于模塊加載的設(shè)備驅(qū)動(dòng)程序的設(shè)計(jì)步驟。首先每一個(gè)可裝配的設(shè)備驅(qū)動(dòng)程序都必需有init_module和cleanup module兩個(gè)函數(shù),裝載和卸載設(shè)備時(shí)內(nèi)核自動(dòng)調(diào)用這兩個(gè)函數(shù)。前者在insmod的時(shí)候執(zhí)行,后者在rmmod的時(shí)候執(zhí)行。通過模塊加載指令insmod來把irda設(shè)備驅(qū)動(dòng)程序插入到內(nèi)核之中。在init_module中,除可以對(duì)硬件設(shè)

16、備舉行檢查和初始化外,還必需調(diào)用reglster_*函數(shù)將設(shè)備記下到系統(tǒng)中。本例中是通過register_chrdev來記下的,假如是塊設(shè)備或網(wǎng)絡(luò)設(shè)備則應(yīng)當(dāng)用reglstei_blkdev和register_netdev來記下。registet_chrdev的主要功能是將設(shè)備名和結(jié)構(gòu)flle operatioons記下到系統(tǒng)的設(shè)備控制塊中。最后可以通過執(zhí)行模塊卸載指令rmmod,調(diào)用irda驅(qū)動(dòng)程序中的cleanup_module()函數(shù),來對(duì)irda驅(qū)動(dòng)程序模塊卸載,詳細(xì)實(shí)現(xiàn)過程1所示。2 基于mc68hc908ap64紅外放射器的設(shè)計(jì)2.1 紅外放射器的硬件設(shè)計(jì)為了可以檢測(cè)sitsang板端的irda設(shè)備能否正常工作,設(shè)計(jì)了一個(gè)irda放射器。放射器的體積為l3cm×10cm,安裝靈便便利。在放射器上有一個(gè)撥位開關(guān),可以用來設(shè)置放射

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論