基于Linux操作系统实现40MHz数字存储示波器的设计,来看看?

首先来看什么是嵌入式μClinux操作系统 , 在该操作系统上使用Motorola MC68VZ328 CPU、FIFO存储器 , 设计实现一种数字存储示波器;在软件实现上 , 利用μUlinux的多任务特性 。系统最大采样频率为40MHz , 具有LCD显示和触摸屏界面 。
数字存储示波器是一种具有数据存储、预触发、波形存储、便于与PC机通信等特点和优点的便携式智能仪器 , 广泛应用于机械故障检查、野外作业、工业现场等 。本文介绍的便携式数字存储示波器构建于嵌入式μClinux操作系统平台之上 , 采用Motorola公司的龙珠系列MC68VZ328(以下简称VZ328)芯片作为处理器 , 采样频率与放大幅度可通过触摸屏调节;系统成本低、操作简单 , 可实现采集、存储和分析功能 , 具有实际应用前景 。
1 嵌入式系统简介
1.1 嵌入式μClinux系统
嵌入式系统是以应用为中心 , 以计算机为基础 , 软硬件可裁减 , 适用于系统对功能、可靠性、成本、功耗严格要求的专用计算机系统 。嵌入式Linux(Embedded Linux)是指对Linux经过小型化裁减后 , 能够固化在容量只有几百K字节存储器芯片或单片机中 , 应用于特定嵌入式场合的专用Linux操作系统 。嵌入式Linux的开发和研究是目前操作系统领域的一个热点 。
本文介绍的系统采用一种优秀的嵌入式操作系统——μClinux 。它主要面对non-MMU的处理器 , 其主要特征为:
①是一个多任务的嵌入式操作系统;
②内核小 , 只有512K左右;
③同Linux系统的API保持一致;
④继承了Linux系统成熟的网络协议栈;
⑤支持一些主要的文件系统 , 如:FAT、EXT2、ROMFS、JFFS 。
1.2 处理器简介
图2 FIFO工作时序
2 系统构成
2.1 系统组成
系统组成框图如图1所示 。
图1中 , ADC采用的是Philips公司的8位高速并行A/D , 最高采样频率为40Msps 。采用的是IDT公司1024%26;#215;9位先进先出FIFO存储器 。由于该款FIFO的最高存取速度为35ns , 为了保证系统40Msps的采样频率 , 我们通过使用双FIFO与A/D相连接 , A/D输出的数据轮流存入FIFO A和FIFO B中来保证整个系统的性能 。采样信号与FIFO存储器读和写的工作时序如图2所示 。VZ328与采集卡之间的接口详见2.2节 。
2.2 系统接口设计
系统使用了VZ328的I/O端口读取数据并发出控制信号 。具体方案如图3所示 。
系统利用J口实现数据的输入输出 , 利用D口和G口来进行控制 。J口在输入数据进要求该口的方向寄存器PJDIR置为0 , 在输出数据时要求PJDIR置为1 。采集的信号经过A/D变换后首先进入FIFO存储器 , 当从FIFO中每读出一个数据后需要再向其发送一个读数脉冲信号 , 这样才能保证正确读出下一个单元内存储的数据 。该读数脉冲由G口的第四位PG4给出 。数据从FIFO存储器中被读出后经过锁存器进入端口J的数据寄存器PJDATA中 , 锁存信号由D口的第四位PD4给出 。当CPU读周期到来时 , 数据由端口被读入内存 。采样频率控制信号由J口的J5、J6、J7三位输出 , 数据采集复位信号RESET由J口的J0位输出 , 两者的锁存信号均由D口的PD5给出 。类似地 , 幅值控制信号由J口的J0、J1、J2三位输出 , 锁存信号由D口的PD7给出 。此外 , 每当数据采满1K时 , FIFO存储器会产生一个中断信号INT 。该信号由D口的PD6输入 。
2.3 系统软件结构
基于嵌入式Linux的数字示波器系统主要分为数据采集和存储模块、波形显示和刷新模块以及触摸屏控制模块三个部分 。系统软件由Linux下的C语言编程实现 。
(1)数据采集和存储模块
采集存储模块流程如图4所示 。
系统首先向采集卡发送所要求的频率和幅值信号 , 然后发出复位信号RESET , 采集卡开始采集数据 。采集到的数据经过FIFO存储器 , 由J口读入内存并存入指定数据缓冲区之中 。在存储过程中 , 采用了双缓冲区机制 , 数据按1K大小分块 , 相邻的两块数据交替存放在内存的不同区域中 。在每读入1K个数据之后 , 内存中都存在连续的2K个采样数据 , 这样有助于以后对数据的处理和显示 。
(2)波形显示和刷新模块
本系统中使用一块大小为240%26;#215;320像素的黑白液晶显示屏 。VZ328为LCD的控制提供了良好的支持 , 其实现主要通过LCD控制器完成 。
存放在内存中的数据经过坐标变换之后就可以在LCD上进行显示了 。在显示之前 , 因为LCD的坐标系与显示波形时所用的坐标系y轴方向相反 , 且需要将波形显示在屏幕的特定区域内 , 所以要对数据进行归一化处理 。从端口读入数据的范围为0~0XFF , 0点对应于LCD上y轴坐标的190 , 0XFF对应于LCD上y轴坐标的50 , 则0X7F对应于LCD上坐标为120的点 , 即屏幕显示的零点 。相应的转化公式为
Y=120-(DATA-0X7F)%26;#215;70/0X7F
其中DATA为从端口读入的数据;
Y是DATA在LCD上显示的y坐标 。
LCD一屏可以显示300个数据点 , 点与点之间用矢量法直线相连 。
(3)触摸屏控制模块
触摸屏是附着在LCD表面的一层透明薄膜 , 它将压力转换成模拟电信号 , 模拟信号再经过A/D转换被采样 。触摸屏的工作流程如图5所示 。
触摸屏通过中断方式完成其功能 。从执行流程上来说 , 首先在TouchPanel_init()中完成两件事:注册驱动程序和注册中断 。
对于触摸屏设备 , 主设备号为58 , 设备名为“ts7843” , 驱动程序子函数集为TouchPanel_fops 。TouchPanel_fops中指定了read、select、open、release
四个操作子函数的地址依次为
ReadTouchPanel、TouchPanelSelect、OpenTouchPanel和CloseTouchPanel 。
当用户进程调用open()打开/dev/ts7843时 , 内核调用OpenTouchPanel();用户进程调用read()读该设备时 , 内核调用ReadTouchPanel() 。request_irq()注册中断处理 , 中断为TOUCHPANEL_IRQ_UNM , 中断处理程序为TouchPanelInterrupt() , 说明为“TouchPanel” 。
当触摸屏有数据来到时 , 中断被触发 , 调用中断处理程序 , 准备处理数据 。
在本系统中 , 触摸屏主要用于改变采样的频率和幅值放大倍数 。在LCD的上方有四个长方形区域 , 分别对应着幅值增加、幅值减小、频率增加和频率减小 。
幅值和频率的选定值存放在指定内存单元中 , 在触摸屏检测到触摸点的坐标在相应区域中后 , 就会根据程序预先设定好的顺序和数值为增加或减少幅值或频率 。
2.4 μClinux多任务系统与共享内存管理
在传统的单片机系统中 , 软件往往是个控制环 , 让多个功能模块按顺序执行 。在一个功能较多的系统中 , 为了保证系统的各项性能 , 程序会变得越来越复杂和庞大 。由于μClinux是一个多任务的嵌入式操作系统 , 内核允许将一项工作划分成几个相互独立的任务 , 应用程序的设计得到了简化;更重要的是缩小了整个系统的响应时间 , 提高了系统性能 。数字存储示波器的设计需要进行数据采集 。对于这样的系统来说 , 应尽可能地少丢失数据采样点 。在μClinux中可同时运行多个任务 , 且前台任务比后台任务具有较高的优先级 , 因此 , 合理的方案是将采集部分和显示部分安排在前台 , 而将触摸屏控制部分放在后台运行 。这样可以保证整个系统有效地完成各项功能 。
数字示波器在采样和显示过程中 , 要求可以随时改变采样频率和幅值 , 所以在前后台任务之间需要进行同步和通信 。任务之间的通信是通过共享指定的物理内存单元来实现 , 不同任务之间对共享内存单元的访问是互斥的 。ΜClinux的设计针对没有MMU的处理器 , 不能使用虚拟内存管理技术 。ΜClinux系统对于内存的访问是直接的 , 它对地址的访问不需要经过MMU , 而是直接送到地址线上输出 , 所有程序中访问的址都是实际的物理地址 , 操作系统对内存空间没保护 。当触摸屏检测到有改变幅值或频率的信号发生时 , 就去修改指定单元中存储的数据 , 这样的内存单元对于两个任务来说属于临界资源 。在触摸屏修改内存期间 , 需要禁止其它程序对该内存进行任何操作 。同样 , 采集程序每次在发送幅值和频率信号之前 , 要对该内存单元进行读操作 。若在此时有触摸屏信号对内存提出写操作要求 , 程序就应该进行等待 , 直到采集部分的读操作执行完毕 , 释放内存的访问权 。
3 结论及展望
【基于Linux操作系统实现40MHz数字存储示波器的设计,来看看?】 经实践证明 , 基于嵌入式Linux的40MHz数字存储示波器的设计 , 是具有一定可用性及可靠性的 。在目前已有功能的基础上 , 我们还将开发频谱分析等更多的功能 。整个系统设计体现了嵌入式Linux系统适应性强、体积小、成本低、开放源代码、开发使用容易等特点 。由于使用了μClinux , 系统的控制逻辑结构清晰 , 与普通的单片机系统相比 , 在对功能的进一步扩展、移植及接入网络等方面都有着极大的优势 。

    推荐阅读