新聞中心
隨著嵌入式設(shè)備的廣泛應(yīng)用,SoC(System on Chip)已成為嵌入式系統(tǒng)中的重要組成部分。Xilinx Zynq系列是當(dāng)前業(yè)界最為出色的SoC設(shè)計(jì),該系列利用FPGA的可重構(gòu)性和ARM的處理器內(nèi)核,為設(shè)計(jì)人員提供了一個(gè)高度可定制化的解決方案。

創(chuàng)新互聯(lián)專業(yè)IDC數(shù)據(jù)服務(wù)器托管提供商,專業(yè)提供成都服務(wù)器托管,服務(wù)器租用,服務(wù)器機(jī)柜租賃,服務(wù)器機(jī)柜租賃,成都多線服務(wù)器托管等服務(wù)器托管服務(wù)。
Zynq SoC在嵌入式系統(tǒng)中的主要應(yīng)用是作為處理器子系統(tǒng)的擴(kuò)展,可用于實(shí)現(xiàn)高效的數(shù)據(jù)處理,通信、控制、安全等功能。其中,PL(Programmable Logic,可編程邏輯)部分扮演著重要的角色,可通過編程將其定制為不同的硬件設(shè)備和接口,以滿足各種應(yīng)用需求。
本文將重點(diǎn)介紹Zynq PL中斷在Linux中的應(yīng)用,并探討其實(shí)現(xiàn)方法和技術(shù)難點(diǎn)。
一、Linux中斷機(jī)制簡(jiǎn)介
在Linux系統(tǒng)中,中斷機(jī)制是實(shí)現(xiàn)各種硬件設(shè)備和外設(shè)與系統(tǒng)的交互的重要手段。中斷是指硬件設(shè)備向系統(tǒng)發(fā)出的異步事件通知,例如按鍵按下、定時(shí)器超時(shí)等。當(dāng)硬件設(shè)備觸發(fā)中斷時(shí),系統(tǒng)將中斷事件通知到相應(yīng)的中斷處理程序中進(jìn)行處理。中斷處理程序會(huì)暫時(shí)中止當(dāng)前正在執(zhí)行的任務(wù),執(zhí)行中斷處理程序,處理完中斷后,繼續(xù)執(zhí)行之前的任務(wù)。
對(duì)于大多數(shù)外設(shè),如定時(shí)器、串口等,中斷處理程序的編寫是必須的。在Linux內(nèi)核中,中斷處理程序是通過IRQ(Interrupt ReQuest)機(jī)制來注冊(cè)的。IRQ號(hào)是中斷號(hào)的一個(gè)別名,主要用于將中斷響應(yīng)程序綁定到特定的硬件中斷等操作。IRQ號(hào)可以在啟動(dòng)時(shí)從設(shè)備樹中獲取,也可以通過內(nèi)核API(Application Programming Interface)動(dòng)態(tài)分配。
二、Zynq中斷架構(gòu)
Zynq SoC的PL部分是一個(gè)FPGA芯片,可重新編程以滿足不同的硬件需求。在Zynq SoC中,PL通過PS(Processing System,處理器系統(tǒng))接口與處理器核之間進(jìn)行數(shù)據(jù)交換。其中,PL端與PS端的中斷處理非常重要。
PL中斷可以由多種外設(shè)觸發(fā),例如GPIO(General Purpose Input Output)、SPI(Serial Peripheral Interface)、I2C(Inter-Integrated Circuit)等,處理器核可以通過訪問中斷控制器來注冊(cè)和注銷PL中斷,使用相應(yīng)的中斷處理程序響應(yīng)外設(shè)中斷。
在Zynq SoC中,處理器核和可編程邏輯之間的中斷交互涉及到兩個(gè)主要的IP(Intellectual Property)核心,MSC(Muli-standard Communication Co-processor)和AXI(Advanced eXtensible Interface)Interrupt Controller。MSC是一個(gè)可編程邏輯收發(fā)器,可用于支持高速通信協(xié)議,例如PCI Express、SATA等,AXI Interrupt Controller則是管理PL外設(shè)中斷的核心。
MSC中斷響應(yīng):
當(dāng)MSC接收到一個(gè)來自PL外設(shè)的中斷請(qǐng)求時(shí),它會(huì)將該請(qǐng)求轉(zhuǎn)發(fā)給AXI Interrupt Controller,該控制器將處理器核分配給與中斷請(qǐng)求相關(guān)聯(lián)的中斷服務(wù)程序。在中斷服務(wù)程序執(zhí)行期間,AXI Interrupt Controller將暫停來自PL的外設(shè)的中斷請(qǐng)求,以保證中斷服務(wù)程序能夠在執(zhí)行期間訪問系統(tǒng)資源。中斷處理程序完成后,AXI Interrupt Controller將恢復(fù)來自PL外設(shè)的中斷請(qǐng)求。
AXI Interrupt Controller:
AXI Interrupt Controller通過AXI總線連接到PS和PL之間的連接器,用于實(shí)現(xiàn)中斷請(qǐng)求的仲裁和分配,以及中斷優(yōu)先級(jí)的管理。該控制器可以為每個(gè)外設(shè)分配一個(gè)唯一的中斷號(hào),以避免中斷信號(hào)沖突。此外,AXI Interrupt Controller還支持動(dòng)態(tài)中斷控制,可以在運(yùn)行時(shí)添加和刪除中斷服務(wù)程序。
三、Zynq PL中斷在Linux中的應(yīng)用
在Linux系統(tǒng)中,PL中斷處理程序可以快速響應(yīng)硬件事件,以提高系統(tǒng)的響應(yīng)性和工作效率。在Zynq SoC中,通過AXI Interrupt Controller可以為PL外設(shè)分配唯一的中斷號(hào),方便編程人員編寫中斷處理程序。
在使用PL中斷時(shí),需要在設(shè)備樹中添加相應(yīng)的中斷控制器,例如AXI Interrupt Controller,以及與之對(duì)應(yīng)的中斷路徑。中斷路徑由設(shè)備的名稱和中斷號(hào)構(gòu)成。當(dāng)中斷請(qǐng)求產(chǎn)生時(shí),系統(tǒng)將從設(shè)備樹中獲取相應(yīng)的中斷路徑和號(hào)碼,并將它們傳遞給中斷處理程序。
使用中斷的另一個(gè)優(yōu)點(diǎn)是增強(qiáng)了系統(tǒng)的可靠性和穩(wěn)定性。由于中斷機(jī)制能夠快速響應(yīng)硬件事件,防止系統(tǒng)出現(xiàn)死鎖和資源占用。因此,開發(fā)人員應(yīng)該根據(jù)具體應(yīng)用需求合理地設(shè)計(jì)和管理中斷,以提高系統(tǒng)的可靠性和穩(wěn)定性。
四、小結(jié)
Zynq SoC作為更SoC方案,為嵌入式系統(tǒng)帶來了很多創(chuàng)新。使用PL中斷可以提高系統(tǒng)的響應(yīng)性和工作效率,同時(shí)也增強(qiáng)了嵌入式系統(tǒng)的可靠性和穩(wěn)定性。本文介紹了Zynq PL中斷在Linux中的應(yīng)用,以及在實(shí)現(xiàn)中需注意的技術(shù)難點(diǎn)。希望本文能對(duì)有志于從事嵌入式系統(tǒng)設(shè)計(jì)和開發(fā)的人員有所幫助。
相關(guān)問題拓展閱讀:
- 如何學(xué)習(xí)zynq以太網(wǎng)控制器及協(xié)議棧
如何學(xué)習(xí)zynq以太網(wǎng)控制器及協(xié)議棧
第 9 章 ZedBoard 入門
前面大家已經(jīng)對(duì) ZYNQ 架構(gòu)以及相應(yīng)的開發(fā)工具有一定的認(rèn)識(shí),接下來我們將帶領(lǐng)大家來一起 體驗(yàn) ZYNQ,體驗(yàn)軟硬件協(xié)同設(shè)計(jì)的魅力。由于時(shí)間的關(guān)系,下面的一些實(shí)驗(yàn)(本章及后續(xù)章節(jié)的實(shí)驗(yàn)) 可能有不完善的地方,歡迎讀者向我們反饋。 9.1 跑馬燈 本實(shí)驗(yàn)將指導(dǎo)大家使用 Vivado 集成設(shè)計(jì)環(huán)境創(chuàng)建本書的之一個(gè) Zynq 設(shè)計(jì)。這里,我們使用跑馬燈 這個(gè)入門實(shí)驗(yàn)來向大家介紹 Vivado IDE 的 IP Integrator 環(huán)境,并在 Zedboard 上實(shí)現(xiàn)這個(gè)簡(jiǎn)單的 Zynq 嵌 入式系統(tǒng)。之后,我們將會(huì)使用 SDK 創(chuàng)建一個(gè)簡(jiǎn)單的軟件應(yīng)用程序,并下載到 Zynq 的 ARM 處理器中, 對(duì)在 PL 端實(shí)現(xiàn)的硬件進(jìn)行控制。本實(shí)驗(yàn)分為三個(gè)小節(jié)來向大家進(jìn)行介紹: ? 之一節(jié)我們將使用 Vivado IDE 創(chuàng)建一個(gè)工程。 ? 在之一節(jié)的基礎(chǔ)上,第二節(jié)我們將繼續(xù)構(gòu)建一個(gè) Zynq 嵌入式處理系統(tǒng),并將完成后的硬件導(dǎo)入 到 SDK 中進(jìn)行軟件設(shè)計(jì)。 ? 最后一節(jié)我們將使用 SDK 編寫 ARM 測(cè)試應(yīng)用程序, 并下載到 ZedBoard 上進(jìn)行調(diào)試。 實(shí)驗(yàn)環(huán)境:Windows 7 x64 操作系統(tǒng), Vivado2023.4,SDK 2023.4
9.1.1 Vivado 工程創(chuàng)建
1) 雙擊桌面 Vivado 快捷方式 ,或者瀏覽 Start > All Programes > Xilinx Design Tools > Vivado
2023.4 > Vivado 2023.4 來啟動(dòng) Vivado. 2) 當(dāng) Vivado 啟動(dòng)后,可以看到圖 9-1 的 Getting Started 頁(yè)面。
圖 9- 1 Vivado 開始界面
3) 選擇 Create New Project 選項(xiàng),圖 9-2 所示的 New Project 向?qū)?huì)打開,點(diǎn)擊 Next。
圖 9- 2 New Project 對(duì)話框 4) 在 Project Name 對(duì)話框中早賣,輸入 first_zynq_design 作為 Project name, 選擇 C:/XUP/Zed 作為 Project location,確保 Create project subdirectory 被勾選上,如圖 9-3,點(diǎn)擊 Next。
圖 9- 3 Project Name 對(duì)話框 5) 在 Project Type 對(duì)話框中,選擇 RTL Project,確保 Do not specify sources at this time 選項(xiàng)沒有 被勾選,如圖 9-4,點(diǎn)擊 Next。
圖 9- 4 Project Type 對(duì)話框 6) 在 Add Source 對(duì)話框中, 選擇 Verilog 作為目標(biāo)語(yǔ)言,如果你拍睜李對(duì) VHDL 熟悉的話, 你也可以 選擇 VHDL,如果這里你忘記了選擇,在工程創(chuàng)建完成后,也可以在工程設(shè)置中選擇你熟悉的 HDL 語(yǔ)言。如果你已經(jīng)有了源文件,在這里就可以選擇 Add file 或者 Add directory 進(jìn)行添加, 由于我們沒有任何的源文件, 所以這里我們直接點(diǎn)擊 Next 即可,如圖 9-5。
圖 9- 5 添加源文件 7) 在 Add Existing IP 對(duì)話框中,點(diǎn)擊 Next。 8) 在 Add Constraints 對(duì)話框中,點(diǎn)擊 Next。 9) 在 Default Part 對(duì)襲遲話框中,在 Specify 框中選擇 Boards 選項(xiàng),在下面的 Board 列表中選擇 ZedBoard Zynq Evaluation and Development Kit,點(diǎn)擊 Next,如圖 9-6。
圖 9- 6 芯片選擇 10) 在 New Project Summary 對(duì)話框中,點(diǎn)解 Finish 完成工程創(chuàng)建,至此,我們已經(jīng)使用 Vivado 創(chuàng)建了一個(gè) Zynq 設(shè)計(jì)的工程框架,圖 9-7 為 Vivado 的工程界面,在第四章我們已經(jīng)對(duì)該界面 進(jìn)行過介紹,如果還不熟悉的讀者再回到前面復(fù)習(xí)一下。下面我將使用 Flow Navigator 的 IP Integrator 功能完成第二節(jié)的嵌入式系統(tǒng)設(shè)計(jì)。
圖 9- 7 Vivado 工程界面
9.1.2 在 Vivado 中創(chuàng)建 Zynq 嵌入式系統(tǒng) 這一節(jié)我們將創(chuàng)建一個(gè)簡(jiǎn)單的 Zynq 嵌入式系統(tǒng),該系統(tǒng)使用 Zynq PL 部分實(shí)現(xiàn)一個(gè)通用 I/O 控制 器 (GPIO),控制器同 ZedBoard 上的 8 個(gè) LED 相連接,并且通過 AXI 總線連接到 PS 端,這樣我們就可 以通過將要在第三小節(jié)中實(shí)現(xiàn)的 ARM 應(yīng)用程序來對(duì) LED 進(jìn)行控制。系統(tǒng)結(jié)構(gòu)圖如圖 9-8 所示。
說到學(xué)習(xí)ZYNQ+SOC+Linux開發(fā),我認(rèn)為主要應(yīng)該細(xì)分為lian兩大點(diǎn):zynq,soc合為一個(gè)點(diǎn),linux為一個(gè)點(diǎn)。下面我就給大家介紹學(xué)習(xí)的流程和路線。
一,學(xué)習(xí)zynq+soc的FPGA開發(fā)部分和片上ARM核的寄存器,裸奔應(yīng)用開發(fā),我推薦大家收閱讀文檔《ZYNQ+SOC修煉秘籍-最全面的pdf》,下面我給大家貼上下載地址。
CSDN下載鏈接:
二,如果各位能按部就班的閱讀并自己動(dòng)手編寫測(cè)試《ZYNQ+SOC修煉秘籍-最全面的pdf》里面的內(nèi)容,我相信大家對(duì)于zynq的硬件部分已經(jīng)足夠了解,并且能夠?qū)懗龌贔PGA+ARM構(gòu)架的裸奔程序應(yīng)用了。
那么接下來,我們就應(yīng)該學(xué)習(xí)管如何在zynq平臺(tái)上搭建Linux操作系統(tǒng)了。
(1)u-boot的編譯
我相信大家已經(jīng)肯定在網(wǎng)上搜索理解了很多關(guān)于u-boot編譯的資料,所以在此睜稿我給大家提供的shi是如何解決編譯過程中遇到的一些問題,將自己在銀兆項(xiàng)目實(shí)踐中的記錄分享給大家,具體請(qǐng)參考《zynq-u-boot編譯說明書》這個(gè)資料,下面為下載鏈接地址。
CSDN下載鏈接:
(2)kernel的編譯
眾所周知,kernel為L(zhǎng)inux的內(nèi)核,這個(gè)是最最核心的部分,在此不做過多的贅述,給大家分享項(xiàng)目中的記錄吧。具體參考《zynq-kernel編譯說明書》這個(gè)資料。
CSDN下載鏈接:
(3)設(shè)備樹的編譯
不知道大家是否知道,Linux上的驅(qū)動(dòng)是怎么和硬件掛鉤的嗎?沒錯(cuò),就是使用的設(shè)備樹,話不多說,請(qǐng)參照《zynq設(shè)備樹配置說明》這個(gè)資料,下面為下載鏈接地址。
CSDN下載鏈接:
(4)文件系統(tǒng)的搭載
在完成上述三步的操作之后,需要一個(gè)完整的Linux系統(tǒng)我們就還需要搭載上文件系統(tǒng),國(guó)外很多人喜歡利用buildroot自己及定制文件系統(tǒng),但是對(duì)于初學(xué)者我的建議是先使用已經(jīng)完善的文件系統(tǒng),具體的做法請(qǐng)參照《zynq文件系統(tǒng)掛載》這個(gè)資料,下面為下載鏈接地址。
CSDN下載鏈接:
三,在完成了u-boot的編譯,kernel的編譯,設(shè)備樹的編譯,文件系統(tǒng)的編譯掛載后,一個(gè)完整的Linux系統(tǒng)就搭建成功了。不過我相信在過程中肯定會(huì)遇到或多或少的各種各樣的問題,在此本人為大家分享一些在過程中遇到的問題以及解決方法,水平有限望大神勿噴。
(1)在運(yùn)行掛載文件系統(tǒng)的時(shí)候本人就曾經(jīng)遇到,系統(tǒng)默認(rèn)掛載的是ramdisk,所以無(wú)法掛載我搭建在SD卡上的ext4的文件系統(tǒng),請(qǐng)參考《zynq不加載悉搏孝ramdisk的方法》資料里的解決方法,下面為資料xixi下載鏈接。
CSDN下載鏈接:
(2)如何解決板子每次上電都動(dòng)態(tài)分配ip,導(dǎo)致用戶無(wú)法準(zhǔn)確知道板子的ip呢?那就請(qǐng)參考《zynq_linux配置靜態(tài)和動(dòng)態(tài)ip的方法》這個(gè)資料里的內(nèi)容,下面為下載鏈接。
CSDN下載鏈接:
(3)配置好靜態(tài)ip后,那么肯定是kai’開始用用SSH連接板子,現(xiàn)在就讓我們來解決SSH連接的問題,請(qǐng)參考《zynq上的SSH無(wú)法鏈接問題》這個(gè)資料里的內(nèi)容,下面為下載鏈接。
CSDN下載鏈接:
(4)以上問題都解決了后,自然是想自己動(dòng)手編寫Linux下的驅(qū)動(dòng)咯。只有有了驅(qū)動(dòng)才能使得FPGA為L(zhǎng)inux所用,那么接下來給大家分享幾個(gè)編寫Linux下的axi dma驅(qū)動(dòng)的資料供大家參考。
《zynq字符設(shè)備驅(qū)動(dòng)代碼》
CSDN下載鏈接:
《zynq_linux字符驅(qū)動(dòng)之自動(dòng)創(chuàng)建設(shè)備節(jié)點(diǎn)》
CSDN下載鏈接:
《zynq上axi-dma作為字符設(shè)備的驅(qū)動(dòng)代碼》
CSDN下載鏈接:
《zynq_dma_device_tree說明文件》
CSDN下載鏈接:
四,以上介紹大部分均為本人在學(xué)習(xí),做項(xiàng)目時(shí)的總結(jié),在此分享給大家,希望對(duì)廣大的學(xué)習(xí)群體有所幫助,本人水平有限,在此希望各路大神們勿噴。接下來就靠大家自己努力加油了!
關(guān)于zynq pl 中斷 linux的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)服務(wù)器托管擁有成都T3+級(jí)標(biāo)準(zhǔn)機(jī)房資源,具備完善的安防設(shè)施、三線及BGP網(wǎng)絡(luò)接入帶寬達(dá)10T,機(jī)柜接入千兆交換機(jī),能夠有效保證服務(wù)器托管業(yè)務(wù)安全、可靠、穩(wěn)定、高效運(yùn)行;創(chuàng)新互聯(lián)專注于成都服務(wù)器托管租用十余年,得到成都等地區(qū)行業(yè)客戶的一致認(rèn)可。
文章題目:ZynqPL中斷在Linux上的應(yīng)用(zynqpl中斷l(xiāng)inux)
文章位置:http://www.dlmjj.cn/article/dpiddid.html


咨詢
建站咨詢
