VxWorks串口驱动的研究与实现
电子元件,电子元器件深圳市创唯电子有限公司
您现在的位置: 首页 > 电子技术
VxWorks串口驱动的研究与实现  2012/3/1
摘要:本文以基于ARM7TDMI内核的S3C44B0X芯片的串口驱动为例,分析了VxWorks串口驱动的层次和机理,研究了tty驱动和底层SCC驱动的工作原理。结合S3C44B0X芯片的串口驱动程序,给出了VxWorks串口驱动程序设计方法和注意事项。关键词:VxWorks;串口驱动;tty设备引言VxWorks的程序开发者经常需要解决串口驱动问题,这是BSP和上层应用程序开发必不可少的基本步骤,特别是对于板级支持包(BSP)和上层应用程序的开发,掌握串口驱动的原理和开发
 

摘要: 本文以基于ARM7TDMI内核的S3C44B0X芯片的串口驱动为例,分析了 VxWorks串口驱动的层次和机理,研究了tty驱动和底层SCC驱动的工作原理。结合S3C44B0X芯片的串口驱动程序,给出了VxWorks串口驱动程序设计方法和注意事项。

关键词: VxWorks;串口驱动;tty设备

引言

VxWorks的程序开发者经常需要解决串口驱动问题,这是BSP和上层应用程序开发必不可少的基本步骤,特别是对于板级支持包(BSP)和上层应用程序的开发,掌握串口驱动的原理和开发串口驱动程序就显得尤为重要。VxWorks串口通信由串行通信控制器SCC(Serial Communication Controller)控制,和标准I/O库通信的是tty驱动,再由tty驱动和底层SCC驱动通信。本文研究VxWorks串口驱动特性,并以S3C44B0X为例,给出开发VxWorks串口驱动的步骤和实现方法。

串口设备层次与tty驱动

串口的层次

VxWorks串行设备的层次采用了3层抽象的软件结构:标准I/O库(ioLib)->tty库(ttyDrv/tyLib)—>底层SCC驱动(xxDrv),如图1所示。从图中可看出串行设备的驱动xxDrv并不是直接和I/O system交互的,中间存在一个ttyDrv(包括tyLib)。实际上,内核启动时在驱动程序表中安装的不是xxDrv的函数,而是ttyDrv/tyLib提供的函数。串口tty驱动(ttyDrv/tyLib)使I/O系统独立于具体SCC驱动,保证了代码可复用和统一界面。SCC驱动(xxDrv/yyDrv)处理和底层硬件有关的部分。因此,在编写串口驱动时需要了解串口tty驱动的原理以及串口输入输出过程。在此基础上,根据VxWorks的程序执行流程和具体的MCU芯片的特点,修改底层SCC驱动代码。

图1 VxWorks串口软件结构

串口tty驱动

创建tty设备包括驱动程序初始化和创建设备两步,这两步都在usrRoot()中完成。创建完tty设备后,用户可以调用ioLib中的write()、read()函数对串口进行读、写操作。

*驱动程序初始化
初始化ttyDrv()函数是一个虚拟的驱动,既管理着和I/O的交互,又管理着和底层硬件驱动的交互。它调用iosDrvInstall( )将ttyDrv和tyLib中的函数安装到系统的驱动程序表中。ttyDrv负责着ttyOpen、ttyIoctl的接入,而tyLib负责着tyRead、tyWrite的接入。

*创建设备
创建设备函数ttyDevCreate()主要分配并初始化设备描述结构,调用tyDevInit( )进行tyLib库初始化,初始化selectLib(),创建输入输出环形缓冲,创建信号量,调用iosDevAdd()加设备到设备列表,以中断方式启动串口通道。它还进行的另一个重要操作是安装了tyLib设备提供的输入输出回调函数tyITx()和tyIRd(),以便给底层SCC驱动负责调用。

*tty输入输出
当tty设备创建后,用open()打开相应的串口,open函数返回的文件句柄就是设备的标识fd,依据串口打开时的读、写标志,可以对串口进行读、写操作。用户程序的基本I/O读写请求由tyLib的tyWrite( )和tyRead( )实现,这两个函数在ttyDrv( )初始化tty时安装到驱动程序表中,如图2所示。

图2 VxWorks输入输出

与《VxWorks串口驱动的研究与实现》相关列表
电话:400-900-3095
QQ:800152669
库存查询
Copyright(C) 2011-2021 Szcwdz.com 创唯电子 版权所有 备案号:粤ICP备11103613号
专注电子元件代理销售  QQ:800152669  电子邮件:sales@szcwdz.com  电话:400-900-3095