预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共13页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

使用CCS进行DSP编程(四) ——实现Host和DSP通信 pacificxu 首先对题目进行一下解释,之所以取这个名字,是为了与前面三篇文章相对 应,连成一个系列,这里不仅仅涉及使用CCS进行DSP编程,主机端的程序便 是用VisualC++实现的。通信包括许多手段:中断、mailbox、直接数据传输等 等,这里并不一一列举。 现在讨论实现Host和DSP通信。假定读者对CCS的使用已经比较了解,并 有了一定的CCS编程经验。如果读者还不太了解,请参阅《使用CCS进行DSP 编程(一)——CCS编程入门》、《使用CCS进行DSP编程(二)——实现FFT》、 《使用CCS进行DSP编程(三)——实现DMA和Interrupt》及其他CCS的学 习文档。 下面用闻亭公司的C6xP板硬件和闻亭公司的PCI仿真器为例,来实现Host 和DSP通信。对于‘C6Xpa板同样有效。 闻亭公司的C6xP板是一款具有PCI接口的高速信号处理EVM板,接口芯 片是AMCC的S5933,兼容PCILocalBusRevision2.1协议。PCI接口比较适合 用来进行Host和DSP的高速大数据量数据交换。主机通过HPI接口可直接访问 DSP的所有存储空间,允许主机初始化DSP,可以从主机加载程序。 前面几篇文章所讲的都是从JTAG接口加载程序,这样比较适合于程序的开 发调试,对于实际的系统来说,大部分都是系统自己从EEPROM或Flash加载, 现在我们可以从主机通过应用程序来加载,基于此,许多耗时的算法PC机不能 实时完成的可以由DSP来完成。 这个过程可以这样来描述:PC机执行应用程序,加载算法到DSP端,并将 需要处理的数据传送到DSP,DSP计算完成后将数据传回PC,整个过程由PC 来控制启动、工作、完成,使用起来比较方便。当然,DSP算法还需要首先用仿 真器通过JTAG接口调试好才行。 接下来看看实现这个功能的一个典型系统框图: 在这个框图里,我简化了主机PC执行程序的其他部分,突出了与DSP进行 通信有关的内容。 对任何一个系统,复位状态必须是确定的,这样才有一个确定的前提,对硬 件电路如此,对于软件编程也是如此。因为这里的关于主机与DSP通信是针对 确定物理硬件的(闻亭公司‘C6Xp板和‘C6Xpa板),编程是建立在对应的支 持库上的,未使用闻亭公司‘C6Xp板或‘C6Xpa板的读者可能对一些地方不太 理解,但原理性的地方应该是一致的。 对于PCI插卡与操作系统的关系,我不做过多的说明。闻亭公司‘C6Xp板 和‘C6Xpa板可以看作标准的PCI插卡,“驱动级”有两个文件支持,evm6x.vxd (对于NT4.0是evm6x.sys)和evm6x.dll,我们所关心的是evm6x.dll,它提供 了类似于WIN32的API一样的函数接口,用户可以直接在VisualC++和C++ Builder下调用。 在应用程序中,需要包含头文件evm6xdll.h,在这个头文件中,包含了对以下函 数的定义: 读者可以对比较感兴趣的函数做进一步的了解,这些函数的参数和使用方法在 TI的文档(spru308.pdf)中有详细的说明,我就不一一说明。顺便说一下,如果 读者同时有几块类似的PCI插卡,可以通过使用不同的板卡索引分别对不同的板 卡进行操作: 对第一块卡,board_index为0,第二块卡,board_index为1,┉┉,对每一块确 定的卡都有相应的操作句柄对应,相互之间互相不影响。 在DSP端的CCS编程中,同样会用到相关的头文件:board.h和pci.h,以 及相关的运行时库为drv6x.lib。其中与主机交换信息的函数列表如下: 现在,对我们要使用的硬件和软件资源都已经有了一定的了解,可以开锅造 饭了。对DSP端的程序,读者可以根据自己的需要来编写,我直接采用ChestNut 先生的程序来做例子,大家使用时可别忘了饮水思源啊^%(&^$%%&(:_: 其中引用的头文件gather.h源文件如下: 程序中首先对使用的硬件进行初始化,接下来进行死循环,DSP端一直读主 机发送的消息,读到后,将0x02000000开始的1024个空间用1来填充。然后向 主机发送消息,继续循环。同步和异步消息的收发有些不同,罗列如下: #include<pci.h> intpci_message_send(unsignedintmessage); 此程序发送一个32bit的message,如果它不能立即放入mailbox,返回错误, message未被发送。 Return: returnsOKorERROR,可能出错条件包括:外发信息邮箱不空或HINT未cle