国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

基于簡化HDLC規(guī)程的通信卡及驅(qū)動程序設計

發(fā)布時間:2009-2-12 18:41    發(fā)布者:比爾蓋
關(guān)鍵詞: HDLC , 驅(qū)動程序 , 通信卡
在我國的靶場測控領(lǐng)域,所有的數(shù)據(jù)交換都是基于簡化版的HDLC規(guī)程進行的,因此我們自行研制開發(fā)了基于簡化HDLC規(guī)程的通信卡。簡化HDLC規(guī)程主要是為了提高通信的實時性,將HDLC規(guī)程中所有通信聯(lián)絡命令幀全部簡化,只保留數(shù)據(jù)通信幀,從而保證一定的實時性。由于該卡具有可靠性高,使用簡單方便,工作時具有智能化等特點,被廣泛地應用于測控系統(tǒng)數(shù)據(jù)傳送的各個領(lǐng)域中。同時,隨著WindowsXP操作系統(tǒng)在測控系統(tǒng)逐漸應用,開發(fā)通信卡WindowsXP驅(qū)動程序勢在必行。因此,我們針對自行研制的通信卡開發(fā)出了核心態(tài)的驅(qū)動程序,經(jīng)過廣泛的用戶使用,普遍反映應用好。下面介紹該通信卡的設計以及驅(qū)動程序的設計。
通信卡的硬件設計

1 通信卡的主要特點

通信卡的硬件設計目的是智能化通信:在卡上具有4個DMA通道及相應的數(shù)據(jù)緩沖存儲區(qū)。在數(shù)據(jù)的接收過程中,通信卡會自動接收幀數(shù)據(jù),判別幀長度,在幀尾將接收到的幀數(shù)據(jù)提交系統(tǒng)。在發(fā)送數(shù)據(jù)過程中,系統(tǒng)只須把發(fā)送的數(shù)據(jù)提交給本卡,具體的發(fā)送過程由該卡自行完成,不因多路通信而使主機增加開銷。該卡有內(nèi)/外時鐘兩種工作方式,近距離可省去調(diào)制解調(diào)器,波特率為600b/s~64Kb/s,提供2路符合RS-232/CCITT V.24和RS-422A標準的接口信號。

2 通信卡的電路設計


圖1 通信卡框圖


通信卡組成框圖如圖1所示。其主要由DMA控制器、總線竟爭仲裁器、串行通信控制器、數(shù)據(jù)緩沖存儲器SRAM、存儲器I/O映像和物理地址產(chǎn)生器、總線接口及防護、波特率產(chǎn)生器、接口電路等單元電路組成。
DMA控制器作為通信卡的主設備,控制卡上的數(shù)據(jù)接收和發(fā)送(來自通信控制器和CPU),并負責仲裁優(yōu)先權(quán)。由于在進行數(shù)據(jù)通信時,允許主機CPU訪問本卡SRAM,且主機對其中某一路發(fā)控制命令時,不影響其余三路通信,這樣將會使主機CPU與本卡DMA竟爭本卡總線控制權(quán)。而總線上沒有給出主機CPU指令排隊狀態(tài)序列,故不能直接設計多主竟爭,因而在本卡總線上用門陣列設計了一個狀態(tài)機,不斷地監(jiān)視總線爭用情況,完成本卡總線竟爭、仲裁功能。完成HDLC規(guī)程的串行通信的器件是INTEL8274多規(guī)程串行控制器,它能完成2個獨立的串行接收/發(fā)送全雙工通信。為了使4個信道在一幀數(shù)據(jù)的發(fā)送或接收過程中,主機不干預,故將發(fā)送的一幀數(shù)據(jù)在發(fā)送開始前由CPU用批命令放入卡上的SRAM中;同樣,在接收過程中,卡上DMA將接收到的數(shù)據(jù)放入SRAM中,等一幀接收完成后,再用批命令取出,放入系統(tǒng)存儲器中。卡上SRAM不占用主機內(nèi)存地址,采用I/0映像,該適配器插入主機之后,主機通過系統(tǒng)I/O地址對其訪問,這由地址產(chǎn)生器完成。總線接口包括數(shù)據(jù)收發(fā)器,數(shù)據(jù)開關(guān)電路,讀、寫及中斷等控制電路,地址譯碼等。波特率產(chǎn)生器提供了一個可編程的時鐘信號發(fā)生器,用戶可自行設置通信速率,供工作于內(nèi)時鐘方式時使用。接口電路提供符合RS-232/CCITT V.24和RS-422A標準的接口信號。
3通信流程設計

