基于WinCE環(huán)境的CAN適配卡驅(qū)動(dòng)程序的設(shè)計(jì)與實(shí)現(xiàn)
3 CAN適配卡驅(qū)動(dòng)程序的設(shè)計(jì)與實(shí)現(xiàn)
從引言部分可知,流接口可以為各種設(shè)備提供統(tǒng)一的訪問(wèn)接口,可以是字符設(shè)備、塊設(shè)備、虛擬設(shè)備和網(wǎng)絡(luò)設(shè)備等。CAN適配卡驅(qū)動(dòng)程序的主要流程為[5]:應(yīng)用程序調(diào)用函數(shù)CreateFile獲取CAN設(shè)備句柄,文件系統(tǒng)將會(huì)調(diào)用CAN驅(qū)動(dòng)例程中的CAN_Open來(lái)響應(yīng)應(yīng)用程序的請(qǐng)求。當(dāng)應(yīng)用程序調(diào)用ReadFile函數(shù)讀取CAN設(shè)備上的字符時(shí),文件系統(tǒng)將會(huì)調(diào)用CAN驅(qū)動(dòng)例程中的CAN_Read函數(shù)來(lái)讀取CAN設(shè)備上的字符。
對(duì)于本文流接口的驅(qū)動(dòng)程序而言,是通過(guò)實(shí)現(xiàn)如下幾個(gè)模塊來(lái)實(shí)現(xiàn)驅(qū)動(dòng)的:CAN_Open、CAN _Close、CAN _Read、CAN _Write、CAN _IoControl和CAN _Init等模塊。其中CAN _Init模塊是系統(tǒng)啟動(dòng)時(shí)由文件系統(tǒng)自動(dòng)調(diào)用的,主要完成設(shè)備的初始化工作。另外,對(duì)于流接口驅(qū)動(dòng)程序可選函數(shù)CAN _PowerUp和CAN _PowerDown,主要實(shí)現(xiàn)電源管理的功能。
限于篇幅,本文僅對(duì)主要的CAN_Write模塊、CAN_Read模塊和中斷服務(wù)線程模塊的實(shí)現(xiàn)作如下詳細(xì)詳細(xì)討論。
3.1 CAN_Write模塊的實(shí)現(xiàn)
當(dāng)CAN適配卡控制器在發(fā)送報(bào)文時(shí),發(fā)送緩沖區(qū)對(duì)寫操作是鎖定的,這樣CPU必須檢查狀態(tài)寄存器的發(fā)送緩沖區(qū)狀態(tài)標(biāo)志TBS,以確定可以將一個(gè)新報(bào)文寫入發(fā)送緩沖區(qū)中,當(dāng)發(fā)送緩沖區(qū)被鎖定(即標(biāo)志TBS=0)時(shí),CPU周期性地查詢狀態(tài)寄存器,等待發(fā)送緩沖區(qū)被釋放;當(dāng)發(fā)送緩沖區(qū)被釋放(即標(biāo)志TBS=1)時(shí),CPU將新報(bào)文寫入發(fā)送緩沖區(qū)中,并置命令寄存器的發(fā)送請(qǐng)求標(biāo)志TR,該標(biāo)志導(dǎo)致發(fā)送的啟動(dòng)。一旦發(fā)送成功中斷產(chǎn)生,表明CAN報(bào)文已經(jīng)發(fā)送成功。重復(fù)上面的工作就可以完成發(fā)送多個(gè)CAN報(bào)文的工作。CAN_Write模塊的流程圖如圖3所示。
圖3 CAN_Write函數(shù)的流程圖
評(píng)論