GPIO引脚确定方法
GPIO引脚编号=控制器对应的基值+控制引脚偏移值
对于FMQL来说,PS的4个GPIO控制器对应信息如下GPIOA控制MIO引脚[31:0],对应基地址0xE0003000GPIOB控制MIO引脚[53:32],对应基地址0xE0003100GPIOC控制EMIO引脚信号[31:0],对应基地址0xE0003200GPIOD控制EMIO引脚信号[63:32],对应基地址0xE0003400
从上可以直观看出基址对应的号。
基址 | 对应管脚号 | GPIO组 |
0xE0003000 | 480 | GPIO A |
0xE0003100 | 458 | GPIO B |
0xE0003200 | 426 | GPIO C |
0xE0003400 | 394 | GPIO D |
根据算法可直接列出MIO和EMIO映射关系。
MIO | 对应管脚号 | GPIO组 |
0~31 | 480+(0-31) | GPIO A |
32-53 | 458+(32-53) | GPIO B |
EMIO | 对应管脚号 | GPIO组 |
0~31 | 426+(0-31) | GPIO C |
32-63 | 394+(32-63) | GPIO D |
GPIO的使用方法从上面知道了linux内核gpio编号后,就可以把对应gpio接口导出到linux用户空间,然后在linux的用户空间使用命令或者在应用程序中使用文件操作的方式操作gpio了。ls-l/sys/class/gpio/,可以发现其中包含有两个文件export、unexport和若干gpiochipN类型文件夹。
export:用于将指定编号的引脚导出,作为GPIO使用unexport:用于将导出的GPIO删除掉gpiochipN:当前芯片中包含的GPIO控制器
#include <stdio.h>
#include <fcntl.h>
#include <poll.h>
#include <unistd.h>
int main()
{
struct poll对接股票买卖接口,fd 对接股票买卖接口,fds[1];
char buffer[16];
int len;
int fd=open("/sys/class/gpio/gpio500/value",O_RDONLY);
if(fd<0)
{
perror("open "/sys/class/gpio/gpio500/value" failed!
");
return -1;
}
fds[0].fd=fd;
fds[0].events=POLLPRI;
while(1)
{
if(poll(fds,1,0)==-1)
{
perror("poll failed!
");
return -1;
}
if(fds[0].revents&POLLPRI)
{
if(lseek(fd,0,SEEK_SET)==-1)
{
perror("lseek failed!
");
return -1;
}
if((len=read(fd,buffer,sizeof(buffer)))==-1)
{
perror("read failed!
");
return -1;
}
buffer[len]=0;
printf("%s",buffer);
}
}
return 0;
}
欢迎大家指正!若描述有误,请私信或留言告知!
文章为作者独立观点,不代表 股票程序化软件自动交易接口观点