GE IS220YAICS1A
主机发送指定传输大小的DMA读的厂商请求后(传输大小应等于每个中断间隔内A/D采样数据大小,以保证所有采样数据不会丢失),单片机响应该请求,进入相应函数处理DMA请求。具体编程如下:
a)设置DMA端点寄存器,指定DMA传输使用的端点。需要注意,为防止DMA端点寄存器与当前使用的端点索引寄存器相同,应首先指定端点索引寄存器为一个与DMA端点寄存器不同的端点值。
b)设置DMA传输计数器寄存器,指定本次DMA传输的字节数。当然,这个数越大,DMA传输的速度越快,但笔者经过测试发现,该数不要大于65535,否则可能***传输会失败。而且该数***好是512的整数倍,这可以保证没有短包传输。
c)设置DMA命令寄存器为006(表示***读),开始***传输。
d)程序应循环查询DMA中断寄存器的值,判断本次传输是否完成,如果完成,则清DMA中断寄存器,退出循环,完成本次DMA传输。
3)中断程序设计
本系统中需要用到2个外部中断,分别对应2个中断程序。第1个中断函数用于读出并保存当前所有ISP1581发出的中断的拷贝。注意,我们不仅要保存中断寄存器的值,还要保存DMA中断寄存器的值。需要强调的是,因为ISP1581是全中断驱动的,所有的信息交互都通过中断完成,PC机对ISP1581的任何操作都会引起ISP1581相应的中断,进而单片机通过查询1581中断寄存器判断并处理中断。第2个中断函数是8254发给单片机的,当完成指定周期的A/D数据采样后,8254通过本中断程序通知单片机启动MD-MA开始传输标识,即转到上述"处理DMA请求"部分,读FIFO中的数据。本系统设计8254每隔5 ms左右产生一次中断,进行DMA传输。
系统采用中断传输+批量传输的方法设计中断程序,即如果数据采集模块有数据需要传给主机,首先采用中断传输方式传输数据通知主机,方法是在本段函数的起始部分通过固定的中断传输端点发送8字节数据以与驱动程序部分吻合,然后使用批量传输端点实际传输数据;而主机端应用程序则不断轮询该中断传输端点,若接收到8个字节固定格式的数据,马上采用批量传输方式接收数据。该方法不但利用了中断传输方式的实时性(1 ms以内),而且充分利用了批量传输的高速率。若FIFO的读写和8254的时序设计得当,利用该方法,可以实现10 MB/s以上的数据录入。在实验中,我们已经做到了8 MB/s的录入速度。
USB驱动程序
将另文详述。笔者认为,第1个中断程序的优先级应不低于第2个程序,这样可以保证ISP1581发出的所有中断可以立即得到执行。
4.2 EPLD方程设计
EPLD的功能主要包括提供ISP1581的cs及DREQ信号,提供8254的片选、地址、数据、控制、时钟输入等信号,以及提供FIFO的FIFO_RESET、FIFO-WR、FIFO-RD等信号和A/D转换模块的CLK、START等信号。***是如何使用***传输的几个***重要信号DREQ、DACK、DIOW、DIOR、EOT信号。查询芯片手册,在***模式下,DREQ为输入信号,DACK、D1OW、DIOR、EOT为输出信号。也就是说,当设置DMA命令寄存器为006(主机DMA读)时,ISP1581开始不停地查询DMA请求信号DREQ是否为低,若DREQ为低,则传输开始;否则一直查询。因此,可在EPLD中设置DREQ接地,这样可以保证当设置DMA命令寄存器为006时,1581立即进行传输。D1OR为输出信号,由1581提供,可直接作为FIFO的读信号;FIFO的写信号由8254的一个输出引脚提供,8254应根据A/D采样频率初始化该定时器,输出该引脚。
5 结束语
本文提出了一种使用USB2.0芯片。ISP1581实现数据采集系统的设计方案。***的DIOR周期为120 ns左右,因此ISP1581在主机DMA模式下,理论上***高传输速度应为约16.6 MB/s(1000/120×16=132.8 Mbit/s=16.6 MB/s)。在实验中,我们使用的主机端配置为Windows2000+PⅣ3.0 GHz+512 MBDDR RAM,在批量模式下传输速度现已达到13 MB/s~15 MB/s(主机配置不同,传输速度也会相应有所改变),中断模式下传输速度达到1 MB/s~1.5 MB/s(约每隔0.5 ms进行一次中断传输,每次传输512字节),基本达到ISP1581 ***方式下速度上限,且传输模式、每次采样时间间隔、每次采样数据大小均可通过软件调节。该系统现已实际投产,应用于某雷达。