利用ColdFire uClinux实现数据采集和传输
关键词:ColdFire uClinux 数据采集
在ColdFire上嵌入uClinux操作系统是一项比较成熟的技术,般应用在手持设备、家庭网关、工业控制中。但在数据采集应用中使用这项技术却不是很常见,原因是uClinux不是实时操作系统,而数据采集应用对数据采集的实时性要求很高。本文介绍如何利用在ColdFire上嵌入uClinux操作系统的方法来实现数据的采集和传输。
1 硬件平台
任何嵌入式应用系统都离不开具体的硬件平台,这里先介绍一下系统采用的硬件平台。图1所示即为硬件结构的示意图。其中,SPM是数据处理模块,它控制前端的A/D变换,根据设定的采集周期将A/D变换后的数据保存在其内部的RAM中;同时发出一个中断信号。ColdFire 5307 xBoard是基于Motorola公司高性能嵌入式32位处理器ColdFire 5307自行开发的嵌入式应用开发板。其硬件配置包括:
ColdFire5307 90MHz 32位处理器;16M SDRAM;2M Flash ROM;10Mbps以太网接口;两个UART串口;两个64针的地址和数据总线接口。
ISC(图像控制工作站)和IDS(图像数据工作站)是两个工作站,用来对系统实现控制,对图像数据实现处理。XBoard和工作站处在同一个以太网上,该以太网上还配有其它的设备。uClinux所要实现的功能是实时地将SPM上采集的数据通过以太网传到IDS上,同时接收来自ICS的命令以对SPM进行控制。
(凹丫丫范文网fanwen.oyaya.net收集整理)
2 SPM和xBoard之间的连接
uClinux需要读取SPM中的RAM,所以最好是把SPM中的RAM作为uClinux的内存地址的一部分。SPM和xBoard上MCF5307之间的硬件连接如图2所示。
SPM中RAM的地址线、数据线和控制线直接连到CPU的总线上。除了硬件上的连接之外,还需要设置MCF5307的寄存器,为SPM上的RAM分配内存空间。XBoard在加电时首先运行debug程序,所以在debug中进行寄存器的设置是比较合适的。在debug源代码中的sysinit.c文件里的mcf5307_cs_init函数中加上下面的语句:
MCF5307_WR_CS_CSAR5(imm,0xa000); SPM的地址从0xa0000000开始
MCF5307_WR_CS_CSCR5(imm,0x3d40); 采用8位的读方式
MCF5307_WR_CS_CSMR5(imm,0x01FF0001); 空间大小为1M
将SPM控制的引脚和MCF5307的并口引脚相连,这产对SPM的控制就只需设置并口的相应位了。
3 uClinux下的实时性
uClinux并不是一个实时操作系统(RTOS),如何使用uClinux完成有实时性要求的数据采集是需要考虑的问题。由于应用中只一个实时的任务——从SPM中读取数据,所以采用中断的方式来对数据采集完的信号提供实时响应。下面的代码用来向uClinux注册IRQ7中断处理程序:result=request_irq(ECM_IRQ,ecm_interrupt,0,“ecm”,NULL);
在中断处理程序中,先关闭中断,因为中断嵌套在这里是没有意义的,还有一个重要的原因是SPM中断信号的低电平持续时间比较长。CPU是利用低电平来标志断信号的,所以CPU可能在SPM的一个中断信号中检测到多次中断。关闭中断后,从SPM的RAM中读取数据。由于SPM和xBoard之间的连接已得到保证,SPM的内部RAM成为uClinux的内存空间的一部分,所以读的工作是很简单的,只是将数据从一个地址读到另外一个地址,读完数据后打开中断。读数据之间发生的中断都会被忽略。读数据块的大小为4096字节,读完所有的数据需要2ms。所以在采集周期低于2ms的情况下,系统无法正常工作。不过这个指标低于应用的要求。