hisi35xx串口驱动的完善
鉴于hisi的uart3还没有打通,ls /dev/ | grep ttyA* ,看到的只有ttyAMA0 和ttyAMA1,且使用应用程序打开ttyAMA1设备后,使用write函数,发送,示波器观察没有波形输出。
猜想是GPIO复用管脚没打开于是编写了GPIO复用管脚驱动,加载驱动,ttyAMA1可以正常使用 。每次启动程序都要加载此驱动,比较麻烦,所以想要在内核添加,搜索UART,定位UART的位置,位于:arch/arm/mach-353xx/core.c。如下所示,添加了UART3,把从CPU的屏蔽掉。改为主CPU用。
HIL_AMBA_DEVICE(uart0, "uart:0", UART0, NULL);
HIL_AMBA_DEVICE(uart1, "uart:1", UART1, NULL);
HIL_AMBA_DEVICE(uart3, "uart:3", UART3, NULL); // static struct amba_device *amba_devs[] __initdata = {
&HIL_AMBADEV_NAME(uart0),
&HIL_AMBADEV_NAME(uart1),
&HIL_AMBADEV_NAME(uart3), // };
static struct clk_lookup lookups[] = {
{
/* UART0 */
.dev_id = "uart:0",
.clk = &uart_clk,
},
{
/* UART1 */
.dev_id = "uart:1",
.clk = &uart_clk,
},
//modify by lqh at
{
/* UART3 */
.dev_id = "uart:3",
.clk = &uart_clk,
}, { /* SP804 timers */
.dev_id = "sp804",
.clk = &sp804_clk,
},
#ifdef CONFIG_HI3536_SYSCNT
{ /* syscnt timers */
.dev_id = "syscnt",
.clk = &syscnt_clk,
},
#endif
};
这里仅仅是配置UART外设,管脚却是没有配置,配置UART1和UART3管脚使之能用。
/* init UART1 and UART3 IO*/
reg = readl((volatile void *)IO_ADDRESS(REG_UART1_RX_MUXCTRL));
reg |= 0x01;
writel(reg, (volatile void *)IO_ADDRESS(REG_UART1_RX_MUXCTRL)); reg = readl((volatile void *)IO_ADDRESS(REG_UART1_TX_MUXCTRL));
reg |= 0x01;
writel(reg, (volatile void *)IO_ADDRESS(REG_UART1_TX_MUXCTRL)); reg = readl((volatile void *)IO_ADDRESS(REG_UART3_RX_MUXCTRL));
reg |= 0x01;
writel(reg, (volatile void *)IO_ADDRESS(REG_UART3_RX_MUXCTRL)); reg = readl((volatile void *)IO_ADDRESS(REG_UART3_TX_MUXCTRL));
reg |= 0x01;
writel(reg, (volatile void *)IO_ADDRESS(REG_UART3_TX_MUXCTRL));
REG_UART1_RX_MUXCTRL具体平台的复用寄存器地址,看文档。
经过此配置uart1和uart3能工作了。
发现:
1、串口输入什么进去,该窗口就能输出什么!该功能是liunx的串口的会显功能。可以通过应用程序屏蔽掉。options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG | NOFLSH|ECHOK|ECHONL); /*屏蔽会显功能*/
2、设置超时功能
options.c_cc[VTIME] = ; /* 0s*/经过此设置串口即可工作。
3、设置接收几个字符返回
options.c_cc[VMIN] = ; /* define the minimum bytes data to be readed,*///只要串口收到一个字符都会读取得到
hisi35xx串口驱动的完善的更多相关文章
- linux 串口驱动(二)初始化 【转】
转自:http://blog.chinaunix.net/uid-27717694-id-3493611.html 8250串口的初始化: (1)定义uart_driver.uart_ops.uart ...
- linux2.6.30.4内核移植(4)——完善串口驱动
在内核里支持两个串口,也就是芯片的UART0和UART1,而UART2的驱动是针对红外接口的,而不是串口驱动,这里将其修改为串口驱动. 一.修改内核源码arch/arm/mach-s3c2440/ma ...
- linux UART串口驱动开发文档
转:http://www.360doc.com/content/10/0417/18/829197_23519037.shtml linux UART串口驱动开发文档时间:2010-01-09 14: ...
- Yocto开发笔记之《串口驱动调试》(QQ交流群:519230208)
QQ群:519230208,为避免广告骚扰,申请时请注明 “开发者” 字样 ======================================================== 串口驱动各 ...
- Smart210学习记录------linux串口驱动
转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=27025492&id=327609 一.核心数据结构 串口驱动有 ...
- linux的串口驱动分析
1.串口驱动中的数据结构 • UART驱动程序结构:struct uart_driver 驱动 • UART端口结构: struct uart_port 串口 • UART相关操作函数结构: st ...
- linux串口驱动分析——发送数据
一.应用程序中write函数到底层驱动历程 和前文提到的一样,首先先注册串口,使用uart_register_driver函数,依次分别为tty_register_driver,cdev_init函数 ...
- linux串口驱动分析——打开设备
串口驱动是由tty_driver架构实现的.一个应用程序中的函数要操作硬件,首先会经过tty,级级调用之后才会到达驱动之中.本文先介绍应用程序中打开设备的open函数的整个历程. 首先在串口初始化中会 ...
- linux串口驱动分析
linux串口驱动分析 硬件资源及描写叙述 s3c2440A 通用异步接收器和发送器(UART)提供了三个独立的异步串行 I/O(SIO)port,每一个port都能够在中断模式或 DMA 模式下操作 ...
随机推荐
- CentOS7上部署taiga项目管理软件
作者:waringid 一.简介 Taiga 是一个免费开源,而且功能非常强大的项目管理平台,用于初创企业和敏捷开发团队.提供一个简单.漂亮的项目管理工具.Taiga 采用 Python Django ...
- VS2010 开发 VB6.0 activeX控件 dll
项目源码 https://download.csdn.net/download/csdn_z_s/10427764 开发环境 操作系统: win7 64位 旗舰版 Java语言开发环境: Eclip ...
- 金蝶K3 WISE 快速登录
金蝶K3 WISE 快速登录 "C:\Program Files (x86)\Kingdee\K3ERP\k3main.exe" -LoginUser|账套号|账套密码|用户账号| ...
- 如何解决 kubernetes 重启后,启来不来的问题
参考了 https://blog.csdn.net/nklinsirui/article/details/80855415 最近在调研 kubeneter ,准备把线上的服务器架构再调整下,然后模拟各 ...
- matplotlib坐标轴设置续-【老鱼学matplotlib】
本次会讲解如何修改坐标轴的位置. 要修改轴,就要先得到当前轴:plt.gca(),这个函数名挺怪的,其实是如下英文字母的首字母:get current axis,也就是得到当前的坐标轴. import ...
- 新世界主机_XenServer7.0都有哪些优势?
新世界主机VPS全部都采用了Xen硬件虚拟化技术,每个用户都能够独享资源,一键就可以创建和重装VPS,每个VPS都拥有足够的带宽,保证顺畅运行(http://m.0830mn.com). 新世界主机使 ...
- Python 求点到直线的垂足
Python 求点到直线的垂足 在已知一个点,和一条已知两个点的直线的情况下 运算公式参考链接:https://www.cnblogs.com/mazhenyu/p/3508735.html def ...
- FLASK 的Session和MoudelForm插件
falsk是小而精的框架,但是热度高, 所有很多爱好者提供了很多扩展插件 功能强大,美而不足的就是兼容稳定性有时候不太好,不过大部分还是很可以的 Flask-Session flask内置sessio ...
- LeetCode(21. 合并两个有序链表)
问题描述 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1->1-& ...
- (77)Wangdao.com第十五天_JavaScript 用于数据交换的文本格式 JSON 对象
JSON 对象 JSON (JavaScript Object Notation 的缩写) 也是一种数据,是 JavaScript 的原生对象,用来处理 JSON 格式数据.它有两个静态方法:JSON ...