maxiaozhi

maxiaozhi

0个粉丝

19

问答

0

专栏

0

资料

maxiaozhi  发布于  2015-01-08 15:05:52
采纳率 0%
19个问答
13621

HI3520A GPIO引脚控制求助,有点急,请大神帮助

 

通过3520A直接控制GPIO脚,我的方法是:
1.himm 配置gpio1_4 (---对应位置12)对应的寄存器地址;
2. 通过GPIO脚的索引,GPIO_setDir(12,FALSE)设置输入输出;
3.通过GPIO_set拉高或拉低店铺,但是没有反应。
请问怎么设置,是否我还有什么没有设置正确?

下面是我设置的代码:

/*
名称:GPIO_setDir
功能:设置GPIO脚的功能方向
入参:
        bitIndex:gpio脚的序号
        bOn:输出/输入方向;TRUE设置为输出,FALSE设置为输入
返回:
        成功返回TRUE
*/
BOOL    GPIO_setDir(unsigned int  bitIndex, BOOL bOn)
{
        gpio_groupbit_info      tGpioInfo;

        if(0 >  g_fdGpio)
        {
                g_fdGpio = open(GPIO_DEVICE , O_RDWR);

                if(0 >  g_fdGpio)
                {
                        printf("open gpio fail in %d!\n", __LINE__);
                        return FALSE;
                }
        }

        tGpioInfo.grpNum = bitIndex / 8;
        tGpioInfo.bitNum = bitIndex % 8;

        if(bOn)
        { tGpioInfo.value = 1; }

        else
        { tGpioInfo.value = 0; }

        if(ioctl(g_fdGpio, GPIO_SET_DIR, &tGpioInfo) < 0)
        {
                printf("GPIO_SET_DIR fail in %d!\n", __LINE__);
                close(g_fdGpio);
                return FALSE;
        }

        else
        { return TRUE; }
}

/*
名称:GPIO_getDir
功能:获取GPIO脚的功能方向
入参:
        bitIndex:gpio脚的序号
        pbOn:输出/输入方向;TRUE设置为输出,FALSE设置为输入
返回:
        成功返回TRUE
*/

BOOL    GPIO_getDir(unsigned int  bitIndex, BOOL *pbOn)
{
        gpio_groupbit_info      tGpioInfo;

        if(0 >  g_fdGpio)
        {
                g_fdGpio = open(GPIO_DEVICE , O_RDWR);

                if(0 >  g_fdGpio)
                {
                        printf("open gpio fail in %d!\n", __LINE__);
                        return FALSE;
                }
        }

        tGpioInfo.grpNum = bitIndex / 8;
        tGpioInfo.bitNum = bitIndex % 8;
        tGpioInfo.value = 0;

        if(ioctl(g_fdGpio, GPIO_GET_DIR, &tGpioInfo) < 0)
        {
                printf("GPIO_GET_DIR fail in %d!\n", __LINE__);
                close(g_fdGpio);
                return FALSE;
        }

        else
        {
                if(0 == tGpioInfo.value)
                {
                        *pbOn = FALSE;
                }

                else
                {
                        *pbOn = TRUE;
                }

                return TRUE;
        }
}

/*
名称:GPIO_set
功能:设置GPIO脚的输出高低电平,对应输出脚
入参:
        bitIndex:gpio脚的序号
        bOn:TRUE为输出高电平,FALSE为输入低电平
返回:
        成功返回TRUE
*/

