在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于Linux操作系統(tǒng)和紅外發(fā)射器實現(xiàn)系統(tǒng)模塊的設計

電子設計 ? 來源:單片機與嵌入式系統(tǒng)應用 ? 作者:趙旸;譚光力;李晶 ? 2020-09-17 16:20 ? 次閱讀

引 言

隨著嵌入式系統(tǒng)集成電路技術的飛速發(fā)展,針對移動手持終端的專用芯片獲得了長足發(fā)展。芯片的RAMROM的容量越大,在上面跑操作系統(tǒng)也越來越容易。Linux是當今流行的操作系統(tǒng)之一。由于其內核健壯、運行高效、源碼開放,并且Linux是免費的操作系統(tǒng),再加上其良好的可移植性等技術優(yōu)勢,使其已經(jīng)成為嵌入式操作系統(tǒng)的主流。設備驅動程序是Linux操作系統(tǒng)中的一個重要的組成部分,現(xiàn)在不斷升級的Linux內核中,增加最多的就是驅動程序。由于Linux是開放源代碼的,給我們提供了一個絕好的機會來分析和改造設備驅動程序,使其滿足自己的特殊應用,這樣在嵌入式產(chǎn)品中,就可以為自己特有的外圍設備編寫一個設備驅動程序。由于IrDA技術的蓬勃發(fā)展,提供了各種信息家電設備之間的無線連接的最佳選擇,紅外數(shù)據(jù)傳輸,成本低廉、連接方便、簡單易用、結構緊湊,在小型嵌入式移動設備中也得到了廣泛的應用。配備有紅外技術移動電話、個人數(shù)字助理、筆記本電腦都已登陸市場,因此,嵌入式設備的IrDA模塊的開發(fā)有著廣闊的市場前景。

本文將詳細講解基于Inte1的PXA255處理器的Sitsang開發(fā)平臺紅外模塊的設計,其中包括Linux下的IrDA驅動程序的開發(fā)和基于MC68HC908AP64紅外發(fā)射器的軟硬件設計兩個部分。

1 Linux下IrDA模塊的設計

1.1 Linux下的設備驅動程序簡介

系統(tǒng)調用是操作系統(tǒng)內核和應用程序之間的接口,驅動程序是操作系統(tǒng)內核和機器硬件之間的接El,也是應用層和實際硬件設備之間的軟件。一個驅動程序就是一個函數(shù)和數(shù)據(jù)結構的集合,它的目的就是實現(xiàn)一個簡單的管理設備的接口。內核用這個接口請求驅動程序控制設備的I/O操作。設備驅動程序為應用程序屏蔽了硬件的細節(jié),這樣在應用程序看來,硬件設備只是一個設備文件,應用程序可以像操作普通文件一樣對硬件設備進行操作。Linux操作系統(tǒng)支持三種不同類型的設備,即字符設備、塊設備和網(wǎng)絡接口,相應地有三種類型的設備驅動程序。本文主要討論字符型設備的驅動程序。設備驅動程序是內核的一部分,主要完成以下的功能:

①對設備初始化和釋放;

②把數(shù)據(jù)從內核傳送到硬件和從硬件讀取數(shù)據(jù);

③讀取應用程序傳送給設備文件的數(shù)據(jù)和回送應用程序請求的數(shù)據(jù);

④檢測和處理設備出現(xiàn)的錯誤。

由于應用程序是通過設備文件同硬件打交道,對設備文件的操作方式不外乎就是一些系統(tǒng)調用,如open、read、write、close等等。Linux操作系統(tǒng)是通過一組固定的接口把系統(tǒng)調用和驅動程序關聯(lián)起來的。這組入口點是由每個設備的設備驅動程序組成了一個數(shù)據(jù)結構來向系統(tǒng)提供的,它提供了字符型設備驅動程序所需的操作。這是一個非常關鍵的數(shù)據(jù)結構:

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*);

這個結構的每一個成員的名字都對應著一個系統(tǒng)調月。應用程序利用系統(tǒng)調用在對設備文件進行諸如read/write操作時,系統(tǒng)調用通過設備文件的主設備號找到相應的設備驅動程序,然后讀取這個數(shù)據(jù)結構相應的函數(shù)指針,接著把控制權交給該函數(shù)。這是Linux的設備驅動程序工作的基本原理。既然是這樣,編寫設備驅動程序的主要工作就是編寫子函數(shù),并填充me_operations的各個域。多數(shù)情況下,只需為上面結構中的少數(shù)方法編寫服務函數(shù),其它均設為NULL。

