首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于WinCE系统的FIFO数据传输程序设计 03

基于WinCE系统的FIFO数据传输程序设计 03

4. FIFO传输方式与常规方式的实现与比较
   
    FIFO存储器有两个端口(输入口和输出口),并按先入先出的顺序来暂时存放数据。当采用常规方式进行数据传输时,如采集板采样速度很快,而系统不能及时读出数据时,新采集的数据会把原来的数据覆盖,这时系统只能传递新的数据,从而造成数据丢失。MIC-2718的FIFO缓冲器可以解决这个问题,FIFO在数据采集卡中作用是缓存数据,解决采集系统中数据丢失的问题,它使采集板在高触发率或多任务操作系统(如Windows操作系统)中实现可靠稳定的高速实时数据采集和传输。
   
    MIC-2718在完成第一次A/D转换后将数据存入MIC-2718的A/D数据寄存器(地址为BASE+0和BASE+1(BASE为MIC- 2718的基地址))和FIFO缓冲区的第一个存储单元,下一次A/D转换时,新的数据会覆盖A/D数据寄存器中的数据,但是如果缓冲区的第一个存储单元中的元素没有被系统读取,FIFO会自动将此次转换的数据存入缓冲区的下一个存储单元,上一次的数据仍然保留。每一次转换的数据都被依次存入FIFO的缓冲区中,最多可以存储1024次A/D转换的数据。转移数据时,只需读取FIFO数据寄存器(地址为BASE+23和BASE+24)中的数据,它也是 FIFO缓冲区中的第一个存储单元的数据,此时缓冲区中第一个数据被读出,下一个存储单元的数据自动代替它的位置。通过采集板中FIFO的状态寄存器(地址为BASE+25)可以判断FIFO缓冲器当前的状态。状态寄存器的D0位EF是FIFO为空的标志,D1位HF是FIFO半满的标志,D2位FF是 FIFO为满的标志。另外,对BASE+25寄存器的任何写操作都将清空FIFO缓冲器,EF被置1,HF、FF置0.
   
    Windows CE系统提供的驱动程序开发包(Windows CE Driver Development Kit,Ceddk)中提供了丰富的驱动程序函数(地址映射、总线访问、建立DMA缓冲和I/O操作等),可以满足硬件平台上任何总线的需要[8],它通常被实现为动态库Ceddk.lib文件。由于MIC-2718是基于ISA总线的,可以直接对采集板的地址进行读写操作,同时,由于FIFO读写操作是相互独立的,可以同时进行,所以不必考虑采集板与Windows CE系统数据传输时的时序配合问题,但是在对FIFO进行读写操作时,要判断FIFO的状态,只有在缓冲区中数据未满时才能写入,未空时才能读出[9],以避免一些错误的操作。
   
    当数据采集板通过程序控制方式、定时器触发方式或外部触发方式采集到模拟信号后自动进行A/D转换后将数据放入A/D数据寄存器并依次写入FIFO 缓冲区中,Windows CE.net中的用户应用程序通过检测FIFO标志寄存器和MIC-2718状态寄存器(地址为BASE+8)的状态来确定是否进行了有效的A/D转换。下面给出在Windows CE开发平台上对FIFO进行读操作的部分代码,设MIC-2718的基地址为300H:
   
    PUCHAR ioPortBase=MapIoSpace(300H);//将物理地址影射为虚拟地址
   
    BYTE aistatus=READ_PORT_UCHAR(ioPortBase+8);//读MIC-2718的状态寄存器
   
    BYTE status=READ_PORT_UCHAR(ioPortBase+25);//读FIFO的状态寄存器
   
    BYTE ad0,ad1;
   
    if(aistatus&0x10)//若MIC-2718状态寄存器的A/D转换位有效
   
    {
   
    if(status&1!=0)//若FIFO不为空,则读FIFO
   
    {
   
    ad0=READ_PORT_UCHAR(ioPortBase+23);
   
    ad1=READ_PORT_UCHAR(ioPortBase+24);
   
    }
   
    }
   
    表1  A/D数据寄存器与FIFO数据寄存器的比较

    在使用MIC-2718的某一通道分别用常规方式和FIFO方式对一个持续变化的电压源做连续的信号采集和传输时,两种方式传输的数据如表1所示。可以看出,第2和第8组中A/D数据寄存器中的数值是错误的,可见使用普通A/D传输方式存在数据丢失问题,因此并不能准确传输数据,而使用FIFO方式可以保证数据传输的完整性。
   
    5.结束语
   
    通过实际测试,在Windows CE的高速数据采集系统中,采用FIFO可以保证数据采集的可靠性,并且编程简单,程序调试方便,可以极大地提高数据采集板的采样效率。本文作者的创新点在于在Windows CE.net系统下实现FIFO数据数据传输,从而保证了数据传输的可靠性。
返回列表