用户中心

资讯 > 嵌入式系统

uClinux下中断驱动的I/O方式

2007.03.05阅读 6556

32位微处理器逐渐成为嵌入式系统主流的同时,嵌入式应用也变得越来越复杂。许多嵌入式系统都不得不借助于专用的操作系统来支撑自己的应用。uClinux作为类Unix操作系统控制工程网版权所有,继承了Linux的各种优秀的品质,成为首选的嵌入式系统的操作系统。

 

为自己的设备在操作系统下添加驱动程序,是嵌入式设计必不可少的部分。针对不同的设备类型,选择合适的驱动程序的模式,同样也是十分重要的。通常的设备驱动采用直接IO的方式,如存储器、看门狗等;而对于象网络这样的数据流设备的驱动,则应该用到中断机制。

 

本文以uClinux为背景,以一种数据流设备为目标,介绍中断驱动IO设备驱动的开发。

1 应用背景

1.1 硬件描述

本文介绍的驱动程序是应用在一种电信E1线路和以太网互联设备上的。它是旁路接收E1数据并将其发送到以太网的某一台服务器上,在服务器上对E1的话路和信令时隙分析。

 

该设备中的处理器是采用三星公司出品的网络型ARM 处理器S3C4510BE1线路接口采用Dallas半导体公司的专用El接口单元(LIU)芯片DS2148

,它完成波形整理、时钟恢复和HDB3解码。DS2148将整理后的E1数据流送给一片Altera公司的Cyclone系列的FPGA(EPlC3T144C8),它将串行的E1数据流存入到 FIFO,再通过ARM32位外部总线将数据传送给ARMARM将数据打包通过以太网发送到服务器上。图l所示是本系统的硬件框图。本文主要介绍接在 ARM的外部总线上的FPGA,在uClinux下的驱动程序中断机制的设计。

 

12硬件连接

S3C4510B处理器和FPGA的连接电路如图2所示。

 

 

点击看原图

点击看原图

 

 

 uClinux下中断驱动的I/O方式如图

 

 

1.3 FPGAFIFO的结构

FPGA内部设置了两个FIFO。为了防止ARMFPGA操作的冲突,ARMFPGA对两个FIFO操作采用乒乓方式,这样ARMFPGA就可以同时操作不同的FIFO,而不需要等待。FIFO的大小是4096CONTROL ENGINEERING China版权所有,能容纳一个E1复帧的数据量。当FPGA将一个FIFO填满后,会用中断的方式通知 ARM来读FIFO,同时FPGA会置内部的F1FO状态寄存器。FIFO)状态寄存器命名为fpga_imf,是一个32位的寄存器,用其中某几位置 l”,表示对应的FIFO需要读取。

 

2 软件设计

中断驱动的IO是指,输人数据在中断期间被填充到缓冲区内CONTROL ENGINEERING China版权所有,并由读取该设备的进程取走缓冲区内的数据;输出缓冲区由写设备的进程填充控制工程网版权所有,并在中断期间取走数据。数据缓冲可以将数据的发送和接收与writeread系统调用分离开来,提高系统的整体性能。下面是uCllnux下的中断程序的设计。

 

2.1 uClinux下的中断程序

uClinux系统中CONTROL ENGINEERING China版权所有,通过调用下面这个函数向系统申请一个中断通道(或中断请求IRQ),并在处理完以后释放掉它。

mt reqLIest_irq(unsigned int irqvoid(*handler)(intvold*

struct pt_regs*)unsigned 10ng flagsconst chat*device

vold*dev_id)

void free_irq(unstgned int lrqVOid*dev_id)

 

其中,irq是中断号。在本系统中它对应于S3C4510B21个中断源。这里用的是中断源Ohandler指向要安装的中断处理函数的指针。 flags是一个与中断管理有关的各种选项的字节掩码。device传递给request_irq的字符串,在/procinterrupts中用于显示中断的拥有者。dev_id指针用于共享的中断信号线。函数的返回值为O时表示成功,或者返回一个负的错误码。函数返回一EBUJSY通知另一个设备驱动程序已经使用了要申请的中断信号线。下面是FPGA的设备中断申请函数。这个函数是在驱动中的fpga_open函数中被调用的。

int fpga_open(struct inode*inoclestuct_file*file){

int result;

result=request_irq(FPGA_IRQ,δfpga_isrSA_INTER-RUPT,fpga,NULL)

if(resuIt!=O){

printk(KERN_INFOCan not register FPGA ISR!n)}else


版权声明:版权归控制工程网所有,转载请注明出处!

频道推荐

关于我们

控制工程网 & CONTROL ENGINEERING China 全球工业控制、自动化和仪器仪表领域的先锋媒体

CE全球

联系我们

商务及广告合作
任小姐(北京)                 夏小姐(上海)
电话:010-82053688      电话:18616877918
rendongxue@cechina.cn      xiashuxian@cechina.cn
新闻投稿:王小姐

关注我们的微信

关于我们 | 网站地图 | 联系我们
© 2003-2020    经营许可编号:京ICP证120335号
公安机关备案号:110102002318  服务热线:010-82053688