跳转到主要内容

Zynq中PS的MIO操作

demi 提交于

在编写程序之前,先来了解GPIO的BANK分布,在UG585文档GPIO一章中可以看到GPIO是有4个BANK,注意与MIO的BANK区分。BANK0控制32个信号,BANK1控制22个信号,总共是MIO的54个引脚,BANK2和BANK3共能控制64个PL端引脚,每一组都有三个信号,输入EMIOGPIOI,输出EMIOGPIOO,输出使能EMIOGPIOTN,共192个信号。

<center><img width="600" src="http://xilinx.eetrend.com/files/2020-01/wen_zhang_/100046991-88360-01.p…; alt=""></center><br>

下图为GPIO的控制,实验中会用到输出部分的寄存器,数据寄存器DATA,数据掩码寄存器MASK_DATA_LSW,MASK_DATA_MSW,方向控制寄存器DIRM,输出使能控制器OEN。

<center><img width="600" src="http://xilinx.eetrend.com/files/2020-01/wen_zhang_/100046991-88361-02.p…; alt=""></center><br>

程序中利用以下函数设置方向和输出使能:

<pre>int main()

{

XGpioPs_Config *GPIO_CONFIG ;

int Status ;

//通用手法,查找GPIO列表

GPIO_CONFIG= XGpioPs_LookupConfig(MIO_0_ID);

//Exception的检测

Status= XGpioPs_CfgInitialize(&GPIO_PTR, GPIO_CONFIG, GPIO_CONFIG->BaseAddr) ;

if (Status != XST_SUCCESS)

{

return XST_FAILURE ;

}

//设置MIO的PIN引脚方向

XGpioPs_SetDirectionPin(&GPIO_PTR,0, GPIO_OUTPUT) ;

XGpioPs_SetDirectionPin(&GPIO_PTR,13, GPIO_OUTPUT) ;

//使能MIO的PIN引脚输出

XGpioPs_SetOutputEnablePin(&GPIO_PTR,0, GPIO_OUTPUT) ;

XGpioPs_SetOutputEnablePin(&GPIO_PTR,13, GPIO_OUTPUT) ;

while(1)

{

XGpioPs_WritePin(&GPIO_PTR,0, 1) ;

XGpioPs_WritePin(&GPIO_PTR,13, 0) ;

usleep(100000);

XGpioPs_WritePin(&GPIO_PTR,0, 0) ;

XGpioPs_WritePin(&GPIO_PTR,13, 1) ;

usleep(100000);

}

return 0;

}</pre>

实现两个LED的闪烁

<center><img width="600" src="http://xilinx.eetrend.com/files/2020-01/wen_zhang_/100046991-88362-03.j…; alt=""></center><br>

本文转自:<a href="https://mp.weixin.qq.com/s/RFIz2IQqFZNU7T9KagICOw"><u>瓜大三哥</u></a&gt;,作者:米果不回来,转载此文目的在于传递更多信息,版权归原作者所有。