芯片型號:XC7Z010-1CLG400C
Vivado版本:2016.1
點亮流水燈,共使用了三種方式:
(1)PS通過MIO點亮PS端LED
(2)PS通過EMIO點亮PL端LED
(3)PS通過AXI點亮PL端LED。
1. MIO與EMIO
首先來理清楚MIO與EMIO的關系。MIO是PS的I/O引腳,一共有54個,分為Bank0與Bank1,可以接許多外設比如UART、SPI或GPIO等,另外可以引腳復用。當我們想通過PS來訪問PL又不想浪費AXI總線時,就通過EMIO接口來訪問。在54個I/O中,有一些只能用于MIO,大部分可以用于MIO與EMIO,一些接口信號線只能通過EMIO訪問。
![](https://file.elecfans.com/web1/M00/C8/53/pIYBAF9t-1qAYLT0AAJsrNfKEo0921.png)
EMIO依然屬于PS,只是連接到了PL,再從PL輸出信號。
2. PS通過MIO點亮PS端LED
![](https://file.elecfans.com/web1/M00/C7/DE/o4YBAF9t-1yALSaBAABrc-rQfWo687.png)
從電路中看得很清楚,這兩個LED直接連接在MIO0和MIO13上,所以直接在這兩個端口輸出高低電平就可以控制燈閃爍了。
首先建立.bd文件,添加zynq的ip核,去掉PL的資源(包括PS-PL configuration——general——Enable Clock Resets中的FCLK_RESET0_N以及AXI None Secure Enablement——GP Master AXI Interface中的GP0以及Clock Configuration——PL Fabric Clocks中的FCLK_CLK0)。
在外設I/O中,打開UART1,對應MIO48、49口,打不打開都無所謂,打開調試用。此時在MIO中已經看到UART1已經分配了管腳,然后在GPIO里,打開MIO。
![](https://file.elecfans.com/web1/M00/C7/DE/o4YBAF9t-12AevhuAABOVqZFWc0002.png)
最后在DDR里,找到所用的DDR芯片,比如我用的是HA-125。這樣所有的平臺就搭好了。直接generate out products——create HDL wrapper——export Hardware——lanuch SDK。
進入SDK,建立工程。首先引頭文件xgpiops.h
對MIO0和MIO13,初始化引腳。
s32 XGpioPs_CfgInitialize(XGpioPs *InstancePtr, XGpioPs_Config *ConfigPtr, u32 EffectiveAddr);
這個函數初始化gpio,第一個參數需要一個XGpioPs的結構體指針,直接在函數開頭實例化就好了,結構體的組成在.h文件。第二個參數是一個XGpioPs_Config類型結構體指針,這個結構體的內容:
typedef struct { u16 DeviceId; /**< Unique ID of device */ u32 BaseAddr; /**< Register base address */ } XGpioPs_Config;
包括gpio分配的ID和基地址。第三個參數就是基地址。
如何獲得這些信息,首先ID的獲得,打開xparameter.h頭文件,里面定義了分配的各種資源的ID。
基地址就在配置信息查了,如何獲得gpio的配置信息:
首先實例化一個XGpioPs_Config類型的指針。使用XGpioPs_LookupConfig函數,它能夠在配置信息中找到對應ID的配置信息:
所以就很明確了:
xgpio_config = XGpioPs_LookupConfig(XPAR_PS7_GPIO_0_DEVICE_ID);//找分配的MIO配置信息(基地址) status = XGpioPs_CfgInitialize(&xgpio, xgpio_config,xgpio_config->BaseAddr);//初始化 if(status!=XST_SUCCESS)//初始化成功 return XST_FAILURE;
然后就是定義gpio口的屬性,包括輸入輸出和端口使能:
XGpioPs_SetDirectionPin(&xgpio, LED1, 1);//output XGpioPs_SetDirectionPin(&xgpio, LED2, 1);// XGpioPs_SetOutputEnablePin(&xgpio, LED1, 1);//enable XGpioPs_SetOutputEnablePin(&xgpio, LED2, 1);
再后面就在while(1)中循環點燈,用XGpioPs_WritePin函數輸出高低電平。
這是純PS點流水燈。
3. PS通過EMIO點亮PL端LED
通過EMIO點PL端LED,在配置zynq ip核時,基本步驟差不多,包括去到PL資源等,唯一不同的是,在GPIO里,勾上EMIO并且分配寬度是4(因為我的小板子PL端有四個LED)。
生成了新的系統:
![](https://file.elecfans.com/web1/M00/C8/53/pIYBAF9t-16AfJwnAABjNUWfu8s862.png)
接下來,分配管腳!!因為這里GPIO_0在PL端。看看pdf:
![](https://file.elecfans.com/web1/M00/C8/53/pIYBAF9t-2CAW6ijAADLk3UpPU0136.png)
把剛分配的帶寬4的EMIO(GPIO_0)綁定到這四個管腳上。
然后輸出bitstream文件,導入到SDK中時,要加上這個比特流文件。進入SDK
初始化程序還是一樣,頭文件也是xgpiops.h,這還是PS操作。
xgpio_config = XGpioPs_LookupConfig(XPAR_PS7_GPIO_0_DEVICE_ID); status = XGpioPs_CfgInitialize(&xgpio, xgpio_config, xgpio_config->BaseAddr); if(status!=XST_SUCCESS) return XST_FAILURE;
后面就是設置引腳工作模式:
這里的引腳號從54開始,因為從54后才是EMIO引腳:
![](https://file.elecfans.com/web1/M00/C7/DE/o4YBAF9t-2KABVxuAACWkjKiF_o618.png)
0—53是MIO,53—...是EMIO。
之后點燈就可以了。在運行之前先下載比特流文件到FPGA,另外這個黑金的小板子,PL和PS協同仿真時,總報錯,只需要在Reset entire system和Program FPGA打上勾,并且這個比特流文件要絕對地址!!
![](https://file.elecfans.com/web1/M00/C7/DE/o4YBAF9t-2WAE76iAAHJJE9mRwc691.png)
4. PS通過AXI點亮PL端LED
這個就是PL與PS協同點燈了。
首先配置zynq ip核,PL部分保留,因為用到了AXI,另外MIO gpio都去掉。其余配置都一樣。添加AXI gpio IP核,并且設置寬度為4,最后Run connection Automation,加入其它必要組件,調整連線:
![](https://file.elecfans.com/web1/M00/D0/E2/pIYBAF-8qI-ADOCzAAEFK_vWtvI215.png)
之后再綁定gpio_led管腳到四個LED上,綜合并生成bitstream文件,導入到SDK。
引用頭文件:XGpio.h
然后還是對引腳進行初始化和設置工作模式:
XGpio_Initialize(&GpioOutput, XPAR_AXI_GPIO_0_DEVICE_ID); XGpio_SetDataDirection(&GpioOutput,1,0x0);//output XGpio_DiscreteWrite(&GpioOutput,1,0x0);
協同點燈還是要先下載比特流文件,在運行SDK程序。
5. 總結
① 對MIO或EMIO gpio進行操作,都屬于PS,引用xgpiops.h文件,對AXI_gpio引用xgpio.h
② 涉及PL引腳或操作時,生成比特流文件并且導入SDK,運行時先下載FPGA。
③ PL輸出信號綁定引腳。
-
FPGA
+關注
關注
1630文章
21798瀏覽量
606062 -
GPIO
+關注
關注
16文章
1216瀏覽量
52391 -
MIO
+關注
關注
0文章
12瀏覽量
8184 -
Vivado
+關注
關注
19文章
815瀏覽量
66895
發布評論請先 登錄
相關推薦
GPIO使用教程 GPIO接口應用
如何通過PMC_GPIO喚醒AMD Versal? Adaptive SoC Linux系統
![如何通過PMC_<b class='flag-5'>GPIO</b>喚醒AMD Versal? Adaptive SoC Linux系統](https://file1.elecfans.com/web3/M00/02/9A/wKgZO2dg3UCAO9ZCAAAPSHJGrcQ785.png)
SOC GPIO操作
CPU時鐘周期與主頻的關系和區別
圖像處理器與計算機視覺有什么關系和區別
labview如何測ADC輸入到DAC輸出的延時
FM20S用戶手冊-PS + PL異構多核案例開發手冊
PLC與網關的關系和區別
PLC與視覺控制器的區別和關系
什么是GPIO?GPIO組成原理
![什么是<b class='flag-5'>GPIO</b>?<b class='flag-5'>GPIO</b>組成原理](https://file1.elecfans.com/web2/M00/DE/2B/wKgZomYt0YKAc8h8AAAoNDQz4hY382.png)
免費借測,限時體驗 | 研華Socket Type 4英寸嵌入式單板MIO-4370來襲!
![免費借測,限時體驗 | 研華Socket Type 4英寸嵌入式單板<b class='flag-5'>MIO</b>-4370來襲!](https://file1.elecfans.com/web2/M00/C6/BC/wKgaomYCje6AdxAQAAIJbe-SqDw620.jpg)
評論