赞
踩
GPIO是一个外设,用来对器件的引脚作观测(input)以及控制(output,通过MIO模块)。
MIO(Multiuse I/O),将来自PS外设和静态存储器接口的访问多路复用到PS的引脚上。
GPIO可以独立且动态地编程,作为输入/输出以及中断模式
GPIO被分成了4个Bank,Bank0/Bank1通过MIO连接到PS的引脚,Bank2/Bank3通过EMIO连接到PL。
软件通过一组存储映射的寄存器来控制GPIO。
寄存器组:
DATA_RO,用来反映器件引脚的状态
DATA,在GPIO被配置成输出的时候,该寄存器可以控制输出的数值。
MASK_DATA_LSW,用于屏蔽DATA的低16位
MASK_DATA_MSW,用于屏蔽DATA的高16位
DIRM,用于控制I/O引脚是作为输入还是输出。0:关闭输出驱动;1:使能输出驱动
OEN,当I/O被配置成输出时,该寄存器用于打开/关闭输出使能。0:关闭输出使能;1:打开输出使能
DATA: 1010_ 0101_1010_0101_XXXX_XXXX_XXXX_XXXX
16个LED:亮灭亮灭——灭亮灭亮——亮灭亮灭——灭亮灭亮
MASK_DATA_MSW(屏蔽高16位): 1111_ 0000_1111_1111
Data: 0000_ 1010_0000_0000
DATA: 1010_ 1010_1010_0101_XXXX_XXXX_XXXX_XXXX
16个LED:亮灭亮灭——亮灭亮灭——亮灭亮灭——灭亮灭亮
(1)先把DATA的值读出来 (read)
(2)改变需要更改的数值。 (modify)
(3)修改之后的数值写DATA里 (write)
MIO控制led实验代码:
#include <stdio.h> #include <xparameters.h> #include <xgpiops.h> #include <sleep.h> #define GPIO_DEVICE_ID XPAR_XGPIOPS_0_DEVICE_ID #define MIO0_LED 0 XGpioPs_ConfigPtr * ConfigPtr; XGpioPs Gpio; int main() { printf("GPIO_TEST\n"); //根据器件的ID,查找器件的配置信息 ConfigPtr = XGpioPs-LookupConfig(GPIO_DEVICE_ID); //初始化GPIO驱动 XGpioPs_CfgInitialize(&Gpio,ConfigPtr,ConfigPtr->BaseAddr); //把GPIO的方向设置为输出(0输入,1输出) XGpioPs_SetDirectionPin(&Gpio,MIO0_LED,1); //设置输出使能(0关闭,1打开) XGpioPs_SetOutputEnablePin(&Gpio,MIO0_LED,1); //写数据到GPIO的输出引脚 while(1) { XGpioPs_WritePin(&Gpio,MIO0_LED,0x1); usleep(1000000); XGpioPs_WritePin(&Gpio,MIO0_LED,0x0); usleep(1000000); } return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。