官方文檔,PG144
可以學如何從block design IP ?中看PG144文檔。
邏輯IP,即在ZYNQ FPGA里面能實現的IP。AXI GPIO,提供了通用的輸入輸出接口到AXI接口。它是一個軟核的IP,被設計來連接AXI4-LITE接口。
PROCESS SYSTEM(PS) 的 I/O PERIPHERALS (外設) 的 GPIO接口 是硬核
而 (IP) AXI-GPIO是一個軟核的GPIO
硬核:芯片里面有這樣的電路
軟核:芯片里邊實際上是沒有這樣的電路,是通過FPGA的邏輯去搭出來的,這樣實現具有一定功能的電路成為軟核
軟核GPIO與PS部分有接口,為AXI接口
本次用一下GP接口
通過調用AXI-GPIO核,使用中斷機制,實現底板上PL端按鍵控制核心板上PS端LED;
存儲器映射:讀操作寫操作,執行操作的同時都給一個對應的地址。存儲器每一個存儲空間都有一個地址。
通過使能或關閉使能 三態緩沖器來對輸入,輸出進行動態配置(3-state buffer可以決定I/O是作為輸出還是作為輸入)。
每一個通道可以通過配置來產生中斷,如果AXI GPIO IP核的輸入引腳的電平狀態發生改變,就可以產生一個中斷信號,不管是從高電平變成低電平,還是低電平變成高電平(0到1,或者1到0 稱為一個轉換)
GPIO_T:當GPIO要控制LED時,為輸出,其為0.當GPIO要控制KEY時,為輸入,其為1.
當引腳的信號發生改變,就會產生中斷(如果有勾選使用的話)
復位:低電平有效
s_axi_*: *表示一組信號
中斷:高電平有效,電平敏感類型信號
GIER全局中斷(總開關),IP_IER(子開關),都打開才能進行中斷。中斷狀態寄存器,可以讀取中斷,也可以清除中斷
使用中斷的話,對於輸入部分
1.賦值為1設為輸入
2.打開中斷
3.讀取數據,然后清除中斷狀態寄存器,才能方便下次去檢測中斷的產生。
不使用中斷的話,對於輸入部分
1.設為輸入
2.直接讀取數據
對於輸出
1.設為輸出
2.王寄存器里寫數據
DEFAULT OUTPUT VALUE:作為輸出時的值
DEFAULT TRI STATE VALUE :可看到默認的時候是全部設置為輸入了
在輸入模式下可以使用中斷
PS7_0_AXI_PERIPH不需要添加,會自動幫我們添加 。管理並指揮所連接的AXI接口之間的通信,可以實現一對多,多對1,多對多的AXI接口連接。
本次之中只有一個AXI IP,比較簡單。如果有多個,就需要 PS7_0_AXI_PERIPH 來指揮連接,幫助我們主器件跟多個IP進行仲裁,管理。
從PL到PS的中斷
完成頂層文件自動幫我們添加3態緩沖器。
這是我們在PL里面使用FPGA資源所實現的軟核GPIO
可以點開DOCUMENT在官方看一系列例子
有PS說明是PS端的GPIO
這個才是AXI GPIO所需要的頭文件
每個外設都有自己的終端號,AXI GPIO的中斷是來自PL的中斷,是PL到PS的中斷
包含了PS到PL的中斷,也包含PL到PS的中斷
從PL到PS的共有16位中斷,本次只用了1個,即中斷號61 IRQ_F2P F:FPGA P:PS
直接調用頭文件里的初始化函數,指針類型所以&。也可以核PS GPIO一樣分別調用
打開AXI_GPIO IP的中斷之后搬到后面去了
使用最高位為輸入的話是 0X8000_0000; 用的最低位 所以0X0000_0001 1表示輸入
打開通道的中斷使能信號,2部分:包括通道中斷使能信號,全局中斷使能信號
打開通道中信號對應的使能信號 MASK=0000_0001 1表示打開
此處需要 &AXI_GPIO,為什么結合下面的想吧。
設置中斷的優先級核觸發類型給指定的中斷源
打開AXI_GPIO IP的中斷使能 在之前需要加 &,此處不用。因為此處參數是通過函數傳遞進來的,傳遞進來的時候就已經是一個指針類型的變量,相當於一個子函數的變量。二下面圖中不需要&是因為這邊是一個全局變量,含義不一樣了
按一下打印兩次中斷信息,led松開就滅
因為按下的時候電平由高變低,松開由低變高,有兩次變化的情況。所以檢測到兩次中斷
當檢測到中斷的時候,需要把對應的數據讀出來,從而判斷與AXI GPIO相連的信號的電平狀態。
在代碼中我們並沒有去讀這個數據
進行修改。按鍵按下,這個值為0
再進行修改
第一次LED賦值為0之后,並沒有把這個0寫到PS 端的 GPIO上,所以導致第一次按下按鍵的時候它的值沒有改變。為了解決這個問題,先把LED的值先寫到 PS GPIO里。