如题,网上只找到如下介绍 关于通过PCI向DSP加载程序经验谈 本人使用在使用Ti DM642 EVM时,对通过PCI向DSP加载程序总结了一点经验,在此和大家分享: 关于PCI加载的原理,参见《TMS320C6000系列DSPs原理与应用》(第2版)469页和497页。PCI加载的大体过程如下: 1. 选择从PCI启动DSP;(此步骤可以通过DSP版上的跳线设置) 2. 通过向HDSR控制寄存器的WARMRESET位写1使DSP处于RESET状态; 3. 通过PCI64_LoadCoff()函数向DSP加载代码(*.out); 4. 通过向HDSR控制寄存器的DSPINT位写1向DSP发中断,并结束DSP 复位状态; 5. CPU开始执行“0地址”处的指令,加载过程结束。
由于基于C程序或基于C语言框架的混和语言程序,系统复位和数据初始化都必须基于C的运行环境,而C运行环境的建立必须由c_int00()函数来完成,所以在DSP复位后执行“0地址”指令时,必须首先跳转到C环境的入口点_c_int00(该点在rtsxxxx.lib库中定义),从而能够调用c_int00()函数完成建立堆栈,变量初始化,和调用Main函数等工作。所以在“加载代码”之后,为了使DSP能够响应DSPINT RESET中断并跳转至_c_int00处“执行代码”,最好在程序中添加一个中断服务表IST程序(Vector.asm, 见附录或参见《TMS320C6000系列DSPs原理与应用》102页),并且还要在CCS Build Options->Linker page 中的Code Entry Point项添加“_c_int00”。此外还要注意的是,Vector.asm中定义的.vector 段必须被连接命令文件(.cmd)分配到0地址(对于DM642即分配到ISRAM)。
通过上述过程基本上可以顺利完成PCI程序加载。DM642EVM提供了PCI驱动和相关示例,大家可以再进一步参考“\ti\Borards\evmdm642\examples\pci\pci_test”中的源代码具体分析一下。
附录------------------------ “Vector.asm”程序 .sect ".vectors" .ref _c_int00 ; C entry point .align 32*8*4 ; must be aligned on 256 word boundary RESET: ; reset vector mvkl _c_int00,b0 ; load destination function address to b0 mvkh _c_int00,b0 b b0 ; start branch to destination function nop 5 ; fill delay slot
[此贴子已经被作者于2008-5-29 15:51:38编辑过] |