引 言
在32位微处理器逐渐成为嵌入式系统主流的同时,嵌入式应用也变得越来越复杂。许多嵌入式系统都不得不借助于专用的操作系统来支撑自己的应用。uclinux作为类unix操作系统,继承了linux的各种优秀的品质,成为首选的嵌入式系统的操作系统。
为自己的设备在操作系统下添加驱动程序,是嵌入式设计必不可少的部分。针对不同的设备类型,选择合适的驱动程序的模式,同样也是十分重要的。通常的设备驱动采用直接i/o的方式,如存储器、看门狗等;而对于象网络这样的数据流设备的驱动,则应该用到中断机制。
本文以uclinux为背景,以一种数据流设备为目标,介绍中断驱动的i/o设备驱动的开发。
1 应用背景
1.1 硬件描述
本文介绍的驱动程序是应用在一种电信e1线路和以太网互联设备上的。它是旁路接收e1数据并将其发送到以太网的某一台服务器上,在服务器上对e1的话路和信令时隙分析。
该设备中的处理器是采用三星公司出品的网络型arm处理器s3c4510b。e1线路接口采用dallas半导体公司的专用el接口单元(liu)芯片 ds2148,它完成波形整理、时钟恢复和hdb3解码。ds2148将整理后的e1数据流送给一片altera公司的cyclone系列的 fpga(eplc3t144c8),它将串行的e1数据流存入到fifo,再通过arm的32位外部总线将数据传送给arm。arm将数据打包通过以太网发送到服务器上。图l所示是本系统的硬件框图。本文主要介绍接在arm的外部总线上的fpga,在uclinux下的驱动程序中断机制的设计。
1.2硬件连接
s3c4510b处理器和fpga的连接电路如图2所示。
1.3 fpga内fifo的结构
在fpga内部设置了两个fifo。为了防止arm和fpga操作的冲突,arm和fpga对两个fifo操作采用乒乓方式,这样arm和fpga就可以同时操作不同的fifo,而不需要等待。fifo的大小是4096位,能容纳一个e1复帧的数据量。当fpga将一个fifo填满后,会用中断的方式通知arm来读fifo,同时fpga会置内部的f1fo状态寄存器。 fifo)状态寄存器命名为fpga_imf,是一个32位的寄存器,用其中某几位置“l”,表示对应的fifo需要读取。
2 软件设计
中断驱动的i/o是指,输人数据在中断期间被填充到缓冲区内,并由读取该设备的进程取走缓冲区内的数据;输出缓冲区由写设备的进程填充,并在中断期间取走数据。数据缓冲可以将数据的发送和接收与write及read系统调用分离开来,提高系统的整体性能。下面是ucllnux下的中断程序的设计。
2.1 uclinux下的中断程序
在uclinux系统中,通过调用下面这个函数向系统申请一个中断通道(或中断请求irq),并在处理完以后释放掉它。
mt reqliest_irq(unsigned int irq,void(*handler)(int,vold*,
struct pt_regs*),unsigned 10ng flags,const chat*device,
vold*dev_id);
void free_irq(unstgned int lrq,void*dev_id);
其中,irq是中断号。在本系统中它对应于s3c4510b的21个中断源。这里用的是中断源o。handler指向要安装的中断处理函数的指针。 flags是一个与中断管理有关的各种选项的字节掩码。device传递给request_irq的字符串,在/proc/interrupts中用于显示中断的拥有者。dev_id指针用于共享的中断信号线。函数的返回值为o时表示成功,或者返回一个负的错误码。函数返回一ebujsy通知另一个设备驱动程序已经使用了要申请的中断信号线。下面是fpga的设备中断申请函数。这个函数是在驱动中的fpga_open函数中被调用的。
int fpga_open(struct inode*inocle,stuct_file*file){
int result;
result=request_irq(fpga_irq,δfpga_isr,sa_inter-rupt,″fpga″,null);
if(resuit!=o){
printk(kern_info”can not register fpga isr!\n”);}else{
printk(kern_info″fpga isr register successfully!\n”);
}
}
在申请了中断通道后,系统会响应外部中断0,而进入中断处理程序。中断处理程序的第一步是要先清除s3c4510b的中断悬挂寄存器的外部中断o位。这是为了让fpga可以产生新的中断。在uclinux系统中是调用下面的宏来实现的。
探究MC9RS08KA2红外远距离多键控制方案设计
精选10个最新的案例感受人工智能应用场景的多样化
碳化硅的发展趋势及其在储能系统中的应用
ILS 3D打印技术可以在同一打印运行中烧结多种粉末
魅族MX7最新消息:魅族MX7电商开启预售?最流行的全面屏设计售价良心,配置强悍!
以uClinux为背景,介绍中断驱动的I/O设备驱动的开发
图像分类比赛中,你可以用如下方案举一反三
数码相机外接电源
E拆解:第一台5G手机——Galaxy S10 5G
台积电入股中芯9月曾在港密谈和解
基于RFID应用的通用型控制器的设计方案
电视面板全线涨价 显示器和笔记本维持原状
Atheros推出ROCm单芯片11n AR6003
go语言标准库net/url库的过程
英特尔CEO欧德宁:高通是我们真正的竞争对手
全球最大蜘蛛机器人诞生:这个蜘蛛机器人到底是干什么用
CS5267 TYPEC转HDMI4K 60HZ带PD3.0
诺基亚发布旗舰机,6摄+70倍+联发科天玑1000
5G消息业务将成为电信市场发展新动能,三方需求三方受益
程序员怎样管理知识