已經(jīng)提到,應用程序是通過設備文件來與實際的硬件打交道的。每個設備文件都有其文件屬性(c/b),表示是字符設備還是塊設備。另外每個文件都有兩個設備號:第一個是主設備號,標識驅動程序;第二個是從設備號,標識使用同一個設備驅動程序的不同的硬件設備,比如有兩個軟盤,就可以用從設備號來區(qū)分它們。設備文件的主設備號必須與設備驅動程序在登記時申請的主設備號一致,否則用戶進程將無法訪問到驅動程序。

1.2 IrDA模塊驅動程序

IrDA是一種廉價、近距離、無線、低功耗、保密性強的通信技術,適合于低成本、跨平臺、點對點高速數(shù)據(jù)連接,尤其是嵌入式系統(tǒng);主要應用于無線數(shù)據(jù)傳輸,有時也用于無線網(wǎng)絡接入和近程遙控。IrDA制定了很多紅外通信協(xié)議,其中IrDA1.0協(xié)議基于異步收發(fā)器uART,最高通信速率在115 2kbps,簡稱sIR(Seria Infrared,串行紅外協(xié)議),采用3/1 6 ENDEC編/解碼機制。我們所要實現(xiàn)的就是基于sIR的IrDA驅動。它的發(fā)射強度與接收靈敏度因不同器件、不同應用設計而強弱不一,使用時只能以半雙工方式進行紅外通信。

我們的設計思想是Sitsang板只作為接收端,而基于MC68HC908AP64紅外發(fā)射器作為發(fā)送端。其中file_operations結構中的ioctl()函數(shù)可以進行發(fā)送或接收的狀態(tài)切換。原Sitsang板載Linux系統(tǒng)所帶的IrDA驅動程序是作為網(wǎng)絡部分編寫的,使用過于復雜,且在處理數(shù)據(jù)收發(fā)時需要做一些自己的處理和驗證規(guī)則,所以我們使用標準串口在Linux下自己編寫了一個IrDA的設備驅動程序。這樣在使用時,可以根據(jù)自己的需要作相應的更改,比較靈活。

在IrDA驅動程序中主要實現(xiàn)了s_r_read()、s_r_write()、siLopen()、sir_close()、siLioctl()及sir_handle_irq()中斷處理程序六個函數(shù)。相應的接口結構如下所示:

