xuechengan

xuechengan

0个粉丝

10

问答

0

专栏

0

资料

xuechengan  发布于  2016-12-05 10:49:01
采纳率 0%
10个问答
8721

3516D的GPIO芯片引脚配置

 
通过GS2972来实现3516d输出的 BT1120信号转成SDI信号,我把GS2972的配置管脚都连接到了3516D的GPIO引脚,想利用软件配置3516D的GPIO管脚来实现GS2972的配置方式,但我发现海思的驱动程序里并没有GPIO的驱动程序,我看论坛里有人说直接在应用程序里配置GPIO管脚,每太搞明白,希望有大神支招,谢谢!
我来回答
回答12个
时间排序
认可量排序

hanfei69882

2个粉丝

26

问答

0

专栏

2

资料

hanfei69882 2016-12-05 11:56:24
认可0
明白了哪些?哪些不明白?问题太笼统,坐等解决方案的问题一般都没有结果

论坛和海思sample代码都有一些参考,论坛搜索gpio就有一些参考帖子,比如D大的[url=http://www.ebaina.com/bbs/forum.php?mod=viewthread&tid=7674&highlight=gpio]3520D 通用GPIO 使用篇(板子3G电源控制脚说明) [/url]

xuechengan

0个粉丝

10

问答

0

专栏

0

资料

xuechengan 2016-12-05 14:28:21
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=42390&ptid=13574]hanfei69882 发表于 2016-12-5 11:56[/url]
明白了哪些?哪些不明白?问题太笼统,坐等解决方案的问题一般都没有结果

论坛和海思sample代码都有一些 ...[/quote]

嗯,谢谢你的分享,针对David的帖子,请教你两个问题吧:
1.他这个寄存器的值设置
himm 0x200F009C  0          //这个是设置复用地址为 GPIO
himm 0x20150400  2          //这个为什么值是2呢?前面不是写 0 输入   ,1输出吗?
himm 0x20150008  0xFF     //这个DATA寄存器的FF也不知道什么意思

2.这些 himm 命令可以直接写在 /etc/init.d/rcS 文件里吗?让这些命令上电就执行?

hanfei69882

2个粉丝

26

问答

0

专栏

2

资料

hanfei69882 2016-12-05 14:55:15
认可0
1.D大写的新手会有不太理解,主要是两个问题
a. 方向设置操作是直接操作8bit的,2就是0x10,对于GPIO0_1操作就是操作第二位
b.DATA寄存器通过 一个10位的地址中的高8位进行位寻址,范围0x000-0x3fc,如果直接读取8bit的值那么直接操作0x3fc即可,如果要按位读取的话需要读取寄存器:(1 << ( i + 2 ))
himm 0x20150008  0xFF 关键是0x20150008怎么得到,对于GPIO0_1就是(1 << (1+2)),也就是8,后面的0xff是置1,这个值只有0xff和0x00

2.可以,不过效率上没有直接代码操作寄存器高

xuechengan

0个粉丝

10

问答

0

专栏

0

资料

xuechengan 2016-12-05 15:55:40
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=42427&ptid=13574]hanfei69882 发表于 2016-12-5 14:55[/url]
1.D大写的新手会有不太理解,主要是两个问题
a. 方向设置操作是直接操作8bit的,2就是0x10,对于GPIO0_1操 ...[/quote]

嗯嗯,非常感谢你耐心的分析,对于上面设置的几个数值明白了。对于第二个问题,你说himm设置效率没有直接在代码中操作寄存器高,指的是使用 himm 命令不如使用接口函数 HI_S32 HI_MPI_SYS_SetReg(HI_U32 u32Addr, HI_U32 u32Value)效率高呗?

hanfei69882

2个粉丝

26

问答

0

专栏

2

资料

hanfei69882 2016-12-05 16:13:23
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=42434&ptid=13574]xuechengan 发表于 2016-12-5 15:55[/url]
嗯嗯,非常感谢你耐心的分析,对于上面设置的几个数值明白了。对于第二个问题,你说himm设置效率没有直接 ...[/quote]

应用层的应该就是这个

驱动层的writel直接操作对应寄存器就可以

xuechengan

0个粉丝

10

问答

0

专栏

