Ralink RT5350 GPIO配置(坑了个大爹的)
来源:互联网 发布:js 滑动选择插件 编辑:程序博客网 时间:2024/06/05 06:36
这几天在做Ranlink RT5350的模块,sdk比较方便,几个命令就基本上完成了所有的配置。但是小弟不才还是遇到了问题:在内核开了GPIO Support的情况下,不管如何调试管脚都不跳变。应用层测试程序如下:
#include<stdio.h>#include "ralink_gpio.h"#include <fcntl.h>#define devnode "/dev/gpio"#define USERDEFINEDGPIOPIN 1 int main(){ int fd = 0; int res = 0; struct file * devfile; fd = open(devnode,O_RDWR); if(fd < 0) { perror("fd open error\r\n"); exit(-1); } printf("fd = %d",fd); res = ioctl(fd,RALINK_GPIO_SET_DIR_OUT,RALINK_GPIO(USERDEFINEDGPIOPIN)); if(res < 0) { perror("ioctl error\r\n"); exit(-1); } while(1) { res = ioctl(fd ,RALINK_GPIO_SET,RALINK_GPIO(USERDEFINEDGPIOPIN)); if(res < 0) { perror("ioctl error\r\n"); exit(-1); } printf("io up\r\n"); usleep(1000); res = ioctl(fd,RALINK_GPIO_CLEAR, RALINK_GPIO(USERDEFINEDGPIOPIN)); if(res < 0) { perror("ioctl error\r\n"); exit(-1); } printf("io down\r\n"); usleep(1000); } return 0;}
测试程序写得比较简陋,不要见怪。
在相应的管脚上一直没有反应。
后来一直在网上找资料,终于有些眉目:
GPIO_1是I2C的复用引脚,而系统默认的正常模式(复用端口模式),所以需要将GPIO_1更改为GPIO模式。
在驱动init下找到了关于GPIO_MODE的操作。
//config these pins to gpio mode gpiomode = le32_to_cpu(*(volatile u32 *)(RALINK_REG_GPIOMODE));#if !defined (CONFIG_RALINK_RT2880) gpiomode &= ~0x1C; //clear bit[2:4]UARTF_SHARE_MODE#endif gpiomode |= RALINK_GPIOMODE_DFT; *(volatile u32 *)(RALINK_REG_GPIOMODE) = cpu_to_le32(gpiomode);
跟着寻找RALINK_GPIOMODE_DFT的定义,找到了
// if you would like to enable GPIO mode for other pins, please modify this value// !! Warning: changing this value may make other features(MDIO, PCI, etc) lose efficacy#define RALINK_GPIOMODE_DFT (RALINK_GPIOMODE_UARTF )
if you would like to enable GPIO mode for other pins, please modify this value
如果需要是能其他引脚的GPIO模式,请修改该值。
So
// if you would like to enable GPIO mode for other pins, please modify this value// !! Warning: changing this value may make other features(MDIO, PCI, etc) lose efficacy#define USERDEFINEDEGPIOPIN 0x1#define RALINK_GPIOMODE_DFT (RALINK_GPIOMODE_UARTF | USERDEFINEDEGPIOPIN)
后来发现如果这里选择0x01的话,并不是选择GPIO1,根据数据手册
是选择I2C_GPIO_MODE为GPIO模式(按照我的理解应该是上电默认GPIO,linux启动后改成了非GPIO,现在我们就要将他修改为GPIO的模式。)。
但是最神奇的事情发生了。
我选择的是I2C的GPIO模式,应用程序里面选择的是GPIO1,但是在这个时候GPIO1没有跳变,GPIO0跳变了,查了手册没有发现什么所以然。(我这边用的是RT5350模块,进行修改过了,不知道是不是在修改的时候把管脚改掉了,由于手头资料不足,所以无法判断。可能性不大,但是并没有解决。)如果谁知道相关的解释,希望能告诉我一下。在此谢过!
0 0
- Ralink RT5350 GPIO配置(坑了个大爹的)
- Ralink RT5350:添加自定义GPIO应用程序
- rt5350 gpio的使用
- Ralink RT5350简介
- Ralink RT5350简介
- Ralink RT5350简介
- RT5350 gpio按键学习记录(602)
- RT5350 gpio设置
- ralink wireless driver中控制开发板gpio LED灯的亮灭
- Ralink SDK NVRAM和WIFI配置的关系
- Ralink SDK NVRAM和WIFI配置的关系
- openwrt rt5350 配置笔记
- gpio 的配置
- GPIO口的配置
- GPIO的配置过程
- 在rt5350 openwrt系统下spi的rtc ds3234配置
- RT5350配置uboot 支持8M的Flash
- 晒一晒RT5350的装备
- lightoj 1004 - Monkey Banana Problem
- 一念永恒 > 第一章 他叫白小纯
- Mysql基本操作:增、删、改、查
- java中Scanner类nextLine()和next()的区别和使用方法
- C++第7次上机作业
- Ralink RT5350 GPIO配置(坑了个大爹的)
- SPringMVC各层浅析
- C/C++的内存布局
- bzoj 1089
- Linux内核之数据双链表
- Android中ProgressDialog的使用
- tp vendor遇到的坑
- C++实验7
- Linux的防火墙–Iptables