ARM-Linux s3c2440 之UART分析(三)

发布者:skyhcg最新更新时间:2016-06-12 来源: eefocus关键字:ARM  Linux  s3c2440  UART 手机看文章 扫描二维码
随时随地手机看文章
回顾一下上文,s3c2440串口底层驱动围绕三个数据结构展开:

UART特定的驱动程序结构定义:struct uart_driver s3c24xx_uart_drv;

UART端口结构定义: struct uart_port s3c24xx_serial_ops;

UART相关操作函数结构定义: struct uart_ops s3c24xx_serial_ops;

 

实现了这三个数据结构体,基本完成了驱动操作函数的实现,紧接着需要对串口设备及设备驱动进行初始化,首先是模块初始化module_init(s3c24xx_serial_modinit):

 

  1. static int __inits3c24xx_serial_modinit(void)  
  2. {  
  3.        intret;  
  4.        ret= uart_register_driver(&s3c24xx_uart_drv);  //注册uart驱动,在serial_core.c中实现  
  5.        if(ret < 0) {  
  6.               printk(KERN_ERR"failed to register UART driver\n");  
  7.               return-1;  
  8.        }  
  9.    
  10.        return0;  
  11. }  

 

uart_register_driver在串口核心及TTY层间进行相关注册:


 

  1. int uart_register_driver(struct uart_driver*drv)  
  2. {  
  3.   struct tty_driver *normal = NULL;  
  4.   …  
  5.        drv->tty_driver= normal;  
  6.        normal->owner             = drv->owner;  
  7.        normal->driver_name     = drv->driver_name;  
  8.        normal->name        = drv->dev_name;  
  9.        normal->major              = drv->major;  
  10.        normal->minor_start      = drv->minor;  
  11.        normal->type         = TTY_DRIVER_TYPE_SERIAL;  
  12.        normal->subtype           = SERIAL_TYPE_NORMAL;  
  13.        normal->init_termios      = tty_std_termios;  
  14.        normal->init_termios.c_cflag= B9600 | CS8 | CREAD | HUPCL | CLOCAL;  
  15.        normal->init_termios.c_ispeed= normal->init_termios.c_ospeed = 9600;  
  16.        normal->flags        = TTY_DRIVER_REAL_RAW |TTY_DRIVER_DYNAMIC_DEV;  
  17.        normal->driver_state    = drv;  
  18.        tty_set_operations(normal,&uart_ops);  
  19.        ….  
  20.        retval= tty_register_driver(normal);   // tty 驱动注册  
  21.  out:  
  22.        if(retval < 0) {  
  23.               put_tty_driver(normal);  
  24.               kfree(drv->state);  
  25.        }  
  26.        returnretval;  
  27. }  

 

接着进行总线驱动platform_driver_register:


 

  1. int s3c24xx_serial_init(structplatform_driver *drv,  
  2.                      structs3c24xx_uart_info *info)  
  3. {  
  4. #ifdef CONFIG_PM  
  5.        drv->suspend= s3c24xx_serial_suspend;  
  6.        drv->resume= s3c24xx_serial_resume;  
  7. #endif  
  8.    
  9.        returnplatform_driver_register(drv);  //  
  10. }  

 

其中s3c24xx_serial_init为__init段,模块加载时初始化:


 

  1. static int __init s3c2440_serial_init(void)  
  2. {  
  3.        returns3c24xx_serial_init(&s3c2440_serial_drv, &s3c2440_uart_inf); //  
  4. }  

 

platfrom_driver_register()中调用driver_register()


 

  1. int platform_driver_register(structplatform_driver *drv)  
  2. {  
  3.        drv->driver.bus= &platform_bus_type;   //  
  4.        if(drv->probe)  
  5.               drv->driver.probe= platform_drv_probe;  
  6.        if(drv->remove)  
  7.               drv->driver.remove= platform_drv_remove;  
  8.        if(drv->shutdown)  
  9.               drv->driver.shutdown= platform_drv_shutdown;  
  10.        if(drv->suspend)  
  11.               drv->driver.suspend= platform_drv_suspend;  
  12.        if(drv->resume)  
  13.               drv->driver.resume= platform_drv_resume;  
  14.        returndriver_register(&drv->driver);  //  
  15. }  

 

因为串口设备在系统是一种platform_device所以是一种总线驱动类型,总线设备驱动注册platform_driver_register()之后,串口设备即可和相应的驱动关联起来了,这样就完成了串口设备与串口驱动的注册过程。

下一篇讲进一步结合源码分析。

关键字:ARM  Linux  s3c2440  UART 引用地址:ARM-Linux s3c2440 之UART分析(三)

上一篇:ARM-Linux s3c2440 之UART分析(四)
下一篇:ARM-Linux s3c2440 之UART分析(二)

推荐阅读最新更新时间:2024-03-16 14:56

