基于ARM9和嵌入式Linux的串口驱动开发

基于ARM9和嵌入式Linux的串口驱动开发


2024年4月16日发(作者:)

维普资讯

第8卷第3期2008年2月 

科学技术与工程 

V01.8 No.3 Feb.2oo8 

1671-1819(2008)3-0786-04 

Science Technology and Engineering 

2008 Sci.Tech.Engng. 

基于ARM9和嵌入式Linux的串口驱动开发 

耿杰恒王竹林 贾春宁 

(军械工程学院四系,石家庄050003;南京军代局上海代表室 ,上海200233) 

摘要介绍了嵌入式Linux下驱动开发的一般模式,并基于微处理器芯片¥3C2410,详细分析了串口驱动的开发方法,给出 

嵌入式系统 串口通信 驱动程序 

A 

了设计实例,对嵌入式系统的研究和开发有一定的借鉴意义。 

关键词

中图法分类号TP316.2; 文献标志码

随着计算机技术的飞速发展,嵌入式系统已成 

收数据并提交给内核;从内核接收数据送到设备; 

检测和处理设备错误。 

为继Pc和Internet之后,IT界新的技术热点。嵌入 

式系统体积小、功能强、开发灵活方便,在工业控 

制、通信、航空航天、军事技术等领域取得了广泛的 

应用。 

Linux下设备驱动的开发就是编写各种函数实 

现设备的注册、初始化、IO操作、卸载等功能。其一 

般模式如下。 

//定义主次设备号 

int UART

MAJOR=125; 

_

在嵌入式系统的开发中,串口通讯的设计是一 

个非常重要的部分,虽然通用的串口驱动可以满足 

NOR=2; 

int UART

MI

_

很多系统的需要,但在一些工业控制中,对串口信 

号的数据格式,波特率等都有着严格的限制,这就 

要求针对系统需求对串口进行重新开发。 

本文就基于ARM9芯片¥3C2410和Linux系 

//文件系统人口定义 

struct file

operations uart

fops=l 

__

●●●●●● 

} 

//编写人口函数,实现设备控制 

static int uart

open(struct inode}inode,struct file}flip){ 

_

统,以某设备特殊的通讯方式为例,详细分析串口 

驱动的开发方法,实现设备的通讯。 

} 

1 Linux下驱动开发简介 

在嵌入式Linux系统中,由于内核的保护机制, 

用户一般不能直接访问硬件,而是要通过调用驱动 

程序来实现对硬件的控制。进行嵌入式系统的开 

//编写设备初始化和卸载函数 

int init uart

init(void){ 

、 

} 

void 

exit uart

cleanup(void){ 

m—

发,很大的工作量是为各种设备编写驱动程序。 

设备驱动是介于硬件和操作系统之间的软件 

} 

//初始化和卸载函数调用 

module

init(uart—init); 

接口,主要功能包括:探测和初始化设备;从设备接 

2007年1O月24日收到 总装备部装备预研项目基金资助 

void 

exit uart

cleanup(void); 

m—

2¥3C2410芯片串口的控制 

¥3C2410提供了三个通用异步串行通信接口, 

第一作者简介:耿杰恒(1982一),男,河北邢台人,硕士研究生,研 

究方向:检测技术与自动化装置。E-mail:gihvO01@126.com。 

维普资讯

3期 耿杰恒,等:基于ARM9和嵌入式Linux的串口驱动开发 787 

每个串口都有一个波特率发生器、接收寄存器、发 

送寄存器和一个控制单元,另外,还有两个16字节 

PeripheralBUS 

的FIFO寄存器作为发送和接收的缓冲装置,其结 

构框图如图1所示。 

TXDn 

RXDn 

图1¥3C2410串口结构框图 

在¥3C2410中,对串口的控制是通过设置相应 

的控制寄存器来实现的,其常用的寄存器主要有以 

下几个: 

3串口驱动设计及应用实例 

下面通过一个设计实例来详细分析串口驱动 

的设计方法。某设备通过串口实现对下位机的控 

(1)ULCONn寄存器:主要用来设置串口工作 

模式,包括数据位长度、停止位个数,以及数据校验 

方式等。¥3C2410支持四种校验方式,分别是奇校 

验、偶校验、MARK校验和SPACE校验。 

制,其控制指令由四个字节的串口数据组成,数据 

格式为8位数据位、一位停止位、一位校验位,其中 

(2)UCONn寄存器:该寄存器涉及到中断模式 

控制、DMA模式控制,以及时钟的选择等。 

(3)UTRSTATn寄存器:串口的状态寄存器,用 

于指示串口是否接收或发送完毕。 

(4)UTXHn和URXHn寄存器:发送和接收寄 

存器。 

(5)UBRDIVn寄存器:波特率设置寄存器,用于 

第一个数据为MARK校验,后三个数据为SPACE 

校验,串口的波特率为77.2 kb/s。对于如此波特率 

和校验方式都不常用的串口通讯方式,通用的串口 

驱动就无能为力了,这就要求针对硬件芯片的特点 

重新编写驱动程序。 

根据系统要求,使用串口1实现该串口通信的 

功能,其具体的编程实现如下: 

(1)在初始化函数中,注册串口设备。 

ret=register

_

对时钟分频,产生需要的波特率。其值通过如下计 

算确定: 

UBRDIVn=(int)(PCLK/(bps%16))一1 

或者 

UBRDIVn=(int)(UCLK/(bps%16))一I 

chrdev(MAJOR—NR,DEVICE— 

NAME,&uart

fops); 

(2)在open函数中对串口进行初始化,选择端 

