在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于嵌入式ARM-Linux無線ZigBee協(xié)調(diào)器驅(qū)動(dòng)設(shè)計(jì)

            基于嵌入式ARM-Linux無線ZigBee協(xié)調(diào)器驅(qū)動(dòng)設(shè)計(jì)

            作者: 時(shí)間:2011-12-14 來源:網(wǎng)絡(luò) 收藏
            3.2 Linux設(shè)備驅(qū)動(dòng)實(shí)現(xiàn)
             Linux的輸入輸出設(shè)備分為字符設(shè)備、塊設(shè)備和網(wǎng)絡(luò)設(shè)備三類。字符設(shè)備是發(fā)送和接收都按照字符方式進(jìn)行。塊設(shè)備則是傳輸固定大小的數(shù)據(jù)給設(shè)備。網(wǎng)絡(luò)設(shè)備則是通過BSD套接口訪問設(shè)備。驅(qū)動(dòng)程序一般以模塊方式編寫,加載和卸載主要由module_init()和module_exit()完成[2]。
             (1)模塊加載和卸載
             模塊需要入口函數(shù)module_init(zigbee_init)的實(shí)現(xiàn)代碼如下:
            int __init zigbee_init(void)
            {
            if(zigbee_major){
              dev=MKDEV(zigbee_major,zigbee_minor);
              result=register_chrdev_region(ev,1,“zigbee”);
              }else{
              result=alloc_chrdev_region(dev,zigbee_minor,1,
            “zigbee”);
              ……
              zigbee_major=MAJOR(dev);
              ……
              }
              cdev=cdev_alloc();
              cdev->ops=zigbee_fops;
              rc=cdev_add(cdev,dev,1);
              ……;
              return 0
            }
            module_exit(zigbee_exit)
            {
            cdev_dev(cdev);
            return 0
            }
             在不同的系統(tǒng)中,同一設(shè)備的設(shè)備號(hào)不盡相同,如果靜態(tài)設(shè)置設(shè)備號(hào),則在換另外的平臺(tái)時(shí),設(shè)備號(hào)有可能沖突,所以動(dòng)態(tài)分配是最佳選擇。
             (2)模塊驅(qū)動(dòng)實(shí)現(xiàn)
             注冊(cè)設(shè)備編號(hào)后要將設(shè)備驅(qū)動(dòng)與之連接,因此必須用file_operation結(jié)構(gòu)建立鏈接,并建立中斷通知相關(guān)數(shù)據(jù)。其實(shí)現(xiàn)代碼如下:
            Struct file_operation zigbee_fops={
            .owner=THIS_MODULE,
            .open=zigbee_open,
            .read=zigbee_read,
            .write=zigbee_write,
            .ioctl=.zigbee_ioctl,
            .relese=zigbee_release,
            }
             當(dāng)上層應(yīng)用調(diào)用驅(qū)動(dòng)程序時(shí),驅(qū)動(dòng)程序需要完成以下功能:
            ?、俪跏蓟O(shè)備。S3C2410與下層ZigBee CC2430連接管腳處于工作狀態(tài),注冊(cè)并使能中斷。
            ?、诎凑語igBee協(xié)議規(guī)則構(gòu)建數(shù)據(jù)包并發(fā)送給CC2430,實(shí)現(xiàn)不同控制命令,使芯片完成數(shù)據(jù)發(fā)送和狀態(tài)間的轉(zhuǎn)換。
             ③當(dāng)下位機(jī)接收到的數(shù)據(jù)與協(xié)議包格式不符時(shí),產(chǎn)生中斷,用戶須重新發(fā)送數(shù)據(jù)。
             其實(shí)現(xiàn)代碼如下:
            Int zigbee_open(struct inode *inode, struct file *filp)
            {
            Rc=request_irq(IRQ_EINT0,zigbee_interrupt, SA_INTERRUPT,“zigbee”,NULL);
            Enable_irq();

            Set_io(); //初始化I/O

            }
             用戶發(fā)送數(shù)據(jù)通過ssize_t zigbee_write(struct file *filp,const char __usr *buf, ssize_t count,loff_t *f_ops)傳到內(nèi)核空間,然后調(diào)用構(gòu)建數(shù)據(jù)包函數(shù)把數(shù)據(jù)打包發(fā)送出去。
             用戶控制下層命令,實(shí)現(xiàn)代碼如下:
            int zigbee_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg)
            {
            Switch(cmd)
            Case A:
            Set_state(); //設(shè)置設(shè)備類型
            Case B:
            Set_restart();
            Case C:
            Set_start();
            Case D:
            Set_printf();//輸出網(wǎng)絡(luò)地址信息
            }
            Static zigbee_interrupt(int irq, void *dev_id)
            {
            Flag=1;
            Set_restart();
            Outb(buf, add);
            Return IRQ_HANDLED;
            }
             除實(shí)現(xiàn)以上函數(shù)外,還需要實(shí)現(xiàn)zigbee_relese(struct inode*inode, struct file*filp),釋放程序運(yùn)行中所有資源。
             本文通過上位機(jī)處理器ARM9CS3C2410,設(shè)計(jì)了ZigBee內(nèi)核字符驅(qū)動(dòng),輕松地實(shí)現(xiàn)了對(duì)下位機(jī)的控制,也方便了用戶的上層開發(fā),提供了用戶與下位機(jī)數(shù)據(jù)傳輸?shù)慕涌?,避免了用串口進(jìn)行數(shù)據(jù)傳輸時(shí)程序設(shè)計(jì)的繁瑣性。由于篇幅限制本文沒給出控制下層模塊命令的具體實(shí)現(xiàn)代碼。希望通過本文能促進(jìn)ZigBee的進(jìn)一步實(shí)現(xiàn)和研究。
            參考文獻(xiàn)
            [1] 楊帆,廖桂平,李錦衛(wèi),等.無線傳感器網(wǎng)絡(luò)在農(nóng)田環(huán)境信息監(jiān)測(cè)中的應(yīng)用[J].農(nóng)業(yè)網(wǎng)絡(luò)信息,2008(3):20-23.
            [2] 甘勇,王華,常亞軍,等.基于ARM平臺(tái)的ZigBee網(wǎng)關(guān)設(shè)計(jì)[J].通信技術(shù),2009,42(1):199-201.
            [3] 魏守包,唐慧強(qiáng).基于嵌入式ARM-uClinux的ZigBee網(wǎng)絡(luò)設(shè)計(jì)[J].儀表技術(shù)與傳感器,2009(1):62-64.
            [4] 包長(zhǎng)春,石瑞珍,馬玉泉.基于ZigBee技術(shù)的農(nóng)業(yè)設(shè)施測(cè)控系統(tǒng)的設(shè)計(jì)[J].農(nóng)業(yè)工程學(xué)報(bào),2007,23(8):160~163.

            linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

            上一頁(yè) 1 2 下一頁(yè)

            評(píng)論


            相關(guān)推薦

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

            關(guān)閉