嵌入式多路信号数据采集系统实现方案
移植。根据μC/OS2Ⅱ的要求,移植μC/OS2Ⅱ到一个LPC2134ARM7体系结构上需要提供2个或3个文件:OSCPU.H(C语言头文件)、OS-CPU-C.C(C程序源文件)及OS-CPU-A.ASM(汇编程序源文件)。
数据采集任务中,采用C语言进行编程,但对于系统的初始化,仍然采用汇编来制作启动代码,它可以实现向量表定义、堆栈初始化、系统变量的初始化、中断系统初始化、I/O初始化、外围初始化、地址映射等操作。
芯片复位后,系统初始化流程如图2所示。
图2 系统初始化流程图
3.2 接口程序及SD卡驱动的实现
在实时内核下,接口程序读取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/OSⅡ相关,与硬件无关;应用层是向应用程序提供卡的API函数,这一层由实时操作系统μC/OSⅡ控制。
图3 SD卡读写软件移植结构图
3.3 应用程序实现
系统初始化完成后,创建各个任务,进入多任务调度处理。应用程序框架流程如图4所示。
图4 应用程序框架流程
本系统的主要任务是完成数据采集。系统在得到远程数据中心的采集命令后,选择适当的采集通道,并设置A/D模块参数。在采集过程中判断是否要停止,如果停止,任务处于等待挂起状态。
4 结语
考虑到现场采集到的多是小信号,为了有较好的准确度和精确度,对A/D后的采集数据还要进行分析和调整,然后再发送到数据处理中心。另外,随外界环境的变化,也可以修改拟合曲线以适应具体的应用。随着3G时代的来临,可以考虑采集现场的相关视频信号。在短消息功能,数据加密技术以及软件操作和文件管理上还有待进一步开发和优化。
- 3DES算法的FPGA高速实现(06-21)
- 基于DSP的Max-Log-MAP算法实现与优化(05-27)
- DSP中DMA操作的无阻塞请求实现(06-18)
- 二维DCT编码的DSP实现与优化(09-08)
- 基于DSP处理器上并行实现ATR算法(01-29)
- 基于DSP的H.324终端设计(05-27)