欢迎来到天天文库
浏览记录
ID:46541304
大小:52.00 KB
页数:4页
时间:2019-11-25
《嵌入式论文-刘卫川》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、基于ARM的嵌入式Linux按键驱动程序设计1开发环境1.1硬件平台SI1547KEINT4S2147KBUTTONEINT5BUTTONR16穹那S3147KEINT6BUTTON47KEINT7S41工BUTTONS511:3■147KTCLK1t±rUSEEXINT19R18B_V驴VBUTTON本文以北京革新公司生产的OURS2410嵌入式开发板B板为硬件平台,采用三星公司生产的基于ARM920T核的S3C2410X中央处理器,5级流水线设计,实现了MMU和哈佛结构的缓存。按键采用的是B板
2、的底板上自带的按键,按键的原理图如图1所示,每个按键都接有上拉电阻,从而保证作为输入的I/O口在按键未按下时得到稳定的高电平。rti表1可以看出,这5个按键分别以S3C2410处理器的I/O口GPF4,GPF5,GPF6,GPF7,GPG11为输入端口(其中按键五输入还可为TCKDo在这里我们以前三个按键为例,这三个I/O口平时工作在外部中断模式,分别对应外部中断1.2软件平台选择了开放源码以及强大的社群支持的Linux操作系统,根据需要对该系统进行了相应的剪裁,编译,以更好地适用于嵌入式系统中。
3、在嵌入式系统软件开发中,普遍釆用的交叉编译的方法进行编译调试,即将软件先利用交叉编译、汇编和连接工具在宿主机上牛成可执行的二进制代码(该代码不能在宿主机上运行,只能在目标板上运行),再下载到目标板上运行。本次开发采用的交叉编译链是革新公司提供的2.95.2交叉编译链。2设计思想和依据设备驱动程序的任务就是控制设备的硬件完成指定的I/O操作。所以在设备管理中驱动程序是直接和设备硬件打交道的。驱动程序包含了对设备进行各种操作的代码,在操作系统的控制下,CPU通过执行驱动程序来实现对设备底层硕件的处理和
4、操作。Linux的设备驱动程序的主要功能是:对设备进行初始化;启动或停止设备的运行;把设备上的数据传送到内存;把数据从内存传送到设备;检测设备状态[1]0Linux内核把驱动程序划分为三类:字符设备、块设备、网络设备驱动,对于不同的设备有不同的访问方式。本文以按键驱动为例,介绍基本的字符设备驱动程序的编写过程。驱动程序有两种加载方式:一是直接编译进内核,启动内核时可白动加载;二是以模块的方式加载,在系统启动之后可以insmod加载。我们在这里采用第二种方式。3接口函数3.1.1open()函数应用
5、程序在使用设备之前,必须调用该函数打开设备。本例屮该函数结构为:staticints3c2410_open(structinode*inode,structfile*filp){keydev.head=keydev.tail=0;//清空按键动作缓冲区keyEvent=keyEvent_raw;〃函数指针指向按键处理函数keyEvent_rawMOD」NC_USE_COUNT;//模块计数值增1[5]return0;}3.1.2release()函数当应用程序不再使用设备时,可通过调用该函数释放资
6、源,关闭设备。木例屮该函数结构为:staticints3c2410_release(slructinode*inode,structfile*filp){keyEvent=keyEvent_dummy;〃函数指针指向空函数MOD_DEC_USE_COUNT;return0;}3.1.3read()函数当程序打开设备后,可以调用该函数对设备进行操作,主要为读収按键的动作码。本例屮该函数的主要结构如下:staticssize_ts3c2410_read(structfile*filp,char*buf
7、,ssize_tcount,lofO*ppos){retry:if(keydev.head!=keydev.tail)//当前循环队列中有数据{key_ret=keyRead();〃读取按键copy_to_user(……);〃把数据从内核空间传送到用户空间……〃返回else{if(flip->f_flags&O_NONBLOCK)//若用户采用非阻塞方式读取return-EAGAIN;interruptible_sleep_on(&(keydev.wq));〃用户采用阻塞方式读取,调用该两数使〃进
8、程睡眠gotoretry;1return0;}3.2屮断处理3.2.1中断模式设置函数set_external_irq()在开始初始化硬件吋,要同吋设置该设备的中断模式,以button1为例,该函数参数设置如下:set_extemal」iq(IRQ_EINT4,EXT.LOWLEVEL,GPIO_PULLUP_EN);〃低电平触发3.2.2注册中断函数request_irq()该函数主要作用为驱动程序注册屮断,并确定屮断处理程序的一些特性,以及为何设备注册中断。request_ir
此文档下载收益归作者所有