yctime

yctime

1个粉丝

1

问答

0

专栏

0

资料

yctime  发布于  2016-04-27 18:29:07
采纳率 0%
1个问答
21132

【已解决】关于海思串口uart1的使用问题

 
本帖最后由 goodman 于 2016-5-17 16:28 编辑

这个问题好多人碰都过,也有相关的技术帖子,但都是有提问,却没有解决方案。。。。。
海思默认是踢狗两个串口设备的,但是这两个串口设备只有uart0 可以使用,uart1 是不能操作使用的(只能写,不能读)

从内核缓存里面看貌似是ttyAMA1没有使能?但如果没使能,为什么能写呢?
把内核驱动代码这块看了一边,看的头大,无论是设备注册还是驱动注册都是一样的,搞不清楚为什么uart1 没法使用??
求高手指点
我来回答
回答47个
时间排序
认可量排序

yctime

1个粉丝

1

问答

0

专栏

0

资料

yctime 2016-04-27 18:49:30
认可0
不是使能的原因,刚测试,如图,结果是一样的,ttyAMA1 只能写,不能读

yctime

1个粉丝

1

问答

0

专栏

0

资料

yctime 2016-04-27 18:50:51
认可0
应该还是寄存器配置的问题,谁能指点下

ngswfx

1个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-04-27 21:17:40
认可0
本帖最后由 ngswfx 于 2016-4-27 21:48 编辑

你有没有在程序里面写过或者修改过关于UART1的配置,如果没有,应该就是寄存器的事


