This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我现在开发OMAPL138芯片,遇到如下问题:
在ARM端是简单编写的唤醒DSP的程序,没有其他操作,生成了.out文件;
DSP端是实际应用的程序,并且在CMD文件中设置了程序初始入口位置:entry_point: o=0x80010000 l=0x00000400 .text:_c_int00>entry_point
之后利用AISgen将两部分.out文件合成转换,利用ARM端烧写进入NAND FLASH,脱机运行。
现在的情况是主程序的函数能够运行,例如GPIO点亮LED,但是中断向量表指向的中断入口程序没有被执行。
请问中断向量的asm文件要做什么特殊的工作吗?是因为在CMD文件中指定的位置不对吗?曾经将其放在程序入口前一段地址,后一段地址都试过了,就是没有被运行。请问我如何解决这个问题呢?
谢谢!
感谢您的回复
DSP程序调通后,需要烧录到nor-flash,但是需要利用ARM唤醒DSP,所以我自己建了个ARM工程(默认的helloword的工程,cmd文件也默认的,),里面的main函数中添加唤醒DSP代码,然后编译后将该工程的.out文件与DSP工程的.out文件一起利用AISgen软件生成一个bin文件,将该bin写到nor-flash中后上电没反应。
1、 是不是cmd的问题呢,ARM(见下面)和DSP的cmd文件差不多,DSP中后边section中加了个.boot>SHRAM,这一句干嘛用的呢?,不知道这两个CMD有问题没?地址冲突吗?应该怎么改?
2、bootloader将flash中的程序加载到了哪段地址呢?DSP是0x80000000吗?ARM是0xffff0000吗?是怎么指定的呢?
3、ARM工程的properties里面的各种参数需要修改吗?
您上面给的那个资料努力看中。
期待您的指导,感谢!!
MEMORY
{
#ifdef DSP_CORE /* DSP exclusive memory regions */
DSPL2ROM o = 0x00700000 l = 0x00100000 /* 1MB L2 DSP local ROM */
DSPL2RAM o = 0x00800000 l = 0x00040000 /* 256kB L2 DSP local RAM */
DSPL1PRAM o = 0x00E00000 l = 0x00008000 /* 32kB L1 DSP local Program RAM */
DSPL1DRAM o = 0x00F00000 l = 0x00008000 /* 32kB L1 DSP local Data RAM */
#endif
SHDSPL2ROM o = 0x11700000 l = 0x00100000 /* 1MB L2 Shared Internal ROM */
SHDSPL2RAM o = 0x11800000 l = 0x00040000 /* 256kB L2 Shared Internal RAM */
SHDSPL1PRAM o = 0x11E00000 l = 0x00008000 /* 32kB L1 Shared Internal Program RAM */
SHDSPL1DRAM o = 0x11F00000 l = 0x00008000 /* 32kB L1 Shared Internal Data RAM */
EMIFACS0 o = 0x40000000 l = 0x20000000 /* 512MB SDRAM Data (CS0) */
EMIFACS2 o = 0x60000000 l = 0x02000000 /* 32MB Async Data (CS2) */
EMIFACS3 o = 0x62000000 l = 0x02000000 /* 32MB Async Data (CS3) */
EMIFACS4 o = 0x64000000 l = 0x02000000 /* 32MB Async Data (CS4) */
EMIFACS5 o = 0x66000000 l = 0x02000000 /* 32MB Async Data (CS5) */
SHRAM o = 0x80000000 l = 0x00020000 /* 128kB Shared RAM */
DDR2 o = 0xC0000000 l = 0x20000000 /* 512MB DDR2 Data */
#ifndef DSP_CORE /* ARM exclusive memory regions */
ARMROM o = 0xFFFD0000 l = 0x00010000 /* 64kB ARM local ROM */
ARMRAM o = 0xFFFF0000 l = 0x00002000 /* 8kB ARM local RAM */
#endif
}
SECTIONS
{
.boot>SHRAM //DSP的cmd包含此行,ARM中没有
.text > SHRAM
.stack > SHRAM
.bss > SHRAM
.cio > SHRAM
.const > SHRAM
.data > SHRAM
.switch > SHRAM
.sysmem > SHRAM
.far > SHRAM
.args > SHRAM
.ppinfo > SHRAM
.ppdata > SHRAM
/* TI-ABI or COFF sections */
.pinit > SHRAM
.cinit > SHRAM
/* EABI sections */
.binit > SHRAM
.init_array > SHRAM
.neardata > SHRAM
.fardata > SHRAM
.rodata > SHRAM
.c6xabi.exidx > SHRAM
.c6xabi.extab > SHRAM
}
#1. 确认一下NOR flash首地址的数据是否是NOR flash Configuraiton Word,参考boot loader applicaiton note sprab41d文档 page2,3。有个版本的AISGEN在bin文件里加了这个configuraiton word,而有个版本的nor writer又加写了一个configuration word,确认有这个configuraiton word且没有重复。方便的话,你可以把nor flash的内容截个屏贴上来看一下。
#2. NOR flash是连在CS2.
#3. 程序是运行在片上内存,还是DDR?如果是在DDR,确认在AISGEN里的DDR配置正确。
#4. 是boot ARM,还是DSP,还是两个一起?
您好:
1、nor flash的config word 没错,flash地址0x60000000的前四个字节为0x00000021,烧写程序自己写的,写入flash后与.bin文件对照过,是一致的,参见附件中ARM_output_AIS_0610_3.bin与0x60000000_0610_dsp.dat;
2、flash连接cs2,烧到flash后,上电时cs2管脚可以检测到一串脉冲,oe读使能信号也能检测到脉冲;
3、片上内存,.bin只有25KB,ARM的section放在了0x80000080,DSP放在了L2ram,entry_point:0x80000000;
4、程序是在您上传的Boot_DSP_on_SOC_V0.1.zip 中OMAPL138_ARMbootDSPCoff.zip的工程上修改的,因为是自己的板子,所以修改了些内容,然后用AISgen软件将两个工程的.out文件生成了一个.bin。AIS的.cfg文件参见附件
问题:
1、ARM工程中有一个call_swi(327680);函数,调试时程序运行到此就没法往下运行,一致跳不出来,暂停后提示:cannot load from non primitive location,不知道这是什么原因? 这个不用时貌似pinmux没法在ARM中配置;
2、注释掉后修改ARM模式的语句后,根据自己的板子进行了修改,仿真时先运行ARM然后load进DSP的.out后程序可以运行,点LED成功,但是烧写后不成功;仿真器连接ARM(未用GEL初始化)后查看RAM,和.bin对照不一致。RAM数据见附件。
麻烦您看一下,感谢
没有看到附件,请确认是否上传了。
#1. 确认是用的16bit的NOR,且硬件连接正确。
#2. 这只能说明BOOTMODE设置正确。
#3. 这里有明显问题,除非你写错了:ARM的section放在了0x80000080,DSP放在了L2ram,entry_point:0x80000000, 还是把原始的cmd贴上来吧。
#4. 把工程贴上来,如果不涉及要紧的东西。不改能不能起来呢?
#1. call_swi是为了切换到supervisor mode,因为系统相关的配置寄存器要在这个模式下才能访问。
#2. 运行DSP后,ARM的程序还在运行吗?反过来,先运行DSP,再运行ARM,DSP的点LED还在继续跑吗?
您好 ,原来我昨天忘了传附件了。。。附件见下面。。。。ARM工程调试时运行到call_swi这里就没法继续往下运行了,不知道啥原因,注释掉call_swi后可以往下运行,但是就没法配置pinmux了。。。ARM只负责唤醒DSP和psc、pll的配置。。。。。