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); /*啟動CH0,CH1工作*/
其中采樣頻率決寫入計數器1的計數值。
2.4 DMA方式下PC主機中8237A DMA控制器編程
8237A DMA控制器具有4個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*/
其中寫入11口的數值應按照具體的工作方式來確定,寫入131口的頁地址SEG取20位絕對地址的最高4位的數值,而將低16位地址的數值寫入地址寄存器。寫基值字節計數寄存器的字節總數值應為需要傳輸的字節數減1。
2.5 中斷服務程序的編寫以有中斷向量的裝入
void interrupt int9() /*中斷服務程序*/
{ 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); /*裝入中斷服務程序*/
enable();
}
本文介紹一種基于AD1674設計的接口電路,該電路具有查詢、中斷和DMA三種數據傳輸功能,同時采用8253定時脈沖或端口寫兩種A/D啟動方式。其中DMA方式實現了數據的快速傳輸,而兩種A/D啟動方式將會使采樣率的設定更加靈活。應用本文原理設計的可插入通用PC機的數據采集板已用于我們的高頻多譜勒和到達角探測分析系統中,取得了滿意的效果。這些設計方法和原理在其它實際數據采集系統的設計過程中,也會具有重要的參考價值。
評論
查看更多