新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于ARM-Linux的MAX1303接口與驅(qū)動(dòng)程序設(shè)計(jì)

基于ARM-Linux的MAX1303接口與驅(qū)動(dòng)程序設(shè)計(jì)

作者: 時(shí)間:2016-10-10 來源:網(wǎng)絡(luò) 收藏

2 系統(tǒng)硬件設(shè)計(jì)
已提到,模/數(shù)轉(zhuǎn)換器可以通過SPI/QSPI/MICROWIRE兼容的串行進(jìn)行控制。由于SPI比較常見,并且協(xié)議簡(jiǎn)單,本系統(tǒng)使用SPI協(xié)議控制此AD芯片。然而,雖然LPC3250有內(nèi)置的SPI控制器,但本系統(tǒng)選擇使用LPC3250的GPI/O口模擬SPI對(duì)進(jìn)行控制。下面分析原因。
已提到,有7中工作模式,其中,有3種用于數(shù)據(jù)采集。這3種工作模式是:外部時(shí)鐘模式;外部采集模式;內(nèi)部時(shí)鐘模式。這3種采集模式各有優(yōu)缺點(diǎn)。外部時(shí)鐘模式的吞吐率最高,同時(shí),給處理器帶來的負(fù)擔(dān)也最高;內(nèi)部時(shí)鐘模式吞吐率次之,能適當(dāng)減輕處理器的負(fù)擔(dān);外部采集模式的吞吐率最低,但卻能最大限度的減輕處理器負(fù)擔(dān)。由于LPC3250性能強(qiáng)大,所以系統(tǒng)在采集數(shù)據(jù)時(shí),使用吞吐率高的外部時(shí)鐘模式。然而,使用外部時(shí)鐘模式時(shí),不像使用內(nèi)部時(shí)鐘模式和外部采集模式,處理器向MAX1303寫完控制字和轉(zhuǎn)換啟動(dòng)字后,只需等待MAX1303的SSTRB引腳輸出的轉(zhuǎn)換結(jié)束信號(hào),然后就可以讀取轉(zhuǎn)換結(jié)果。使用外部時(shí)鐘模式,需要精確的控制時(shí)鐘個(gè)數(shù),這使得在中,要經(jīng)常修改SPI的相關(guān)控制器,而且還要通過查詢來確定時(shí)鐘的個(gè)數(shù)。如果使用LPC3250的GPI/O口模擬SPI協(xié)議控制AD芯片就簡(jiǎn)單的多。控制GPO口不斷翻轉(zhuǎn)輸出電平就可以產(chǎn)生時(shí)鐘信號(hào),而且可隨意控制時(shí)鐘個(gè)數(shù)。對(duì)于發(fā)送數(shù)據(jù),只需要簡(jiǎn)單的把數(shù)據(jù)字節(jié)的每個(gè)位根據(jù)時(shí)鐘變化通過GPI口輸出給AD芯片。讀取數(shù)據(jù)與發(fā)送數(shù)據(jù)是一個(gè)相反的過程,但類似。

本文引用地址:http://m.butianyuan.cn/article/201610/306026.htm

b.JPG


所以,用GPI/O口模擬SPI總線控制MAX1303非常簡(jiǎn)單。本系統(tǒng)有兩路模擬信號(hào)需要采集,使用單端輸入,MAX1303的另外兩個(gè)輸入端接地。LPC3250與MAX1303的硬件連接如圖2所示。

3 Linux下設(shè)備設(shè)計(jì)
設(shè)備是應(yīng)用程序和硬件之間的橋梁,它為應(yīng)用程序屏蔽硬件細(xì)節(jié),并將硬件封裝成一個(gè)文件的形式。當(dāng)應(yīng)用程序需要操作硬件時(shí),只需操作硬件相對(duì)應(yīng)的設(shè)備文件即可。Linux對(duì)設(shè)備的分類有許多種,常見的分類是將設(shè)備分成3種:字符設(shè)備、塊設(shè)備、網(wǎng)絡(luò)設(shè)備。這三類設(shè)備對(duì)應(yīng)3種設(shè)備文件。不同設(shè)備的開發(fā)模式以及與內(nèi)核的也不相同。MAX1303屬于字符設(shè)備,本文將分析Linux2.6.29內(nèi)核下MAX 1303的字符設(shè)備驅(qū)動(dòng)設(shè)計(jì)方法。
設(shè)備驅(qū)動(dòng)程序與應(yīng)用程序不同,應(yīng)用程序從main函數(shù)開始執(zhí)行,而驅(qū)動(dòng)程序在被安裝時(shí),則是從module_init宏指定的函數(shù)處開始執(zhí)行。module_init宏指定的函數(shù)被稱為模塊加載函數(shù),它可以看成是驅(qū)動(dòng)程序的入口。它通常完成地址映射,向內(nèi)核注冊(cè)并初始化cdev結(jié)構(gòu),創(chuàng)建設(shè)備文件等工作。模塊加載函數(shù)的程序流程圖如圖3所示。

c.JPG


與模塊加載函數(shù)對(duì)應(yīng)的,有一個(gè)模塊卸載函數(shù),此函數(shù)由module_exit宏指定,它在驅(qū)動(dòng)模塊被卸載時(shí)執(zhí)行。它主要完成的工作包括:銷毀設(shè)備文件;注銷設(shè)備所對(duì)應(yīng)的cdev結(jié)構(gòu);釋放內(nèi)存;注銷設(shè)備號(hào)。
Struct cdev在內(nèi)核內(nèi)部被用來表示設(shè)備,這是一個(gè)非常重要的數(shù)據(jù)結(jié)構(gòu)。它內(nèi)部有一個(gè)成員結(jié)構(gòu)structfile_operations,用于連接設(shè)備編號(hào)和驅(qū)動(dòng)程序的操作。這個(gè)數(shù)據(jù)結(jié)構(gòu)包含一組函數(shù)指針,這一組函數(shù)的實(shí)現(xiàn)是設(shè)計(jì)驅(qū)動(dòng)程序的重點(diǎn)和難點(diǎn)。這一組函數(shù)有很多,但根據(jù)項(xiàng)目需求,本系統(tǒng)只實(shí)現(xiàn)open,write,read,release 4個(gè)函數(shù)。



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