小弟用5510HPI启动,用MSP430单片机作为host,将code代码加载到0x8000处(字地址),可是上电后加载到0x8000的数据却并不是我的code代码(十六进制数据),请问大侠们,咋回事啊?
我的调试方法是:先将单片机上电运行host代码,然后用ccs3.3->connect连接,然后看view->memory,请问大侠们,我的操作有问题吗?我跟踪单片机,单片机确实运行起来了。
Shine:
你先看一下HPI读写时序对不对?
js jiang:
回复 Shine:
真的太感谢您了,看过你的关于5509的hpi启动答疑http://www.deyisupport.com/question_answer/dsp_arm/c5000/f/48/t/19385.aspx学到了很多东西。
正如您所说,是时序不对,现在写入的数据是正确的,但是dsp还是没起来,明天继续研究,有问题再来请教您哈。
js jiang:
回复 js jiang:
今天调了一下午,发现DSP还是起不来,我一一的将DSP8000h开始的数据和用host加载的数据进行了对比,完全是正确的。可DSP还是启动不了,我怀疑是我EHPI启动的操作顺序不对,我的步骤是这样的:1、设置bootm[3..0]=1101。2、拉低DSP的reset管脚,延时后再拉高DSP的reset管脚。3、向hpic寄存器写入0x00。4、加载程序所需数据。5、向hpic寄存器写入0x01,启动DSP。
请问大侠,我的操作有问题么?
Shine:
回复 js jiang:
1. 去掉 3、向hpic寄存器写入0x002. 在byte address 0x10000处设置一个硬件断点, 看能停在该断点吗?3. 用ccs反汇编窗口看一下byte address 0x10000处放的是你的入口程序_c_init00么?
js jiang:
回复 Shine:
您好Shine Zhang,我按照您的方法调试了一下,我用ccs反汇编窗口中右键的“start address”可以定位0x10000处,但是用鼠标滚轮向上或向下稍微一滚动,就发现0x10000这个地址不存在了,看下面我复制的反汇编窗口数据:
以下是我用“start address”定位0x10000处:
010000 ec314e0038fa AMAR *(#038fah),XSP010006 ec315e0039f4 AMAR *(#039f4h),XSSP01000C f406f91f_98 AND #63775,mmap(@ST1_55)010011 f5064100_98 OR #16640,mmap(@ST1_55)010016 f496fa00_98 AND #64000,mmap(@ST2_55)01001B f5968000_98 OR #32768,mmap(@ST2_55)010020 4656 BCLR ST3_SATA010022 4617 BSET ST3_SMUL010024 160000 MOV #0,DPH010027 160001 MOV #0,MDP0501002A 160002 MOV #0,MDP6701002D 6c000248 CALL _auto_init
在此窗口数据上,我在010000 ec314e0038fa AMAR *(#038fah),XSP这一行设定了一个硬件断点,发现pc指针可以停在此处。
以下是我用鼠标滚轮向上翻,本想看看0x10000以上的代码,但是却出现下面的情况:
00FFFA 6dd5a55a BCC #0x00a558,T1 >= #000FFFE 0cccec_314e RPT #52460 || MIN T0,AR6010003 0038fa RPTCC #250, AR0 <= #0010006 ec315e0039f4 AMAR *(#039f4h),XSSP01000C f406f91f_98 AND #63775,mmap(@ST1_55)010011 f5064100_98 OR #16640,mmap(@ST1_55)010016 f496fa00_98 AND #64000,mmap(@ST2_55)01001B f5968000_98 OR #32768,mmap(@ST2_55)010020 4656 BCLR ST3_SATA010022 4617 BSET ST3_SMUL010024 160000 MOV #0,DPH010027 160001 MOV #0,MDP0501002A 160002 MOV #0,MDP6701002D 6c000248 CALL _auto_init
以下是我的原始代码用ccs加载后的反汇编窗口:
000100 .text, __text, _c_int00:000100 ec314e0038fa AMAR *(#038fah),XSP000106 ec315e0039f4 AMAR *(#039f4h),XSSP00010C f406f91f_98 AND #63775,mmap(@ST1_55)000111 f5064100_98 OR #16640,mmap(@ST1_55)000116 f496fa00_98 AND #64000,mmap(@ST2_55)00011B f5968000_98 OR #32768,mmap(@ST2_55)000120 4656 BCLR ST3_SATA000122 4617 BSET ST3_SMUL000124 160000 MOV #0,DPH000127 160001 MOV #0,MDP0500012A 160002 MOV #0,MDP6700012D 6c000248 CALL _auto_init
js jiang:
回复 Shine:
太感谢您了,确实是-cr惹的祸,最开始一直没有关心-cr选项,也没有找到这个选项在哪儿,后来刻意的找到了这个选项,改成none,马上就可以运行了,但是代码数据貌似很少了,而且这个-cr不是cinit段初始化作用的么?这样一来哪些全局变量不就没有初始化了么?为什么程序还能运行起来?很不解。
而且,现在的代码数据和利用ccs加载进DSP的数据貌似根本就不一样,但是为什么能运行起来呢?
当时用-cr选项,代码数据和利用ccs加载进DSP的数据完全一样,反而却运行不起来,这一点很是不解,可能还是没有弄明白HPI启动的深层原理是什么?
js jiang:
回复 Shine:
太谢谢您了!根据您的提示,问题终于搞定了。