如果要發(fā)送一幀數(shù)據(jù),CPU用批命令將數(shù)據(jù)放到本卡SRAM中,然后設置相應的發(fā)送DMA通道。DMA通道是非自動重裝方式,啟動8274控制器發(fā)送,然后CPU就不需要管理,由卡上硬件自動發(fā)送。
如果需要接收數(shù)據(jù),啟動接收通道。接收通路自動搜索輸入信號,搜索到數(shù)據(jù)幀時,由卡上DMA控制器來管理,將接收的數(shù)據(jù)放入本卡SRAM中,并向CPU請求中斷,讀出數(shù)據(jù)。
4 總線竟爭設計
由于同時可進行四路通信,且CPU可隨時對某一路發(fā)控制命令或訪問卡上SRAM存儲器,就將出現(xiàn)CPU與本卡主設備DMA爭用本卡總線的狀況。由于ISA總線沒能給出CPU指令排隊狀態(tài)序列,這給總線仲裁帶來了困難,而本卡的總線竟爭、仲裁是由可編程邏輯器件設計的狀態(tài)機來完成的。狀態(tài)機使用一個4MHz信號作為時鐘,共設3種狀態(tài):
① CPU控制狀態(tài)。
② DMA控制狀態(tài)。
③ 空閑狀態(tài), CPU及DMA均未能得到控制權(quán)。
當狀態(tài)機檢測到無CPU及DMA申請總線使用權(quán)時,就進入空閑狀態(tài),而一旦CPU或DMA請求總線,狀態(tài)機立即將總線使用權(quán)交給CPU或DMA。如果正在CPU控制狀態(tài)期間,DMA申請總線使用權(quán),狀態(tài)機仍然判定CPU控制總線,讓DMA處于等待,直到檢測CPU指令完成,狀態(tài)機才轉(zhuǎn)為DMA控制狀態(tài)。如果在DMA控制狀態(tài)時,CPU申請總線使用權(quán),狀態(tài)機仍然判定DMA控制總線,讓CPU處于等待,直至DMA字節(jié)傳送完,狀態(tài)機轉(zhuǎn)為CPU控制狀態(tài)。CPU及DMA對總線的使用權(quán)是單個指令或字節(jié)傳送,不設置總線封鎖,因而CPU、DMA可頻繁交換使用權(quán),不會出現(xiàn)等待時間過長的現(xiàn)象。
通信卡的驅(qū)動程序設計
1 設備驅(qū)動程序的I/O模型
通信卡的驅(qū)動程序是利用WindowsXP的DDK軟件開發(fā)的標準的核心態(tài)設備驅(qū)動程序。它使用統(tǒng)一的“文件”形式,用戶可以通過代表通信卡設備的文件名,在WIN32子系統(tǒng)中用文件操作函數(shù)來訪問。該設備驅(qū)動和程序可以根據(jù)用戶的需要,設置為自動加載,或手動加載,也可以動態(tài)的加載該驅(qū)動程序。通信卡的驅(qū)動程序設計成為支持同步I/O模型,也可以為異步I/O模型。
2 發(fā)送數(shù)據(jù)I/O例程設計
在用戶態(tài)提交發(fā)送任務到核心態(tài),由I/O管理程序負責調(diào)用驅(qū)動程序,驅(qū)動程序發(fā)送IRP交給硬件,假若當前發(fā)送器不忙,則具體的發(fā)送操作全部由發(fā)送器自行完成,而驅(qū)動程序則返回已經(jīng)一個本幀可以發(fā)送的標志。具體的發(fā)送完成結(jié)果則可以在發(fā)送任務完成后查詢得到。可是,如果程序向當前設備發(fā)送器提交發(fā)送任務時,該發(fā)送器正在處理上一幀,那么則有兩種方法處理。
① 立即方式:立即返回一個錯誤,當前設備忙,不能發(fā)送。
②阻塞方式:I/O管理器程序會調(diào)度相應的異步處理例程,將當前的發(fā)送任務放進任務隊列中,返回一個標志:I/O掛起,當前設備忙,發(fā)送任務提交任務隊列。驅(qū)動程序會在發(fā)送器空閑時,提交任務隊列中的發(fā)送任務給發(fā)送器。完成發(fā)送任務后,將相關(guān)文件句柄設為有信號狀態(tài),通知本次發(fā)送任務完成。
3接收數(shù)據(jù)I/O例程
接收數(shù)據(jù)例程采用客戶/服務器的模式設計。由于用戶的接收請求和硬件的接收并不是同步的,所以在設計中,為避免丟失數(shù)據(jù),考慮創(chuàng)造一個專門的接收線程。這樣,同步用戶請求、接收線程、硬件層之間的通信就必須仔細地設計。圖2示意了用戶態(tài)接收請求、接收線程以及硬件層之間的通信同步。