static struct file_operations siLfops={

ioctl: sir ioctl,

read: siread,

write: sir_write,

open: slr_open,

release:sir close

1.2.1 sir_handle_irq函數(shù)

用戶空間進程通過接口函數(shù)進入到內核,內核再調用驅動程序相應的I/O函數(shù)。IrDA驅動程序是字符類型的驅動程序,我們用中斷的方式實現(xiàn)內核與設備之間的數(shù)據(jù)傳輸。當驅動程序在啟動后設備就掛起自己,直到串口完成操作并發(fā)出一個中斷請求(IRQ)。當IRQ產(chǎn)生時,注冊的中斷處理程序sir_handlejrq得以運行。在Sir_handle_irq中,程序通過相應的寄存器操作得到接收的數(shù)據(jù),并將數(shù)據(jù)存入到一個內部緩沖中。

1.2.2 sir open和sir_cIose函數(shù)

sir_open函數(shù)的主要功能就是遞增使用計數(shù)和設備初始化操作。這里把設置并初始化sitsang板上的紅外設備放在了sir_open函數(shù)中,這樣在每次打開IrDA設備時,紅外設備都會被正確地設置,確保了紅外硬件的正常工作。另外,把申請設備中斷號的工作也放到了Sir_open函數(shù)中,這樣IrDA設備所占用的中斷號,在沒有使用IrDA設備時也可以被其它設備共享。

static int sir sopen(struct inode*inode,struet *filp){

計數(shù)器加1;

申請設備中斷號;

設置Sitsang板上的紅外設備并初始化;

}

sir_close()函數(shù)所作的工作與sir_open()的正好相反,計數(shù)器減1,注銷設備中斷號。

1.2.3 sir_ioctl函數(shù)

由于所使用的紅外收發(fā)器HSDL-3200只能以半雙工方式進行紅外通信,所以就需要命令進行接收和發(fā)送狀態(tài)的轉換。ioctl函數(shù)的主要功能就是對硬件設備進行控制,因此在sir—ioctl函數(shù)中實現(xiàn)了這一功能。

static int siLioctl(stmctiTlode*inode,structfile*mp,unsigned_int cmd,unsignedlogarg){

swltell(cmd){

case接收:

設置接收寄存器;

break:

case發(fā)送:

設置發(fā)送寄存器;

break;

default:

}

}

1.2.4 sir_read和sir_write函數(shù)

這兩個函數(shù)主要完成讀取應用程序傳送給內核設備文件的數(shù)據(jù)和回送應用程序請求的數(shù)據(jù),并把數(shù)據(jù)從內核傳送到硬件和從硬件讀取數(shù)據(jù)的通信過程。這也是在整個驅動程序中最重要的部分。

當用戶調用read()函數(shù)時,內核相應地調用sir_read()函數(shù)。在Sir_read()中,通過判斷硬件寄存器是否有新數(shù)據(jù)到來而決定是否從設備讀取數(shù)據(jù),然后使用內核提供的copy touser(void*to,const void*from,unsigned long count)函數(shù)將數(shù)據(jù)返回應用程序。write()函數(shù)的實現(xiàn)與read()函數(shù)的實現(xiàn)過程正好相反。在sir_write()中,通過調用copy_from user_form_user(void*to,const void*from,unsigned long count,)函數(shù)來完成把數(shù)據(jù)從用戶的應用程序傳送給硬件設備。

1.2.5實現(xiàn)模式

設備驅動程序的主體完成了,現(xiàn)在要把驅動程序嵌入內核。實現(xiàn)Llnux下IrDA設備驅動功能主要有兩種形式:一是通過內核來進行加載,需要用戶在./etc/rc.d/目錄中定義的初始啟動腳本中寫入命令,當內核啟動的時候,就開始加載IrDA設備驅動程序,內核啟動完成之后,IrDA驅動功能也隨即實現(xiàn)了,但是增大了內核;第二是通過模塊加載的形式。比較兩者,第二種形式更加靈活,在此著重對模塊加載形式進行討論。模塊設計是Llnux中特有的技術,它使Linux內核功能更容易擴展。采用模塊來設計Linux設備驅動程序會很輕松,并且能夠形成固定的模式。任何人只要依照這個模式去設計,都能設計出優(yōu)良的設備驅動程序。

先簡要概述一下基于模塊加載的設備驅動程序的設計步驟。首先每一個可裝配的設備驅動程序都必須有init_module和cleanup module兩個函數(shù),裝載和卸載設備時內核自動調用這兩個函數(shù)。前者在insmod的時候執(zhí)行,后者在rmmod的時候執(zhí)行。通過模塊加載命令insmod來把IrDA設備驅動程序插入到內核之中。在init_module中,除可以對硬件設備進行檢查和初始化外,還必須調用reglster_*’函數(shù)將設備登記到系統(tǒng)中。本例中是通過register_chrdev來登記的,如果是塊設備或網(wǎng)絡設備則應該用reglstei_blkdev和register_netdev來登記。registeT_chrdev的主要功能是將設備名和結構flle operatioons登記到系統(tǒng)的設備控制塊中。最后可以通過執(zhí)行模塊卸載命令rmmod,調用IrDA驅動程序中的cleanup_module()函數(shù),來對IrDA驅動程序模塊卸載,具體實現(xiàn)過程如圖1所示。

基于Linux操作系統(tǒng)和紅外發(fā)射器實現(xiàn)系統(tǒng)模塊的設計

2 基于MC68HC908AP64紅外發(fā)射器的設計

2.1 紅外發(fā)射器的硬件設計

為了可以檢測Sitsang板端的IrDA設備能否正常工作,設計了一個IrDA發(fā)射器。發(fā)射器的體積為l3cm×10cm,安裝靈活方便。在發(fā)射器上有一個撥位開關,可以用來設置發(fā)射不同的碼值。紅外收發(fā)器選用具有半雙工功能的HSDL-3200。

單片機的可靠性和片上資源是選擇的關鍵。如一片單片機的資源不足,還要另加其它芯片,就會給系統(tǒng)的可靠性、外型體積、造價帶來很多負面的影響。MC68HC908AP64單片機對程序安全運行有較全面的保護。與其它的MCU相比,最重要的是它內部集成有UART單元及其接口,支持IrDA標準,有紅外接口可以直接與紅外收發(fā)體系連接。可以直接驅動HSDL_3200,片上的其它資源包含了發(fā)射器的全部需要,并且廉價低功耗。所以選用其作為發(fā)射器的主控芯片電路如圖2所示。

2.2 紅外發(fā)射器的軟件實現(xiàn)流程

發(fā)射器的軟件編程對產(chǎn)品的可靠性有很大影響。由于IrDA是異步半雙工的通信方式,在某一個時刻,IrDA收發(fā)器只可能呈現(xiàn)一種狀態(tài)。鑒于這種情況,設置IrDA收發(fā)器始終處于發(fā)射狀態(tài),而SitSang板上的IrDA收發(fā)器始終處于接收狀態(tài),這樣就不用切換收發(fā)狀態(tài),保證了系統(tǒng)的穩(wěn)定性。發(fā)射器和接收器之間的通信需要制定一套合理的通信協(xié)議來協(xié)調總通信。這里采用的是數(shù)據(jù)包通信方式。通信波特率為9600bps,通信數(shù)據(jù)是成幀發(fā)送的,每幀數(shù)據(jù)都可以設置自己的引導碼和數(shù)據(jù)。其中引導碼是用于同步每一幀數(shù)據(jù);數(shù)據(jù)是IrDA發(fā)射器撥位開關的值,可以自己隨意設定。當紅外發(fā)射器和Sitsang板調通以后,也可以通過sir_ioctl函數(shù)來切換收發(fā)狀態(tài),達到雙方通信的目的。發(fā)射器的軟件流程如圖3所示。

結語

本文分析了設備驅動程序在內核中的實現(xiàn)方法,并講解了基于Intel的PXA255處理器的Sitsang平臺開發(fā)的驅動程序設計和實現(xiàn)過程。其中結合Linux下一個現(xiàn)在使用廣泛的IrDA驅動程序,詳細闡述了紅外模塊驅動程序的設計和開發(fā)過程,最后從硬件和軟件兩個方面講述了基于MC68HC908AP64紅外發(fā)射器的設計和實現(xiàn)。雖然嵌入式Linux操作系統(tǒng)和傳統(tǒng)的嵌入式操作系統(tǒng)相比還不夠成熟完善,但是Linux本身所具有的優(yōu)越性使其在移動設備的OS領域具有廣闊的應用前景。

責任編輯:gt

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 筆記本電腦
    +關注