我是吧UART2搞成GPIO用了,你可以参考一下:

         //2106c板子上2个跳线,分别是7\8腿 UART2_RXD以及UART2_TXD,可以复用
        //7 GPIO5_4 偏移地址0x05C  0:GPIO5_4; 1:UART2_RXD。   //被用来IP复位
        //8 GPIO5_5 偏移地址0x060  0:GPIO5_5; 1:UART2_TXD。   //被用来图像复位
        HI_U32 pu32Value=0xff;
        HI_MPI_SYS_SetReg((HI_U32)0x200F0060,(HI_U32)0x00);  //00:GPIO5_5(01:UART2_TXD);//GPIO复用 000:GPIO5_5;
        HI_MPI_SYS_SetReg((HI_U32)0x201A0400,(HI_U32)0xFF);  //设定为输出状态
        HI_MPI_SYS_SetReg((HI_U32)0x201A0080,(HI_U32)0xFF);  //设定默认输出数据为高,有数据值FF,默认被拉高,因为旁边跳线是地,避免没有连接数据线导致不停恢复默认,程序认为一直连接跳线
        //////////////////////////////////////////////////////
        HI_MPI_SYS_SetReg((HI_U32)0x201A0400,(HI_U32)0x00);   //00 GPIO5_5输入状态
        if(HI_SUCCESS==HI_MPI_SYS_GetReg(0x201A0080,&pu32Value)){////key  GPIO5_5 偏移地址 0x060     0000100000 00   0x080
       

//////////////////

ngswfx

1个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-04-27 21:22:43
认可0
本帖最后由 ngswfx 于 2016-4-27 21:58 编辑

改某个寄存器,三个步骤:
1、设定复用
2、设定这个口是读还是写
3、写或者读数据。

如果改成串口,我估计只需前2个即可,甚至连第2步骤中,方向都不用设置。文档上还比较详细。我自己就是看了版主的文章,然后自己再看文档,自己弄的。


改成串口我没测试过,不过道理相通。

文档中写着:
194 UART1_RXD I PU /O 4 3.3 功能 0:GPIO5_1 通用输入输出 功能 1:UART1_RXD UART1 数据接收                    //说明要设置为1才是启动串口模式
198 UART1_TXD I/O       4 3.3 功能 0:GPIO5_3 通用输入输出功能  1:UART1_TXD UART1 数据发送                           //说明要设置为1才是启动串口模式

194 UART1_RXD muxctrl_reg20 GPIO5_1 UART1_RXD                    //说明muxctrl_reg20有关联信息,需要查看,查看后发现偏移地址0x050
198 UART1_TXD muxctrl_reg22 GPIO5_3 UART1_TXD                        //查看后,发现偏移地址0x058

////////////控制复用的基础地址,都一样,是0x200F0000 +偏移地址,就是对应端口的控制地址了

UART1_RXD得到:0x200F0050
UART1_TXD得到:0x200F0058

//然后就是端口是读还是写,这个由于不是GPIO,我就只能瞎猜了,实际测试为准,我没弄过。如果是GPIO我会算            

先确定GPIO5的基础地址为0x201A000,然后GP5_1,就是第一个腿,                   二进制就是00000001                                  注意前面再加2个0,后面也再加2个0,海斯就这么定的  ,就得到二进制:000000000100转化为十六进制,0x04
                                                   GPIO5_3,第3腿,                      二进制就是00000100                          前后各加2个00      得到        000000010000                        16进制为0x10
                               
如果要控制其为输出,偏移地址为0x400,也就是,设定0x201A0400

让GPIO输出数据就是:0x201A0000+0x04   得到0x201A00004

综合起来需要发的命令就是:
HI_MPI_SYS_SetReg((HI_U32)0x200F0050,(HI_U32)0x01);  //00:GPIO5_1(01:UART1_RXD);//1:UART1_RXD UART1 数据接收:GPIO5_1;
HI_MPI_SYS_SetReg((HI_U32)0x201A0400,(HI_U32)0x0);  //设定为输人状态   不知有没有必要设置 测试为准

HI_MPI_SYS_SetReg((HI_U32)0x200F0058,(HI_U32)0x01);  //00:GPIO5_3(01:UART3_TXD);//1:UART1_TXD UART1 数据发送:GPIO5_3;
HI_MPI_SYS_SetReg((HI_U32)0x201A0400,(HI_U32)0x1);  //设定为输出状态   不知有没有必要设置 测试为准

////////////////////////////////////////////////////////////////////////////////////////////////////

再次声明,我没试过:lol

不过根据我改GPIO的经验,红色字部分是重点

   

ngswfx

1个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-04-27 21:55:28
认可0
本帖最后由 ngswfx 于 2016-4-27 22:30 编辑

上面的方法可能是错的,因为UART1的基础地址好像是0x20090000,而不是GPIO5的0x201A0000,如果是这样的话,你可以写代码都测试一下,然后确定,怎么开。

假如芯片启动后这些腿的状态是乱的(或者说是第3状态),那必须主动设定才能用的可能性大些。我手上的板子,都没有引出Uart1的引脚,我没法测uart1

#define DDR_MEM_BASE                        0x80000000
#define PCIE1_CFG_BASE                        0x70000000
#define PCIE1_MEM_BASE                        0x60000000
#define SFC_MEM_BASE                        0x58000000
#define NAND_MEM_BASE                        0x50000000
#define PCIE0_CFG_BASE                        0x40000000
#define PCIE0_MEM_BASE                        0x30000000
#define PCIE1_REG_BASE                        0x20810000
#define PCIE0_REG_BASE                        0x20800000
#define L2_CACHE_BASE                        0x20700000
#define ARM_DEBUG_BASE                        0x20400000
#define ARM_REG_BASE                        0x20300000
#define GPIO18_REG_BASE                        0x20270000
#define GPIO17_REG_BASE                        0x20260000
#define GPIO16_REG_BASE                        0x20250000
#define GPIO15_REG_BASE                        0x20240000
#define GPIO14_REG_BASE                        0x20230000
#define GPIO13_REG_BASE                        0x20220000
#define GPIO12_REG_BASE                        0x20210000
#define GPIO11_REG_BASE                        0x20200000
#define GPIO10_REG_BASE                        0x201F0000
#define GPIO9_REG_BASE                        0x201E0000
#define GPIO8_REG_BASE                        0x201D0000
#define GPIO7_REG_BASE                        0x201C0000
#define GPIO6_REG_BASE                        0x201B0000
#define GPIO5_REG_BASE                        0x201A0000
#define GPIO4_REG_BASE                        0x20190000
#define GPIO3_REG_BASE                        0x20180000
#define GPIO2_REG_BASE                        0x20170000
#define GPIO1_REG_BASE                        0x20160000
#define GPIO0_REG_BASE                        0x20150000
#define DDRC1_REG_BASE                        0x20120000
#define DDRC0_REG_BASE                        0x20110000
#define IO_CONFIG_REG_BASE                0x200F0000
#define UART3_REG_BASE                        0x200B0000
#define UART2_REG_BASE                        0x200A0000
#define UART1_REG_BASE                        0x20090000
#define UART0_REG_BASE                        0x20080000
#define IR_REG_BASE                        0x20070000
#define RTC_REG_BASE                        0x20060000
#define SYS_CTRL_REG_BASE                0x20050000
#define REG_BASE_SCTL                   SYS_CTRL_REG_BASE

yctime

1个粉丝

1

问答

0

专栏

0

资料

yctime 2016-05-17 09:28:04
认可0
问题已经解决,碰到串口只能写不能读的情况,多半是硬件问题,找硬件的原因就是,找厂商给你换板子,厂商是永远说他的板子没问题,信他你就会被玩死

zy_oo

0个粉丝

4

问答

0

专栏

1

资料

zy_oo 2016-05-17 20:39:11
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=30098&ptid=11157]yctime 发表于 2016-5-17 09:28[/url]
问题已经解决,碰到串口只能写不能读的情况,多半是硬件问题,找硬件的原因就是,找厂商给你换板子,厂商是 ...[/quote]

我是Hi3516A的开发板,用himm设置了uart1_RXD和TXD的复用,但是直接对ttyAMA1 write,串口上显示没有输出,求助,是哪里还需要改吗?

洋芋头

1个粉丝

3

问答

0

专栏

0

资料