圖2 用戶態(tài)接收請求、接收線程與硬件層之間的通信同步

① 硬件層與接收線程之間通信
硬件層與接收線程之間通信的同步是通過同步事件對象來實現(xiàn)的。同步事件對象通常處于無信號狀態(tài),只有當成功地接收到一幀時,才將該事件置為有信號狀態(tài)。接收線長久等待同步事件對象,在沒有收到數(shù)據(jù)時,因同步事件對象處于無信號狀態(tài)而阻塞。當硬件檢測到數(shù)據(jù)時,實時中斷服務程序負責將同步事件對象置為有信號狀態(tài),接收線程就會釋放阻塞。將通信卡SRAM上的接收數(shù)據(jù)讀進接收線程緩沖區(qū)隊列,然后將同步事件對象置為無信號狀態(tài),接收線程再次阻塞,等待接收下一幀數(shù)據(jù)。
② 用戶層和接收線程之間的通信
當用戶提交接收任務時,由驅(qū)動程序的調(diào)度程序讀取接收線程的緩沖區(qū)隊列,并將標志置為“空”,同時將緩沖隊列事件置為無信號狀態(tài),并返回,如果緩沖區(qū)是空,則
● 立即方式:立即返回無數(shù)據(jù)。
● 阻塞方式:阻塞直到有數(shù)據(jù)隊列進入。接收隊列的每個緩沖區(qū)都對應一個通知事件,如果接收線程將SRAM中的數(shù)據(jù)讀進隊列,就將相應的通知事件置為有信號狀態(tài),用戶請求就等待該通知事件,只要有數(shù)據(jù)在隊列中,就讀取返回,否則被阻塞。
4 硬中斷服務程序設計
通信卡在全雙工的通信中具有實時性,而且在較高的波特率,硬中斷非常多。為了防止高優(yōu)先級中斷過多地搶占CPU時間,設計中采用了實時中斷服務程序和延遲過程調(diào)用的方法。
在WindowsXP系統(tǒng)中,每個內(nèi)核函數(shù)和過程都運行于特定的優(yōu)先級。較高優(yōu)先級的函數(shù)或事件可以搶占較低優(yōu)先級,反之則不然。實時中斷服務程序ISR運行于DIRQL級,具有較高的優(yōu)先級,它只能被更高級的硬中斷所搶占,不會對同級或較低優(yōu)先級的硬中斷的響應。所以,在實時中斷服務程序中,只做盡量少的必須工作,即讀出中斷向量,而將大量的數(shù)據(jù)傳送及處理等工作交給延遲過程DPC去完成。因為DPC過程運行于DISPATCH_LEVEL級,是相對較低的優(yōu)先級,它可以被任何級的硬中斷所搶占。這樣,既保證了硬中斷的及時響應,又提高了程序的性能。
5 驅(qū)動程序入口例程
WindowsXP為每個核心態(tài)的驅(qū)動程序提供了一個默認的標準入口點DriverEntry()。設計中,考慮到該例程運行于PASSIVE_LEVE級,系統(tǒng)只運行該例程一次就拋棄了,所以在驅(qū)動程序中用到的重要數(shù)據(jù)、對象等都不能保存在DriverEntry()例程中,必須在初始化過程中分配一塊NoPaged內(nèi)存來保存。通信卡的驅(qū)動程序的DriverEntry()例程主要完成如下功能。
讀取Registry的硬件配置信息;聲明I/O地址、中斷等資源;創(chuàng)建代表通信卡的設備名MPSC,該名字對WIN32子系統(tǒng)是可見的;設置調(diào)度例程入口點;分配一塊NoPaged的內(nèi)存,存儲重要信息;連接硬中斷,設置中斷服務程序;初始化線程、事件、信號燈、DPC等內(nèi)核對象;返回狀態(tài)STATUS_SUCCESS。
如果在以上過程中遇到錯誤,則需要做以下工作:斷開硬中斷;釋放硬件資源;將相關(guān)的錯誤信息打包,并記錄;返回錯誤信息。
6 設計驅(qū)動程序中需要注意的問題
于通信卡在應用中具有一定的實時性,為了克服中斷的不確定性,提高系統(tǒng)的性能,開發(fā)了WindowsXP系統(tǒng)所有驅(qū)動程序中最難的異步驅(qū)動程序。在系統(tǒng)的內(nèi)核開發(fā),異步模型I/O操作中,內(nèi)核對象的同步十分復雜,細微的差錯都會導致系統(tǒng)徹底崩潰。在設計驅(qū)動程序中需要注意以下問題。
● 在程序中用到的內(nèi)核對象:事件、信號燈、線程以及轉(zhuǎn)鎖等,都必須將其存儲在Nopaged內(nèi)存中,否則,會造成系統(tǒng)崩潰。
● 在DPC例程中,如果要訪問中斷服務程序ISR程序中用到端口地址,一定要將訪問語句放在系統(tǒng)提供的同步例程中,這是因為當DPC例程訪問該端口時,有可能被優(yōu)先級高的ISR例程所搶占,而造成數(shù)據(jù)錯誤。
● 驅(qū)動程序一定不要訪問WIN32子系統(tǒng)的運行庫函數(shù)。
本文地址:http://m.qingdxww.cn/thread-2640-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點和對其真實性負責;文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • 使用SAM-IoT Wx v2開發(fā)板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發(fā)培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)視頻

