Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1811082
  • 博文数量: 272
  • 博客积分: 1272
  • 博客等级: 少尉
  • 技术积分: 1866
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-09 15:51
文章分类

全部博文(272)

文章存档

2016年(16)

2015年(28)

2014年(97)

2013年(59)

2012年(25)

2011年(47)

分类: 嵌入式

2013-10-21 14:18:25

2章 串口驱动原理

2.1 概述

在早期的计算机系统中,串口是最为常见的也较为简单的外部通信接口,只是现在随着各种方便快捷的外部接口如USB接口、以太网接口的出现,串口的应用逐渐减少。但是串口因为调试简单在许多数据量不大的场合依然较为流行。除了简单的通信功能之外,对于一些简单的计算机系统如单板机等等,由于缺少键盘和显示器,则可以借助串口对目标机中操作系统的运行情况进行监控等等。下图为Tornado开发软件通过串口对目标机上运行的VxWorks操作系统进行监控的结构原理图。


图2.1 Tornado通过串口对vxWorks操作系统进行监控

如第一章所述,设备的驱动程序分为与硬件相关部分和硬件无关部分,硬件无关部分实现了一系列通用的数据接口,而硬件相关部分则负责具体的硬件实现。其中硬件无关部分实现是create、remove、open、close、read、write、ioctl等7个通用的函数接口。

这7个函数的原型在文件ioLib中进行定义。分别为:

int creat(const char *name,int flag):该函数创建了一个文件描述符fd。其中name为一个抽象文件的文件路径,这个抽象可以指硬盘上保存的一个文件,也可以是一个以字符串表示的一个设备,当文件描述符创建完毕后自动以参数flag打开该文件。

STATUS remove(const char *name):移除文件,name表明文件路径。

int open(const char *name,int flags,int mode);打开文件,准备访问。name为文件路径,flags为打开方式如只读、只写、读写以及不存在可创建等,mode为打开模式只有在NFS文件系统下才有效。打开成功后返回文件描述符。

STATUS close(int fd);关闭文件。fd为文件描述符。

int read(int fd,char *buffer,size_t maxbytes);从文件描述符fd指定的文件中读取最多maxbytes个字节,保存在buffer指定的位置。可能会由于文件长度的原因,实际读取的字节数小于maxbytes,函数返回实际读出的字节数。

int write(int fd,char *buffer,size_t nbytes);向文件描述符fd指定的文件中写入nbytes个字节的数据,原数据保存在buffer只能的内存中。可能会由于buffer空间等原因,实际写入的字节数小于nbytes,函数返回实际写入的字节数。

int ioctl(int fd,int function,int arg);控制函数,主要用于设置或读取设备的工作方式等特性。

上述这7个通用接口,也就是串口驱动的一个最根本的需求,即通过这几个函数就可以实现对串口控制芯片i8250的操作。下面进行详细分析。

阅读(1643) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~