嵌入式数据采集系统中的ADS8364驱动程序设计
s8364_open(struct inode * inode, struct file * filp)
ads8364_open ()函数必须对将要进行的I/O操作做好必要的准备工作,如调用内核函数memset()清除缓冲区,使能中断等。如果设备是独占的,即同一时刻只能有一个程序访问此设备,则open()子程序必须设置一些标志以表示设备处于“忙”状态。当其为NULL指针时,设备的打开操作永远成功,但系统不会通知你的驱动程序。
5)释放设备操作
static int ads8364_release(struct inode * inode, struct file * filp)全功能版J-LINK ARM仿真器V6.0
ads8364_release是ads8364_open的逆操作,主要用来完成释放驱动程序占用的空间,禁止中断等。
4.4 中断处理程序
响应中断并提供相应服务的程序称为中断处理程序。在ADS8364的驱动程序中,中断处理程序的主要功能是,控制ADS8364进行采样,并将采样后的数据放入缓冲区,等待应用程序调用read函数读取。我们把中断处理程序注册到系统中,操作系统在硬件中断发生后,调用驱动程序的中断处理处理程序。函数定义如下:
static void ads8364_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{…..
stat = AT91_SYS->PIOB_PDSR;//读出中断电平,如果为低电平, 控制ADS8364开始采样。
/*单芯片采集6路*/全功能版J-LINK ARM仿真器V6.0
for(j=0;j6;j++) { tmpdata=*(volatile u16 *)(ADOFFSET[i][j]+RtPara.remapptr); *(ad_priv->head_ptr++)= tmpdata;}
…..}
5 将驱动程序加载进Linux内核
经过上面各部分的编程设计,我们的ADS8364驱动程序已经设计完毕,把上面的各部分程序组成一个源程序文件,并将其命名ADS8364drv.c,然后经过以下步骤将其加载进内核,那么我们的ADS8364芯片就可以在驱动程序的控制下进行工作了。具体加载操作如下:全功能版J-LINK ARM仿真器V6.0
1)将驱动程序源码ADS8364drv.c拷贝到arm/linux /drives/char/目录下。
2)修改位于arm/linux/drives/char/目录下的Makefile文件,在该文件中添加下面语句。obj-$(ADS8364_drv)+= ADS8364drv.o。
3)修改位于arm/linux/drives/char/目录下的config.in文件,增加如下语句。
bool ‘ADS8364_drive’ ADS8364_drv。
6 结束语
本文就嵌入式数据采集系统中的AD驱动程序的设计进行了叙述,阐述了ADS8364字符设备驱动程序开发的方法和过程。本文作者创新点为:本嵌入式数据采集系统以嵌入式ARM芯片AT91RM9200为处理器,以高精度ADS8364为AD转换芯片,实现了多通道、高精度的数据采集和AD转换,以 LKM机制设计成的ADS8364驱动程序可以减小内核空间,对其它字符设备的学习与开发设计具有一定的指导意义。
参考文献
1ADS8364 Technical Document.Texas Instruments.2002.6http://www.51kaifa.com/shop/read.php?ID=4823
2郑伟 王钦若 吴乃优.Linux内核空间设备驱动程序的开发[J] .全功能版J-LINK ARM仿真器V6.0 微计算机信息,2003,12:85-87
3孙天泽,袁文菊,张海峰.嵌入式设计及Linux驱动开发指南—基于ARM9处理器[M].北京:电子工业出版社,2005
4魏永明,骆刚等译.Linux设备驱动程序(第二版)[M] .北京:中国电力出版社,2002
Linux 字符设备 ADS8364 设备驱动程序 相关文章:
- REDIce-Linux--灵活的实时Linux内核(11-12)
- linux文件系统基础(02-09)
- Linux标准趋向统一(11-12)
- linux基础技术(02-09)
- LINUX的目录树(02-09)
- 在Windows下启动Linux(02-09)