jerry2cool

jerry2cool

0个粉丝

8

问答

0

专栏

1

资料

jerry2cool  发布于  2020-08-31 15:28:43
采纳率 0%
8个问答
3699

求助最简单的海思的GPIO操作的问题

 
各位大佬,我按照SDK里的文档“外围设备驱动 操作指南”这个文档中的示例想来进行GPIO的操作,如下图所示的文档,但是为什么不管用呢?请问是我哪里的工作没有做么?多谢了。。。
我来回答
回答14个
时间排序
认可量排序

jerry2cool

0个粉丝

8

问答

0

专栏

1

资料

jerry2cool 2020-08-31 15:33:28
认可0
图片上传不了,我上个我的代码,大佬们看看这么操作行不行?多谢了。。



/******************************************************************************
* function    : main()
* Description : main
******************************************************************************/
#ifdef __HuaweiLite__
int app_main(int argc, char *argv[])
#else
int main(int argc, char* argv[])
#endif
{
    FILE *fp;
    char file_name[50];
    unsigned char buf[10];
    unsigned int gpio_num;

    gpio_num = 6;

    sprintf(file_name, "/sys/class/gpio/export");
    fp = fopen(file_name, "w");
    if (fp == NULL) {
            printf("Cannot open %s.\n", file_name);
            return -1;
        }
    fprintf(fp, "%d", gpio_num);
    fclose(fp);

    sprintf(file_name, "/sys/class/gpio/gpio%d/direction", gpio_num);
    fp = fopen(file_name, "rb+");
    if (fp == NULL) {
            printf("Cannot open %s.\n", file_name);
            return -1;
        }
    fprintf(fp, "out");
    fclose(fp);

    sprintf(file_name, "/sys/class/gpio/gpio%d/value", gpio_num);
    fp = fopen(file_name, "rb+");
    if (fp == NULL) {
            printf("Cannot open %s.\n", file_name);
            return -1;
        }
               
        while(1)
        {
                strcpy(buf,"1");
                fwrite(buf, sizeof(char), sizeof(buf) - 1, fp);
                printf("%s: gpio%d = %s\n", __func__, gpio_num, buf);
                sleep(5);
                strcpy(buf,"0");
                fwrite(buf, sizeof(char), sizeof(buf) - 1, fp);
                printf("%s: gpio%d = %s\n", __func__, gpio_num, buf);
                sleep(5);
        }
       

    fclose(fp);

    sprintf(file_name, "/sys/class/gpio/unexport");
    fp = fopen(file_name, "w");
    if (fp == NULL) {
            printf("Cannot open %s.\n", file_name);
            return -1;
        }
    fprintf(fp, "%d", gpio_num);
    fclose(fp);

    return 0;

}

jerry2cool

0个粉丝

8

问答

0

专栏

1

资料

jerry2cool 2020-08-31 15:35:54
认可0
程序执行没有报错,WHILE(1)中的printf也是按照时间间隔重复打印输出,但是测量GPIO0_6的状态没有变化,一直是低电平

qn1534489079

0个粉丝

12

问答

0

专栏

2

资料

qn1534489079 2020-08-31 15:44:22
认可0
本帖最后由 qn1534489079 于 2020-8-31 15:46 编辑

你硬件是接哪个管脚?
管脚复用配置值是多少?

jerry2cool

0个粉丝

8

问答

0

专栏

1

资料

jerry2cool 2020-08-31 15:44:43
认可0
我看网上说的最多的是操作GPIO用操作寄存器的方式,那海思SDK里“外围设备驱动 操作指南”这个文档中介绍的这种方式还有什么用呢?

jerry2cool

0个粉丝

8

问答

0

专栏

1

资料

jerry2cool 2020-08-31 15:49:11
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=162172&ptid=81172]qn1534489079 发表于 2020-8-31 15:44[/url]
你硬件是接哪个管脚?[/quote]

感谢回复。
我测试的引脚就是GPIO0_6,按照文档上说的计算方式,就是6。而且用在控制台下用echo命令操作的方式可以正常操作,就是下面的命令,是没有问题的,但是在程序里就不行了。。。。

echo 6 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio6/direction
echo 1 > /sys/class/gpio/gpio6/value

