Chinaunix首页 | 论坛 | 博客
  • 博客访问: 125127
  • 博文数量: 22
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 225
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-15 19:03
文章分类

全部博文(22)

文章存档

2011年(1)

2010年(1)

2009年(20)

我的朋友

分类: 嵌入式

2009-10-30 11:12:59

 
Posted: 30 Mar 2009 8:06 AM

For anyone trying to get the ARM to boot using the DSP on an L137 (i.e. not using the ARMUBL./DSPUBL to boot Linux), the following information may help:

It's basically the "guts" of the DSUBL/ARMUBL code, and can be used to get the ARM running an application from external RAM.  Any thoughts/comments/missing steps are welcome

Also, is there any documentation on the dMAX (or whatever the hardware block is that the DSPUBL uses to set the vector table in the ARM's internal RAM at address 0xFFFF0000)???

Cheers!


===Step 1===

Initially the ARM:
  - Is powered down (by the PSC).
  - Is held in RESET (by the PSC).
  - Has booting disabled (by the HOST0CFG register).

 It should be noted that the ARM's internal RAM is also powered down (by the PSC).

===Step 2===

When enabled the ARM will boot from it's RESET vector. This defaults to the ARM's internal RAM (at address 0xFFFF0000).

As the DSP cannot write directly to this we have a special dedicated bit of hardware to do this for us (the dMAX).

We first power up the ARM's internal RAM (using the PSC).

Then the dMAX loads a vector table in to the ARM's internal RAM that jumps to the base of the shared L3 RAM (at address 0x80000000) on RESET (and loops to self on all other events).

===Step 3===

The DSP loads the base of the shared L3 RAM (0x80000000) with code that causes the ARM to jump to a known address in external memory.

===Step 4===

The DSP loads this known address in external memory with the ARM's application.

===Step 5===

The DSP powers up the ARM, releases it from RESET and enables it to boot.

===Step 6===

The ARM:
  - Executes the RESET vector from the vector table in it's internal RAM (at address 0xFFFF0000).
    This causes it to jump to the base of shared L3 RAM (at address 0x80000000).
  - Executes the code at the base of shared L3 RAM (at address 0x80000000).
    This causes it to jump to a known address in external RAM.
  - Executes the application in external RAM.
    The application unmaps itself from external RAM to internal RAM (with a new vector table) and shared L3 RAM as required.

The ARM has now booted and is running the application!

=================================================================

补充一个memory map图

阅读(1657) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~