新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM920T基于Linux平臺(tái)下的FPGA驅(qū)動(dòng)開(kāi)發(fā)

        ARM920T基于Linux平臺(tái)下的FPGA驅(qū)動(dòng)開(kāi)發(fā)

        作者: 時(shí)間:2010-08-10 來(lái)源:網(wǎng)絡(luò) 收藏


        1.5 讀/寫(xiě)操作

        讀和寫(xiě)都是進(jìn)行類(lèi)似的任務(wù),就是從設(shè)備到應(yīng)用程序代碼的數(shù)據(jù)拷貝。因此,它們的原代碼比較相似:

        ssize_t read(struct file*flip,char__user*buff,size_t count,loff_t*offp);
        ssize_t write(struct file*filp,const char__user*buff,size_t count,loff_t*offp);

        read的任務(wù)是從設(shè)備拷貝數(shù)據(jù)到用戶(hù)空間(使用copy_to_user),而write方法則是從用戶(hù)空間拷貝數(shù)據(jù)到設(shè)備(使用copy_from_user)。

        圖1所示是用read參數(shù)表示一個(gè)典型讀的實(shí)現(xiàn)過(guò)程。



        2 硬件電路

        通常在大容量存儲(chǔ)項(xiàng)目中,S3C2410處理器一般作為主CPU,可對(duì)EP2S30F67214進(jìn)行擴(kuò)展,以使系統(tǒng)具有拍攝、存儲(chǔ)、下載、I/O口擴(kuò)展的功能。由于的高速處理能力和易擴(kuò)展性,ARM與的結(jié)合使用,將在嵌入式系統(tǒng)領(lǐng)域占據(jù)主導(dǎo)地位。

        本項(xiàng)目中的ARM主要讀取的數(shù)據(jù),然后進(jìn)行數(shù)據(jù)處理并送給上位機(jī)。其ARM處理器與FPGA的連接關(guān)系如圖2所示,其主要連接有32位寬數(shù)據(jù)線、27位寬地址線以及讀、寫(xiě)、中斷和片選控制線等。



        在S3C2410中,nGPCS4的物理地址為0x2000000―0x28000000,共計(jì)128MB的靜態(tài)物理空間。中斷方式為下降沿有效。

        3 編程實(shí)現(xiàn)

        3.1 設(shè)備初始化

        初始化模塊在內(nèi)核啟動(dòng)時(shí)主要負(fù)責(zé)初始化FPGA工作。其實(shí)現(xiàn)由module_init () 和module_exit ()兩部分組成。其代碼如下:



        3.2 異步中斷通知

        在應(yīng)用程序中,可用如下代碼獲得中斷響應(yīng):

        signal (SIGIO,test_handler);/*test_handler為函數(shù)名字*/
        fcntl(fa,F(xiàn)_SETOWN,getpid ());
        oflags=fcntl(fa,F(xiàn)_GETFL);/*fd為打開(kāi)設(shè)備返回值*/
        fcntl (fd,F(xiàn)_SETFL,oflagsOFASYNC);/*fd為打開(kāi)設(shè)備返回值*/

        應(yīng)當(dāng)注意的是,不是所有的設(shè)備都支持異步通知。應(yīng)用程序常常假定異步能力只對(duì)socket和tty可用。

        3.3 地址映射

        設(shè)備程序過(guò)程中,由于程序操作的都是設(shè)備的虛擬地址,因此,要使驅(qū)動(dòng)程序?qū)μ摂M地址的操作反映到正確的設(shè)備上,還需要通過(guò)內(nèi)存管理單元MMU來(lái)將設(shè)備的虛擬地址映射到正確的物理地址上去,從而保證驅(qū)動(dòng)程序?qū)υO(shè)備的虛擬地址的操作,也就是要對(duì)其相應(yīng)的物理地址進(jìn)行操作。使用內(nèi)存映射的好處是處理大文件時(shí),其速度明顯快于標(biāo)準(zhǔn)文件I/O,這樣無(wú)論讀和寫(xiě),都少了一次用戶(hù)空間與內(nèi)核空間之間的復(fù)制。在用戶(hù)空間對(duì)FPGA設(shè)備的訪問(wèn)可通過(guò)內(nèi)存映射來(lái)實(shí)現(xiàn)。FPGA可以看作是硬件連接在S3C2410微處理器的片選信號(hào)nGPCS4上的一段物理地址的尋址。因此,必須先把物理地址映射到虛擬地址空間,然后才能對(duì)該段地址進(jìn)行讀/寫(xiě)。通常用戶(hù)可用如下代碼關(guān)聯(lián)FPGA的地址:

        fpga_base=ioremap(FPGA_PHY_START,F(xiàn)PGA_PHY_SIZE);

        4 結(jié)束語(yǔ)

        本文系統(tǒng)的介紹了ARM下的FPGA的驅(qū)動(dòng)方法,并通過(guò)用戶(hù)程序,實(shí)現(xiàn)了數(shù)據(jù)的處理和傳輸,從而實(shí)現(xiàn)了FPGA在嵌入式領(lǐng)域的廣泛應(yīng)用。
        linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)

        上一頁(yè) 1 2 下一頁(yè)

        評(píng)論


        相關(guān)推薦

        技術(shù)專(zhuān)區(qū)

        關(guān)閉
        主站蜘蛛池模板: 诸城市| 天津市| 贵南县| 大冶市| 察哈| 珠海市| 龙山县| 碌曲县| 临湘市| 社会| 通海县| 黔南| 泽州县| 荆门市| 大方县| 呼图壁县| 蓝山县| 万盛区| 华宁县| 丽江市| 柳江县| 新田县| 万安县| 广德县| 霞浦县| 桦甸市| 桃园市| 黔西县| 徐州市| 衡水市| 承德市| 萨嘎县| 正阳县| 岢岚县| 宜春市| 宜宾县| 哈巴河县| 秭归县| 息烽县| 岫岩| 上虞市|