BOOL    GPIO_set(unsigned int  bitIndex, BOOL bOn)
{
        gpio_groupbit_info      tGpioInfo;

        if(0 >  g_fdGpio)
        {
                g_fdGpio = open(GPIO_DEVICE , O_RDWR);

                if(0 >  g_fdGpio)
                {
                        printf("open gpio fail in %d!\n", __LINE__);
                        return FALSE;
                }
        }

        tGpioInfo.grpNum = bitIndex / 8;
        tGpioInfo.bitNum = bitIndex % 8;

        if(bOn)
        { tGpioInfo.value = 1; }

        else
        { tGpioInfo.value = 0; }

        if(ioctl(g_fdGpio, GPIO_WRITE_BIT, &tGpioInfo) < 0)
        {
                printf("GPIO_WRITE_BIT fail in %d!\n", __LINE__);
                close(g_fdGpio);
                return FALSE;
        }

        else
        { return TRUE; }
}

/*
名称:GPIO_get
功能:获取GPIO的高低电平,这个脚作为输入脚
入参:
        bitIndex:gpio脚的序号
        bOn:TRUE为输出高电平,FALSE为输入低电平
返回:
        成功返回TRUE
*/

BOOL    GPIO_get(unsigned int  bitIndex, BOOL *pbOn)
{
        gpio_groupbit_info      tGpioInfo;

        if(0 >  g_fdGpio)
        {
                g_fdGpio = open(GPIO_DEVICE , O_RDWR);

                if(0 >  g_fdGpio)
                {
                        printf("open gpio fail in %d!\n", __LINE__);
                        return FALSE;
                }
        }

        tGpioInfo.grpNum = bitIndex / 8;
        tGpioInfo.bitNum = bitIndex % 8;
        tGpioInfo.value = 0;

        if(ioctl(g_fdGpio, GPIO_READ_BIT, &tGpioInfo) < 0)
        {
                printf("GPIO_WRITE_BIT fail in %d!\n", __LINE__);
                close(g_fdGpio);
                return FALSE;
        }

        else
        {
                if(0 == tGpioInfo.value)
                {
                        *pbOn = FALSE;
                }

                else
                {
                        *pbOn = TRUE;
                }

                return TRUE;
        }
}
我来回答
回答12个
时间排序
认可量排序

david

39个粉丝

368

问答

253

专栏

229

资料

david 2015-01-08 19:27:19
认可0
set 进去 用himm 读下,1,看是不是真正写进正确的寄存器里去了。2 ,直接用himm看下是否能控制。3,引脚复用,默认并不是GPIO,所以还要配置复用寄存器。

maxiaozhi

0个粉丝

19

问答

0

专栏

0

资料

maxiaozhi 2015-01-08 20:48:52
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=11063&ptid=5009]david 发表于 2015-1-8 19:27[/url]
set 进去 用himm 读下,1,看是不是真正写进正确的寄存器里去了。2 ,直接用himm看下是否能控制。3,引脚复 ...[/quote]

我看hi_gpio.c驱动代码里面,gpio信息只设置到GPIO7了,GPIO9和GPIO10可以复用吗?是不是要修改驱动?

goodman

4个粉丝

30

问答

18

专栏

17

资料

goodman 2015-01-09 08:31:22
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=11067&ptid=5009]maxiaozhi 发表于 2015-1-8 20:48[/url]
我看hi_gpio.c驱动代码里面,gpio信息只设置到GPIO7了,GPIO9和GPIO10可以复用吗?是不是要修改驱动?[/quote]

GPIO脚没有做其他用途得话都市可以复用的!

maxiaozhi

0个粉丝

19

问答

0

专栏

0

资料

maxiaozhi 2015-01-09 08:50:42
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=11079&ptid=5009]goodman 发表于 2015-1-9 08:31[/url]
GPIO脚没有做其他用途得话都市可以复用的![/quote]

我读的是hi_gpio.ko 这个驱动,对应代码Hi3520A_SDK_V1.0.2.0\package\mpp\extdrv_hi3520A\gpio\hi_gpio.c,
里面只定义了GPIO0到GPIO7前八组的地址,无论我是否把我要复用的GPIO9和GPIO10配置到hi_gpio.c中,
打开/devb/hi_gpio的时候报没有操作权限。

goodman

4个粉丝

30

问答

18

专栏

17

资料