關(guān)于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜免费视频福利集合100| 免费观看久久| 足交福利| 国产伦精品一区二区免费| 美女被撕开胸罩狂揉大乳| 亚洲精品不卡在线| 亚洲福利一区二区| 欧美一级片观看| 三级国产| 日韩精品永久免费播放平台| 亚洲 另类 在线 欧美 制服| 天天色影视综合网| 中文丰满岳乱妇在线观看| 国产精品久久久久永久免费看| 日本精品久久久久中文字幕 1| 中文字幕久久熟女人妻AV免费| 日韩精品一区二区在线观看| 日本在线观看高清不卡免v| 亚洲高清视频一区| 亚洲麻豆精品| 边做边爱免费视频| 快播在线电影网站| 亚洲香蕉视频在线播放| 亚洲国产精品综合久久20| 天天久久狠狠色综合| 四虎成人免费视频| 中文精品久久久久国产不卡| 国产电影无码午夜在线播放| 日韩一本在线| 欧美特黄aaaaaa| 日本亚洲免费| 一级做a爰片久久毛片看看| 亚洲视频在线一区| 成人在线视频免费观看| 桥本有菜黑丝| 亚洲视色| 青青在线视频免费观看| 亚洲欧美日本韩国综合在线观看| 亚洲欧美日韩国产综合久| 高清国产mv视频在线观看| 日本艳妓BBW高潮一19|