ZYNQ筆記(四):AXI GPIO

版本:Vivado2020.2(Vitis)

任務:使用 AXI GPIO IP 核實現按鍵 KEY 控制 LED 亮滅(兩個都在PL端)

一、介紹

????????AXI GPIO (Advanced eXtensible Interface General Purpose Input/Output) 是 Xilinx 提供的一個可配置的通用輸入輸出 IP 核(通過 PL 資源實現的 GPIO,不同于 GPIO (E)MIO 是硬件固有的),用于在基于 AXI 總線的系統中實現 GPIO 功能。

主要特性:

  1. 雙通道設計:通常提供兩個獨立的GPIO通道(Channel 1和Channel 2)

  2. 可配置數據寬度:每個通道的數據寬度可獨立配置(1-32位)

  3. 輸入/輸出方向:每個位可獨立配置為輸入或輸出

  4. 中斷支持:可配置中斷生成功能

二、硬件設計

????????(1)配置ZYNQ 需要注意 AXI GPIO 使用了 AXI協議接口,所以 AXI接口、PL端時鐘接口、復位接口都需要保留,此外的一些配置如Bank電壓、UART串口配置(用于debug)、去掉未使用端口等等不再贅述。注意雖然使用了PL端按鍵,因為是通過AXI GPIO實現的不需要配置EMIO。

????????(2)KEY 和 LED 都單獨用一個 AXI GPIO IP(也可以只用一個,只不過分開方便區分),兩者配置相同以 KEY 為例配置界面如圖所示:

1.后面通過軟件設置io的輸入輸出方向(不勾選All In/Outputs)

2.各只用了1個引腳,故設置1通道(不勾選Enable Dual Channel)、位寬1位(GPIO Width?)

3.沒有使用中斷(不勾選Enable Interruput)

? ? ? ?(3)IP都配置好后點擊上面的自動運行和連接,同時會自動補全其他的所需的IP

????????(4)最后整體 bd 設計部分如圖所示:設計檢查、Generate Output Products、 Create HDL Wrapper、管腳約束、Gnerate Bitstream、Export Hardware(包含比特流文件)、啟動Vitis

三、軟件設計

? ? ? ? AXI GPIO 軟件設計相對來說比 MIO、EMIO簡單一點,因為是PL端資源實現,輸出直接通過拉高引腳電平和清零實現的,不過配置細節上還是有一些區別

? ? ? ? 此外AXI GPIO器件ID需要與硬件設計相對應,可以CTRL+左鍵器件ID跳轉到 xparameters.h 查看器件對應情況(或者直接CTRL+左鍵 xparameters.h 再去翻)