    關注

    9

    文章

    1437

    瀏覽量

    49763
  • Linux
    +關注

    關注

    87

    文章

    11469

    瀏覽量

    212946
  • 操作系統(tǒng)

    關注

    37

    文章

    7103

    瀏覽量

    125066
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    基于Linux等不同操作系統(tǒng)實現(xiàn)異構系統(tǒng)的設計

    通過該設計能夠確保裝有不同操作系統(tǒng)的各種服務能夠在本系統(tǒng)中正常工作,同時使用消息隊列實現(xiàn)系統(tǒng)模塊
    發(fā)表于 01-16 09:17 ?2742次閱讀

    紅外遙控解碼與發(fā)射器

    的波形 接收狀態(tài),可實現(xiàn)快速存貯多組解碼,且掉電數(shù)據(jù)不丟失。 5.紅外遙控發(fā)射功能??砂l(fā)送接收到的紅外編碼,每按一次確定發(fā)送一組當前波形 紅外
    發(fā)表于 11-12 14:39

    高速紅外發(fā)射器與全向發(fā)光的標準紅外發(fā)射器有何不同?

    高速紅外發(fā)射器有哪些特點?高速紅外發(fā)射器與全向發(fā)光的標準紅外發(fā)射器有何不同?
    發(fā)表于 07-09 08:04

    基于Linux操作系統(tǒng)的嵌入式網(wǎng)關的實現(xiàn)

    基于Linux操作系統(tǒng)的嵌入式網(wǎng)關的實現(xiàn)
    發(fā)表于 03-28 09:48 ?29次下載

    Linux操作系統(tǒng)

    linux的教學內容1 、Linux概述 2 、Linux操作系統(tǒng)安裝3、 Linux的內核 4 、Li
    發(fā)表于 04-10 16:54 ?0次下載
    <b class='flag-5'>Linux</b><b class='flag-5'>操作系統(tǒng)</b>

    Linux操作系統(tǒng)原理及應用

    Linux操作系統(tǒng)原理及應用 1.1  操作系統(tǒng)的地位 1.2  操作系統(tǒng)的功能 1.3  操作系統(tǒng)的發(fā)
    發(fā)表于 04-28 14:53 ?0次下載

    汽車紅外遙控系統(tǒng)發(fā)射器與接收機原理介紹

    汽車紅外遙控系統(tǒng)發(fā)射器與接收機原理介紹
    發(fā)表于 07-03 14:28 ?3755次閱讀
    汽車<b class='flag-5'>紅外</b>遙控<b class='flag-5'>系統(tǒng)</b><b class='flag-5'>發(fā)射器</b>與接收機原理介紹

    Linux與其他操作系統(tǒng)的區(qū)別

