數(shù)據(jù)采集控制卡硬件I/O控制原理
發(fā)布時(shí)間:2008/11/13 0:00:00 訪問(wèn)次數(shù):685
卡的運(yùn)作均是通過(guò)寄存器的幫助而進(jìn)行的,寄存器分成控制寄存器、狀態(tài)寄存器兩種,負(fù)責(zé)不同的功能,一個(gè)為input,一個(gè)為output。寄存器在卡上就是某一個(gè)芯片的控制中心所在,當(dāng)利用程序下達(dá)詢問(wèn)的指令時(shí),某一個(gè)寄存器就會(huì)將數(shù)據(jù)傳回(實(shí)際是放在總線上供cpu讀。;同樣地,當(dāng)程序欲控制芯片作某一個(gè)操作時(shí)(例如更改設(shè)置,或是輸出信號(hào)),也是將指令寫(xiě)入某一個(gè)規(guī)定的寄存器,該寄存器的值一經(jīng)改變,就反應(yīng)到真實(shí)的硬件操作上。
卡的寄存器的存取一般都是從之前提到的地址開(kāi)始存儲(chǔ)的,稱為基地址,寄存器的存儲(chǔ)通常也是以一個(gè)字節(jié)為單位,如果卡片上的寄存器較多的話,就會(huì)使用到比較多的字節(jié),卡的功能越復(fù)雜,用到的寄存器就越多。因此同一臺(tái)計(jì)算機(jī)上不同的卡片使用的基地址均不相同。所以實(shí)際的控制程序必須和寄存器打交道,要取得卡片的任何狀態(tài),必須讀取寄存器中的數(shù)值;而要控制狀態(tài)時(shí),也是寫(xiě)人控制的數(shù)值到寄存器,因此程序的對(duì)象就是寄存器,一片卡可能會(huì)有很多寄存器,實(shí)際的數(shù)目由功能來(lái)決定,功能越多,則使用到的寄存器數(shù)量也必定越多。
現(xiàn)在很多卡的廠商考慮到用戶的方便雨將原本需要較復(fù)雜的寄存器讀寫(xiě)過(guò)程包裝起來(lái),變成所謂的函數(shù),工程師只知道呼叫某一個(gè)函數(shù),就可以成功地控制或是讀取信息,其他的細(xì)節(jié)就由廠商的dll或是ocx代勞了。函數(shù)沒(méi)有看到寄存器的指定,最多也就只有地址和中斷的設(shè)置,函數(shù)使用起來(lái)更精簡(jiǎn)。
當(dāng)然硬件寄存器讀寫(xiě)要有一定的方法,讀寫(xiě)的方法與操作系統(tǒng)有關(guān)。在傳統(tǒng)dos環(huán)境下(不包含windows中dos虛擬機(jī)),程序運(yùn)行于cpu的ring0級(jí),對(duì)硬件擁有完全的控制權(quán),可以很容易地實(shí)現(xiàn)對(duì)時(shí)間的準(zhǔn)確控制。而windows 95/98使用搶占式多任務(wù)機(jī)制,系統(tǒng)接管全部硬件資源,程序在cpu的ring3級(jí)上運(yùn)行,無(wú)法直接與硬件打交道。windows 98下實(shí)現(xiàn)對(duì)硬件資源訪問(wèn)的方便有:
。1)利用windows提供的各個(gè)段選擇符標(biāo)號(hào)可直接訪問(wèn)內(nèi)存。
。2)可用vc斗+提供的函數(shù)直接訪問(wèn)硬件上的內(nèi)存和端口,如int outp(unsigned,int)。
。3)嵌人匯編訪問(wèn)硬件上的內(nèi)存和端口。
但在較高級(jí)的系統(tǒng)中(如windows nt,windows2000)這樣的做法也是不行的,這是由于windows操作系統(tǒng)是一個(gè)受保護(hù)的系統(tǒng),隨便下達(dá)硬件控制指令的話,將會(huì)危害到整個(gè)系統(tǒng)的穩(wěn)定性,硬仵的操作通常是利用微軟的sdk(software development kit)和ddk(device development kit)來(lái)完成。
在windowsnt下,由于對(duì)i/o端口的直接操作被屏蔽,普通用戶只能借助一定的驅(qū)動(dòng)開(kāi)發(fā)工具來(lái)開(kāi)發(fā)設(shè)各的驅(qū)動(dòng)程序,實(shí)現(xiàn)用戶應(yīng)用程序和硬件之間的通信。所以設(shè)各的驅(qū)動(dòng)程序的作用函數(shù)供工程師使用來(lái)控制硬件,而不涉及操作系統(tǒng)底層編程,F(xiàn)在有各種設(shè)備驅(qū)動(dòng)程序?qū)S瞄_(kāi)發(fā)軟件,如windriver能在很短的時(shí)間內(nèi)開(kāi)發(fā)出高效的設(shè)備驅(qū)動(dòng)。
程序語(yǔ)言例如visualbasic、delphi、c++等等常用的語(yǔ)言,都可以開(kāi)發(fā)應(yīng)用程序,其中visual basic沒(méi)有提供直接訪問(wèn)底層硬件的控件和方法本身的程序無(wú)法直接控制到適配卡,必須通過(guò)dll或是額外ocx控件的協(xié)助才行,通過(guò)dll或是ocx,控制程序碼就經(jīng)過(guò)層層的轉(zhuǎn)譯,一直到卡片上的寄存器,而檢測(cè)程序代碼則經(jīng)相反的管道將狀態(tài)傳回到我們所寫(xiě)的程序里。但如果由最基礎(chǔ)的程序一直寫(xiě)到硬件卡片控制的話,將會(huì)使得工程師花費(fèi)太多的時(shí)間而無(wú)法順利完成任務(wù)。所以現(xiàn)在就出現(xiàn)了組態(tài)軟件如wincc,控制硬件通信不需要涉及底層,只需要設(shè)置相應(yīng)的參數(shù)就可以了,大大減輕了工程師的負(fù)擔(dān),使工程師主要精力花在界面和工藝上,特別適合于工程應(yīng)用。
歡迎轉(zhuǎn)載,信息來(lái)自維庫(kù)電子市場(chǎng)網(wǎng)(www.dzsc.com)
卡的運(yùn)作均是通過(guò)寄存器的幫助而進(jìn)行的,寄存器分成控制寄存器、狀態(tài)寄存器兩種,負(fù)責(zé)不同的功能,一個(gè)為input,一個(gè)為output。寄存器在卡上就是某一個(gè)芯片的控制中心所在,當(dāng)利用程序下達(dá)詢問(wèn)的指令時(shí),某一個(gè)寄存器就會(huì)將數(shù)據(jù)傳回(實(shí)際是放在總線上供cpu讀。煌瑯拥,當(dāng)程序欲控制芯片作某一個(gè)操作時(shí)(例如更改設(shè)置,或是輸出信號(hào)),也是將指令寫(xiě)入某一個(gè)規(guī)定的寄存器,該寄存器的值一經(jīng)改變,就反應(yīng)到真實(shí)的硬件操作上。
卡的寄存器的存取一般都是從之前提到的地址開(kāi)始存儲(chǔ)的,稱為基地址,寄存器的存儲(chǔ)通常也是以一個(gè)字節(jié)為單位,如果卡片上的寄存器較多的話,就會(huì)使用到比較多的字節(jié),卡的功能越復(fù)雜,用到的寄存器就越多。因此同一臺(tái)計(jì)算機(jī)上不同的卡片使用的基地址均不相同。所以實(shí)際的控制程序必須和寄存器打交道,要取得卡片的任何狀態(tài),必須讀取寄存器中的數(shù)值;而要控制狀態(tài)時(shí),也是寫(xiě)人控制的數(shù)值到寄存器,因此程序的對(duì)象就是寄存器,一片卡可能會(huì)有很多寄存器,實(shí)際的數(shù)目由功能來(lái)決定,功能越多,則使用到的寄存器數(shù)量也必定越多。
現(xiàn)在很多卡的廠商考慮到用戶的方便雨將原本需要較復(fù)雜的寄存器讀寫(xiě)過(guò)程包裝起來(lái),變成所謂的函數(shù),工程師只知道呼叫某一個(gè)函數(shù),就可以成功地控制或是讀取信息,其他的細(xì)節(jié)就由廠商的dll或是ocx代勞了。函數(shù)沒(méi)有看到寄存器的指定,最多也就只有地址和中斷的設(shè)置,函數(shù)使用起來(lái)更精簡(jiǎn)。
當(dāng)然硬件寄存器讀寫(xiě)要有一定的方法,讀寫(xiě)的方法與操作系統(tǒng)有關(guān)。在傳統(tǒng)dos環(huán)境下(不包含windows中dos虛擬機(jī)),程序運(yùn)行于cpu的ring0級(jí),對(duì)硬件擁有完全的控制權(quán),可以很容易地實(shí)現(xiàn)對(duì)時(shí)間的準(zhǔn)確控制。而windows 95/98使用搶占式多任務(wù)機(jī)制,系統(tǒng)接管全部硬件資源,程序在cpu的ring3級(jí)上運(yùn)行,無(wú)法直接與硬件打交道。windows 98下實(shí)現(xiàn)對(duì)硬件資源訪問(wèn)的方便有:
。1)利用windows提供的各個(gè)段選擇符標(biāo)號(hào)可直接訪問(wèn)內(nèi)存。
。2)可用vc斗+提供的函數(shù)直接訪問(wèn)硬件上的內(nèi)存和端口,如int outp(unsigned,int)。
。3)嵌人匯編訪問(wèn)硬件上的內(nèi)存和端口。
但在較高級(jí)的系統(tǒng)中(如windows nt,windows2000)這樣的做法也是不行的,這是由于windows操作系統(tǒng)是一個(gè)受保護(hù)的系統(tǒng),隨便下達(dá)硬件控制指令的話,將會(huì)危害到整個(gè)系統(tǒng)的穩(wěn)定性,硬仵的操作通常是利用微軟的sdk(software development kit)和ddk(device development kit)來(lái)完成。
在windowsnt下,由于對(duì)i/o端口的直接操作被屏蔽,普通用戶只能借助一定的驅(qū)動(dòng)開(kāi)發(fā)工具來(lái)開(kāi)發(fā)設(shè)各的驅(qū)動(dòng)程序,實(shí)現(xiàn)用戶應(yīng)用程序和硬件之間的通信。所以設(shè)各的驅(qū)動(dòng)程序的作用函數(shù)供工程師使用來(lái)控制硬件,而不涉及操作系統(tǒng)底層編程,F(xiàn)在有各種設(shè)備驅(qū)動(dòng)程序?qū)S瞄_(kāi)發(fā)軟件,如windriver能在很短的時(shí)間內(nèi)開(kāi)發(fā)出高效的設(shè)備驅(qū)動(dòng)。
程序語(yǔ)言例如visualbasic、delphi、c++等等常用的語(yǔ)言,都可以開(kāi)發(fā)應(yīng)用程序,其中visual basic沒(méi)有提供直接訪問(wèn)底層硬件的控件和方法本身的程序無(wú)法直接控制到適配卡,必須通過(guò)dll或是額外ocx控件的協(xié)助才行,通過(guò)dll或是ocx,控制程序碼就經(jīng)過(guò)層層的轉(zhuǎn)譯,一直到卡片上的寄存器,而檢測(cè)程序代碼則經(jīng)相反的管道將狀態(tài)傳回到我們所寫(xiě)的程序里。但如果由最基礎(chǔ)的程序一直寫(xiě)到硬件卡片控制的話,將會(huì)使得工程師花費(fèi)太多的時(shí)間而無(wú)法順利完成任務(wù)。所以現(xiàn)在就出現(xiàn)了組態(tài)軟件如wincc,控制硬件通信不需要涉及底層,只需要設(shè)置相應(yīng)的參數(shù)就可以了,大大減輕了工程師的負(fù)擔(dān),使工程師主要精力花在界面和工藝上,特別適合于工程應(yīng)用。
歡迎轉(zhuǎn)載,信息來(lái)自維庫(kù)電子市場(chǎng)網(wǎng)(www.dzsc.com)
熱門點(diǎn)擊
- 計(jì)算機(jī)串行通信分類
- 8253可編程計(jì)數(shù)/定時(shí)器編程要點(diǎn)
- 數(shù)據(jù)采集板卡的編程使用
- 數(shù)字信號(hào)數(shù)據(jù)的傳輸方式
- 動(dòng)態(tài)采集程序涉及到驅(qū)動(dòng)程序中部分概念的分析
- Samplify推出SAM1600 ADC與
- 8253功能及其結(jié)構(gòu)框圖
- A/D轉(zhuǎn)換模塊
- ADC有限字長(zhǎng)效應(yīng)
- ADC數(shù)據(jù)轉(zhuǎn)換
推薦技術(shù)資料
- DS2202型示波器試用
- 說(shuō)起數(shù)字示波器,普源算是國(guó)內(nèi)的老牌子了,F(xiàn)QP8N60... [詳細(xì)]
- MOSFET 電感單片降壓開(kāi)關(guān)模式變換器優(yōu)勢(shì)
- SiC MOSFET 和 IG
- 新型 電隔離無(wú)芯線性霍爾效應(yīng)電
- 業(yè)界超小絕對(duì)位置編碼器技術(shù)參數(shù)設(shè)計(jì)
- 高帶寬、更高分辨率磁角度傳感技術(shù)應(yīng)用探究
- MagAlpha 角度位置傳感
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動(dòng)IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計(jì)
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究