首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[转帖]关于通过PCI向DSP加载程序经验谈

[转帖]关于通过PCI向DSP加载程序经验谈

关于通过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\boards\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
返回列表