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開發的工程。