为了实现并行数据传输,必须将事件26的参数设置成与EMIF接口通信,同时需要将传输数据的源地址,目的地址,数据个数和数据增加方式(不变、加1、减1等)在初始化时写入dMAx(Lo)的参数中。这样,一旦事件26触发,dMAX(Lo)将自动传输数据;数据传输结束后,可以根据需要将dMAX(Lo)配置为向CPU发送内部中断14。同样,对于事件27,配置dMAX(Hi)的参数就可以完成对HPI接口的数据传输,也可以根据需要将dMAX(Hi)配置为向CPU发送内部中断13。
McASP与中断相关的寄存器配置是实现以上方案的重点,其中断配置框图如图3所示。从图中可以看出,使用PFUNC寄存器将其配置成通用I/0引脚;PDIR寄存器控制I/O引脚的方向,若是输出引脚则由POUT引脚输出高低电平,若是输入引脚则由PDIN寄存器读出该引脚的状态;此外,可以使用PDCLR和PSET寄存器清除或者设置输出引脚的状态。
3 系统软件设计
系统软件设计主要包括McASP、dMAX、HPI和EMIF的初始化,以及中断使能等。系统主程序只需要等待中断进行相应的处理,主要的数据传输工作都是由dMAX按照软件配置自动完成,不需要CPU参与。系统软件流程如图4所示。图中,虚线部分表示由dMAX独立完成的工作,实线部分表示由CPU完成的工作。两者之间通过内部中断方式实现状态的交流。
当有2个以上传输事件发生,尤其是多个事件都在同一个dMAX优先级完成时,事件仲裁就变得很重要。图5是多个dMAX事件进行数据传输的例子。图中,事件A为dMAX(Hi)数据传输;事件0~2为dMAX(Lo)数据传输。在dMAX(Lo)中,设定事件O优先级最高,事件2优先级最低。
事件A和事件0同时发生,将分别触发dMAX(Hi)和dMAX(Lo)进行数据传输。在之后的时钟周期内,dMAX(Hi)不再有其他事件发生,将稳定、持续地进行事件A的数据传输,直到传输结束,如图5中最后一行所示。
对于dMAX(Lo),在传输了事件0的一个数据后,事件2发生。虽然事件2的优先级低于事件O,但dMAX(Lo)仍然会响应事件2,并且会传输一个事件2的数据,如图中第5行的E2/QO。此时,dMAX(Lo)就存在2个激活的事件——事件O和事件2。之后的数据传输dMAX(Lo)进行优先级判断,将优先传输事件O的数据,而将事件2挂起,直到事件O结束后才开始处理事件2的数据传输。
4 总 结
dMAX使用2路独立的传输通道从而实现并行数据传输,其本质是采用了独立的物理通道,这与FPGA实现并行处理基本一致。本文介绍了基于C6727B的dMAX的基本结构以及软硬件设计,使用事件优先级控制区分多个事件的数据传输。由于可以并行传输数据,使得DSP与外部设备的通信更加方便和快捷,而且不需要CPU的参与,减轻了CPU的负担,使CPU可以专注于复杂的算法处理。