口并设置端口状态,确定串口的波特率。在本系统 

其中PCLK或UCLK是选择的时钟,bps是需要 

的波特率。 

中,系统时钟PCLK=50.7 MHz,依据公式UBRDIVn 

(int)(PCLK/(bps×16))一1可得UBRDIVn 

维普资讯

788 

=40o 

科学技术与工程 8卷 

static int uart

open(struct inode十inode,struct file十filp){ 

_

} 

至此,针对¥3C2410芯片的特点,完成了串口 

UBRDIV1=40; 

驱动的整个驱动设计,满足了该设备特殊的串口通 

} 

信要求,在应用程序中对该串口的使用实例如下: 

(3)采用ioctl函数实现对串口校验方式的选择 

执le6neN xxx 

设置,在应用程序中,通过系统调用在串口的两种 

校验方式中切换。 

static int uart

ioctl(strucl inode十inode。struct file十flip,unsigned 

int zhl[4]={_・・}; 

uart

_

fd=open(”/dev/uart”,0一RDWR); 

int cmd,unsinegd long param){ 

while(1){ 

ioetl(uart_fd,FRAME1); 

switch(cmd){ 

case FRAMEI: 

ULCON1&=0x00: 

ULCON1 I=0x33; 

write(uart_fd,&zH[0],1); 

ioefl(uart_fd,FRAME2); 

for(j=1;j<4;j++){ 

write(uart_fd,&zhl,1); 

break; 

ca8e FRAME2: 

ULCON1&=0x00: 

ULCON1 I=0x3b; 

} 

for(k=0;k<3000;k++ ; 

} 

break; 

4结论 

串口通信多样的波特率和数据格式,使得嵌入 

} 

} 

(4)通过写函数write实现串口数据的发送。 

式系统的开发者经常要根据具体的需求开发专用 

的串口驱动,本文基于微处理器芯片S3C2410,详 

细分析了嵌入式Linux下串口驱动的开发方法,并 

利用函数copy_from_user()将要发送的数据从用户 

空间调入到内核空间,并监视UTRSTATI寄存器, 

判断数据是否发送完成。 

static ssize

t uart

——

通过设计实例进行了验证分析,具有一定的使用价 

值和借鉴意义。 

参考文献 

write(struct file十flip,const char女bur,size—t 

count,loff

_

t}fops){ 

copy_from

_

m ̄er(&temp,bur,count); 

1孙天泽,袁文菊.嵌入式设计及Linux驱动开发指南——基于 

ARM9处理器(第二版).北京:电子工业出版社,2007 

1.rl3CH1=temp; 

if((UTRSTAT1&一0x3)!=4); 

2魏洪兴,胡亮,曲学楼.嵌入式系统设计与实例开发实验教材 

Ⅱ.北京:清华大学出版社,20o5 

} 

3周立功,陈明计,陈渝.ARM嵌入式Linux系统构建与驱动开 

(5)最后,卸载设备驱动,释放资源。 

void exit uart

cleanup(void){ 

_

发范例.北京:北京航空航天大学出版社,2006 

4彭朝勇,薛兵.一种嵌入式Linux串口驱动开发模式.微计算 

机信息,2007;14:56—57 

unregister

chrdev(MAJOR_NR,DEVICE—NAME); 

_

维普资讯

3期 耿杰恒,等:基于ARM9和嵌入式Linux的串口驱动开发 789 

velopment of Serial Driver Based on ARM9 and Embedded Linux 

GENG Jie.heng,WANG Zhu.1in,JIA Chun—ning 

(Department 4,Ordnance Engineering College,Shijiazhuang 050003,P.R.China; 

Nangjing Military Representative Bureau in Shanghai Area ,Shanghai 200233,P.R.China) 

[Abstract]The common mode of driver development in embedded Linux system is introduced,and a detailed 

analysis of develop method of serial driver based on microprocessor chip¥3C2410 is also introduced・For further 

explain,a sample design is made.The method and principle can be used for reference for research and develop 

ment of embedded system. 

[Key words] embedded system serial communication driver 

舢舢舢 舢舢舢 

舢舢舢 舢舢舢J 

(上接第785页) 

2 

高复先.信息资源规划一信息化建设基础工程.北京:清华大学 

发展情况和需要而定,但通常在系统升级时间允许 

出版社,2001 

的情况下,要尽可能把方便留于多次性过程,即选 

柳佩九.管理信息系统及其开发技术.长沙:国防科技大学出版 

社,2005 

择种子典方案或应用标识方案。 

4 

潘明惠.信息化工程原理与应用.北京:清华大学出版社,2004 

参考文献 

1赵武奎.装备保障学.北京:解放军出版社,2003 

Design of Multiple Data Dictionary Amalgamation in 

Equipment Supporting Information System 

CHEN Xiang,wU Jian—ming,RUAN Yong-jun,Li Xiang 

(College of Ordance Engineering University,Shijlazhuang 050003,P.R.China) 

[Abstract] It is a generally existent phenomenon that muhipe data dictionary not amalgamation in equipment 

suppoi'ting informatin system.The problem of quality grade data dictionary not amalgamation in the ordanee equip— 

ment and vehicle equipment is researched.Through program researching and practising,it has put forward the three 

kinds of scheme that solves this kind of problem,one is set identification scheme,two is seed sign scheme and three 

is application identification scheme,and comparing three kinds of scheme for many aspects in the course of utili 

zing. 

[Key words]equipment supporting information system quality grade data dictionayr design of amalga— 

matlon 


发布者:admin,转转请注明出处:http://www.yc00.com/news/1713279073a2217641.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信