3518e 开启第三个串口uart2
2016-05-14 11:01
435 查看
因为工作需要,需要使用3518e的uart2,但是海思内核默认只开启了uart0和uart1,因此需要自己手动开启uart2,因此网上查了一些资料,打开uart2。
参考资料1 http://www.ebaina.com/bbs/thread-5111-1-1.html
参考资料2http://www.lai18.com/content/1938833.html
参考资料3http://blog.csdn.net/olei_oleitao/article/details/7383592
具体过程如下:
1、修改内核arch/arm/mach-hi3518/core.c
2.关于uart2的引脚,如下图所示
![](https://oscdn.geek-share.com/Uploads/Images/Content/201605/ef87471c4ba28137c5ef446601322bb9)
也就是说,uart2的两个引脚复用了,因此需要将其复用为uart功能,而不是普通的GPIO,
通过查询海思的sdk得知,其对应的寄存器地址为
因此,在编写应用程序代码时,需要在对串口进行初始化时,采取以下方式对其进行复用功能控制:
至此,完成,并且uart2能够正常收发数据。
但是,在参考资料3中
参考资料3http://blog.csdn.net/olei_oleitao/article/details/7383592
里面有这样一句话
一直没有找到
以上便是全部过程,如有错误,欢迎指教!
参考资料1 http://www.ebaina.com/bbs/thread-5111-1-1.html
参考资料2http://www.lai18.com/content/1938833.html
参考资料3http://blog.csdn.net/olei_oleitao/article/details/7383592
具体过程如下:
1、修改内核arch/arm/mach-hi3518/core.c
1.第一个修改的地方 HIL_AMBA_DEVICE(uart0, "uart:0", UART0, NULL); HIL_AMBA_DEVICE(uart1, "uart:1", UART1, NULL); HIL_AMBA_DEVICE(uart2, "uart:2", UART2, NULL); 2.第二个修改的地方 static struct amba_device *amba_devs[] __initdata = { &HIL_AMBADEV_NAME(uart0), &HIL_AMBADEV_NAME(uart1), &HIL_AMBADEV_NAME(uart2), }; 3.第三个修改的地方 static struct clk_lookup lookups[] = { { /* UART0 */ .dev_id = "uart:0", .clk = &uart_clk, }, { /* UART1 */ .dev_id = "uart:1", .clk = &uart_clk, }, { /* UART2 */ .dev_id = "uart:2", .clk = &uart_clk, }, };
2.关于uart2的引脚,如下图所示
也就是说,uart2的两个引脚复用了,因此需要将其复用为uart功能,而不是普通的GPIO,
通过查询海思的sdk得知,其对应的寄存器地址为
uart2_RXD ----> 0x200f0108 uart2_TXD ----> 0x200f010C
因此,在编写应用程序代码时,需要在对串口进行初始化时,采取以下方式对其进行复用功能控制:
system("himm 0x200F0108 0x1"); system("himm 0x200F010c 0x1"); 或者 system("devmem 0x200f0108 32 0x00000001"); system("devmem 0x200f010c 32 0x00000001"); 或者 在目录 /ko/lowpower.sh中,有这样一句话 #UART2管脚复用成gpio himm 0x200f0108 0x0 himm 0x200f010c 0x0 将其改为 himm 0x200f0108 0x1 himm 0x200f010c 0x1 即可
至此,完成,并且uart2能够正常收发数据。
但是,在参考资料3中
参考资料3http://blog.csdn.net/olei_oleitao/article/details/7383592
里面有这样一句话
最后在hisilicon_init_machine函数后面增加对这4个管脚复用设置为串口使用; writew(1, IO_ADDRESS(REG_BASE_IO)); writew(1, IO_ADDRESS(REG_BASE_IO+0x0004)); writew(1, IO_ADDRESS(REG_BASE_IO+0x0028)); writew(1, IO_ADDRESS(REG_BASE_IO+0x002C)); 然后编译内核重新下载内核 查看dev目录下有了ttyAMA2 和ttyAMA3 然后用串口测试工具测试OK!
一直没有找到
hisilicon_init_machine这个函数在那个地方,麻烦有了解的告诉一声。
以上便是全部过程,如有错误,欢迎指教!
相关文章推荐
- Linux之特殊权限(SUID/SGID/SBIT)
- 在 idea 中使用 gradle 导入maven仓库
- Android 编译ffmpeg
- java String.split()函数的用法分析
- iOS——UITableView的优化
- 手机开发实战14——GSM业务种类2
- 总结
- 常用的正则表达式
- python pip
- QT——启动界面
- linux内核启动head.s
- 安卓中将int值转换为String 将String装换长int
- AsyncTask源码的理解
- 码代码新神器-Github Atom
- 在虚拟机上安装Linux
- linux系统时间修改及同步
- ACM基本输入输出
- 如何成为一名高级C++程序员
- 排序算法
- 常见小错误,小心别中招