鉴于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串口驱动的完善的更多相关文章

  1. linux 串口驱动(二)初始化 【转】

    转自:http://blog.chinaunix.net/uid-27717694-id-3493611.html 8250串口的初始化: (1)定义uart_driver.uart_ops.uart ...

  2. linux2.6.30.4内核移植(4)——完善串口驱动

    在内核里支持两个串口,也就是芯片的UART0和UART1,而UART2的驱动是针对红外接口的,而不是串口驱动,这里将其修改为串口驱动. 一.修改内核源码arch/arm/mach-s3c2440/ma ...

  3. linux UART串口驱动开发文档

    转:http://www.360doc.com/content/10/0417/18/829197_23519037.shtml linux UART串口驱动开发文档时间:2010-01-09 14: ...

  4. Yocto开发笔记之《串口驱动调试》(QQ交流群:519230208)

    QQ群:519230208,为避免广告骚扰,申请时请注明 “开发者” 字样 ======================================================== 串口驱动各 ...

  5. Smart210学习记录------linux串口驱动

    转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=27025492&id=327609 一.核心数据结构 串口驱动有 ...

  6. linux的串口驱动分析

    1.串口驱动中的数据结构 • UART驱动程序结构:struct uart_driver  驱动 • UART端口结构: struct uart_port  串口 • UART相关操作函数结构: st ...

  7. linux串口驱动分析——发送数据

    一.应用程序中write函数到底层驱动历程 和前文提到的一样,首先先注册串口,使用uart_register_driver函数,依次分别为tty_register_driver,cdev_init函数 ...

  8. linux串口驱动分析——打开设备

    串口驱动是由tty_driver架构实现的.一个应用程序中的函数要操作硬件,首先会经过tty,级级调用之后才会到达驱动之中.本文先介绍应用程序中打开设备的open函数的整个历程. 首先在串口初始化中会 ...

  9. linux串口驱动分析

    linux串口驱动分析 硬件资源及描写叙述 s3c2440A 通用异步接收器和发送器(UART)提供了三个独立的异步串行 I/O(SIO)port,每一个port都能够在中断模式或 DMA 模式下操作 ...

随机推荐

  1. C++入门篇四

    常量引用:形参不能修改,节省开辟内存空间的开销 用一级指针代替二级指针常量引用,使用场景,修饰形参为只读const int a=10会分配内存如果使用引用,在前面加了一个const的话,那么就不可以修 ...

  2. DOS批处理高级教程(还不错)(转)

    前言 目录 第二节 常用特殊符号     1.@  命令行回显屏蔽符     2.%  批处理变量引导符     3.>   输出重定向符     4.>>  输出重定向符     ...

  3. 金蝶K3 WISE BOM多级展开_销售成本表

    /****** Object: StoredProcedure [dbo].[pro_bobang_SaleCost] Script Date: 07/29/2015 16:13:43 ******/ ...

  4. spring boot slf4j日记记录配置详解

    https://blog.csdn.net/liuweixiao520/article/details/78900779

  5. Python学习计划

    ---恢复内容开始--- Python学习计划   https://edu.csdn.net/topic/python2?utm_source=blog4   匠人之心,成就真正Python全栈工程师 ...

  6. tensorflow例子-【老鱼学tensorflow】

    本节主要用一个例子来讲述一下基本的tensorflow用法. 在这个例子中,我们首先伪造一些线性数据点,其实这些数据中本身就隐藏了一些规律,但我们假装不知道是什么规律,然后想通过神经网络来揭示这个规律 ...

  7. MATLAB 2012b license checkout failed

    we offer you two ways to license matlab r2012b: standalone1) choose "install manually without u ...

  8. sql多字段相减///单字段多值

    SELECT IFNULL(t.预算金额,)-IFNULL(t.实使用金额,)-IFNULL(SUM(f.已审核.待审核总数),)remainingMoney FROM 表名 t LEFT JOIN ...

  9. SAS 对数据的拼接与串接

    SAS 对数据的拼接与串接 使用SAS对数据进行串接.合并.更新与修改. 1. 数据集的纵向串接 数据集的纵向串接指的是,将两个或者多个数据集首尾相连,形成 一个新的数据集. 对数据集的纵向串接可以通 ...

  10. 解决ubuntu下firefox无法在线播放音频和视频的问题

    原因 Ubuntu 为了规避专利和版权问题,很多东西没有预装,比如音视频解码器AAC. 那么为什么明明 Ubuntu 上没有AAC解码器, Chrome 却可以正常播放呢,自然的想法是 Chrome ...