基于ARM-Linux的MAX1303接口與驅動程序設計
結構struct file_operations中的open字段對應著系統(tǒng)調用中的open函數(shù)。在應用程序中,通過open函數(shù)打開MAX1303對應的設備文件時,內核會跳轉到此函數(shù)指針處。此函數(shù)指針的實現(xiàn),主要完成初始化工作。這包括MAX1303的初始化配置和LPC3250驅動相關的寄存器設置。MAX1303的初始化包括工作模式選擇、量程范圍選擇、單端/差分輸入選擇、初始化通道選擇。對于這四項,本系統(tǒng)全部使用默認設置:外部時鐘模式;-Vref到+Vref的測量范圍;單端輸入;初始化輸入通道0。所以,在open中不用配置MAX1303。對LPC3250的寄存器配置也比較簡單,需要完成的配置有:片選信號拉高;時鐘信號拉低;處理器輸出拉低。
Write字段需要接收應用程序從用戶空間傳遞到內核的的數(shù)據(jù),然后將此數(shù)據(jù)通過GPO_17端口發(fā)送給MAX1303。這些數(shù)據(jù)主要用于修改MAX1303的配置,例如通道選擇。向MAX1303寫數(shù)據(jù)時需要注意MAX1303電氣特性中的兩個時間參數(shù)Tcss和Tcspw。Tcss對應著芯片的片選信號被拉低后到第一個時鐘到來前所必需的時間間隔。Tcspw對應著寫模擬輸入配置字節(jié)、模式控制字節(jié)、轉換啟動字節(jié)時,任意兩者之間的時間間隔。這兩個時間參數(shù)都必須大于40 ns,且沒有上限。本系統(tǒng)中,在Read中寫轉換啟動字節(jié),write中只做通道的切換,其他配置都使用默認的。
Read字段是MAX1303驅動的關鍵點。它負責讀取采樣結果,并將結果傳遞給應用程序。在read中,首先是用8個時鐘向MAX1303寫轉換起始字節(jié),然后使用8個是時鐘周期等待AD轉換完成。最后使用16個時鐘周期讀取MAX1303輸出的轉換結果。由于轉換結果是以串行方式輸出,故需要將讀取的數(shù)據(jù)拼湊起來。又由于ARM使用的是端口3的GPI_06管腳讀取MAX1303的輸出數(shù)據(jù),且對于端口3的操作是以32位進行的,所以還需要考慮拼接端口3的哪個數(shù)據(jù)位。本文的處理方式是先將端口3讀出的數(shù)據(jù)右移6位。具體的操作代碼如下:
release對應著系統(tǒng)調用中的close函數(shù)。它需要完成這個驅動所涉及的配置寄存器的復位,操作過程與open相反。在還原寄存器的默認設置后,打印一條設備文件關閉的信息,供應用程序開發(fā)者調試時觀察使用。
4 Linux應用程序設計與測試
本文介紹的應用程序是整個系統(tǒng)的一部分,這里僅供測試驅動程序使用。測試的功能主要是驅動中的write和read功能。由于驅動程序的read中沒有對讀取的采樣值做處理,所以得到的數(shù)據(jù)還不是輸入信號的實際值,應用程序必須對數(shù)據(jù)進行處理。由于MAX1303采用單端、雙極性輸入,所以處理公式為:
式中,實際值的單位是毫伏;采樣值是從MAX1303讀取的數(shù)據(jù);FSR是滿量程范圍,對于本系統(tǒng),F(xiàn)SR是2*Vref;本系統(tǒng)采用內部電壓基準,Vref的理論值是4.096 V,但實際系統(tǒng)中會有一定的漂移,范圍一般在4.056 V到4.136 V之間。
為了測試,應用程序每秒讀取一次兩個通道的數(shù)據(jù),并打印。應用程序的流程圖如圖4所示。本文引用地址:http://cafeforensic.com/article/201610/306026.htm
根據(jù)應用程序的打印結果和CH1、CH2的實際輸入,系統(tǒng)采樣結果正確,系統(tǒng)運行穩(wěn)定。
5 結論
A/D轉換器在數(shù)據(jù)采集系統(tǒng)和智能控制系統(tǒng)中有極其重要的用途。嵌入式Linux在現(xiàn)代的嵌入式系統(tǒng)中也被廣泛應用。本文描述的16位AD芯片的Linux驅動和硬件接口設計不僅在筆者所開發(fā)的系統(tǒng)中具有實際工程應用價值,同時,對其他具有SPI接口的AD芯片的硬件接口設計和Linux驅動程序設計也有一定的參考價值。
評論