打印

OMAP3530 ARM加载DSP程序的问题

[复制链接]
5064|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xmfish01|  楼主 | 2010-7-19 16:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用CCS写了一个程序a.out ,现在想在x-loader里面激活这个程序可行吗?
我现在是这么做的:将a.out 转化成hex文件,然后将hex文件下载到内存中,并将内存地址写到 DSP的启动寄存器,接着再ARM端释放DSP,但是DSP程序似乎没跑(我在DSP程序里,对内存地址0x80000000做递增操作,ARM侧读取这个地址,检查数值有没有变化)

  TI的技术支持说,OMAP3530只能使用DVSDK,才能在ARM下激活DSP程序,但是我看datasheet上描述DSP启动的那章,是可以通过在ARM侧的一系列的配置来直接启动DSP的。  

  知道的兄弟指点下。

相关帖子

沙发
mybao| | 2010-7-19 22:08 | 只看该作者

+

本帖最后由 mybao 于 2010-7-19 22:14 编辑

x-loader肯定不能加载DSP程序,除非你自己定制x-loader,移植DSP-LINK,也就是实现你说的直接加载,但是难度非常大,调试也不方便。
一般都在OS下启动DSP,按照说明一步步来吧,芯片越来越复杂,使用越来越方便,透明度越来越差

使用特权

评论回复
板凳
xmfish01|  楼主 | 2010-7-20 08:49 | 只看该作者
mybao,定制指的是什么? 我现在是在x-loader里面解析相应的hex文件,并将数据加载到指定的地址,但似乎没跑起来。 根据datasheet的描述,DSP的启动方式有自启动,外部启动,按讲是可以的啊。。。 而且将来用DVSDK,也是在ARM下激活DSP,这个激活的流程和原理应该是相同的。

使用特权

评论回复
地板
coreduo| | 2010-7-20 13:23 | 只看该作者
别听ti的人胡说八道,他们就是偷懒而已。
我只能说你的方向是对的。但是具体问题出在哪里不好说,仔细看文档。影响DSP运行有很多因素,比如电源控制是否已经打开,你的.hex是否加载正确等等等等。仔细看文档吧,每个可能性都要想办法去验证。

使用特权

评论回复
5
coreduo| | 2010-7-20 13:24 | 只看该作者
还有,紧紧看dsp启动那章肯定不够的,TI很恶心,很多东西散落到各个文档力,要自己去找的。

使用特权

评论回复
6
xmfish01|  楼主 | 2010-7-20 16:16 | 只看该作者
To coreduo:
  向你请教下,你跑DSP程序的时候,有设置DSP的MMU吗?hex文件的解析应该是没问题了,现在比较可能的地方就是一个MMU的设置,还一个就是启动方式的设定。     我看datasheet上介绍启动DSP的那一章,有提到要设置MMU的地址转换表及相关的,但是网上查的其它资料说,DSP都没有使用MMU的。  而且我也觉得DSP应该不使用MMU比较对吧?

使用特权

评论回复
7
xmfish01|  楼主 | 2010-7-20 16:18 | 只看该作者
主要是搞OMAP3530的人太少,而我对DSP也不够了解,现在能看的就是datasheet,sigh...:dizzy:

使用特权

评论回复
8
xmfish01|  楼主 | 2010-7-27 15:14 | 只看该作者
帖子要沉了。。。顶。

使用特权

评论回复
9
mybao| | 2010-7-27 19:47 | 只看该作者
如果DSP用到外部存储器,就必须设置MMU,这个看具体情况。DSP的MMU的设置由ARM完成。有兴趣,可以下载DSP-LINK的源码研究下,东西全在里面

使用特权

评论回复
10
xmfish01|  楼主 | 2010-7-28 08:35 | 只看该作者
mybao: 如果打开了MMU,而DSP程序里面又都是操作物理地址,那不是有问题了?

使用特权

评论回复
11
mybao| | 2010-7-28 20:11 | 只看该作者
DSP程序里面操作的外部物理地址没有被MMU映射到自身,那肯定出错。但是DSP的内部存储器不受MMU控制

使用特权

评论回复
12
xmfish01|  楼主 | 2010-7-29 09:46 | 只看该作者
mybao: 对于MMU这一点,我实在有点想不通。因为程序里面用的是物理地址,那即是打开MMU也是对地址做原样映射,就是0x80000000映射到0x80000000,这样跟不开MMU不是一个效果?    另外,如果书上介绍的DSP开发的流程里,都没有提到要设置地址映射表或者是MMU,所以给人感觉DSP就是直接操作物理地址。

另外有个问题请教下: 我通过仿真器,对DDR2的内存进行递增操作:
    int *p = (int*)0x81000000;
      *p = 0;
      while(1)
    {
        *p +=10;
    }

p的值没错,但是我查看*p,发现值根本不是赋值为0,然后递增。  随着while循环的执行,在调试窗口看到的*p的值一直在随机变化。 这是不是说明,我在DSP程序里面,对内存的访问有问题呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

26

帖子

1

粉丝