#include "stdio.h"
#include "xil_printf.h"
#include "xparameters.h"
#include "xgpio.h"
#include "sleep.h"//AXI GPIO是軟核的gpio所以不用定義管腳,是通過所在通道和掩碼來確定控制AXI GPIO哪一位的,通過軟件進行置位輸出與讀取//======================用戶自定義宏======================//#define KEY_AXI_GPIO_ID  	XPAR_GPIO_0_DEVICE_ID	//宏定義KEY AXI GPIO 器件ID
#define KEY_CHANNEL  		1						//宏定義KEY所在的axi gpio通道
#define KEY_MASK            0x01   				    //宏定義KEY所在通道掩碼(用哪位就置0,這里掩碼為了直觀取反了,這里表示啟用第0位)#define LED_AXI_GPIO_ID  	XPAR_GPIO_1_DEVICE_ID   //宏定義LED AXI GPIO 器件ID
#define LED_CHANNEL  		1						//宏定義LED所在的axi gpio通道
#define LED_MASK            0x01   					//宏定義LED所在通道掩碼(用哪位就置0,這里掩碼為了直觀取反了,這里表示啟用第0位)//======================實例化======================//XGpio LED_AXI_GPIO;				//定義LED AXI GPIO驅動實例
XGpio KEY_AXI_GPIO;				//定義KEY AXI GPIO驅動實例//======================函數聲明======================//static int  AXI_Gpio_Init();    //聲明AXI GPIO初始化函數//======================主函數======================//
int main()
{print("AXI GPIO Test\r\n");AXI_Gpio_Init();while(1){if (XGpio_DiscreteRead(&KEY_AXI_GPIO, KEY_CHANNEL)) //如果按鍵按下(讀取鍵值){	//寫1XGpio_DiscreteWrite(&LED_AXI_GPIO, LED_CHANNEL, 0x01);}else{//清0XGpio_DiscreteClear(&LED_AXI_GPIO, LED_CHANNEL, 0x01);}}return 0;
}//======================AXI GPIO初始化函數======================//
int AXI_Gpio_Init()
{//初始化器件驅動XGpio_Initialize(&LED_AXI_GPIO, LED_AXI_GPIO_ID);XGpio_Initialize(&KEY_AXI_GPIO, KEY_AXI_GPIO_ID);//GPIO方向設置(不同于GPIO (E)MIO , AXI GPIO是 0輸出/1輸入)XGpio_SetDataDirection(&LED_AXI_GPIO, LED_CHANNEL, ~LED_MASK);XGpio_SetDataDirection(&KEY_AXI_GPIO, KEY_CHANNEL, KEY_MASK);return 0;
}

四、效果

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/75250.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/75250.shtml
英文地址,請注明出處:http://en.pswp.cn/web/75250.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CSP認證準備第二天-第36/37次CCF認證

第37次CCF認證-第三題 主要是間接賦值比較難。 自己編寫的代碼如下&#xff0c;但是有問題&#xff0c;沒有解決間接賦值的問題&#xff0c;可以參考一下deepseek的回答。 #include <iostream> #include <bits/stdc.h> using namespace std; long long n,x; char …

Kotlin與HttpClient編寫視頻爬蟲

想用Apache HttpClient庫和Kotlin語言寫一個視頻爬蟲。首先&#xff0c;我需要確定用戶的具體需求。視頻爬蟲通常涉及發送HTTP請求&#xff0c;解析網頁內容&#xff0c;提取視頻鏈接&#xff0c;然后下載視頻。可能需要處理不同的網站結構&#xff0c;甚至可能需要處理動態加載…

FFMEPG常見命令查詢

基本參數 表格1&#xff1a;主要參數 參數說明-i設定輸入流-f設定輸出格式(format) 高于后綴名-ss開始時間-t時間長度codec編解碼 表格2&#xff1a;音頻參數 參數說明-aframes設置要輸出的音頻幀數-f音頻幀深度-b:a音頻碼率-ar設定采樣率-ac設定聲音的Channel數-acodec設定…

Java-對比兩組對象找出發生變化的字段工具-支持枚舉映射-支持時間-支持顯示對應字段中文描述-嵌套list等場景

實體字段比較器&#xff08;對比兩組對象找出發生變化的字段工具類開發&#xff09; 支持枚舉映射 支持時間 支持顯示對應字段中文描述 支持嵌套list等場景 下載地址&#xff1a; Java-對比兩組對象找出發生變化的字段工具-支持枚舉映射-支持時間-支持顯示對應字段中文描述-嵌…

15. git push

基本概述 git push 的作用是&#xff1a;把本地分支的提交推送到遠程倉庫。推送分支需要滿足快進規則&#xff08;Fast-Forward&#xff09;&#xff0c;即遠程分支的最新提交必須是本地分支的直接祖先&#xff0c;這個是通過哈希值值進行判斷的。 基本用法 1.完整格式 git…

訓練數據清洗(文本/音頻/視頻)

多數據格式的清洗方法 以下是針對多數據格式清洗方法的系統性總結&#xff0c;結合Python代碼示例&#xff1a; 一、數據清洗方法總覽&#xff08;表格對比&#xff09; 數據類型核心挑戰關鍵步驟常用Python工具文本非結構化噪聲去噪→分詞→標準化→向量化NLTK, SpaCy, Jie…

Python標準庫json完全指南:高效處理JSON數據

一、json庫概述 JSON(JavaScript Object Notation)是一種輕量級的數據交換格式&#xff0c;Python的json模塊提供了JSON數據的編碼和解碼功能。該模塊可以將Python對象轉換為JSON字符串&#xff08;序列化&#xff09;&#xff0c;也可以將JSON字符串轉換為Python對象&#xf…

微軟推出首款量子計算芯片Majorana 1

全球首款拓撲架構量子芯片問世&#xff0c;2025年2月20日&#xff0c;經過近20年研究&#xff0c;微軟推出了首款量子計算芯片Majorana 1&#xff0c;其宣傳視頻如本文末尾所示。 微軟表示&#xff0c;開發Majorana 1需要創造一種全新的物質狀態&#xff0c;即所謂的“拓撲體”…

【QT】QT中的文件IO

QT中的文件IO 一、有關文件IO的類二、步驟1、定義QFile的對象,與要讀寫的文件綁定在一起2、打開文件3、讀寫文件1&#xff09;讀取文件2&#xff09;寫入文件 4、關閉文件5、示例代碼&#xff1a; 三、QString和QByteArray之間的轉換1、方法2、示例代碼&#xff1a; 四、QFileI…

Nginx 499 錯誤的原因及解決方法

Nginx 499 錯誤的原因及解決方法 原因 客戶端超時&#xff1a; 客戶端在等待服務器響應時超時&#xff0c;導致連接被關閉。 解決方法&#xff1a;優化服務端響應時間&#xff0c;或調大客戶端的連接超時時間。 服務端響應過慢&#xff1a; 后端服務處理請求時間過長。 解決方法…

Smith-Waterman 算法(C++實現)

本文實現Smith-Waterman 算法案例&#xff0c;用于局部序列比對。該算法是生物信息學中用于尋找兩個 DNA、RNA 或蛋白質序列之間最優局部比對的經典算法&#xff0c;廣泛應用于序列相似性分析和功能預測。 問題描述 給定兩個生物序列 seq1 和 seq2&#xff0c;如何找到它們的最…

安卓玩機工具-----安卓機型通用 無損備份與恢復數據的工具BackupToolkit 操作過程

常規安卓機型數據備份與恢復的方法及工具 安卓設備的數據備份與恢復是保護個人數據的重要手段之一。以下是幾種常用的方法和工具&#xff1a; 方法一&#xff1a;利用內置的云服務進行備份 許多安卓設備提供了內置的云服務&#xff0c;例如華為手機可以通過“華為云空間”來…

oracle 動態性能視圖

Oracle 數據庫中的 V$SQLAREA 是一個動態性能視圖&#xff08;Dynamic Performance View&#xff09;&#xff0c;用于記錄共享池&#xff08;Shared Pool&#xff09;中所有 SQL 語句的統計信息。每個 SQL 語句在共享池中存儲為一個游標&#xff08;Cursor&#xff09;&#x…

OceanBase V4.3.5 上線全文索引功能,讓數據檢索更高效

近日&#xff0c;OceanBase 4.3.5 BP1 版本正式推出了企業級全文索引功能。該版本在中文分詞、查詢效率及混合檢索能力上進行了全面提升。經過自然語言模式和布爾模式在不同場景下的對比測試&#xff0c;OceanBase 的全文索引性能明顯優于 MySQL。 點擊下載 OceanBase 社區版…

海康攝像頭AI報警、移動偵測報警等通過Ehome/ISUP協議上報到LiveNVR流媒體平臺時如何進行報警配置

海康攝像頭AI報警、移動偵測報警等通過Ehome/ISUP協議上報到LiveNVR流媒體平臺時如何進行報警配置 1、LiveNVR介紹2、如何配置海康攝像頭、錄像機通過Ehome/ISUP注冊到LiveNVR設備 EHOME 接入配置示例設備 ISUP 接入配置示例直播流接入類型 海康ISUP海康 ISUP 設備ID啟用保存 3…

golang gmp模型分析

思維導圖&#xff1a; 1. 發展過程 思維導圖&#xff1a; 在單機時代是沒有多線程、多進程、協程這些概念的。早期的操作系統都是順序執行 單進程的缺點有&#xff1a; 單一執行流程、計算機只能一個任務一個任務進行處理進程阻塞所帶來的CPU時間的浪費 處于對CPU資源的利用&…

Redis基礎指令(Windows)

1.cmd命令行啟動redis 直接cmd打開整個文件 1.1.啟動server 輸入指令&#xff1a; redis-server.exe redis.windows.conf 會進入serve端 1.2.啟動客戶端 &#xff01;&#xff01;重新打開一個cmd&#xff0c;方法和上面一樣&#xff01;&#xff01; 之后輸入 redis-…

vue:前端預覽 / chrome瀏覽器設置 / <iframe> 方法預覽 doc、pdf / vue-pdf 預覽pdf

一、本文目標 <iframe> 方法預覽 pdf 、word vue-pdf 預覽pdf 二、<iframe> 方法 2.1、iframe 方法預覽需要 瀏覽器 設置為&#xff1a; chrome&#xff1a;設置-隱私設置和安全性-網站設置-更多內容設置-PDF文檔 瀏覽器訪問&#xff1a; chrome://settings/co…

【C++游戲引擎開發】第11篇:GLFW、GLAD環境搭建與第一個三角形渲染

一、GLFW、GLAD安裝 1.1 vcpkg安裝相關庫 跨平臺C++包管理利器vcpkg完全指南 # 安裝GLFW vcpkg install glfw3# 安裝GLAD vcpkg install glad1.2 初始測試代碼 #include <glad/glad.h> #include <GLFW/glfw3.h> int main() {glfwInit();GLFWwindow* window = g…

西門子S7-1500與S7-200SMART通訊全攻略:從基礎配置到遠程IO集成

以下是一篇關于西門子S7-1500與S7-200SMART通訊的詳細教程&#xff0c;包含遠程IO模塊的配置方法&#xff0c;適用于工業自動化場景的博客發布&#xff1a; 西門子S7-1500與S7-200SMART通訊全攻略&#xff1a;從基礎配置到遠程IO集成 一、硬件與軟件準備 硬件設備 主站&#x…