0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

PYNQ學(xué)習(xí)案例——Zynq中斷應(yīng)用及編程思路

454398 ? 來(lái)源:CSDN 博主 ? 作者:Mculover666 ? 2020-12-20 12:12 ? 次閱讀

作者:Mculover666

在實(shí)際玩Zynq中斷之前,先扯一扯中斷這個(gè)神奇的東西~

實(shí)時(shí)性是一個(gè)嵌入式系統(tǒng)很重要的性能,實(shí)時(shí)性體現(xiàn)在一個(gè)系統(tǒng)對(duì)外部事件的響應(yīng)能力和處理能力上,而CPU對(duì)一個(gè)事件的響應(yīng)及處理主要依托于 —— 中斷。

通俗的來(lái)說(shuō),中斷的一個(gè)基本過(guò)程就是:當(dāng)一個(gè)事件發(fā)生時(shí)(比如按鍵按下),產(chǎn)生一個(gè)可以發(fā)送到CPU的中斷信號(hào)(上升沿或下降沿?zé)o所謂,是個(gè)信號(hào)就行),當(dāng)CPU接收到這個(gè)中斷信號(hào)后,對(duì)這個(gè)中斷信號(hào)所表示的事件進(jìn)行處理(跳轉(zhuǎn)去執(zhí)行中斷服務(wù)程序,對(duì)按鍵按下這個(gè)事件進(jìn)行處理)。

對(duì)這個(gè)基本過(guò)程抽象出來(lái)一個(gè)中斷系統(tǒng)模型如圖所示:

pIYBAF9uG8-AZ8x5AAA14JbL5GY860.png

在上圖中只是一個(gè)中斷信號(hào),那么當(dāng)這個(gè)系統(tǒng)中存在很多中斷信號(hào)時(shí),群龍無(wú)首,整個(gè)系統(tǒng)就會(huì)亂套,CPU會(huì)像一只無(wú)頭蒼蠅一樣到處去執(zhí)行中斷服務(wù)程序,結(jié)果可想而知,最后CPU肯定什么也干不了~

為了解決這個(gè)問(wèn)題,需要派一個(gè)領(lǐng)導(dǎo)去管理這些各種各樣的中斷,這個(gè)管理者就是 —— 中斷管理單元!所以,它只有一個(gè)功能 —— 管理這些中斷信號(hào)!比如使能與失能 —— 讓哪個(gè)中斷信號(hào)通過(guò)或者讓哪些信號(hào)不通過(guò);“優(yōu)先級(jí)” —— 誰(shuí)先通過(guò)誰(shuí)后通過(guò),改進(jìn)模型如下圖:

o4YBAF9uG9GAYuULAABuv0SDfA8527.png

這樣一來(lái),CPU永遠(yuǎn)只能接收到一個(gè)中斷信號(hào),所以CPU可以很舒服的去做他該做的事情了~

總結(jié)一下中斷的編程思路:

配置外設(shè)可以產(chǎn)生中斷信號(hào)

配置中斷管理單元,使能信號(hào)通過(guò),( 配置信號(hào)優(yōu)先級(jí) )

配置中斷服務(wù)程序 ,確保CPU接收到中斷信號(hào)可以及時(shí)處理

接下來(lái)依托這個(gè)抽象的中斷模型玩一玩Zynq的中斷,具體化這個(gè)模型~

1.實(shí)驗(yàn)?zāi)康?br /> 探索Zynq中PL->PS的中斷,按下按鍵產(chǎn)生一個(gè)中斷,這個(gè)中斷被通用中斷管理單元所處理,然后傳遞給Zynq PS,將變量值遞增然后將值顯示在led上。

pIYBAF9uG9KAflbCAACerzGidfo465.png

2.實(shí)驗(yàn)步驟
2.1.新建基于Pynq-Z2的工程
2.2.創(chuàng)建硬件塊設(shè)計(jì)
2.2.1.添加所用ip并自動(dòng)連線
添加兩個(gè)AXI_GPIOip核,一個(gè)連接板載4個(gè)按鈕,一個(gè)連接板載4個(gè)led