    Linux與其他操作系統(tǒng)的區(qū)別 Linux與其他操作系統(tǒng)的區(qū)別  Linux可以與MS-DOS、OS/2、Windows等其他
    發(fā)表于 01-18 12:42 ?1730次閱讀

    什么是Linux操作系統(tǒng)

    什么是Linux操作系統(tǒng)  簡單地說,Linux是一套
    發(fā)表于 12-26 12:04 ?1431次閱讀

    SC9148應用電路 (紅外遙控系統(tǒng)發(fā)射器芯片)

    SC9148應用電路 (紅外遙控系統(tǒng)發(fā)射器芯片) SC9148是為紅外
    發(fā)表于 02-23 15:49 ?4252次閱讀
    SC9148應用電路 (<b class='flag-5'>紅外</b>遙控<b class='flag-5'>系統(tǒng)</b>的<b class='flag-5'>發(fā)射器</b>芯片)

    紅外發(fā)射器,紅外發(fā)射器是什么意思

    紅外發(fā)射器,紅外發(fā)射器是什么意思 紅外線屬于一種電磁射線,其特性等同于無線電或X射線。人眼可見的光波是380nm-780nm,
    發(fā)表于 02-27 17:35 ?6903次閱讀

    趣談Linux操作系統(tǒng)

    趣談Linux操作系統(tǒng)
    的頭像 發(fā)表于 01-13 16:00 ?6750次閱讀

    Linux操作系統(tǒng)與Windows操作系統(tǒng)的五大區(qū)別

    Linux操作系統(tǒng)和Windows操作系統(tǒng)身為三大操作系統(tǒng)巨頭里面的兩大巨頭,他們有什么區(qū)別呢?首先,先要聲明一點,所有以Linux內核為基
    發(fā)表于 07-10 16:28 ?8144次閱讀

    基于嵌入式linux的數(shù)據(jù)采集系統(tǒng)設計與實現(xiàn),基于linux操作系統(tǒng)的嵌入式數(shù)據(jù)采集模塊設計與實現(xiàn).docx...

    湖南大學碩士學位論文基于Linux操作系統(tǒng)的嵌入式數(shù)據(jù)采集模塊設計與實現(xiàn)姓名:易斌申請學位級別:碩士專業(yè):電路與系統(tǒng)指導教師:戴瑜興基于
    發(fā)表于 11-03 20:36 ?9次下載
    基于嵌入式<b class='flag-5'>linux</b>的數(shù)據(jù)采集<b class='flag-5'>系統(tǒng)</b>設計與<b class='flag-5'>實現(xiàn)</b>,基于<b class='flag-5'>linux</b><b class='flag-5'>操作系統(tǒng)</b>的嵌入式數(shù)據(jù)采集<b class='flag-5'>模塊</b>設計與<b class='flag-5'>實現(xiàn)</b>.docx...

    紅外發(fā)射器是什么_紅外發(fā)射器怎么安裝

    紅外發(fā)射器是一種通過紅外發(fā)射管在一定范圍內發(fā)射光線,從而達到控制信號作用的遙控設備。以下是對紅外
    的頭像 發(fā)表于 01-28 13:46 ?1404次閱讀
    主站蜘蛛池模板: 四虎影视网址 | 美女扒开尿口给男人桶视频免费 | 性精品 | 四虎成人影院网址 | 手机看片1024福利 | 一级特黄高清完整大片 | 欧美三级视频在线 | 久久久噜噜噜www成人网 | 黄色国产在线观看 | 热99在线视频 | 97黄网| 天天色天天 | 日韩特级毛片 | 国产papa | 国产精品自在线天天看片 | 日韩一级片免费看 | 六月色播 | 干干操| 在线视频亚洲一区 | 天天狠狠色噜噜 | 天天干天天色天天射 | 国产欧美日韩在线人成aaaa | 美女视频黄视大全视频免费网址 | 亚洲精品在线视频观看 | 七月婷婷在线视频综合 | 一区二区三区免费视频播放器 | 又粗又长又爽又长黄免费视频 | 亚洲情a成黄在线观看动 | 亚欧洲乱码专区视频 | 波多野结衣在线视频免费观看 | 午夜看一级特黄a大片黑 | 男女交性高清视频无遮挡 | 欧美久久综合 | 91福利网winktv| 日本高清午夜色wwwσ | 污女网站| 天天爽夜夜爽一区二区三区 | 午夜剧院免费 | 91在线免费观看网站 | 美女视频永久黄网站在线观看 | 韩国床戏合集三小时hd中字 |