发明内容
有鉴于此,本发明的目的在于提供一种采集数据的传输方法、装置及系统,以解决在采集数据的传输过程中,采集数据丢失的问题。
为实现上述目的,本发明提供如下技术方案:
一种采集数据的传输方法,包括:
当采集装置所采集的数据达到预设值时,将所采集的数据写入写指针所指向的存储地址;其中,所述写指针所指向的存储地址为预设的外部存储器的起始地址;
将所述写指针指向所述外部存储器的下一地址或起始地址;
判断所述采集装置和主机间是否在传输采集数据;
当未传输采集数据时,将存储至所述外部存储器的采集数据传输至所述主机;
当所述采集数据传输结束后,发送结束消息至所述主机,以通知所述主机采集数据传输完毕。
优选的,所述采集数据传输至所述主机的方式为成组数据传送DMA方式。
优选的,当将所述采集数据传输至所述主机的方式采用DMA方式时,还包括:
预先在所述外部存储器内分配第一存储单元和第二存储单元,且所述第一存储单元存储源地址,所述第二存储单元存储目的地址;
其中,所述源地址为需传输的采集数据的存储地址,所述目的地址为所述主机内存储所述采集数据的地址。
优选的,所述当未传输采集数据时,将存储至所述外部存储器的采集数据传输至所述主机,包括:
当未传输采集数据时,将所述源地址所存储的采集数据传输至目的地址。
优选的,在所述当所述采集数据传输结束后,发送结束消息至所述主机,以通知所述主机采集数据传输完毕之后,还包括:
接收所述主机所发送的下一周期采集数据的存储地址,且将所述存储地址作为目的地址写入所述第二存储单元内。
优选的,所述将所述写指针指向所述外部存储器的下一地址或起始地址,包括:
当所述写指针当前所指向的地址为预设地址时,将所述写指针指向所述外部存储器的起始地址;
当所述写指针当前所指向的地址不为预设地址时,将所述写指针指向所述外部存储器的下一存储地址。
一种采集数据的传输装置,包括:
写入模块用于,当采集装置所采集的数据达到预设值时,将所采集的数据写入写指针所指向的存储地址;其中,所述写指针初始化指向的存储地址为预设的外部存储器的起始地址;
写指针模块用于,将所述写指针指向外部存储器的下一地址或起始地址;
判断模块用于,判断所述采集装置和主机间是否在传输采集数据;
传输模块用于,当未传输采集数据时,将存储至所述外部存储器的采集数据传输至所述主机;
通知模块用于,当所述采集数据传输结束后,发送结束消息至所述主机,以通知所述主机采集数据传输完毕。
优选的,所述采集数据传输至所述主机的方式为成组数据传送DMA方式。
优选的,当所述采集数据传输至所述主机的方式采用所述DMA方式时,所述装置还包括:
预分配模块用于,预先在所述外部存储器内分配第一存储单元和第二存储单元,且所述第一存储单元存储源地址,所述第二存储单元存储目的地址;
其中,所述源地址为需传输的采集数据的存储地址,所述目的地址为所述主机内存储所述采集数据的地址。
一种采集数据的系统,包括所述的采集数据的传输装置、采集装置和主机;
其中,所述采集数据的传置装置置于所述采集装置内,且与所述主机相连。
由上述的技术方案可以看出,在本发明实施例中,在采集数据达到预设值时,均会将采集数据存入存储器内,且只有采集装置和主机间未传输采集数据时,才会将存储的采集数据发送至主机。因此,采用本发明的方法,可以避免在数据传输时,下一周期的采集数据将上一周期的采集数据覆盖掉的情况,从而解决了采集数据丢失的问题。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明公开了一种采集数据的传输方法,如图1所示,该方法至少包括以下步骤:
S11:当采集装置所采集的数据达到预设值时,将所采集的数据写入写指针所指向的存储地址;其中,写指针所指向的存储地址为初始化预设的外部存储器的起始地址;
具体的,上述采集装置可不限于为多通道模数AD采集装置,而当上述多通道AD采集装置可具有8个通道,每个通道可同时采集512个点的模拟数据,而每个点的数据量又可为32bit时,如此,上述多通道模数AD采集装置每次可采集16KB(8*512*32=16KB)的数据;而上述预设值可为采集装置每次采集数据的数据量,因此,可当8通道模数AD采集装置,每完成一次数据采集时,将采集的16KB的数据存入外部存储器内;而对于上述外部存储器可不限于静态存储器SRAM;
S12:将写指针指向外部存储器的下一地址或起始地址;
具体的,将写指针指向外部存储器的下一地址或起始地址的目是为将采集装置下一周期所采集的数据,存入外部存储器不同于当前存储地址的存储单元,如此,可避免在上一周期的采集数据还未传输至主机,即被下一周期的采集数据覆盖掉,造成上一周期采集数据丢失的情况。
更具体的,当写指针当前所指向的地址为预设地址时,写指针就指向了外部存储器的起始地址;
其中,预设地址可但不限于人为设定,具体可为存储器的最后存储单元的地址;主要用于,当外部存储器的存储空间用尽时,将当前需存储的采集数据存入外部存储器的起始单元。由于,当外部存储器的存储空间用尽时,起始单元所存储的数据一般均会完成传输,如此也不会由于新采集数据的存入,造成原采集数据的丢失。
而当写指针当前所指向的地址不为预设地址时,将写指针指向外部存储器的下一存储地址即可。
S13:判断采集装置和主机间是否在传输采集数据;
S14:当未传输采集数据时,将存储至外部存储器的采集数据传输至主机;
S15:当采集数据传输结束后,发送结束消息至主机,以通知主机采集数据传输完毕;
由上可见,在本发明实施例中,在采集数据达到预设值时,均会将采集数据存入存储器内,且只有采集装置和主机间未传输采集数据时,才会将存储的采集数据发送至主机。因此,采用本发明的方法,可以避免在数据传输时,下一周期的采集数据将上一周期的采集数据覆盖掉的情况,从而解决了采集数据丢失的问题。
在本发明其它实施例中,上述所有实施例中的传输采集数据至主机的方式可采用成组数据传送DMA(Direct Memory Access)方式。
由于,上述DMA方式可将采集数据直接由源地址传输至目的地址,因此,当采用DMA方式时,上述所有实施例所公开的方法,还可包括:
预先在外部存储器内分配第一存储单元和第二存储单元,且第一存储单元用于存储源地址,第二存储单元用于存储目的地址;
其中,源地址为需传送的采集数据的存储地址,目的地址为主机内存储采集数据的地址。
具体,可分配SRAM内地址为0xf8004的存储单元为第一存储单元,地址为0xf8008的存储单元为第二存储单元;
同时,当采用DMA方式传输采集数据时,亦可设置DMA传输的状态和启动位;
其中,DMA传输的状态,用于表示DMA此时传输的状态,可包括传输和结束两种状态,但不仅限于上述两种状态;亦可配一寄存器用于存储DMA传输的状态,此寄存器为PCIIS寄存器(PCI Interrupt Source Register);
而DMA启动位,用于启动上述DMA传输,同样,可分配一寄器存储DMA的启动位和所传输的采集数据的长度,此寄存器为PCIMC(PCI MasterControl Register)寄存器。
由于上述DMA传输方式,不占用CPU资源,因此采用DMA传输方式,可实现采集数据的高速传输。
在本发明其它实施例中,当采用上述DMA方式传输采集数据时,上述所有实施例中的步骤S13可具体为:
查看上述PCIIS寄存器中DMA传输的状态;
而当传输状态为传输时,可认定采集装置和主机间正在传输采集数据;
而当传输状态为结束时,可认定采集装置和主机间未传输采集数据。
在本发明其它实施例中,上述所有实施例中的步骤S14可具体为:
当未传输采集数据时,将外部SRAM中地址为0xf8008的存储单元内的值写入到预设的PCIMA(PCI Master Address Register)寄存器内,将外部SRAM中地址为0xf8004的存储单元内的值写入到预设的DSPMA(DSP MasterAddress Register)寄存器内;
将需传输的采集数据的长度和启动位写入PCIMC(PCI Master ControlRegister)寄存器内,此时,即可启动DMA传输,将源地址所存储的采集数据传输至目的地址。
在本发明其它实施例中,当采用DMA方式传输采集数据时,上述所有实施例中的步骤S15可具体为:
当采集数据传输结束后,发送中断消息至主机,以通知主机采集数据传输完毕,可读取采集数据;
具体的,当采集数据传输结束后,可首先将中断标识(可为0xaaa)写入外部SRAM存储器的一存储单元内,而上述存储单元的地址可为oxf8010。然后可将预设的RSTSRC(DSP Reset Source/Status Register)寄存器中的INTREQ位写为1,最后,即可向主机发送中断消息;而接收到中断消息的主机即读取存储器内的采集数据,且将地址oxf8010的存储单元的内容置为0。
在本发明其它实施例中,上述所有实施例中的步骤S15之后,还可包括:
接收主机所发送的下一周期采集数据的存储地址,且将存储地址写入第二存储单元内;
具体的,主机侧可设置一读指针,每次主机读取读指针所指向的存储单元内的采集数据后,将读指针指向下一存储单元,且将下一存储单元作为下一周期采集数据的存储地址,发送至采集侧;而采集侧接收到存储地址后,将之作为目的地址,写入第二存储单元内,可具体为写入到SRAM中地址为0xf8008的存储单元内。这样,下一周期的采集数据将会存储至读指针所指向的下一存储单元内。
如此,可以避免当还未读取上一周期传输的采集数据,而下一周期的采集数据即将上一周期的采集数据覆盖掉的情况,从而避免了采集数据的丢失。
在本发明其它实施例中,上述所有实施例中的主机具体可为操作系统为widows XP的计算机;
Windows操作系统出于安全性策略,用户程序不能直接访问外部硬件设备,需要编写运行在Windows核心的设备驱动程序,才可以访问相关硬件的接口,在Windows操作系统下开发设备驱动程序需要专门的开发工具,驱动程序的开发常使用微软提供的DDK(Driver Develop Kit)工具。由于在Windows操作系统中,程序不能直接使用物理地址进行读写操作,而读写必须用虚拟地址。因此,在本发明实施例中,可首先建立64块连续的物理内存块,且将每物理内存块的大小均设为16KB,然后将每块物理内存映射到虚拟地址;
具体的,将物理内存映射到虚拟地址的过程,可具体如下:
首先,调用DDK内核函数MmBuildMdlForNonPagedPool对每块物理内存块进行描述;
然后,可以调用DDK内核函数MmMapLockedPagesSpecifyCache来实现内存映射;
需要说明的是,当内存映射使用完毕,需首先调用DDK内核函数MmUnmapLockedPages来解除内存映射,然后即可释放虚拟内存。
在本发明其它实施例中,当采用DMA方式传输采集数据时,还可设置一HSR(Host Status Register)寄存器,亦用于判断中断状态。
与此对应的,上述所有实施例中的步骤S14可具体为:
主机通过PCI接口读取上述HSR(Host Status Register)寄存器的中断值是否有效;
当上述中断值有效时,主机通过PCI接口清除RSTSRC(DSP ResetSource/Status Register)寄存器中断标志;
读取SRAM寄存器地址为0xf8010的存储单元的内容是否0xaaaa;
当为0xaaaa时,将地址为0xf8010的存储单元的内容置为0;
在本发明其它实施例中,如图2所示,上述所有实施例中的步骤S11之前,还可包括:
S21:接收主机发送的采集命令或设置参数命令;
具体的,如上述,主机可将首先将采集命令或设置参数命令置于外部存储器SRAM内的某一存储单元内,具体可为地址为0xf8000的存储单元;
S22:根据主机发送的采集命令,控制采集装置采集数据;
S23:根据主机发送的设置参数命令,设置采集数据的参数。
最后,需要说明的是,在执行完相应操作后,还需将地址为0xf8000的存储单元的内容置为0。
与上述方法相对应的,本发明还公开了一种采集数据的传输装置,如图3所示,至少包括:
写入模块31用于,当采集装置所采集的数据达到预设值时,将所采集的数据写入写指针所指向的存储地址;其中,写指针所指向的存储地址为预设的外部存储器的起始地址;
判断模块32用于,判断采集装置和主机间是否在传输采集数据;
传输模块33用于,当未传输采集数据时,将存储至外部存储器的采集数据传输至主机;
具体的,将传输采集数据的方式可为DMA方式;
通知模块34用于,当采集数据结束后,发送结束消息至主机,以通知主机采集数据传输完毕。
由上可见,在本发明实施例中,在采集数据达到预设值时,均会将采集数据存入存储器内,且只有采集装置和主机间未传输采集数据时,才会将存储的采集数据发送至主机。因此,采用本发明的装置,可以避免在数据传输时,下一周期的采集数据将上一周期的采集数据覆盖掉的情况,从而解决了采集数据丢失的问题。
在本发明其它实施例中,如图3所示,当将采集数据传输至主机的方式采用DMA方式时,还可包括:
预分配模块35用于,预先在外部存储器内分配第一存储单元和第二存储单元,且第一存储单元用于存储源地址,第二存储单元用于存储目的地址;
其中,源地址为需传输的采集数据的存储地址,目的地址为主机内存储采集数据的地址。
本发明还公开了一种采集数据的传输系统,如图4所示,包括采集数据的传输装置41、采集装置42和主机43;
其中,采集数据的传输装置41可置于采集装置42内,且与主机43相连;
具体的,采集数据的传输装置41的功能可具体由数字信号处理器DSP((Digital Signal Processing)实现,而主机43的功能可具体由计算机相连,而上述DSP与计算机之间可通过外设部件互连标准PCI(Peripheral ComponentInterconnect)接口相连。
由上可见,在本发明实施例中,在采集数据达到预设值时,均会将采集数据存入存储器内,且只有采集装置和主机间未传输采集数据时,才会将存储的采集数据发送至主机。因此,采用本发明的方法,可以避免在数据传输时,下一周期的采集数据将上一周期的采集数据覆盖掉的情况,从而解决了采集数据丢失的问题。