基于A(yíng)RM-Linux的MAX1303接口與驅動(dòng)程序設計
2 系統硬件設計
已提到,模/數轉換器MAX1303可以通過(guò)SPI/QSPI/MICROWIRE兼容的串行接口進(jìn)行控制。由于SPI比較常見(jiàn),并且協(xié)議簡(jiǎn)單,本系統使用SPI協(xié)議控制此AD芯片。然而,雖然LPC3250有內置的SPI控制器,但本系統選擇使用LPC3250的GPI/O口模擬SPI接口對MAX1303進(jìn)行控制。下面分析原因。
已提到,MAX1303有7中工作模式,其中,有3種用于數據采集。這3種工作模式是:外部時(shí)鐘模式;外部采集模式;內部時(shí)鐘模式。這3種采集模式各有優(yōu)缺點(diǎn)。外部時(shí)鐘模式的吞吐率最高,同時(shí),給處理器帶來(lái)的負擔也最高;內部時(shí)鐘模式吞吐率次之,能適當減輕處理器的負擔;外部采集模式的吞吐率最低,但卻能最大限度的減輕處理器負擔。由于LPC3250性能強大,所以系統在采集數據時(shí),使用吞吐率高的外部時(shí)鐘模式。然而,使用外部時(shí)鐘模式時(shí),不像使用內部時(shí)鐘模式和外部采集模式,處理器向MAX1303寫(xiě)完控制字和轉換啟動(dòng)字后,只需等待MAX1303的SSTRB引腳輸出的轉換結束信號,然后就可以讀取轉換結果。使用外部時(shí)鐘模式,需要精確的控制時(shí)鐘個(gè)數,這使得在驅動(dòng)程序中,要經(jīng)常修改SPI的相關(guān)控制器,而且還要通過(guò)查詢(xún)來(lái)確定時(shí)鐘的個(gè)數。如果使用LPC3250的GPI/O口模擬SPI協(xié)議控制AD芯片就簡(jiǎn)單的多??刂艷PO口不斷翻轉輸出電平就可以產(chǎn)生時(shí)鐘信號,而且可隨意控制時(shí)鐘個(gè)數。對于發(fā)送數據,只需要簡(jiǎn)單的把數據字節的每個(gè)位根據時(shí)鐘變化通過(guò)GPI口輸出給AD芯片。讀取數據與發(fā)送數據是一個(gè)相反的過(guò)程,但類(lèi)似。本文引用地址:http://dyxdggzs.com/article/201610/306026.htm
所以,用GPI/O口模擬SPI總線(xiàn)控制MAX1303非常簡(jiǎn)單。本系統有兩路模擬信號需要采集,使用單端輸入,MAX1303的另外兩個(gè)輸入端接地。LPC3250與MAX1303的硬件連接如圖2所示。
3 Linux下設備驅動(dòng)程序設計
設備驅動(dòng)程序是應用程序和硬件之間的橋梁,它為應用程序屏蔽硬件細節,并將硬件封裝成一個(gè)文件的形式。當應用程序需要操作硬件時(shí),只需操作硬件相對應的設備文件即可。Linux對設備的分類(lèi)有許多種,常見(jiàn)的分類(lèi)是將設備分成3種:字符設備、塊設備、網(wǎng)絡(luò )設備。這三類(lèi)設備對應3種設備文件。不同設備的開(kāi)發(fā)模式以及與內核的接口也不相同。MAX1303屬于字符設備,本文將分析Linux2.6.29內核下MAX 1303的字符設備驅動(dòng)設計方法。
設備驅動(dòng)程序與應用程序不同,應用程序從main函數開(kāi)始執行,而驅動(dòng)程序在被安裝時(shí),則是從module_init宏指定的函數處開(kāi)始執行。module_init宏指定的函數被稱(chēng)為模塊加載函數,它可以看成是驅動(dòng)程序的入口。它通常完成地址映射,向內核注冊并初始化cdev結構,創(chuàng )建設備文件等工作。模塊加載函數的程序流程圖如圖3所示。
與模塊加載函數對應的,有一個(gè)模塊卸載函數,此函數由module_exit宏指定,它在驅動(dòng)模塊被卸載時(shí)執行。它主要完成的工作包括:銷(xiāo)毀設備文件;注銷(xiāo)設備所對應的cdev結構;釋放內存;注銷(xiāo)設備號。
Struct cdev在內核內部被用來(lái)表示設備,這是一個(gè)非常重要的數據結構。它內部有一個(gè)成員結構structfile_operations,用于連接設備編號和驅動(dòng)程序的操作。這個(gè)數據結構包含一組函數指針,這一組函數的實(shí)現是設計驅動(dòng)程序的重點(diǎn)和難點(diǎn)。這一組函數有很多,但根據項目需求,本系統只實(shí)現open,write,read,release 4個(gè)函數。
評論