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