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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 橡胶表带长了怎么办 牛皮席有异味怎么办? 手表钢带发臭怎么办 税务查出假票怎么办 米利财富 投资人怎么办 亲戚被骗去传销怎么办 杭州山姆店怎么办会员 证券没有托管银行怎么办 股票账户被锁定怎么办 英语短文不会读怎么办 你的孩子怎么办 英文 头发掉在地上怎么办 行李箱轮子太响怎么办 货车横拉杆弯怎么办 拉杆轮子坏了怎么办 外拉杆球头旷了怎么办 古早味蛋糕回缩怎么办 孩子迷上嘻哈怎么办 吃扇贝过敏了怎么办 海鲜和杨梅一起怎么办 我买东西没眼光怎么办 兔子身上有跳蚤怎么办 物业不提供发票怎么办 购房发票 不给怎么办 新锐大灯光散不聚怎么办 网络碰到垃圾人怎么办 有人侮辱我家人怎么办 亲人欠网贷还不上现在病重怎么办 亲人欠网贷现在病重怎么办 小孩子大嘴巴病怎么办 小孩子有心胀病怎么办 小孩子有胃痛病怎么办 大修基金用完了怎么办 基金买错了怎么办 基金公司倒闭了怎么办 桔子分期有风险怎么办 想买vivox21没钱怎么办 中介收钱不办事怎么办 手机应用程序几个运行怎么办 网上彩票是骗局怎么办 辞职后不想辞职怎么办