51单片机入门 - UART串口
对于单片机来说,通信则与传感器、存储芯片、外围控制芯片等技术紧密结合,成为整个单片机系统的“神经中枢”。 1、初步认识 一位一位的发送出去的,要发送 8 次才能发送完一个字节。 STC89C52有两个引脚是专门用来做 UART串行通信的,一个是 P3.0一个是 P3.1,它们还分别有另外的名字叫做 RXD和TXD,由它们组成的通信接口就叫做串行接口,简称串口。 波特率:发送二进制数据位的速率,习惯上用 baud 表示;即我们发送一位二进制数据的持续时间=1/baud。 通信过程:在UART 通信的时候,一个字节是 8 位,规定当没有通信信号发生时,通信线路保持高电平,当要发送数据之前,先发一位 0
[单片机]
51单片机入门 - <font color='red'>UART</font>串口
软银拟收购ARM 英特尔面临更大竞争压力
与英国公司ARM Holdings PLC (ARMH)之间的竞争总会给英特尔公司(Intel Co. ,INTC)带来特殊麻烦,英特尔已多次尝试突破ARM对智能手机芯片技术的封锁,但均以失败告终。这项任务可能很快会变得更加艰巨。 日本软银集团股份有限公司(SoftBank Group Corp. ,9984.TO)周一宣布,计划以320亿美元收购ARM,并承诺对ARM进行更多投资,帮助其在五年内将员工数量增加一倍。ARM获得的额外资金也将被用于收购和内部技术发展,以增强该芯片设计公司在新市场的影响力,比如数据中心设备这个英特尔占据优势的市场。 Linley Group分析师Linley Gwenn称,对于英特尔
[半导体设计/制造]
ARM芯片选择的一般原则
1.1 ARM芯核 如果希望使用WinCE或Linux等操作系统以减少软件开发时间,就需要选择ARM720T以上带有MMU(memory management unit)功能的ARM芯片,ARM720T、StrongARM、ARM920T、ARM922T、ARM946T都带有MMU功能。而 ARM7TDMI没有MMU,不支持Windows CE和大部分的Linux, 但目前有uCLinux等少数几种Linux不需要MMU的支持。 1.2 系统时钟控制器 系统时钟决定了ARM芯片的处理速度。ARM7的处理速度为0.9MIPS/MHz,常见的ARM7芯片系统主时钟为20MHz- 133MHz,ARM9的处理速度为1.1MI
[单片机]
新建的UART0通讯波特率不一致的问题(波特率降低4倍)
如果用Keil ARM的话自动生成的Startup.s中默认VPBDIV=0X00000000,这就导致 Fpclk 为4分频。导致波特率下降四倍。以下为keil中的Startup.s中默认设定的值。;// e VPBDIV Setup ;// i Peripheral Bus Clock Rate ;// o1.0..1 VPBDIV: VPB Clock ;// 0= VPB Clock = CPU Clock / 4 ;// 1= VPB Clock = CPU Clock ;// 2= VPB Clock = CPU Clock / 2 ;// o1.4..5 XCLKDI
[单片机]
详解bootloader的执行流程与ARM Linux启动过程分析
ARM Linux启动过程分析是本文要介绍的内容,嵌入式 Linux 的可移植性使得我们可以在各种电子产品上看到它的身影。对于不同体系结构的处理器来说Linux的启动过程也有所不同。 本文以S3C2410 ARM处理器为例,详细分析了系统上电后 bootloader的执行流程及 ARM Linux的启动过程。 1、引 言 Linux 最初是由瑞典赫尔辛基大学的学生 Linus Torvalds在1991 年开发出来的,之后在 GNU的支持下,Linux 获得了巨大的发展。虽然 Linux 在桌面 PC 机上的普及程度远不及微软的 Windows 操作系统,但它的发展速度之快、用户数量的日益增多,也是微软所不能轻视的。而近些
[单片机]
详解bootloader的执行流程与<font color='red'>ARM</font> <font color='red'>Linux</font>启动过程分析
基于ARM S3C44B0X 的LED显示屏设计
为了简化L ED 显示屏 的 驱动 电路,节约单片机的端口资源,对常见的L ED 显示屏驱动电路进行了改进,全部采用通用的串入并出移位寄存器作为选通驱动,系统全部采用串行数据控制,形成了一种只需4 根信号线的L ED 显示屏驱动电路解决方案,仅需占用单片机的4个I/ O 端口发送串行数据就可以实现正常的 显示 功能,文中给出相应的程序代码。    1 、引言   L ED 显示屏应用十分广泛,是信息传播的有效工具。在某井下矿采设备监测系统中选用了 ARM S3C44B0X 32 位单片机作为CPU ,根据应用要求,监测系统的显示部分使用16 行的单色L ED 显示屏实时显示监测数据。由于系统 外设 较多,端口资源十分
[电源管理]
基于<font color='red'>ARM</font> S3C44B0X 的LED显示屏设计
基于ARM的PWM模块的超声波检测系统的设计
  近年来以微电子学和计算机技术为基础的信息技术飞速发展,超声无损检测仪器也得到了前所未有的发展动力,为了提高检测的可靠性和提高检测效率,研制数字化、智能化、自动化、图像化的超声仪是当今无损检测领域发展的一个重要趋势。而传统的超声波检测仪存在准确性差、精度低、体积大、功耗大、人机界面不友好等问题。而超声波发射与控制电路正是在一种基于ARM的超声波检测系统的基础上,以ARM微控制器为核心,使用C语言编程,方便地实现了发射频率与激励电压脉冲幅度的调节。    1 超声波检测系统的总体设计结构   基于ARM超声波检测系统的总体结构框图,如图1所示。该系统主要由3部分组成:超声波前端发射接收电路、DSP和ARM处理器。   
[单片机]
基于<font color='red'>ARM</font>的PWM模块的超声波检测系统的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved