資料介紹
引言
Intel公司推出的XScale采用ARM V5TE結(jié)構(gòu),是Strong ARM的升級(jí)換代產(chǎn)品。XScale PXA270處理器最高主頻可達(dá)624 MHz,加入了Wireless MMX、Intel SpeedStep等新技術(shù),以其高性能、低功耗、多功能等特點(diǎn)在信息家電、工業(yè)控制等領(lǐng)域得到了廣泛的應(yīng)用。在嵌入式控制中,“微處理器+FPGA”是一種常用的解決方案。FPGA(現(xiàn)場(chǎng)可編程門陣列)有編程方便、集成度高、速度快等特點(diǎn),電子設(shè)計(jì)人員可以通過(guò)硬件編程的方法來(lái)實(shí)現(xiàn)FPGA芯片各種功能的開(kāi)發(fā)。在我們的一個(gè)數(shù)控平臺(tái)的研究項(xiàng)目中,采用XScale PXA270作為主CPU,并對(duì)其進(jìn)行FPGA擴(kuò)展,使其具有插補(bǔ)、電機(jī)驅(qū)動(dòng)、信號(hào)處理、I/O口擴(kuò)展的功能。Linux以其內(nèi)核精練、高效,源代碼開(kāi)放且免費(fèi)等優(yōu)勢(shì),在嵌入式領(lǐng)域得到了廣泛的應(yīng)用。下面以Intel XScale PXA270上的Altera FLEX/ACEX的應(yīng)用為例,詳細(xì)介紹Linux下FPGA設(shè)備驅(qū)動(dòng)的實(shí)現(xiàn)。
1 Altera FLEX/ACEX芯片結(jié)構(gòu)
Altera FLEX/ACEX芯片是基于查找表LUT(LookUpTable)原理而實(shí)現(xiàn)的。LUT本質(zhì)上就是一個(gè)RAM。目前FPGA中多使用4輸入的 LUT,所以每個(gè)LUT可以看成一個(gè)有4位地址線的16×1的RAM。當(dāng)用戶通過(guò)原理圖或HDL語(yǔ)言描述一個(gè)邏輯電路以后,F(xiàn)PGA開(kāi)發(fā)軟件會(huì)自動(dòng)計(jì)算邏輯電路的所有可能的結(jié)果,并把結(jié)果事先寫入RAM。這樣,每輸入一個(gè)信號(hào)進(jìn)行邏輯運(yùn)算就等于輸入一個(gè)地址進(jìn)行查表,找出地址對(duì)應(yīng)的內(nèi)容,然后輸出即可。由于LUT主要適合SRAM工藝生產(chǎn),所以目前大部分FPGA都是基于SRAM工藝的,而SRAM工藝的芯片在掉電后信息就會(huì)丟失,一定要外加1片專用配置芯片(本實(shí)驗(yàn)電路使用Altera EPC2LC20)。在上電時(shí),由這個(gè)專用配置芯片把數(shù)據(jù)加載到FPGA中,然后FPGA即可正常工作。由于配置時(shí)間很短,因此不會(huì)影響系統(tǒng)正常工作。在使用ACEX1K50之前,應(yīng)對(duì)其進(jìn)行設(shè)計(jì)編程,實(shí)現(xiàn)相應(yīng)寄存器及I/O口的功能。有關(guān)FPGA的詳細(xì)內(nèi)容請(qǐng)參閱相關(guān)資料。
2 Intel XScale PXA270處理器的系統(tǒng)存儲(chǔ)器接口
PXA270處理器的可編程靜態(tài)存儲(chǔ)體系結(jié)構(gòu)如圖1所示。

圖1 PXA270靜態(tài)存儲(chǔ)體系結(jié)構(gòu)
在系統(tǒng)上, ACEX1K50位于nCS《2》上,物理地址0x8000000~0x8001000共4K的靜態(tài)地址空間。圖2表示了Intel XScale PXA270與ACEX1K50的硬件連接關(guān)系。