goodman 2015-01-09 08:56:21
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=11081&ptid=5009]maxiaozhi 发表于 2015-1-9 08:50[/url]
我读的是hi_gpio.ko 这个驱动,对应代码Hi3520A_SDK_V1.0.2.0\package\mpp\extdrv_hi3520A\gpio\hi_gpio. ...[/quote]

看2楼David的帖子。。
确保你的要操作的GPIO脚,切换到GPIO功能上

maxiaozhi

0个粉丝

19

问答

0

专栏

0

资料

maxiaozhi 2015-01-09 09:27:20
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=11083&ptid=5009]goodman 发表于 2015-1-9 08:56[/url]
看2楼David的帖子。。
确保你的要操作的GPIO脚,切换到GPIO功能上[/quote]

是用himm配置复用寄存器地址吧
himm 0x200F0178 0x1    GPIO9_6
himm 0x200F018C 0x1    GPIO10_3
HI3520A,他复用寄存器基地址是0x200F_0000,偏移是0x178和0x18C,这两个都是配置了的。
就是搞不懂为什么出现这个情况?
在一个david说的:前两个方法不知道如何操作,能否给介绍一下,非常感谢

maxiaozhi

0个粉丝

19

问答

0

专栏

0

资料

maxiaozhi 2015-01-09 09:28:45
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=11085&ptid=5009]maxiaozhi 发表于 2015-1-9 09:27[/url]
是用himm配置复用寄存器地址吧
himm 0x200F0178 0x1    GPIO9_6
himm 0x200F018C 0x1    GPIO10_3
[/quote]

还有这个切换是什么意思?应该就是himm 0x200F0178 0x1 中这个0x1的配置值决定的吧

maxiaozhi

0个粉丝

19

问答

0

专栏

0

资料

maxiaozhi 2015-01-09 09:29:21
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=11083&ptid=5009]goodman 发表于 2015-1-9 08:56[/url]
看2楼David的帖子。。
确保你的要操作的GPIO脚,切换到GPIO功能上[/quote]

还有这个切换是什么意思?应该就是himm 0x200F0178 0x1 中这个0x1的配置值决定的吧

maxiaozhi

0个粉丝

19

问答

0

专栏

0

资料

maxiaozhi 2015-01-09 11:00:52
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=11083&ptid=5009]goodman 发表于 2015-1-9 08:56[/url]
看2楼David的帖子。。
确保你的要操作的GPIO脚,切换到GPIO功能上[/quote]

已经测试了,前八组可以复用,后八组报没有操作权限。
现在还没有一个具体的方向,初步估计是hi_gpio.ko驱动哪里要修改吧

乐哈哈777

0个粉丝

1

问答

0

专栏

0

资料

乐哈哈777 2015-04-30 15:55:00
认可0


hi_gpio.c 中只支持  [0:7]

[code]if((group_bit_info.groupnumber>7)||(group_bit_info.bitnumber>7))
            {
                printk("group number or bitnum beyond extent!\n");
                up(&gpio_sem);
                return -1;
            }[/code]

ymir

2个粉丝

23

问答

0

专栏

8

资料

ymir 2015-07-07 17:33:34
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=11063&ptid=5009]david 发表于 2015-1-8 19:27[/url]
set 进去 用himm 读下,1,看是不是真正写进正确的寄存器里去了。2 ,直接用himm看下是否能控制。3,引脚复 ...[/quote]

hi david,我想请问一下,HI3520D的GPIO控制是什么思路,因为我在文档中没有发现什么东西,只是在SDK的驱动文件中看到一个脚本是him*的工具,而一般gpio通过ummap或者写字符驱动来控制。请问海思SDK中提供的东西哪部分适合做GPIO开发?

ailingfang

0个粉丝

6

问答

0

专栏

0

资料

ailingfang 2016-12-14 22:01:57
认可0
楼主后面有解决吗?还是只能用八组GPIO?
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区