Zynq-7000 ARM端MIO的使用
- 2019 年 10 月 29 日
- 筆記
Zynq-7000 ARM端MIO的使用
作者:OpenSLee
1 背景知識
Xilinx Zynq-7000 晶片的PS端MIO(multiuse I/O)所在位置如下圖紅色框所示。MIO(0:15)在bank0上,MIO(16:53)在bank1上。他們不需要管腳約束,既可以當做PS 端普通的IO也可以用做PS端SPI、I2C、CAN等匯流排。

本節將使用MIO的GPIO功能實現LED流水燈。
2 MIO流水燈實驗
對於工程的創建在此不再贅述。可參考《Zynq-7000 ARM端helloworld實驗》
1) ZYNQ7 Processing System GPIO的設置
點擊MIO Configuration>>選中GPIO MIO如下圖所示。其他配置根據自己的開發板設置。

2) 生成processing_system7_0

3) launch SDK
(1)首先選中system右鍵選中Generate Output Products…
(2)選中system右鍵選中Create HDL Wrapper…
(3)導出硬體 選擇菜單File->Export->Export Hardware…。這裡不包括bitstream
(4)Launch SDK 選擇菜單File->Launch SDK,啟動SDK環境。
4)SDK編程
(1) 新建APP
點擊FILE>>Application Project>>Project name>>Next

選著空工程Empty Application>>Finish

(2)編寫程式碼main.c
#include "xgpiops.h"
#include "sleep.h"
int main()
{
static XGpioPs psGpioInstancePtr;
XGpioPs_Config* GpioConfigPtr;
int Led0 = 0; //MIO0_led
int Led1 = 13; //MIO13_LED
u32 uPinDirection = 0x1;//1表示輸出,0表示輸入
int xStatus;
//–MIO的初始化
GpioConfigPtr = XGpioPs_LookupConfig(XPAR_PS7_GPIO_0_DEVICE_ID);
if(GpioConfigPtr == NULL)
return XST_FAILURE;
xStatus = XGpioPs_CfgInitialize(&psGpioInstancePtr,GpioConfigPtr, GpioConfigPtr->BaseAddr);
if(XST_SUCCESS != xStatus)
print(" PS GPIO INIT FAILED nr");
//–MIO的輸入輸出操作
XGpioPs_SetDirectionPin(&psGpioInstancePtr, Led0,uPinDirection);//配置MIO輸出方向
XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, Led0,1);//配置MIO的第0位輸出
XGpioPs_SetDirectionPin(&psGpioInstancePtr, Led1,uPinDirection);//配置MIO輸出方向
XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, Led1,1);//配置MIO的第13位輸出
while(1)
{
XGpioPs_WritePin(&psGpioInstancePtr, Led0, 0);//MIO的第0位輸出0
XGpioPs_WritePin(&psGpioInstancePtr, Led1, 1);//MIO的第13位輸出1
sleep(1);//延時
XGpioPs_WritePin(&psGpioInstancePtr, Led0, 1);//MIO的第0位輸出1
XGpioPs_WritePin(&psGpioInstancePtr, Led1, 0);//MIO的第13位輸出0
sleep(1);//延時
}
return 0;
}
這裡的0和13是電路圖上PS端LED燈的所在位置如下圖

(3)下載實現
連接好硬體和打開串口工具後,右鍵選擇MIO_test工程,再選擇Run as->1. Launch on Hardware (sysntem Debugger)

影片欣賞
總結:
本節通過ARM的MIO(GPIO)來點亮LED燈實現流水燈,通過使用函數庫編程,熟悉了SDK開發的工程。