基于PowerPC的模擬量輸入接口擴(kuò)展
3 硬件結(jié)構(gòu)
MAX197是一種通用A/D芯片,可以和多種處理器接口,本系統(tǒng)通過MPC8349E的局部總線與MAX197連接。硬件結(jié)構(gòu)如圖3所示。圖3中使局部總線的LBD7~LBD0與MAX197的D0~D7相連。選擇MAX197為軟件設(shè)置低功耗工作方式,所以置SHDN管腳為高電平,本系統(tǒng)采用內(nèi)部基準(zhǔn)電壓,所以REF、REFADJ管腳均通過電容接地。用一路片選信號線做讀高、低位數(shù)據(jù)的選擇線, 直接與HBEN管腳相連,因而采用讀不同地址的方式分別讀取低8位和高4位數(shù)據(jù)。MAX197的INT管腳與系統(tǒng)的INT相連,作為轉(zhuǎn)換識別信號,當(dāng)數(shù)據(jù)轉(zhuǎn)換完畢時,MAX197的INT腳產(chǎn)生中斷信號,從而使處理器進(jìn)入中斷處理程序進(jìn)行一路轉(zhuǎn)換數(shù)據(jù)的讀入操作。
4 驅(qū)動軟件設(shè)計
設(shè)備驅(qū)動程序是應(yīng)用程序和機(jī)器硬件之間的接口。設(shè)備驅(qū)動程序為應(yīng)用程序屏蔽了硬件的細(xì)節(jié),在應(yīng)用程序看來,硬件設(shè)備只是一個設(shè)備文件,應(yīng)用程序可以象操作普通文件一樣對硬件設(shè)備進(jìn)行操作。
本系統(tǒng)采用Linux操作系統(tǒng),需要編制Linux下的設(shè)備驅(qū)動程序。A/D轉(zhuǎn)換設(shè)備用作為字符設(shè)備,而字符設(shè)備驅(qū)動程序具有比較固定的結(jié)構(gòu),即將設(shè)備抽象成文件來進(jìn)行操作,因此要在驅(qū)動程序?qū)崿F(xiàn)Open、Close、Write、Read和Ioctl等操作,其中Ioctl對于執(zhí)行各種類型的硬件控制應(yīng)用比較方便,其在內(nèi)核中的原型為
int(*ioctl)(struct inode *inode,
struct file *filp,
unsigned int cmd,
unsigned long arg);
A/D轉(zhuǎn)換的驅(qū)動程序主要是實現(xiàn)了這個函數(shù)。其中cmd用來傳遞通道序號,arg傳遞指向用戶空間的一個指針,用來返回A/D轉(zhuǎn)換結(jié)果。
當(dāng)寫入控制字開始轉(zhuǎn)換后,處理器進(jìn)入其它工作狀態(tài),直到轉(zhuǎn)換完成產(chǎn)生中斷,處理器在ioctl中讀取A/D轉(zhuǎn)換結(jié)果,并調(diào)用put_user(datum,ptr)宏函數(shù)將該結(jié)果傳遞到用戶空間。Ioctl函數(shù)的流程圖如圖4所示
用戶程序?qū)崿F(xiàn)數(shù)據(jù)采集需要先打開設(shè)備文件,分配數(shù)據(jù)空間,決定A/D轉(zhuǎn)換通道序號,然后調(diào)用ioctl實現(xiàn)A/D轉(zhuǎn)換并得到結(jié)果。
當(dāng)對MAX197 的控制字開始寫操作時,轉(zhuǎn)換就開始了。寫操作將選擇多路通道,并確定MAX197的輸入范圍是單極性還是雙極性。一個寫脈沖( )可以開始一次采集,或者對采樣進(jìn)行初始化并開始轉(zhuǎn)換。對任何時鐘模式和采集模式,轉(zhuǎn)換間隔都延時12個時鐘周期。若在轉(zhuǎn)換周期寫一個新的控制字節(jié)將使轉(zhuǎn)換失效, 并啟動方式可以更精確地控制采樣間隔和轉(zhuǎn)換。在這種方式下,用戶通過2個寫脈沖控制采集和啟動轉(zhuǎn)換。在第一寫脈沖中,要使ACQMOD 位=1,它將啟動一次采集開始。在第二個寫脈沖中,要使ACQMOD 位=0,在 的上升沿開始轉(zhuǎn)換并結(jié)束采集。在發(fā)第一和第二個寫脈沖時, 多路輸入通道的地址位值必須一樣。在第二個寫脈沖中, 低功耗模式位( PD0、PD1)可以設(shè)一個新值。當(dāng)轉(zhuǎn)換結(jié)束產(chǎn)生一個正確的結(jié)果時,芯片發(fā)出一個標(biāo)準(zhǔn)的中斷信號INT給處理器。在第一個讀周期或者寫一個新控制字節(jié)時,INT就變?yōu)楦唠娖健?
評論