在实时内核下,接口程序读取A/D采样数据的方法通常有三种:程序延时法、ADC转换完毕时产生中断法和程序循环等待的方法。其中循环等待的方法CPU开销小,不需要中断服务,比较适合嵌入式系统中采用。
循环等待A/D读取数据的伪代码如下:
之间通过串口相连,采集数据先通过开发板串口UART0发送到无线数据终端AYG285C的缓冲区,然后缓冲区将数据打成一个个数据包,通过GPRS网络发送到远程数据处理中心。因此,在μC/OS2Ⅱ下LPC2134的UART底层接口驱动显得尤为重要。
UART0初始化函数片断如下:
在本系统中,串口通信采用8位数据位,1位停止位,奇校验,无流控制。在实际使用中为接收数据稳定波特率设置为9600bps效果较好。在测试系统中,测量到的数据范围为10-6~101,有效数字为4位,所以在发送数据时采用每帧数据由3个字节组成,第1个字节为数据指数部分,高四位为0,低四位中的第四位表示指数符号,0表示正数,1表示负数;其余三位表示指数的数值部分。
后续两个字节为数据底数部分,采用压缩的BCD码编码方式,高位在前,低位在后,即一个字节表示两位十进制数,则两个字节表示四位十进制数。
LPC2134的UART0使用中断方式进行通信,这样不会占用CPU很多时间,效率比较高。当中断服务处理子程序接收到一次中断,它仅能知道UART0产生了中断,还需要查询中断标志寄存器U0IIR,依据不同中断源类型进行不同处理。在处理完当前的中断源类型之后,不能立即退出服务,而应当继续判断U0IIR寄存器最低位是否为0。
如果为0,则表示还有尚未处理的中断,应该继续根据U0IIR[3∶0]判断中断源类型,进行处理,直到U0IIR的最低位为1,最后发送中断结束命令结束中断服务处理程序。
SD卡读写软件移植到ARM7微处理器LPC2134上的结构图如图3所示。其中硬件抽象层是读写SD卡的硬件条件配置,是与硬件相关的函数;命令层包含SD卡的相关命令以及卡与主机之间数据流的控制,这一层与实时操作系统μC/OS2Ⅱ相关,与硬件无关;应用层是向应用程序提供卡的API函数,这一层由实时操作系统μC/OS2Ⅱ控制。
图3 SD卡读写软件移植结构图
3.3 应用程序实现
系统初始化完成后,创建各个任务,进入多任务调度处理。应用程序框架流程如图4所示。
本系统的主要任务是完成数据采集。系统在得到远程数据中心的采集命令后,选择适当的采集通道,并设置A/D模块参数。在采集过程中判断是否要停止,如果停止,任务处于等待挂起状态。
图4 应用程序框架流程图
4 结语
本系统采用了ARM+RTOS以及ARM+GPRS的方案,选取适当的器件构成了多路的数据采集系统,具有一定的实用价值。考虑到现场采集到的多是小信号,为了有较好的准确度和精确度,对A/D后的采集数据还要进行分析和调整,然后再发送到数据处理中心。为此,可以进行反复实验,获得多组数据,最后通过最小二乘法曲线拟合来提高准确度。另外,随外界环境的变化,也可以修改拟合曲线以适应具体的应用。随着3G时代的来临,大量数据信息的传输成为可能,可以考虑采集现场的相关视频信号。在短消息功能,数据加密技术以及软件操作和文件管理上还有待进一步开发和优化。