洋芋头 2016-06-10 14:41:29
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=29287&ptid=11157]ngswfx 发表于 2016-4-27 21:17[/url]
你有没有在程序里面写过或者修改过关于UART1的配置,如果没有,应该就是寄存器的事


[/quote]

想问一下关于UART1串口复用的部分是在哪个文档里有提到哈,之前翻了都没翻到

ngswfx

1个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-06-10 16:19:52
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=31419&ptid=11157]洋芋头 发表于 2016-6-10 14:41[/url]
想问一下关于UART1串口复用的部分是在哪个文档里有提到哈,之前翻了都没翻到[/quote]

最大的那个
/Hi3516A V100R001C01SPC050/00.hardware/chip/document_cn
Hi3516A/Hi3516D 专业型HD IP Camera Soc用户指南.pdf

洋芋头

1个粉丝

3

问答

0

专栏

0

资料

洋芋头 2016-06-10 18:00:37
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=31420&ptid=11157]ngswfx 发表于 2016-6-10 16:19[/url]
最大的那个
/Hi3516A V100R001C01SPC050/00.hardware/chip/document_cn
Hi3516A/Hi3516D 专业型HD IP  ...[/quote]

不好意思我表达失误,这个我找到了哈

是想问串口复用有没有具体例子,类似于你贴的这段代码

ngswfx

1个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-06-10 19:55:06
认可0
论坛大佬发过相关帖子,我就是看那个帖子学的

洋芋头

1个粉丝

3

问答

0

专栏

0

资料

洋芋头 2016-06-11 15:24:39
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=31425&ptid=11157]ngswfx 发表于 2016-6-10 19:55[/url]
论坛大佬发过相关帖子,我就是看那个帖子学的[/quote]

厚着脸皮求地址或者关键字也行……之前搜过uart1的帖子全都是没解决问题的……

ngswfx

1个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-06-11 15:35:43
认可0
本帖最后由 ngswfx 于 2016-6-11 15:37 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=31442&ptid=11157]洋芋头 发表于 2016-6-11 15:24[/url]
厚着脸皮求地址或者关键字也行……之前搜过uart1的帖子全都是没解决问题的……[/quote]

[url]http://www.ebaina.com/bbs/forum.php?mod=viewthread&tid=7674&extra=page%3D1[/url]


///一定注意,每种海斯的芯片,其各个参数不一样的。基地址,偏移量等等,都不同,你需要自己看相应芯片的文档,然后自己计算。

洋芋头

1个粉丝

3

问答

0

专栏

0

资料

洋芋头 2016-06-11 15:48:47
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=31444&ptid=11157]ngswfx 发表于 2016-6-11 15:35[/url]
http://www.ebaina.com/bbs/forum.php?mod=viewthread&tid=7674&extra=page%3D1


[/quote]

谢谢大佬!

洋芋头

1个粉丝

3

问答

0

专栏

0

资料

洋芋头 2016-06-13 17:48:35
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=31444&ptid=11157]ngswfx 发表于 2016-6-11 15:35[/url]
http://www.ebaina.com/bbs/forum.php?mod=viewthread&tid=7674&extra=page%3D1


[/quote]

不好意思再问一下官方文档里有没有写himm的用法……又搜了一圈还是没找到……

ngswfx

1个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-06-13 22:40:43
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=31573&ptid=11157]洋芋头 发表于 2016-6-13 17:48[/url]
不好意思再问一下官方文档里有没有写himm的用法……又搜了一圈还是没找到……[/quote]

就是个修改海斯芯片寄存器的命令而已。

你主要需要明确不同的功能,是那个寄存器,并且值是多少。这些都在文档里面描述了。

knaffe

0个粉丝

3

问答

0

专栏

0

资料

knaffe 2016-07-03 10:32:36
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=31581&ptid=11157]ngswfx 发表于 2016-6-13 22:40[/url]
就是个修改海斯芯片寄存器的命令而已。

你主要需要明确不同的功能,是那个寄存器,并且值是多少。这些 ...[/quote]

请问有3520D关于串口的程序吗?我需要串口发送一些数据,但是没接触过嵌入式,所以没看懂,特此向你请教

knaffe

0个粉丝

3

问答

0

专栏

0

资料

knaffe 2016-07-03 10:38:56
认可0
请问如何使用UART0?能否提供相关的代码?

ngswfx

1个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-07-03 12:57:46
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=33066&ptid=11157]knaffe 发表于 2016-7-3 10:38[/url]
请问如何使用UART0?能否提供相关的代码?[/quote]

网上搜,有源码,和linux是一样的。就是fopen那个tty0。然后设置波特率等。

knaffe

0个粉丝

3

问答

0

专栏

0

资料

knaffe 2016-07-03 15:14:43
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=33069&ptid=11157]ngswfx 发表于 2016-7-3 12:57[/url]
网上搜,有源码,和linux是一样的。就是fopen那个tty0。然后设置波特率等。[/quote]

串口的名字就叫tty0?我在Dev文件夹上面看到是ttyAMA0。open tty0 还是 ttyAMA0?
加载中···
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区