当前位置:首页 > 单片机 > 单片机
[导读]在分析ARM-Linux s3c2440中UART的时有必要先了解 s3c2440A中串口的硬件知识。硬件篇:S3c2440A串口提供三个独立的异步串行通信I/O端口(asynchronousserial I/O ports)。每一个串口均可以以普通中断方式或者DMA方式进

在分析ARM-Linux s3c2440中UART的时有必要先了解 s3c2440A中串口的硬件知识。

硬件篇:

S3c2440A串口提供三个独立的异步串行通信I/O端口(asynchronousserial I/O ports)。每一个串口均可以以普通中断方式或者DMA方式进行数据收发。采用系统时钟时,最大速率为115.2kbps.如果采用外部时钟(UEXTCLK),UART速度可以更快。每个串口包含有2个64-byte的FIFO缓存区用来发送或传输数据。S3c2440A 串口具有可编程波特率,红外(IR)收发数据,1或者2 位的停止位(stop),5/6/7/8 位数据宽度和奇偶校验功能(parity checking)。

每个串口由波特率产生单元,发送单元,接收单元和控制单元组成。如下图所示,波特产生单元的时钟可以是PCLK,FCLK/n,或者UEXTCLK(外部输入的时钟)。发送和接收单元包含有一个64-byte的FIFOs(先入先出队列)和数据移位器。


发送数据时,数据先被写进FIFO,然后拷贝到数据移位器后发送数据,最后数据被一位一位由数据发送脚(TxDn)送出。类似的,数据在接收时,数据一位一位的由数据接收脚(RxDn)接收,然后拷贝到FIFO缓存区。


寄存器:

串口的控制寄存器有两种,一种是UCONx,一种是ULCONx,它们各有三个:UCON0(ULCON0) ~ UCON2(ULCON2)分别对应于每一个串口,用于设置UART的工作模式,波特率,中断类型等


状态寄存器:UTRSTAT0 ~UTRSTAT2, 用于串口工作时,接收/发送的状态指示:


FIFO控制寄存器: UFCON0 ~ UFCON2, 用于对FIFO的设置,假如使用的是中断触发,当缓冲区的字节达到FIFO设置的触发值,就会触发中断产生.


FIFO状态寄存器: UFSTAT0 ~ UFSTAT2, 用于表示FIFO缓存中的状态


对于Arm-linux s3c2440串口的使用,主要是对以上寄存器的操作。

下面将结合源码分析arm-linux s3c2440串口驱动的实现(软件篇)

软件篇(linux-2.6.22.6):

Linux系统的串口驱动与一般字符设备并一样,它采用层次化的架构,从而看做是一个串行系统来实现。

(1)关注UART或其他底层串行硬件特征的底层驱动程序。

(2)和底层驱动程序接口的TTY驱动程序。

(3)加工用于和TTY驱动程序交换数据的线路规程。

下图描述了串行系统间的层次结构关系(s3c2440串口实现例),可以概括为:用户应用层 --> 线路规划层 -->TTY层 -->底层驱动层 -->物理硬件层


线路规程和TTY驱动程序是与硬件平台无关的,Linux源码中已经提供了实现,所以对于具体的平台,我们只需实现底层驱动程序即可,这也是我们最关心的。在s3c2440a中,主要由dirivers/serial/下的s3c2410.c和samsung.c实现。

Uart驱动程序主要围绕三个关键的数据结构展开(include/linux/serial_core.h中定义):


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

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

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


基于以上三个结构体,来看看s3c2440是如何挂接到Linux中串口构架的:

S3c2440串口相关操作函数定义在s3c24xx_serial_ops(路径:driversserialS3c2410.c)中,这个是一个struct uart_ops结构


staticstructuart_opss3c24xx_serial_ops={

.pm=s3c24xx_serial_pm,//电源管理相关的函数

.tx_empty=s3c24xx_serial_tx_empty,//检查发送的fifo是为空

.get_mctrl=s3c24xx_serial_get_mctrl,//是否串口流控

.set_mctrl=s3c24xx_serial_set_mctrl,//是否设置串口流控cts

.stop_tx=s3c24xx_serial_stop_tx,//停止发送

.start_tx=s3c24xx_serial_start_tx,//启动发送

.stop_rx=s3c24xx_serial_stop_rx,//停止接受

.enable_ms=s3c24xx_serial_enable_ms,//空函数

.break_ctl=s3c24xx_serial_break_ctl,//发送break信号

.startup=s3c24xx_serial_startup,//串口发送接受以及中断申请的初始化设置函数

.shutdown=s3c24xx_serial_shutdown,//关闭串口

.set_termios=s3c24xx_serial_set_termios,//串口时钟,波特率,数据位等的参数设置

.type=s3c24xx_serial_type,//???

.release_port=s3c24xx_serial_release_port,//释放串口

.request_port=s3c24xx_serial_request_port,//申请串口

.config_port=s3c24xx_serial_config_port,//串口的一些配置信息

.verify_port=s3c24xx_serial_verify_port,//串口检测

};

驱动程序结构定义:


staticstructuart_drivers3c24xx_uart_drv={

.owner=THIS_MODULE,

.dev_name="s3c2410_serial",//具体设备的名称

.nr=3,//定义几个端口

.cons=S3C24XX_SERIAL_CONSOLE,//console端口号

.driver_name=S3C24XX_SERIAL_NAME,//串口名

.major=S3C24XX_SERIAL_MAJOR,//主设备号

.minor=S3C24XX_SERIAL_MINOR,//次设备号


};

端口配置结构定义,其中包括了一个struct uart_ports结构(下面的赋值都是对uart_port的填充):


staticstructs3c24xx_uart_ports3c24xx_serial_ports[NR_PORTS]={

[0]={//串口0

.port={

.lock=__SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[0].port.lock),

.iotype=UPIO_MEM,

.irq=IRQ_S3CUART_RX0,//接收中断号

.uartclk=0,

.fifosize=16,//fifo缓冲的大小

.ops=&s3c24xx_serial_ops,//串口的操作函数

.flags=UPF_BOOT_AUTOCONF,

.line=0,

}

},

[1]={

.port={

.lock=__SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[1].port.lock),

.iotype=UPIO_MEM,

.irq=IRQ_S3CUART_RX1,

.uartclk=0,

.fifosize=16,

.ops=&s3c24xx_serial_ops,

.flags=UPF_BOOT_AUTOCONF,

.line=1,

}

},

#ifNR_PORTS>2

[2]={

.port={

.lock = __SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[2].port.lock),

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