圖2 Intel XScale PXA270與ACEX1K50的硬件連接
3 Linux下ACEX1K50設(shè)備驅(qū)動(dòng)的實(shí)現(xiàn)
3.1 Linux下設(shè)備驅(qū)動(dòng)基本原理
設(shè)備驅(qū)動(dòng)程序是應(yīng)用程序與硬件之間的一個(gè)中間軟件層,設(shè)備驅(qū)動(dòng)程序?yàn)閼?yīng)用程序屏蔽了硬件的細(xì)節(jié)。這樣在應(yīng)用程序看來(lái),硬件設(shè)備只是一個(gè)設(shè)備文件,應(yīng)用程序可以像操作普通文件一樣對(duì)硬件設(shè)備進(jìn)行操作。設(shè)備驅(qū)動(dòng)程序是內(nèi)核的一部分,它主要實(shí)現(xiàn)的功能有:對(duì)設(shè)備進(jìn)行初始化和釋放;把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù);讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù),回送應(yīng)用程序請(qǐng)求的數(shù)據(jù)以及檢測(cè)和處理設(shè)備出現(xiàn)的錯(cuò)誤。
Linux將設(shè)備分為最基本的兩大類:一類是字符設(shè)備;另一類是塊設(shè)備。字符設(shè)備和塊設(shè)備的主要區(qū)別在于是否使用了緩沖技術(shù)。字符設(shè)備以單個(gè)字節(jié)為單位進(jìn)行順序讀/寫操作,通常不使用緩沖技術(shù);塊設(shè)備為了提高效率,利用一塊系統(tǒng)內(nèi)存作為讀/寫操作的緩沖區(qū),由于涉及緩沖區(qū)管理、調(diào)度和同步等問(wèn)題,實(shí)現(xiàn)起來(lái)比字符設(shè)備復(fù)雜得多。
Linux通過(guò)設(shè)備文件系統(tǒng)對(duì)設(shè)備進(jìn)行管理,各種設(shè)備都以文件的形式存放在/dev目錄下,稱為“設(shè)備文件”。應(yīng)用程序可以像普通文件一樣打開(kāi)、關(guān)閉和讀/寫這些設(shè)備文件。為了管理這些設(shè)備,系統(tǒng)為設(shè)備編了號(hào),每個(gè)設(shè)備號(hào)又分為主設(shè)備號(hào)和次設(shè)備號(hào)。主設(shè)備號(hào)用來(lái)區(qū)分不同種類的設(shè)備,而次設(shè)備號(hào)用來(lái)區(qū)分同一類型的多個(gè)設(shè)備。Linux為所有的設(shè)備文件都提供了統(tǒng)一的操作函數(shù)接口,方法是使用數(shù)據(jù)結(jié)構(gòu)struct file_operations。這個(gè)數(shù)據(jù)結(jié)構(gòu)中包括許多操作函數(shù)的指針,如open()、close()、read()和write()等,但由于外設(shè)的種類較多,操作方式各不相同。struct file_operations結(jié)構(gòu)體中的成員為一系列的接口函數(shù),如用于讀/寫的read/write函數(shù)和用于控制的ioctl等。打開(kāi)一個(gè)文件就是調(diào)用這個(gè)文件file_operations中的open操作。不同類型的文件(如普通的磁盤數(shù)據(jù)文件)有不同的file_operations成員函數(shù),接口函數(shù)完成磁盤數(shù)據(jù)塊讀/寫操作;而對(duì)于各種設(shè)備文件,則最終調(diào)用各自驅(qū)動(dòng)程序中的I/O函數(shù)進(jìn)行具體設(shè)備的操作。這樣,應(yīng)用程序根本不必考慮操作的是設(shè)備還是普通文件,可一律當(dāng)作文件處理,具有非常清晰、統(tǒng)一的I/O接口,所以file_operations是文件層次的I/O接口。
3.2 ACEX1K50在Linux下設(shè)備驅(qū)動(dòng)的實(shí)現(xiàn)
在驅(qū)動(dòng)程序中使用內(nèi)存映射可以提供給用戶程序直接訪問(wèn)設(shè)備內(nèi)存的能力。使用內(nèi)存映射的好處是處理大文件時(shí)速度明顯快于標(biāo)準(zhǔn)文件I/O,無(wú)論讀/寫,都少了一次用戶空間與內(nèi)核空間之間的復(fù)制。在用戶空間對(duì)ACEX1K50 FPGA設(shè)備的訪問(wèn)是通過(guò)內(nèi)存映射來(lái)實(shí)現(xiàn)的。
ACEX1K50可以看作是硬件連接在PXA270微處理器的nCS《2》上的一段物理地址來(lái)尋址。因?yàn)橛刑摂M內(nèi)存管理單元,所以如果在Linux下,必須先把物理地址映射到虛擬地址空間,然后才能對(duì)該段地址進(jìn)行讀/寫。
Intel公司推出的XScale采用ARM V5TE結(jié)構(gòu),是Strong ARM的升級(jí)換代產(chǎn)品。XScale PXA270處理器最高主頻可達(dá)624 MHz,加入了Wireless MMX、Intel SpeedStep等新技術(shù),以其高性能、低功耗、多功能等特點(diǎn)在信息家電、工業(yè)控制等領(lǐng)域得到了廣泛的應(yīng)用。在嵌入式控制中,“微處理器+FPGA”是一種常用的解決方案。FPGA(現(xiàn)場(chǎng)可編程門陣列)有編程方便、集成度高、速度快等特點(diǎn),電子設(shè)計(jì)人員可以通過(guò)硬件編程的方法來(lái)實(shí)現(xiàn)FPGA芯片各種功能的開(kāi)發(fā)。在我們的一個(gè)數(shù)控平臺(tái)的研究項(xiàng)目中,采用XScale PXA270作為主CPU,并對(duì)其進(jìn)行FPGA擴(kuò)展,使其具有插補(bǔ)、電機(jī)驅(qū)動(dòng)、信號(hào)處理、I/O口擴(kuò)展的功能。Linux以其內(nèi)核精練、高效,源代碼開(kāi)放且免費(fèi)等優(yōu)勢(shì),在嵌入式領(lǐng)域得到了廣泛的應(yīng)用。下面以Intel XScale PXA270上的Altera FLEX/ACEX的應(yīng)用為例,詳細(xì)介紹Linux下FPGA設(shè)備驅(qū)動(dòng)的實(shí)現(xiàn)。
1 Altera FLEX/ACEX芯片結(jié)構(gòu)
Altera FLEX/ACEX芯片是基于查找表LUT(LookUpTable)原理而實(shí)現(xiàn)的。LUT本質(zhì)上就是一個(gè)RAM。目前FPGA中多使用4輸入的 LUT,所以每個(gè)LUT可以看成一個(gè)有4位地址線的16×1的RAM。當(dāng)用戶通過(guò)原理圖或HDL語(yǔ)言描述一個(gè)邏輯電路以后,F(xiàn)PGA開(kāi)發(fā)軟件會(huì)自動(dòng)計(jì)算邏輯電路的所有可能的結(jié)果,并把結(jié)果事先寫入RAM。這樣,每輸入一個(gè)信號(hào)進(jìn)行邏輯運(yùn)算就等于輸入一個(gè)地址進(jìn)行查表,找出地址對(duì)應(yīng)的內(nèi)容,然后輸出即可。由于LUT主要適合SRAM工藝生產(chǎn),所以目前大部分FPGA都是基于SRAM工藝的,而SRAM工藝的芯片在掉電后信息就會(huì)丟失,一定要外加1片專用配置芯片(本實(shí)驗(yàn)電路使用Altera EPC2LC20)。在上電時(shí),由這個(gè)專用配置芯片把數(shù)據(jù)加載到FPGA中,然后FPGA即可正常工作。由于配置時(shí)間很短,因此不會(huì)影響系統(tǒng)正常工作。在使用ACEX1K50之前,應(yīng)對(duì)其進(jìn)行設(shè)計(jì)編程,實(shí)現(xiàn)相應(yīng)寄存器及I/O口的功能。有關(guān)FPGA的詳細(xì)內(nèi)容請(qǐng)參閱相關(guān)資料。
2 Intel XScale PXA270處理器的系統(tǒng)存儲(chǔ)器接口
PXA270處理器的可編程靜態(tài)存儲(chǔ)體系結(jié)構(gòu)如圖1所示。

圖1 PXA270靜態(tài)存儲(chǔ)體系結(jié)構(gòu)
在系統(tǒng)上, ACEX1K50位于nCS《2》上,物理地址0x8000000~0x8001000共4K的靜態(tài)地址空間。圖2表示了Intel XScale PXA270與ACEX1K50的硬件連接關(guān)系。

圖2 Intel XScale PXA270與ACEX1K50的硬件連接
3 Linux下ACEX1K50設(shè)備驅(qū)動(dòng)的實(shí)現(xiàn)
3.1 Linux下設(shè)備驅(qū)動(dòng)基本原理
設(shè)備驅(qū)動(dòng)程序是應(yīng)用程序與硬件之間的一個(gè)中間軟件層,設(shè)備驅(qū)動(dòng)程序?yàn)閼?yīng)用程序屏蔽了硬件的細(xì)節(jié)。這樣在應(yīng)用程序看來(lái),硬件設(shè)備只是一個(gè)設(shè)備文件,應(yīng)用程序可以像操作普通文件一樣對(duì)硬件設(shè)備進(jìn)行操作。設(shè)備驅(qū)動(dòng)程序是內(nèi)核的一部分,它主要實(shí)現(xiàn)的功能有:對(duì)設(shè)備進(jìn)行初始化和釋放;把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù);讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù),回送應(yīng)用程序請(qǐng)求的數(shù)據(jù)以及檢測(cè)和處理設(shè)備出現(xiàn)的錯(cuò)誤。
Linux將設(shè)備分為最基本的兩大類:一類是字符設(shè)備;另一類是塊設(shè)備。字符設(shè)備和塊設(shè)備的主要區(qū)別在于是否使用了緩沖技術(shù)。字符設(shè)備以單個(gè)字節(jié)為單位進(jìn)行順序讀/寫操作,通常不使用緩沖技術(shù);塊設(shè)備為了提高效率,利用一塊系統(tǒng)內(nèi)存作為讀/寫操作的緩沖區(qū),由于涉及緩沖區(qū)管理、調(diào)度和同步等問(wèn)題,實(shí)現(xiàn)起來(lái)比字符設(shè)備復(fù)雜得多。
Linux通過(guò)設(shè)備文件系統(tǒng)對(duì)設(shè)備進(jìn)行管理,各種設(shè)備都以文件的形式存放在/dev目錄下,稱為“設(shè)備文件”。應(yīng)用程序可以像普通文件一樣打開(kāi)、關(guān)閉和讀/寫這些設(shè)備文件。為了管理這些設(shè)備,系統(tǒng)為設(shè)備編了號(hào),每個(gè)設(shè)備號(hào)又分為主設(shè)備號(hào)和次設(shè)備號(hào)。主設(shè)備號(hào)用來(lái)區(qū)分不同種類的設(shè)備,而次設(shè)備號(hào)用來(lái)區(qū)分同一類型的多個(gè)設(shè)備。Linux為所有的設(shè)備文件都提供了統(tǒng)一的操作函數(shù)接口,方法是使用數(shù)據(jù)結(jié)構(gòu)struct file_operations。這個(gè)數(shù)據(jù)結(jié)構(gòu)中包括許多操作函數(shù)的指針,如open()、close()、read()和write()等,但由于外設(shè)的種類較多,操作方式各不相同。struct file_operations結(jié)構(gòu)體中的成員為一系列的接口函數(shù),如用于讀/寫的read/write函數(shù)和用于控制的ioctl等。打開(kāi)一個(gè)文件就是調(diào)用這個(gè)文件file_operations中的open操作。不同類型的文件(如普通的磁盤數(shù)據(jù)文件)有不同的file_operations成員函數(shù),接口函數(shù)完成磁盤數(shù)據(jù)塊讀/寫操作;而對(duì)于各種設(shè)備文件,則最終調(diào)用各自驅(qū)動(dòng)程序中的I/O函數(shù)進(jìn)行具體設(shè)備的操作。這樣,應(yīng)用程序根本不必考慮操作的是設(shè)備還是普通文件,可一律當(dāng)作文件處理,具有非常清晰、統(tǒng)一的I/O接口,所以file_operations是文件層次的I/O接口。
3.2 ACEX1K50在Linux下設(shè)備驅(qū)動(dòng)的實(shí)現(xiàn)
在驅(qū)動(dòng)程序中使用內(nèi)存映射可以提供給用戶程序直接訪問(wèn)設(shè)備內(nèi)存的能力。使用內(nèi)存映射的好處是處理大文件時(shí)速度明顯快于標(biāo)準(zhǔn)文件I/O,無(wú)論讀/寫,都少了一次用戶空間與內(nèi)核空間之間的復(fù)制。在用戶空間對(duì)ACEX1K50 FPGA設(shè)備的訪問(wèn)是通過(guò)內(nèi)存映射來(lái)實(shí)現(xiàn)的。
ACEX1K50可以看作是硬件連接在PXA270微處理器的nCS《2》上的一段物理地址來(lái)尋址。因?yàn)橛刑摂M內(nèi)存管理單元,所以如果在Linux下,必須先把物理地址映射到虛擬地址空間,然后才能對(duì)該段地址進(jìn)行讀/寫。
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 如何在Linux環(huán)境下實(shí)現(xiàn)Python環(huán)境的搭建 14次下載
- 基于Linux下的LCD驅(qū)動(dòng)程序實(shí)現(xiàn) 12次下載
- 《Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)詳解》第8章、Linux設(shè)備驅(qū)動(dòng)中的阻塞與非阻塞IO 9次下載
- 《Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)詳解》第9章、Linux設(shè)備驅(qū)動(dòng)中的異步通知與異步IO 0次下載
- 《Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)詳解》第13章、Linux塊設(shè)備驅(qū)動(dòng) 18次下載
- ARM-Linux-IIC設(shè)備的添加與驅(qū)動(dòng)實(shí)現(xiàn) 57次下載
- 嵌入式Linux字符設(shè)備驅(qū)動(dòng)的設(shè)計(jì)與應(yīng)用
- PCI總線協(xié)議的FPGA實(shí)現(xiàn)及驅(qū)動(dòng)設(shè)計(jì)
- 嵌入式Linux下PCSC驅(qū)動(dòng)的設(shè)計(jì)與實(shí)現(xiàn)
- 嵌入式Linux字符設(shè)備驅(qū)動(dòng)的設(shè)計(jì)與應(yīng)用
- Linux環(huán)境下USB的原理、驅(qū)動(dòng)和配置
- Linux系統(tǒng)下CAN總線通信的設(shè)計(jì)及實(shí)現(xiàn)
- Linux系統(tǒng)PCI設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)
- 基于嵌入式Linux系統(tǒng)的LCD驅(qū)動(dòng)實(shí)現(xiàn)Implementa
- 嵌入式Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)
- Linux內(nèi)核驅(qū)動(dòng)與單個(gè)PCI設(shè)備的綁定和解綁定 1730次閱讀
- 一文總結(jié)linux的platform驅(qū)動(dòng) 1199次閱讀
- 如何寫一個(gè)Linux設(shè)備驅(qū)動(dòng)程序 4532次閱讀
- Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)的基本知識(shí) 4393次閱讀
- 米爾科技Linux設(shè)備驅(qū)動(dòng)研究淺談 2035次閱讀
- 米爾科技LINUX設(shè)備驅(qū)動(dòng)程序教程 2103次閱讀
- 基于PXA255開(kāi)發(fā)板外圍字符設(shè)備的嵌入式Linux字符設(shè)備驅(qū)動(dòng)設(shè)計(jì)與應(yīng)用 1199次閱讀
- 基于嵌入式Linux下的I2C設(shè)備驅(qū)動(dòng)的總體思路與框架設(shè)計(jì) 3771次閱讀
- 可動(dòng)態(tài)安裝的Linux設(shè)備驅(qū)動(dòng)程序 1012次閱讀
- linux環(huán)境下如何開(kāi)發(fā)51單片機(jī) 基于codeblocks和SDCC 4606次閱讀
- 想要駕馭Linux驅(qū)動(dòng)開(kāi)發(fā),必須深刻理解Linux總線設(shè)備驅(qū)動(dòng)框架 1w次閱讀
- 基于FPGA的嵌入式Linux操作系統(tǒng)解決方案 6309次閱讀
- 基于FPGA嵌入式系統(tǒng)的設(shè)備驅(qū)動(dòng)開(kāi)發(fā) 2338次閱讀
- 手把手教你創(chuàng)建Linux設(shè)備驅(qū)動(dòng)和應(yīng)用程序 4469次閱讀
- 關(guān)于Linux設(shè)備驅(qū)動(dòng)中input子系統(tǒng)的介紹 2711次閱讀
下載排行
本周
- 1GD100PIX120C6SNA規(guī)格書(shū)
- 0.98 MB | 3次下載 | 免費(fèi)
- 2一款入耳式耳機(jī)的仿真與分析
- 0.44 MB | 2次下載 | 免費(fèi)
- 3Eurotherm TKS Temperature 用戶手冊(cè)
- 1.46 MB | 2次下載 | 免費(fèi)
- 4人形機(jī)器人電機(jī)驅(qū)動(dòng)和傳感報(bào)告
- 4.27 MB | 2次下載 | 免費(fèi)
- 5無(wú)線系統(tǒng)中天線和RF元件電磁建模
- 7.48 MB | 1次下載 | 4 積分
- 6Multisim模擬電路仿真教程
- 1.93 MB | 1次下載 | 3 積分
- 7DMP300C1型微機(jī)變壓器保護(hù)測(cè)控裝置技術(shù)說(shuō)明書(shū)
- 4.11 MB | 次下載 | 10 積分
- 8用MT3540芯片設(shè)計(jì)BOOST電路 1(可下載)
- 445.66 KB | 次下載 | 免費(fèi)
本月
- 1晶體三極管的電流放大作用詳細(xì)說(shuō)明
- 0.77 MB | 32次下載 | 2 積分
- 2Python從入門到精通背記手冊(cè)
- 18.77 MB | 27次下載 | 1 積分
- 3雙極型三極管放大電路的三種基本組態(tài)的學(xué)習(xí)課件免費(fèi)下載
- 4.03 MB | 25次下載 | 1 積分
- 4AIWA HS-J303 MKⅡ維修手冊(cè)
- 22.47 MB | 23次下載 | 10 積分
- 5多級(jí)放大電路的學(xué)習(xí)課件免費(fèi)下載
- 1.81 MB | 21次下載 | 2 積分
- 6九陽(yáng)豆?jié){機(jī)高清原理圖
- 2.47 MB | 20次下載 | 1 積分
- 7AIWA HS-J202/HS-J202M/HS-J800維修手冊(cè)
- 13.60 MB | 15次下載 | 10 積分
- 81875功放原理圖
- 0.04 MB | 11次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935127次下載 | 10 積分
- 2開(kāi)源硬件-PMP21529.1-4 開(kāi)關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
- 1.48MB | 420063次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191382次下載 | 10 積分
- 5十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183337次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81585次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73814次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65988次下載 | 10 積分
評(píng)論