jerry2cool

0个粉丝

8

问答

0

专栏

1

资料

jerry2cool 2020-08-31 15:53:28
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=162172&ptid=81172]qn1534489079 发表于 2020-8-31 15:44[/url]
你硬件是接哪个管脚?
管脚复用配置值是多少?[/quote]

您说的管脚复用配置在“外围设备驱动 操作指南”这个文档里没有说呢,所以我应该也是没有配置吧,请问应该则则呢么配置呢?或者说我应该参考哪个文档呢?多谢您了。

qn1534489079

0个粉丝

12

问答

0

专栏

2

资料

qn1534489079 2020-08-31 16:00:58
认可0
本帖最后由 qn1534489079 于 2020-8-31 16:22 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=162174&ptid=81172]jerry2cool 发表于 2020-8-31 15:49[/url]
感谢回复。
我测试的引脚就是GPIO0_6,按照文档上说的计算方式,就是6。而且用在控制台下用echo命令操作 ...[/quote]

[attach]13748[/attach]
Sorry, 误看成 GPIOˊ6_0
GPIO0_6 = 0*8+6=6 是正确的

只是GPIO0_6 复用 USB3_PWREN0有可能被 USB3 driver使用
[attach]13748[/attach]

qn1534489079

0个粉丝

12

问答

0

专栏

2

资料

qn1534489079 2020-08-31 16:03:34
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=162175&ptid=81172]jerry2cool 发表于 2020-8-31 15:53[/url]
您说的管脚复用配置在“外围设备驱动 操作指南”这个文档里没有说呢,所以我应该也是没有配置吧,请问应 ...[/quote]

要看你是用哪一颗芯片,如果是Hi3559A的话,是看 \ReleaseDoc\zh\00.hardware\chip\Hi3559AV100_PINOUT_CN.xlsx

jerry2cool

0个粉丝

8

问答

0

专栏

1

资料

jerry2cool 2020-08-31 16:29:40
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=162176&ptid=81172]qn1534489079 发表于 2020-8-31 16:00[/url]
Sorry, 误看成 GPIOˊ6_0
GPIO0_6 = 0*8+6=6 是正确的

[/quote]

非常感谢。

我现在还是在用操作寄存器的方式来实现了,不过为啥在“外围设备驱动 操作指南”这个文档里说的就这么简单呢?他说的这种方法到底能用么?

qn1534216564

0个粉丝

4

问答

0

专栏

0

资料

qn1534216564 2020-08-31 16:34:05
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=162178&ptid=81172]jerry2cool 发表于 2020-8-31 16:29[/url]
非常感谢。

我现在还是在用操作寄存器的方式来实现了,不过为啥在“外围设备驱动 操作指南”这个文档 ...[/quote]

3559a按照手册中说的可以

qn1534489079

0个粉丝

12

问答

0

专栏

2

资料

qn1534489079 2020-08-31 16:47:03
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=162178&ptid=81172]jerry2cool 发表于 2020-8-31 16:29[/url]
非常感谢。

我现在还是在用操作寄存器的方式来实现了,不过为啥在“外围设备驱动 操作指南”这个文档 ...[/quote]

[attach]13750[/attach]

jerry2cool

0个粉丝

8

问答

0

专栏

1

资料

jerry2cool 2020-09-01 09:21:41
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=162179&ptid=81172]qn1534216564 发表于 2020-8-31 16:34[/url]
3559a按照手册中说的可以[/quote]

那麻烦您看看我贴在2楼的全部的代码,是不是少了什么步骤?非常感谢。。。

jerry2cool

0个粉丝

8

问答

0

专栏

1

资料

jerry2cool 2020-09-01 09:23:42
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=162180&ptid=81172]qn1534489079 发表于 2020-8-31 16:47[/url]
[/quote]

嗯,非常感谢。。。那我加上管脚复用的代码,不过我刚才用写寄存器的方式来写GPIO0_6的管脚控制寄存器,又提示我“mmap error: Operation not permitted”,我查查什么原因。

qn1583393923

0个粉丝

8

问答

0

专栏

0

资料

qn1583393923 2020-09-01 12:01:23
认可0
我用system直接输出shell指令
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区