0

资料

xuechengan 2016-12-05 16:15:45
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=42437&ptid=13574]hanfei69882 发表于 2016-12-5 16:13[/url]
应用层的应该就是这个

驱动层的writel直接操作对应寄存器就可以[/quote]

嗯嗯,谢谢你的回答,学到了不少

xuechengan

0个粉丝

10

问答

0

专栏

0

资料

xuechengan 2016-12-12 14:39:08
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=42437&ptid=13574]hanfei69882 发表于 2016-12-5 16:13[/url]
应用层的应该就是这个

驱动层的writel直接操作对应寄存器就可以[/quote]

你好,那天你分享的寄存器配置我在配置的时候遇到了点问题,想再请教一下,谢谢!
对于GPIO管脚配置成输入引脚的情况该怎么设置呢?

我现在要配置GPIO13_6管脚为输入管脚,我在芯片手册上查了,GPIO13_6的复用管脚的地址如下:

himm 0x200F0A18 0             //定义复用管脚GPIO13_6功能,0x200F0800 + 0x0218 = 0x200F0A18
himm 0x20210400 0             //定义GPIO13_6引脚为输入引脚,0x20210000 + 0x400 = 0x20210400
himm 0x20210100 0xFF       //将GPIO13_6输入引脚置1,0x20210000 + (1<<(6+2)) = 0x20210100

我总感觉这样配置是有问题的!

hanfei69882

2个粉丝

26

问答

0

专栏

2

资料

hanfei69882 2016-12-12 16:36:38
认可0
本帖最后由 hanfei69882 于 2016-12-12 16:50 编辑

1、寄存器操作隐患:

[quote]himm 0x20210400 0             //定义GPIO13_6引脚为输入引脚,0x20210000 + 0x400 = 0x20210400[/quote]
0x20210400方向寄存器是控制GPIO13_0 ~ GPIO13_7八个管脚,这样操作导致八个管脚都设置为输入
如果做测试简单操作的话建议先读出来0x20210400的值,将第六位置0再写入,不然可能引起其他问题
毕竟himm只是辅助工具,代码正常操作的话也是先读出寄存器的值,只改变自己需要操作的那一位


2、GPIO操作问题,貌似输入输出没搞明白:L

GPIO作为输入的话要外部有一个电平的拉高拉低,读取寄存器的值去获取外部状态
想要寄存器操作GPIO输出高低电平的话要把GPIO作为输出

xuechengan

0个粉丝

10

问答

0

专栏

0

资料

xuechengan 2016-12-12 17:22:16
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=42731&ptid=13574]hanfei69882 发表于 2016-12-12 16:36[/url]
1、寄存器操作隐患:


[/quote]

是的,我就是感觉himm 0x20210400 0这句把所有引脚都设为输入了,你说的那个先把0x20210400的值读出来,再将第六位置0再写入,这句话没看明白:(,把第六位置0写入寄存器的值不是这条命令吗?

hanfei69882

2个粉丝

26

问答

0

专栏

2

资料

hanfei69882 2016-12-12 20:41:57
认可0
本帖最后由 hanfei69882 于 2016-12-12 21:12 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=42735&ptid=13574]xuechengan 发表于 2016-12-12 17:22[/url]
是的,我就是感觉himm 0x20210400 0这句把所有引脚都设为输入了,你说的那个先把0x20210400的值读出来, ...[/quote]
是这条指令,区别在于写入的值不同
比如说读出来的值是0x10010100

第六位置1写进去的值就是0x10110100

只修改第六位,保留其他位

xuechengan

0个粉丝

10

问答

0

专栏

0

资料

xuechengan 2016-12-13 16:37:54
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=42755&ptid=13574]hanfei69882 发表于 2016-12-12 20:41[/url]
是这条指令,区别在于写入的值不同
比如说读出来的值是0x10010100

[/quote]

好的,谢谢

Benz

0个粉丝

29

问答

0

专栏

0

资料

Benz 2017-01-08 15:41:12
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=42755&ptid=13574]hanfei69882 发表于 2016-12-12 20:41[/url]
是这条指令,区别在于写入的值不同
比如说读出来的值是0x10010100

[/quote]

路过  来点赞
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区