基于A(yíng)/D芯片AD1674設計的數據采集電路
1.3.2 A/D轉換數據的讀取方式
本文引用地址:http://dyxdggzs.com/article/85599.htm在數據采集系統中,計算機讀取A/D轉換數據的方式一般有三種,即查詢(xún)、中斷和DMA方式。其中查詢(xún)方式就是通過(guò)查詢(xún)標志位來(lái)判斷A/D是否轉換完畢,如果 A/D轉換完畢則讀入轉換的數據。這種方式下CPU主動(dòng)查詢(xún),通過(guò)CPU讀取A/D轉換的數據,故實(shí)現的硬件電路簡(jiǎn)單,但數據讀取速度慢,同時(shí)在 WINDOWS的多任務(wù)執行方式下,存在著(zhù)A/D轉換數據不能及時(shí)讀入的問(wèn)題。中斷方式是利用A/D轉換完畢的標志位觸發(fā)一硬中斷,然后中斷管理器向 CPU提出中斷申請。在中斷允許的情況下,執行中斷服務(wù)程序讀入轉換的數據。這種方式實(shí)現的硬件電路也比較簡(jiǎn)單,但中斷服務(wù)程序的介入,引起數據采集程序的斷點(diǎn)的不可預測性,這樣會(huì )導致數據采集程序的失控。DMA方式利用A/D轉換完畢的標志位向DMA控制器提出DMA申請,當DMA控制器從CPU取得總線(xiàn)控制權時(shí),接口便與內存之間直接地進(jìn)行數據交換(不經(jīng)過(guò)CPU)。這種方式下,由于不經(jīng)過(guò)CPU讀入數據,故提高了數據傳輸速度。同時(shí)由于A(yíng)/D轉換器主動(dòng)申請數據傳輸,而DMA申請比外設中斷申請的優(yōu)先級高,A/D轉換數據能夠及時(shí)讀入,系統性能也得到了提高,但實(shí)現的硬件電路較前兩種方式復雜。
本電路設計有查詢(xún)、中斷和DMA三種數據傳輸方式。通過(guò)一撥碼盤(pán)開(kāi)關(guān)來(lái)選擇不同的的傳輸方式。如圖3所示,當A/D轉換完畢時(shí),標志位STS由高電平變?yōu)榈褪请娖?,從而引起D觸發(fā)器U20A觸發(fā),U20A的輸出Q由低電平變成高電平。當撥碼盤(pán)開(kāi)關(guān)S1選擇為查詢(xún)方式時(shí),該U20A的輸出Q通過(guò)一個(gè)三態(tài)門(mén)(端口地址為&0X23F)與數據線(xiàn)D6相連,提供計算機查詢(xún);在中斷方式下,該U20A的輸出Q直接與硬中斷引腳IRQ2相連,當Q由低電平變成高電平時(shí),引起計算機中斷。在前兩種方式下,通過(guò)軟件編程,向一鎖存器U22的最低位寫(xiě)入0或1,選擇讀取A/D轉換數據的高八位或低四位,且由專(zhuān)門(mén)的端口(地址為&0X23D)讀取A/D轉換的數據。實(shí)現的硬件電路簡(jiǎn)單。而在DMA方式下,通過(guò)應答信號DACK1尋址,并不由專(zhuān)門(mén)的端口讀取A/D 轉換的數據,故選擇A/D轉換數據的高八位或低四位的功能必須由硬件電路來(lái)實(shí)現,比較而言,電路更復雜一些。
下面介紹DMA方式下的具體實(shí)現電路。DMA請求電路由兩個(gè)D觸發(fā)器組成,當A/D轉換完畢時(shí),U20A的輸出Q由低電平變成高電平,DRQ1=1, DMA通道1發(fā)出請求,DRQ1被認可后進(jìn)行兩次DMA傳輸。在第一次DMA傳輸期間,觸發(fā)器U20B的輸出Q為低電平,A/D轉換數據的高八位傳輸到指定內存單元。在第一次DMA傳輸結束時(shí),DACK1由低電平變成高電平,觸發(fā)器U20B的輸出為高電平,但觸發(fā)器U20A的輸出Q仍然是高電平,該電平申請第二次DMA傳輸。在第二次DMA傳輸期間,觸發(fā)器U20B的輸出為高電平,A/D轉換數據的低四位傳輸到指定的內存單元。當第二次DMA傳輸結束時(shí), DACK1由低電平變成高電平,使觸發(fā)U20B輸出低電平,同時(shí)觸發(fā)器U20A的輸出Q變?yōu)榈碗娖?,DRQ1=0變?yōu)榈碗娖?,DRQ1=0,DMA通道1 的請求被撤銷(xiāo),結束一次A/D轉換12位數據傳輸過(guò)程。
2 軟件設計
該接口電路支持各種帶有口指令操作的高級語(yǔ)言和8086/8088匯編語(yǔ)言。以下就以Turbo C為例對相應的部分編程,經(jīng)供參考。
2.1 A/D編程
該編程適合于中斷或查詢(xún)方式下的編程,端口地址=0x238~0x23f。
outportb(0x23c,0x00); /*初始化清零*/
outportb(0x23a,0x00); /*選擇傳輸高8位數據并為A/D轉換作準備*/
{
}; /*啟動(dòng)A/D并檢查A/D是否轉換完畢*/
dh=inportb(0x23d); /*輸入高八位數據*/
outporth(0x23a,0x01); /*選擇傳輸低四位數據*/
dl=inportb(0x23d); /*輸入低四位數據*/
outportb(0x23a,0x00); /*選擇傳輸高8位數據并為A/D轉換作準備*/
dl=dl>>4;
dh1=dh;
dl=(dh1<<4)+dl;
dh=dh>>4; /*將高八位低四位數據轉化為高四位低八位數據*/
d=dh*256+dl; /*拼合12位數據*/
u=(d-2047)*10.0/4096; /*轉換電壓值*/
2.2 寫(xiě)啟動(dòng)和查詢(xún)方式的編程
outportb(0x23d,0x00); /*寫(xiě)啟動(dòng)A/D轉換*/
if(inporth(0x23e)&0x80);/*D7=1則A/D轉換完畢*/
2.3 8253定時(shí)器編程
outportb(0x23b,0x03); /*set 8253 timer into writing mode word state*/
outportb(0x23f,0x36); /*set 0 channel working with mode 3*/
outportb(0x23f,0x74); /*set 1 channel working with mode 2*/
outportb(0x23b,0x00); /*set to write data to 0 Channel mode */
outportb(0x23f,0x02); /*write low data to 0 channel*/
outportb(0x23f,0x00); /*write high data to 0 channel*/
outportb(0x23b,0x01); /*set to write data to 1 channel*/
outportb(0x23f,LC1); /*write low data to 1 channel*/
outportb(0x23f,HC1); /*write high data to 1 channel*/
outportb(0x23b,0x0c); /*啟動(dòng)CH0,CH1工作*/
其中采樣頻率決寫(xiě)入計數器1的計數值。
2.4 DMA方式下PC主機中8237A DMA控制器編程
8237A DMA控制器具有4個(gè)DMA通道,該接口電路使用通道1。
outportb(0x0x,0x05); /*mask DMA channel 1*/
outportb(0x0c,0x00); /*clear byet pointer flip*/
outportb(0x0b,0x55); /*write mode word.demand mode,address tincrease,autoinitialization,write trasfer and select 1*/
outportb(0x83,SEG); /*write page number*/
outportb(0x02,LA); /*write low 8 bit address*/
outportb(0x02,HA); /*write hige 8 bit address*/
outportb(0x03,LC); /*write low 8 bit count data*/
outportb(0x03,HC); /*write hige 8 bit count data*
outportb(0x03,0x01); /*clear mask bit of DMA channel*/
其中寫(xiě)入11口的數值應按照具體的工作方式來(lái)確定,寫(xiě)入131口的頁(yè)地址SEG取20位絕對地址的最高4位的數值,而將低16位地址的數值寫(xiě)入地址寄存器。寫(xiě)基值字節計數寄存器的字節總數值應為需要傳輸的字節數減1。
2.5 中斷服務(wù)程序的編寫(xiě)以有中斷向量的裝入
void interrupt int9() /*中斷服務(wù)程序*/
{ disable();
ah5=inportb(0x23d); /*輸入高八位數據*/
outportb(0x23a,0x01); /*選擇傳輸低四位數據*/
dl5=inportb(0x23d); /*輸入低四位數據*/
outportb(0x23a,0x00); /*選擇傳輸高8位數據并為A/D轉換作準備*/
outportb(0x23c,0x00); /*A/D轉換完畢的標志位清零*/
outportb(0x20,0x20);
enable();
}
void stall 1(void interrupt(*faddr)())
{
disable();
setvect(INT1,faddr); /*裝入中斷服務(wù)程序*/
enable();
}
本文介紹一種基于A(yíng)D1674設計的接口電路,該電路具有查詢(xún)、中斷和DMA三種數據傳輸功能,同時(shí)采用8253定時(shí)脈沖或端口寫(xiě)兩種A/D啟動(dòng)方式。其中 DMA方式實(shí)現了數據的快速傳輸,而兩種A/D啟動(dòng)方式將會(huì )使采樣率的設定更加靈活。應用本文原理設計的可插入通用PC機的數據采集板已用于我們的高頻多譜勒和到達角探測分析系統中,取得了滿(mǎn)意的效果。這些設計方法和原理在其它實(shí)際數據采集系統的設計過(guò)程中,也會(huì )具有重要的參考價(jià)值。
DIY機械鍵盤(pán)相關(guān)社區:機械鍵盤(pán)DIY
評論