o4YBAF9uG9eAE7OjAAYZVKlzrQg500.png

2.2.2.配置AXI_GPIO使能中斷
這里因?yàn)?個(gè)按鍵是連接在axi_gpio_0上的,所以雙擊axi_gpio_0 ip核進(jìn)行配置,如圖,選擇使能中斷:

pIYBAF9uG9mANlpQAACryYB4UbM445.png

可以看到與未配置中斷的axi_gpio_1有區(qū)別:

o4YBAF9uG9uAfIeLAAB7KVkm6Aw280.png

2.2.2.配置Zynq PS系統(tǒng)接收中斷請(qǐng)求
在配置之前需要對(duì)Zynq中的中斷信號(hào)有個(gè)大致的了解,其中PS和PL之間的中斷信號(hào)如表所示:

pIYBAF9uG92ALQjVAAFFj6v43UM351.png

根據(jù)上圖,雙擊zynq ip核進(jìn)行配置,因?yàn)檫@里需要接收的按鍵中斷是從PL端到PS端的,首先選中Fabric Interrupts中斷組織,然后選中IRQ_F2P[15:0],使能16-bit的PL->PS共享中斷端口,以便于來(lái)自PL端的中斷可以連接到PS的中斷控制器上:

pIYBAF9uG9-AC_KNAAFA9H-88Lk806.png

2.2.3.連接AXI_GPIO的中斷請(qǐng)求和PS的中斷端口
手動(dòng)進(jìn)行連線:

pIYBAF9uG-SAUOknAAVpTgf4rjA222.png

2.3.驗(yàn)證設(shè)計(jì),創(chuàng)建HDL文件,生成Bitstream,導(dǎo)出硬件設(shè)計(jì)文件
至此,中斷信號(hào)的硬件數(shù)據(jù)通路構(gòu)建完成,接下來(lái)是軟件中配置中斷管理單元和中斷服務(wù)程序。

2.4.過(guò)渡到SDK上的軟件設(shè)計(jì)
2.4.1.Launch SDK

o4YBAF9uG-aADL51AAFz03DyxUI076.png

2.4.2.新建一個(gè)空的應(yīng)用工程

pIYBAF9uG-iAOfE8AAGVqZ6S9WM154.png

2.4.3.導(dǎo)入已有C文件
因?yàn)樵趯?shí)際項(xiàng)目中需要分工協(xié)作,所以這里選擇導(dǎo)入隨書附帶的C文件:

o4YBAF9uG-uAD1yBAAG-p3GYF7E430.png

pIYBAF9uG-yAPIMDAACgIOXJMbU840.png

2.4.4.配置運(yùn)行設(shè)置,板級(jí)驗(yàn)證

o4YBAF9uG-6AQSK0AAFEpbKxXJE092.png

運(yùn)行即可觀察到現(xiàn)象。

2.添加定時(shí)器中斷
2.1.實(shí)驗(yàn)?zāi)康?br /> 在已有一個(gè)按鍵中斷的基礎(chǔ)上,添加一個(gè)定時(shí)器中斷,掌握添加多個(gè)中斷到PS的方法。

2.2.實(shí)驗(yàn)步驟
2.2.1.添加AXI Timer IP核并自動(dòng)連線
添加時(shí)搜索"timer",選擇AXI Timer添加,然后點(diǎn)擊自動(dòng)連線,結(jié)果如圖:

o4YBAF9uG_CAQOh4AADJLh0Bd40553.png

2.2.2.連接AXI Timer的中斷到PS端
因?yàn)镻S端的共享中斷接口已經(jīng)連接了一個(gè)AXI GPIO中斷,所以如果要繼續(xù)連接一個(gè)中斷信號(hào),要通過(guò)一個(gè)另外的ip核 —— Concat,在添加ip核時(shí)搜索添加,如圖所示,將之前AXI GPIO 到ps的中斷斷開,然后將concat的dout信號(hào)連至PS端的IRQ_F2P[0:0],然后將AXI GPIO的中斷信號(hào)連接至In0,將定時(shí)器的中斷信號(hào)連接至In1,這樣就完成了多個(gè)中斷信號(hào)的共享。

