新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于WinCE環(huán)境的CAN適配卡驅(qū)動程序的設(shè)計與實現(xiàn)

        基于WinCE環(huán)境的CAN適配卡驅(qū)動程序的設(shè)計與實現(xiàn)

        作者: 時間:2009-10-22 來源:網(wǎng)絡(luò) 收藏

        3

        從引言部分可知,流接口可以為各種設(shè)備提供統(tǒng)一的訪問接口,可以是字符設(shè)備、塊設(shè)備、虛擬設(shè)備和網(wǎng)絡(luò)設(shè)備等。的主要流程為[5]:應(yīng)用程序調(diào)用函數(shù)CreateFile獲取設(shè)備句柄,文件系統(tǒng)將會調(diào)用CAN驅(qū)動例程中的CAN_Open來響應(yīng)應(yīng)用程序的請求。當(dāng)應(yīng)用程序調(diào)用ReadFile函數(shù)讀取CAN設(shè)備上的字符時,文件系統(tǒng)將會調(diào)用CAN驅(qū)動例程中的CAN_Read函數(shù)來讀取CAN設(shè)備上的字符。

        對于本文流接口的而言,是通過如下幾個模塊來驅(qū)動的:CAN_Open、CAN _Close、CAN _Read、CAN _Write、CAN _IoControl和CAN _Init等模塊。其中CAN _Init模塊是系統(tǒng)啟動時由文件系統(tǒng)自動調(diào)用的,主要完成設(shè)備的初始化工作。另外,對于流接口驅(qū)動程序可選函數(shù)CAN _PowerUp和CAN _PowerDown,主要實現(xiàn)電源管理的功能。

        限于篇幅,本文僅對主要的CAN_Write模塊、CAN_Read模塊和中斷服務(wù)線程模塊的實現(xiàn)作如下詳細詳細討論。

        3.1 CAN_Write模塊的實現(xiàn)

        當(dāng)CAN卡控制器在發(fā)送報文時,發(fā)送緩沖區(qū)對寫操作是鎖定的,這樣CPU必須檢查狀態(tài)寄存器的發(fā)送緩沖區(qū)狀態(tài)標(biāo)志TBS,以確定可以將一個新報文寫入發(fā)送緩沖區(qū)中,當(dāng)發(fā)送緩沖區(qū)被鎖定(即標(biāo)志TBS=0)時,CPU周期性地查詢狀態(tài)寄存器,等待發(fā)送緩沖區(qū)被釋放;當(dāng)發(fā)送緩沖區(qū)被釋放(即標(biāo)志TBS=1)時,CPU將新報文寫入發(fā)送緩沖區(qū)中,并置命令寄存器的發(fā)送請求標(biāo)志TR,該標(biāo)志導(dǎo)致發(fā)送的啟動。一旦發(fā)送成功中斷產(chǎn)生,表明CAN報文已經(jīng)發(fā)送成功。重復(fù)上面的工作就可以完成發(fā)送多個CAN報文的工作。CAN_Write模塊的流程圖如圖3所示。

        3 CAN_Write函數(shù)的流程圖



        評論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 老河口市| 遂川县| 金沙县| 嘉荫县| 乌兰浩特市| 锦州市| 德江县| 武强县| 广州市| 花莲市| 清流县| 博爱县| 宜良县| 嘉义市| 紫云| 平湖市| 宝清县| 建平县| 读书| 西青区| 民勤县| 凭祥市| 巢湖市| 张家港市| 常德市| 洞头县| 育儿| 湘潭市| 新平| 梓潼县| 连江县| 阿图什市| 五华县| 阳泉市| 济南市| 洛扎县| SHOW| 磴口县| 沐川县| 凯里市| 澎湖县|