由uClinux与MC68VZ328构成数字存储示波器
2.3 系统软件结构
基于嵌入式Linux的数字示波器系统主要分为数据采集和存储模块、波形显示和刷新模块以及触摸屏控制模块三个部分。系统软件由Linux下的C语言编程实现。
(1)数据采集和存储模块
采集存储模块流程如图4所示。
系统首先向采集卡发送所要求的频率和幅值信号,然后发出复位信号RESET,采集卡开始采集数据。采集到的数据经过FIFO存储器,由J口读入内存并存入指定数据缓冲区之中。在存储过程中,采用了双缓冲区机制,数据按1K大小分块,相邻的两块数据交替存放在内存的不同区域中。在每读入1K个数据之后,内存中都存在连续的2K个采样数据,这样有助于以后对数据的处理和显示。
(2)波形显示和刷新模块
本系统中使用一块大小为240×320像素的黑白液晶显示屏。VZ328为LCD的控制提供了良好的支持,其实现主要通过LCD控制器完成。
存放在内存中的数据经过坐标变换之后就可以在LCD上进行显示了。在显示之前,因为LCD的坐标系与显示波形时所用的坐标系y轴方向相反,且需要将波形显示在屏幕的特定区域内,所以要对数据进行归一化处理。从端口读入数据的范围为0~0XFF,0点对应于LCD上y轴坐标的190,0XFF对应于LCD上y轴坐标的50,则0X7F对应于LCD上坐标为120的点,即屏幕显示的零点。相应的转化公式为
Y=120-(DATA-0X7F)×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的上方有四个长方形区域,分别对应
《由uClinux与MC68VZ328构成数字存储示波器(第2页)》