pIYBAF9uG_GAan5WAABiZlsRGQE205.png

生成Bitstream,導(dǎo)出硬件文件

編輯:hfy

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式系統(tǒng)
    +關(guān)注

    關(guān)注

    41

    文章

    3531

    瀏覽量

    128980
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10769

    瀏覽量

    210426
  • Zynq
    +關(guān)注

    關(guān)注

    9

    文章

    604

    瀏覽量

    47072
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    通過(guò)Python 執(zhí)行復(fù)雜的PYNQ 框架方案

    作者:Giulio Corradi 博士 賽靈思? PYNQ 框架能在 Zynq? 產(chǎn)品系列中實(shí)現(xiàn)對(duì)Python 語(yǔ)言及運(yùn)行時(shí)的全面支持與集成。直接在 Zynq SoC 架構(gòu)上利用 Python
    的頭像 發(fā)表于 12-22 15:37 ?4008次閱讀
    通過(guò)Python 執(zhí)行復(fù)雜的<b class='flag-5'>PYNQ</b> 框架方案

    PYNQ項(xiàng)目——Pynq開發(fā)板啟動(dòng)實(shí)驗(yàn)

    Python降低Zynq嵌入式系統(tǒng)開發(fā)門檻,有豐富的組件: 可編程邏輯的控制 Jupyter Notebook接口 預(yù)安裝的Python庫(kù) 網(wǎng)絡(luò)/USB/UART接口 要使用Pynq,需要Py
    的頭像 發(fā)表于 12-23 10:58 ?3667次閱讀

    PYNQ案例(一):ZYNQ的PL與PS開發(fā)

    上一期的學(xué)習(xí)中,我們系統(tǒng)性地介紹了PYNQZYNQ地區(qū)別與聯(lián)系。PYNQ = Python + ZYNQ,即將
    的頭像 發(fā)表于 12-25 14:11 ?7767次閱讀

    PYNQ案例(二):ZYNQPYNQ的區(qū)別與聯(lián)系

    方法,軟件編程模式與全功能的標(biāo)準(zhǔn)ARM處理SoC毫無(wú)二致。 與之相關(guān)和不同的是,PYNQ = Python + ZYNQ,即將ZYNQ部分功能的Python化,直接調(diào)用Python庫(kù)和
    的頭像 發(fā)表于 12-25 14:15 ?5796次閱讀

    基于PYNQ-Z2開發(fā)板的PYNQ開源項(xiàng)目

    PYNQ項(xiàng)目是一個(gè)新的開源框架,使嵌入式編程人員在無(wú)需設(shè)計(jì)可編程邏輯電路的情況下充分發(fā)揮Xilinx Zynq All Programmable SoC(APSoC)的功能。 與常規(guī)方
    的頭像 發(fā)表于 01-02 09:02 ?6305次閱讀
    基于<b class='flag-5'>PYNQ</b>-Z2開發(fā)板的<b class='flag-5'>PYNQ</b>開源項(xiàng)目

    如何為自己的ZYNQ板卡創(chuàng)建Pynq鏡像

    Xilinx Pynq 框架允許我們將 Python 和可編程邏輯結(jié)合起來(lái)。讓我們看看如何為自己的ZYNQ板卡創(chuàng)建 Pynq 鏡像。
    發(fā)表于 08-07 09:26 ?1606次閱讀
    如何為自己的<b class='flag-5'>ZYNQ</b>板卡創(chuàng)建<b class='flag-5'>Pynq</b>鏡像

    賽靈思PYNQ-Z2開發(fā)板免費(fèi)試用

    PYNQ-Z2 開發(fā)板支持 PYNQ 項(xiàng)目,這是一個(gè)新的開源框架,使嵌入式編程人員能夠在無(wú)需設(shè)計(jì)可編程邏輯電路的情況下即可充分發(fā)揮 Xilinx Z
    發(fā)表于 12-05 15:29

    PYNQ-Z2申請(qǐng)】基于pynq的語(yǔ)音識(shí)別和新聞報(bào)道系統(tǒng)

    項(xiàng)目名稱:基于pynq的語(yǔ)音識(shí)別和新聞報(bào)道系統(tǒng)試用計(jì)劃:申請(qǐng)理由本人在Zynq如那件無(wú)線電方向有三年多的學(xué)習(xí)和開發(fā)經(jīng)驗(yàn),曾設(shè)計(jì)過(guò)基于ZYNQ 7020的頻譜監(jiān)測(cè)和室內(nèi)定位平臺(tái),對(duì)DMA
    發(fā)表于 12-19 11:38

    PYNQ-Z2試用體驗(yàn)】玩轉(zhuǎn)PYNQ系列:一、板卡簡(jiǎn)介與資源整理

    PYNQ-Z2試用活動(dòng)不期而遇,亦是緣分。 接下來(lái)進(jìn)入正題。一、PYNQ簡(jiǎn)介 PYNQ 是一個(gè)開源框架,目標(biāo)是使嵌入式編程人員能夠在無(wú)需設(shè)計(jì)可編程
    發(fā)表于 12-31 10:53

    什么是PYNQ?

    什么是PYNQ?PYNQ就是通過(guò)Python語(yǔ)言直接對(duì)FPGA進(jìn)行編程嗎?PYNQPYNQ-Z2是一回事嗎?
    發(fā)表于 02-24 07:02

    ZYNQ學(xué)習(xí)筆記分享

    通過(guò)MIO(Multiuse I/O)模塊對(duì)器件的引腳做觀測(cè)(input)和控制(output)。ZYNQ的PS端上的GPIO也可以通過(guò)EMIO(Extra MIO)模塊對(duì)PL端的IP以及引腳實(shí)現(xiàn)上述操作。GPIO可以獨(dú)立且動(dòng)態(tài)地編程,作為輸入/輸出以及
    發(fā)表于 02-08 07:30

    PYNQ 基于Zynq架構(gòu)添加了對(duì)python的支持

    中集成了ARM處理器和FPGA可編程邏輯器件,旨在為視頻監(jiān)視、汽車駕駛員輔助以及工廠自動(dòng)化等高端嵌入式應(yīng)用提供所需的處理與計(jì)算性能水平。PYNQ希望能夠借助python語(yǔ)言本身易用易學(xué)、擴(kuò)展庫(kù)多而全、社區(qū)活躍貢獻(xiàn)度高等特性,有效降低Zy
    發(fā)表于 07-14 09:05 ?8788次閱讀
    <b class='flag-5'>PYNQ</b> 基于<b class='flag-5'>Zynq</b>架構(gòu)添加了對(duì)python的支持

    digilent支持Python編程Zynq開發(fā)板介紹

    PYNQ-Z1開發(fā)板支持PYNQ項(xiàng)目,這是一個(gè)新的開源框架,使嵌入式編程人員能夠在無(wú)需設(shè)計(jì)可編程邏輯電路的情況下即可充分發(fā)揮Xilinx Zynq
    的頭像 發(fā)表于 11-18 16:41 ?3450次閱讀
    digilent支持Python<b class='flag-5'>編程</b>的<b class='flag-5'>Zynq</b>開發(fā)板介紹

    米爾PYNQ開發(fā)板來(lái)了

    PYNQ全稱為Python Productivity for Zynq,即在Zynq全可編程ARM&FPGA融合處理架構(gòu)的基礎(chǔ)上,添加了對(duì)Python的支持。
    發(fā)表于 03-26 10:15 ?912次閱讀

    使用Tensil和PYNQPYNQ Z1 FPGA板上運(yùn)行機(jī)器學(xué)習(xí)

    電子發(fā)燒友網(wǎng)站提供《使用Tensil和PYNQPYNQ Z1 FPGA板上運(yùn)行機(jī)器學(xué)習(xí).zip》資料免費(fèi)下載
    發(fā)表于 06-14 11:44 ?0次下載
    使用Tensil和<b class='flag-5'>PYNQ</b>在<b class='flag-5'>PYNQ</b> Z1 FPGA板上運(yùn)行機(jī)器<b class='flag-5'>學(xué)習(xí)</b>