基于S3C2440的nRF2401驅(qū)動設(shè)計(jì)
tq2440_nf24_open 函數(shù)用于打開設(shè)備, 設(shè)置功能引腳,將指定的引腳設(shè)置成是讀狀態(tài)還是寫狀態(tài)。由于S3C2440 與S3C2410 相差甚微,所以用一些S3C2410 的子函數(shù),減少程序開發(fā)的工作量。如:s3c2410_gpio_cfgpin (nf24_table [i],nf24_cfg_table[i]),nf24_table[],nf24_cfg_table[]是兩個靜態(tài)數(shù)組, nf24_table[]指定要設(shè)置的引腳,nf24_cfg_table[]指定設(shè)置到哪種工作模式。引腳的的定義在頭文件里,其位置在內(nèi)核文件系統(tǒng)下,路徑為asm / arch / regs-gpio.h.
tq2440_nf24_read,tq2440_nf24_ioctl 函數(shù)執(zhí)行相應(yīng)的讀寫操作。通過子函數(shù):s3c2410_gpio_cfgpin (nf24_table[0],nf24_cfg_table[5]);
dr=s3c2410_gpio_getpin(nf24_table[0]);可以將采集到的管腳狀態(tài)通過操作系統(tǒng)內(nèi)核送到應(yīng)用程序, 由應(yīng)用程序?qū)⑽惶幚沓勺止?jié)。
module_init(),module_exit()用于模塊的加載和退出。
MODULE_AUTHOR(″cgq″),MODULE_LICENSE(″GPL″ )函數(shù)說明了函數(shù)的作者和遵循的協(xié)議。
2.2 nFR2401 驅(qū)動軟件設(shè)備號
字符設(shè)備有一個主設(shè)備號和一個次設(shè)備號。主設(shè)備號標(biāo)識設(shè)備對應(yīng)的驅(qū)動程序, 內(nèi)核利用主設(shè)備號將設(shè)備與相應(yīng)的驅(qū)動程序?qū)?yīng)起來。次設(shè)備號只由設(shè)備驅(qū)動程序使用,區(qū)分同類型設(shè)備。向系統(tǒng)增加一個驅(qū)動程序意味著要給它一個主設(shè)備號。驅(qū)動編寫時,先不設(shè)置主設(shè)備號。待編寫完成后,加載驅(qū)動程序后,查看/ proc / devices 文件,查找系統(tǒng)分配給設(shè)備的主設(shè)備號。然后修改驅(qū)動程序中的設(shè)備號,重新編譯即可。例如在實(shí)驗(yàn)中,系統(tǒng)對nFR2401 的主設(shè)備號分配為:
#define DEVICE_NAME ″nf24″ / *″TQ2440_nf24″*/
#define NF24_MAJOR 253 / *nf24_MAJOR 198*/
2.3 nFR2401 應(yīng)用軟件設(shè)計(jì)
應(yīng)用軟件主要完成數(shù)據(jù)的發(fā)送、接收和存儲。為了使相關(guān)程序調(diào)用方便。將數(shù)據(jù)的發(fā)送、接收和存儲按照模塊化編寫。圖2 是程序的主體流程圖。
圖2 發(fā)送、接收流程圖
系統(tǒng)上電后,當(dāng)程序執(zhí)行到調(diào)用該設(shè)備時,打開相關(guān)設(shè)備文件時,首先通過open()函數(shù)打開設(shè)備,如果沒有正常打開,則顯示錯誤信息, 進(jìn)行相應(yīng)處理。
如果打開正常。首先對nFR2401 進(jìn)行配置編程。
將CS、CE 設(shè)為配置模式。通過CLK 和DATA 將通道的數(shù)據(jù)長度、通道的地址、地址的位數(shù)、CRC 校驗(yàn)和、使能、通信模式、速率等配置數(shù)據(jù)由高位到低位移入芯片。配置字一共120bit.將CS、CE 設(shè)為工作模式,nFR2401 將刷新內(nèi)部配置并使新配置立即生效。隨后就按照配置的工作方式工作。
在數(shù)據(jù)采集實(shí)驗(yàn)系統(tǒng)中, 隨運(yùn)動部件的RF 芯片剛開始處于接收命令, 接收到工作指令時, 開始將采集到的數(shù)據(jù)發(fā)送出去。連接S3C2440 的設(shè)備發(fā)送完工作指令后,就處于接收狀態(tài)。
這樣就避免了使nRF2401 處于頻繁的工作模式變動之中,節(jié)省了時間,加快了數(shù)據(jù)傳輸?shù)乃俣?。減少了丟數(shù)的概率。
所有相關(guān)程序編譯完成后, 將驅(qū)動程序放入內(nèi)核文件系統(tǒng)的/ driver / char 文件夾下, 編譯后生成的驅(qū)動執(zhí)行文件入文件系統(tǒng)的/ lib 文件夾下,應(yīng)用程序放在/ opt 下,修改系統(tǒng)啟動文件順序即/ etc / init.d / rcS 文件并添加“insmod / lib / nf24.ko” 系統(tǒng)啟動時即可加載驅(qū)動。然后重新編譯,移植內(nèi)核,文件系統(tǒng)。燒寫、重啟后,即可按原先的設(shè)計(jì)工作。
3 結(jié)束語
S3C2440 與nRF2401 的結(jié)合,是對Linux 外設(shè)的擴(kuò)展。系統(tǒng)的集成度高,傳輸速率高。芯片自身的糾錯機(jī)制能確保信號能夠準(zhǔn)確傳輸。多頻點(diǎn)的特性,可以使得在狹小的空間里布置多個同樣類型的芯片進(jìn)行互不干擾的工作。
評論