3 双口RAM的读/写程序
为了达到用低速模块处理高速
数据流的效果,在双口RAM的程序处理上采用乒乓操作的技巧。乒乓操作的最大特点是通过“输入数据选择单元”和“输出数据选择单元”按节拍、相互配合的切换,将经过缓冲的
数据流没有停顿地送到“
数据流运算处理模块”进行运算与
处理。把乒乓操作模块当作一个整体,站在这个模块的两端看数据,输入
数据流和输出
数据流都是连续不断的,没有任何停顿,因此非常适合对
数据流进行流水线式处理。所以乒乓操作常应用于流水线式算法,完成数据的无缝缓冲与处理。
设计中将双口RAM分为A,B两个部分,各占8 KB空间。通过9052和AVR交替对两个存储器进行读/写操作到达交换数据的目的。在双口RAM的仲裁方式选择上选取中断和硬件仲裁结合的方式,中断仲裁在硬件电路设计上比较简单,只要将双口RAM两侧的INT引脚连接到AVR和PCI90 52的中断引脚上,软件设计上只要编写双口RAM操作程序和中断服务程序两部分。具体过程是:
(1)数据下行(PCI9052写,AVR读)。在首次发起数据传输时,通过握手信号告诉AVR本次数据传输共多少个字节。然后发起本次数据传输,如果数据传输长度小于8 KB,9052向双口RAM的A区写入数据,并在数据全部写完之后对地址3FFFH(右端口信箱)执行一个写操作,这样
引脚变为低电平,触发AVR的一个中断响应程序,该程序就是双口RAM读写程序中的读函数,该函数读取双口RAM A区中事先约定长度的数据,并在操作的最后对地址3FFFH(右端口信箱)执行一个读操作以恢复
引脚为高电平,随后退出中断响应程序。
如果数据传输长度大于8 KB,9052写完A区后,立即对地址3FFFH(右端口信箱)执行一个写操作,这样
引脚变为低电平,触发AVR的中断响应程序,该程序读取全部A区的数据,然后对地址3FFFH(右端口信箱)进行一个读操作,使
恢复为高电平,之后继续读取B区的数据;这时9052如果在B区完成了全部数据的写入,则AVR在B区读到约定长度的数据后结束本次数据传输;如果9052在B区没有写完全部数据,则它查询
是否为高,如果为高则继续把剩下的数据写入A区;AVR在读完全部B区数据后进入暂停状态,直到接到再次中断信号继续读取A区数据;9052在A区的地址结束时继续触发
中断使得AVR继续读取A区数据,A区没完接着读B区,这样循环下去,直到完成约定数据的全部传输。具体的流程如图7所示。
(2)数据上行(PCI9052读,AVR写)。双口RAM读/写程序中的写函数会将数据写入双口RAM的A区,并在最后一步对左端口信箱3FFEH地址执行一个写操作,引脚变为低电平,该引脚连至PCI9052的局部中断引脚,通知9052读取写入的数据,9052在读取数据之后会对左端口信箱3FFEH地址执行一个读操作,这样引脚恢复为高电平,使之退出中断响应程序。整个数据传输程序流程和下行相似,具体的流程如图8所示。
4 结语
高性能双口RAM可以有效解决上位机和下位机之间的复杂数据处理问题,实现时序的粘连;乒乓操作是一个常应用于数据流控制的处理技巧,是解决高速设备和低速设备交换数据的常用方法。实践证明本文的设计方法是解决高低速设备的传输瓶颈问题,提高PCI总线与AVR单片机之间的数据传输速度的有效途径。
上一页 [1] [2] [3]