IrDA模塊與HCG8HC908AP64的紅外系統(tǒng)設(shè)計(jì)
發(fā)布時(shí)間:2007/4/23 0:00:00 訪問(wèn)次數(shù):2845
引 言
隨著嵌入式系統(tǒng)及集成電路技術(shù)的飛速發(fā)展,針對(duì)移動(dòng)手持終端的專用芯片獲得了長(zhǎng)足發(fā)展。芯片的RAM和ROM的容量越大,在上面跑操作系統(tǒng)也越來(lái)越容易。Linux是當(dāng)今流行的操作系統(tǒng)之一。由于其內(nèi)核健壯、運(yùn)行高效、源碼開(kāi)放,并且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)核中,增加最多的就是驅(qū)動(dòng)程序。由于Linux是開(kāi)放源代碼的,給我們提供了一個(gè)絕好的機(jī)會(huì)來(lái)分析和改造設(shè)備驅(qū)動(dòng)程序,使其滿足自己的特殊應(yīng)用,這樣在嵌入式產(chǎn)品中,就可以為自己特有的外圍設(shè)備編寫一個(gè)設(shè)備驅(qū)動(dòng)程序。由于IrDA技術(shù)的蓬勃發(fā)展,提供了各種信息家電設(shè)備之間的無(wú)線連接的最佳選擇,紅外數(shù)據(jù)傳輸,成本低廉、連接方便、簡(jiǎn)單易用、結(jié)構(gòu)緊湊,在小型嵌入式移動(dòng)設(shè)備中也得到了廣泛的應(yīng)用。配備有紅外技術(shù)移動(dòng)電話、個(gè)人數(shù)字助理、筆記本電腦都已登陸市場(chǎng),因此,嵌入式設(shè)備的IrDA模塊的開(kāi)發(fā)有著廣闊的市場(chǎng)前景。
本文將詳細(xì)講解基于Inte1的PXA255處理器的Sitsang開(kāi)發(fā)平臺(tái)紅外模塊的設(shè)計(jì),其中包括Linux下的IrDA驅(qū)動(dòng)程序的開(kāi)發(fā)和基于MC68HC908AP64紅外發(fā)射器的軟硬件設(shè)計(jì)兩個(gè)部分。
1 Linux下IrDA模塊的設(shè)計(jì)
1.1 Linux下的設(shè)備驅(qū)動(dòng)程序簡(jiǎn)介
系統(tǒng)調(diào)用是操作系統(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è)簡(jiǎn)單的管理設(shè)備的接口。內(nèi)核用這個(gè)接口請(qǐng)求驅(qū)動(dòng)程序控制設(shè)備的I/O操作。設(shè)備驅(qū)動(dòng)程序?yàn)閼?yīng)用程序屏蔽了硬件的細(xì)節(jié),這樣在應(yīng)用程序看來(lái),硬件設(shè)備只是一個(gè)設(shè)備文件,應(yīng)用程序可以像操作普通文件一樣對(duì)硬件設(shè)備進(jìn)行操作。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)核傳送到硬件和從硬件讀取數(shù)據(jù);
③讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù)和回送應(yīng)用程序請(qǐng)求的數(shù)據(jù);
④檢測(cè)和處理設(shè)備出現(xiàn)的錯(cuò)誤。
由于應(yīng)用程序是通過(guò)設(shè)備文件同硬件打交道,對(duì)設(shè)備文件的操作方式不外乎就是一些系統(tǒng)調(diào)用,如open、read、write、close等等。Linux操作系統(tǒng)是通過(guò)一組固定的接口把系統(tǒng)調(diào)用和驅(qū)動(dòng)程序關(guān)聯(lián)起來(lái)的。這組入口點(diǎn)是由每個(gè)設(shè)備的設(shè)備驅(qū)動(dòng)程序組成了一個(gè)數(shù)據(jù)結(jié)構(gòu)來(lái)向系統(tǒng)提供的,它提供了字符型設(shè)備驅(qū)動(dòng)程序所需的操作。這是一個(gè)非常關(guān)鍵的數(shù)據(jù)結(jié)構(gòu):
struet file_operations{
struct modul*owner;
loft t(*llseek)(struet file*10flf_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 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è)備文件進(jìn)行諸如read/write操作時(shí),系統(tǒng)調(diào)用通過(guò)設(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ù),并填充me_operations的各個(gè)域。多數(shù)情況下,只需為上面結(jié)構(gòu)中的少數(shù)方法編寫服務(wù)函數(shù),其它均設(shè)為NULL。
已經(jīng)提到,應(yīng)用程序是通過(guò)設(shè)備文件來(lái)與實(shí)際的硬件打交道的。每個(gè)設(shè)備文件都有其文件屬性(c/b),表示是字符設(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)來(lái)區(qū)分它們。設(shè)備文件的主設(shè)備號(hào)必須與設(shè)備驅(qū)動(dòng)程序在登記時(shí)申請(qǐng)的主設(shè)備號(hào)一致,否則用戶進(jìn)程將無(wú)法訪問(wèn)
引 言
隨著嵌入式系統(tǒng)及集成電路技術(shù)的飛速發(fā)展,針對(duì)移動(dòng)手持終端的專用芯片獲得了長(zhǎng)足發(fā)展。芯片的RAM和ROM的容量越大,在上面跑操作系統(tǒng)也越來(lái)越容易。Linux是當(dāng)今流行的操作系統(tǒng)之一。由于其內(nèi)核健壯、運(yùn)行高效、源碼開(kāi)放,并且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)核中,增加最多的就是驅(qū)動(dòng)程序。由于Linux是開(kāi)放源代碼的,給我們提供了一個(gè)絕好的機(jī)會(huì)來(lái)分析和改造設(shè)備驅(qū)動(dòng)程序,使其滿足自己的特殊應(yīng)用,這樣在嵌入式產(chǎn)品中,就可以為自己特有的外圍設(shè)備編寫一個(gè)設(shè)備驅(qū)動(dòng)程序。由于IrDA技術(shù)的蓬勃發(fā)展,提供了各種信息家電設(shè)備之間的無(wú)線連接的最佳選擇,紅外數(shù)據(jù)傳輸,成本低廉、連接方便、簡(jiǎn)單易用、結(jié)構(gòu)緊湊,在小型嵌入式移動(dòng)設(shè)備中也得到了廣泛的應(yīng)用。配備有紅外技術(shù)移動(dòng)電話、個(gè)人數(shù)字助理、筆記本電腦都已登陸市場(chǎng),因此,嵌入式設(shè)備的IrDA模塊的開(kāi)發(fā)有著廣闊的市場(chǎng)前景。
本文將詳細(xì)講解基于Inte1的A255處理器的Sitsang開(kāi)發(fā)平臺(tái)紅外模塊的設(shè)計(jì),其中包括Linux下的IrDA驅(qū)動(dòng)程序的開(kāi)發(fā)和基于MC68HC908AP64紅外發(fā)射器的軟硬件設(shè)計(jì)兩個(gè)部分。
1 Linux下IrDA模塊的設(shè)計(jì)
1.1 Linux下的設(shè)備驅(qū)動(dòng)程序簡(jiǎn)介
系統(tǒng)調(diào)用是操作系統(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è)簡(jiǎn)單的管理設(shè)備的接口。內(nèi)核用這個(gè)接口請(qǐng)求驅(qū)動(dòng)程序控制設(shè)備的I/O操作。設(shè)備驅(qū)動(dòng)程序?yàn)閼?yīng)用程序屏蔽了硬件的細(xì)節(jié),這樣在應(yīng)用程序看來(lái),硬件設(shè)備只是一個(gè)設(shè)備文件,應(yīng)用程序可以像操作普通文件一樣對(duì)硬件設(shè)備進(jìn)行操作。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)核傳送到硬件和從硬件讀取數(shù)據(jù);
③讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù)和回送應(yīng)用程序請(qǐng)求的數(shù)據(jù);
④檢測(cè)和處理設(shè)備出現(xiàn)的錯(cuò)誤。
由于應(yīng)用程序是通過(guò)設(shè)備文件同硬件打交道,對(duì)設(shè)備文件的操作方式不外乎就是一些系統(tǒng)調(diào)用,如open、read、write、close等等。Linux操作系統(tǒng)是通過(guò)一組固定的接口把系統(tǒng)調(diào)用和驅(qū)動(dòng)程序關(guān)聯(lián)起來(lái)的。這組入口點(diǎn)是由每個(gè)設(shè)備的設(shè)備驅(qū)動(dòng)程序組成了一個(gè)數(shù)據(jù)結(jié)構(gòu)來(lái)向系統(tǒng)提供的,它提供了字符型設(shè)備驅(qū)動(dòng)程序所需的操作。這是一個(gè)非常關(guān)鍵的數(shù)據(jù)結(jié)構(gòu):
struet file_operations{
struct modul*owner;
loft t(*llseek)(struet file*10flf_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 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è)備文件進(jìn)行諸如read/write操作時(shí),系統(tǒng)調(diào)用通過(guò)設(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ù),并填充me_operations的各個(gè)域。多數(shù)情況下,只需為上面結(jié)構(gòu)中的少數(shù)方法編寫服務(wù)函數(shù),其它均設(shè)為NULL。
已經(jīng)提到,應(yīng)用程序是通過(guò)設(shè)備文件來(lái)與實(shí)際的硬件打交道的。每個(gè)設(shè)備文件都有其文件屬性(c/b),表示是字符設(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)來(lái)區(qū)分它們。設(shè)備文件的主設(shè)備號(hào)必須與設(shè)備驅(qū)動(dòng)程序在登記時(shí)申請(qǐng)的主設(shè)備號(hào)一致,否則用戶進(jìn)程將無(wú)法訪問(wèn)
熱門點(diǎn)擊
- 數(shù)字傳輸用對(duì)絞電纜應(yīng)用與性能分析
- 采用I2C總線控制的2.7GHz低噪聲頻率合
- 基于PIC的FSK/ASK超外差收發(fā)機(jī)的設(shè)計(jì)
- 遙控車門開(kāi)關(guān)的安全系統(tǒng)設(shè)計(jì)
- IrDA模塊與HCG8HC908AP64的紅
- 車載GPS/GPRS/CDMA系統(tǒng)新方案
- 機(jī)器人實(shí)時(shí)遠(yuǎn)程控制系統(tǒng)及其開(kāi)發(fā)庫(kù)的設(shè)計(jì)與實(shí)現(xiàn)
- 無(wú)線接口電路設(shè)計(jì)及其在TPMS中的應(yīng)用
- 具有60分貝動(dòng)態(tài)范圍的音量單位表
- 基于軟件無(wú)線電的擴(kuò)頻通信同步研究
推薦技術(shù)資料
- 分立器件&無(wú)源元件選型及工作原
- 新一代“超越EUV”光刻系統(tǒng)參
- 最新品BAT激光器制造工藝設(shè)計(jì)
- 新款汽車SoC產(chǎn)品Malibo
- 新芯片品類FPCU(現(xiàn)場(chǎng)可編程
- 電動(dòng)汽車動(dòng)力總成系統(tǒng)̴
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動(dòng)IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計(jì)
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究