新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于S3C2410及嵌入式Linux的氢气浓度的检测系统的解决方案

基于S3C2410及嵌入式Linux的氢气浓度的检测系统的解决方案

作者: 时间:2010-12-12 来源:网络 收藏

2.3 ADC与微处理器接口电路

传感器输出信号频率一般都远小于1 kHz。根据香农采样定理可知,采样频率至少要大于信号最高频率的2倍。另外,为了满足最小2 mg/m3的分辨率,这里采用美国ADI公司推出的一款高速低功耗串行12位8 通道A/D转换器AD7888。它是单电源工作,电压VDD范围为2.7~5.25 V。AD7888有2.5 V的片内基准电压,也可以使用外部基准电压,范围从1.2 V到VDD。模拟输入电压从O到VREF,采样频率可高达125 kHz,可与多种串行接口(SPI/QSPI/MICROWIRE/DSP)兼容。

本监测系统的核心处理器是三星公司推出的16/32位RISC处理器。它为手持设备和一般应用提供了低价格、低功耗、高性能的小型微控制器提供了丰富的内部设备:分开的16KB的指令Cache和16 KB的数据Cache,MMU虚拟存储器管理,LCD控制器,支持NAND Flash系统引导,系统管理器,3通道UART,4通道的DMA,4通道PWM定时器,I/O端口,RTC,8通道10位ADC和触摸屏接口,I2C总线接口,USB主从机,USB设备,SD主卡和MMC卡接口,2通道的SPI以及内部PLL时钟倍频器等。

该系统利用SPI实现A/D转换器与ARM处理器的数据传输,其接口电路如图3所示。SPlCLK0为SPI串行时钟信号,SPIMISO0和 SPIMOSI0数据引脚用来发送和接收串行数据。nSS0作为SPI的片选信号,低电平有效。

3 系统软件结构设计

本系统在上移植了韩国Mizi公司开发的Bootloader(VIVI)、-2.6.14内核以及cramfs根文件系统,构建了具有操作系统的软件环境。

3.1 外围设备驱动程序设计

设备驱动程序是为特定硬件提供给用户程序的一组标准化接口,它隐藏了设备工作的细节。但对于特定的硬件设备来说,其对应的设备驱动程序不同,所以不同外部设备驱动程序的开发是软件设计过程中必不可少的一部分。

Linux常以模块的形式加载设备,便于多个设备的协调工作也利于应用程序的开发和扩展。设备驱动在加载时首先需要调用入口函数ini- t_module()。该函数完成设备驱动的初始化工作,比如寄存器置位、结构体赋值等。其中最重要的一个工作就是向内核注册该设备,字符设备调用函数 register_chrdev()完成注册,块设备调用函数reglster_blkdev()完成注册。相应地,设备驱动在卸载时需要调用 cleanup_mod-ule()。该函数完成相应资源的回收、设备的注销、释放主设备号和设备文件名等。字符设备利用 unregister_chrdev()注销设备,块设备利用unregister_blkdev()注销设备。

Linux内核中,每个设备驱动程序都对应一个file_operations数据结构。在file_operations数据结构中,定义了一些与此设备相关的打开、关闭、读/写、控制等功能函数,当用户进行系统调用时,将自动使用驱动程序中特定的函数来实现具体的操作。实际上,编写设备驱动程序的过程也就是实现struct file_operations结构中的部分所需函数的过程。

3.2 应用程序设计

有了设备驱动程序提供底层硬件与应用程序的接口,Linux系统访问底层设备就像访问普通文件一样。例如,打开设备使用系统调用open(),关闭设备使用系统调用close(),读/写设备使用系统调用read()和write()等。应用程序流程如图4所示。首先系统上电复位,程序初始化,然后扫描键盘值,看是否有键值按下。若有,则进行按键处理并按输入步骤设置程序;若无,则开中断并启动A/D转换,等待转换完成产生中断,进入中断服务程序。中断服务程序流程如图5所示。首先关闭中断,读取A/D采集数据,调用适用于缓变信号的中值滤波算法处理转换结果,将连续采样的5次采样值按大小排序,取中间值为本次有效值。然后,存储处理后的数据并送显示器显示。最后,从中断返回到主程序中,再判断当前数据是否超过设定的临界值。若大于临界值,作报警处理;否则就开中断,等待下一次转换结束。依此循环处理。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)


评论


相关推荐

技术专区

关闭