主题 : 关于mini2440板子引出的gpio问题 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 26755
精华: 0
发帖: 101
金钱: 505 两
威望: 101 点
综合积分: 202 分
注册时间: 2010-08-13
最后登录: 2017-09-13
楼主  发表于: 2010-12-03 13:47

 关于mini2440板子引出的gpio问题

  最近我用万用表量了一下板子的引出的gpio(CON4 )电压7,9,11,13,15引脚上的电压为3.5v ,23,25,27,29引脚上的电压为0,我想问一下这些引脚被其它驱动引用之后输出为高电平还是没有引用的输出高电平
级别: 侠客
UID: 26755
精华: 0
发帖: 101
金钱: 505 两
威望: 101 点
综合积分: 202 分
注册时间: 2010-08-13
最后登录: 2017-09-13
1楼  发表于: 2010-12-03 14:04
没有人回答,我在顶一下
自由,自强,共享,共创。
级别: 论坛版主
UID: 12573
精华: 27
发帖: 8838
金钱: 46490 两
威望: 9298 点
综合积分: 18216 分
注册时间: 2010-01-09
最后登录: 2019-07-16
2楼  发表于: 2010-12-03 15:10
缺省BSP无视GPIO,因为它们“谁用谁知道”
新手如何向我们反馈有效的信息,以便解决问题,见此贴:
http://www.arm9home.net/read.php?tid-14431.html

[注]: 此处签名链接仅为指引方向,而非解答问题本身.
级别: 侠客
UID: 26755
精华: 0
发帖: 101
金钱: 505 两
威望: 101 点
综合积分: 202 分
注册时间: 2010-08-13
最后登录: 2017-09-13
3楼  发表于: 2010-12-03 15:46
另外我仿mini2440_leds驱动写了一个驱动,希望GPF0,GPF1,GPF2,GPF3能输出低电平,运行之后发现没输出低电平
我的驱动如下

#define DEVICE_NAME "motors"

static unsigned long motors_table [] = {
    S3C2410_GPF(0),
    S3C2410_GPF(1),
    S3C2410_GPF(2),
    S3C2410_GPF(3),
};

static unsigned int motors_cfg_table [] = {
    S3C2410_GPIO_OUTPUT,
    S3C2410_GPIO_OUTPUT,
    S3C2410_GPIO_OUTPUT,
    S3C2410_GPIO_OUTPUT,
};

static int sbc2440_motors_ioctl(
    struct inode *inode,
    struct file *file,
    unsigned int cmd,
    unsigned long arg)
{
    switch(cmd) {
    case 0:
    case 1:
        if (arg > 4) {
            return -EINVAL;
        }
        s3c2410_gpio_setpin(motors_table[arg], !cmd);
        return 0;
    default:
        return -EINVAL;
    }
}

static struct file_operations dev_fops = {
    .owner    =    THIS_MODULE,
    .ioctl    =    sbc2440_motors_ioctl,
};

static struct miscdevice misc = {
    .minor = MISC_DYNAMIC_MINOR,
    .name = DEVICE_NAME,
    .fops = &dev_fops,
};

static int __init dev_init(void)
{
    int ret;

    int i;
    
    for (i = 0; i < 4; i++) {
        s3c2410_gpio_cfgpin(motors_table, motors_cfg_table);
        s3c2410_gpio_setpin(motors_table, 0);
    }

    ret = misc_register(&misc);

    printk (DEVICE_NAME"\tinitialized\n");

    return ret;
}

static void __exit dev_exit(void)
{
    misc_deregister(&misc);
}

module_init(dev_init);
module_exit(dev_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("zhz Inc.");
级别: 侠客
UID: 26755
精华: 0
发帖: 101
金钱: 505 两
威望: 101 点
综合积分: 202 分
注册时间: 2010-08-13
最后登录: 2017-09-13
4楼  发表于: 2010-12-03 15:47
这是测试代码
int main(int argc, char **argv)
{
    int on;
    int led_no;
    int fd;
    if (argc != 3 || sscanf(argv[1], "%d", &led_no) != 1 || sscanf(argv[2],"%d", &on) != 1 ||
        on < 0 || on > 1 || led_no < 0 || led_no > 3) {
        fprintf(stderr, "Usage: leds led_no 0|1\n");
        exit(1);
    }
    fd = open("/dev/motors0", 0);
    if (fd < 0) {
        fd = open("/dev/motors", 0);
    }
    if (fd < 0) {
        perror("open device motors");
        exit(1);
    }
    ioctl(fd, on, led_no);
    close(fd);
    return 0;
}