TI中文支持网
TI专业的中文技术问题搜集分享网站

6678二级引导程序初始化DDR、XMC

1.希望用一个RTSC工程实现core0在本地RAM运行,core1~7在外部DDR运行。怎么修改XMC寄存器使得相应的段放在内部或外部的物理地址?

2.二级引导程序是由核0执行?二级引导程序里可以放DDR3 PLL、DDR3配置、XMC配置?

3.二级引导程序完成之后,程序怎么交给core1~7在DDR中运行?core1~7的程序入口地址怎么确定?

二级引导程序如下:

.option D, T
.length 102
.width 140
COPY_TABLE .equ 0x90000400
EMIFA_BASE .equ 0x1800000
.sect ".boot_load"
.global _boot

_boot:
ZERO B1
_myloop:
NOP 5
_myloopend: nop

MVKL emifa_values, a3
MVKH emifa_values, a3
MVKL EMIFA_BASE, a4
MVKH EMIFA_BASE, a4
MVKL 0x0009, b0
MVKH 0x0000, b0
emifa_loop:
LDW *a3++, b5
SUB b0,1,b0
NOP 2
[b0] B emifa_loop
STW b5, *a4++;
NOP 4

MVKL COPY_TABLE, a3
MVKH COPY_TABLE, a3
LDW *a3++, b1
copy_section_top:
LDW *a3++, b0
LDW *a3++, a4
NOP 3
[!b0] B copy_done
NOP 5
copy_loop:
LDB *a3++, b5
SUB b0, 1, b0
[b0] B copy_loop
[!b0] B copy_section_top
ZERO a1
[!b0] AND 3,a3,a1
STB b5, *a4++
[!b0] AND -4,a3,a5
[a1] ADD 4, a5, a3
copy_done:
B .S2 b1
NOP 5

emifa_values:

.long 0x00052078;
.long 0x73A28E01;
.long 0xFFFFFFD3;
.long 0x00000000;
.long 0x22A28A22;
.long 0x22A28A22;
.long 0x57115000;
.long 0x0000081B;
.long 0x001FAF4D;

Shine:

1. 建议参考置顶帖里面Kesytone STK开发包,其中有MAPX映射的代码。
e2echina.ti.com/…/47664

2. 是的,可以。

3.通过往其他核的BOOT_MAGIC_ADDRESS写地址,然后core0发IPC中断去唤醒其他核跳转到BOOT_MAGIC_ADDRESS地址开始执行代码。
How to Wake Up Secondary Cores From Primary Core(core0)?
www.ti.com/…/spracn2.pdf

如果您用的芯片是PG2.x的话,没有PLL bug,可以不用二次bootloader,直接加载,可以参考上述文档中的Direct Boot Examples (without IBL)。

,

user4192203:

应用中需要二级bootloader吧。需要把程序搬移到ddr,搬移前需要初始化ddr3?

,

Shine:

可以把DDR configuration table 添加到boot image,这样ROM bootloader在搬移程序前会去读取DDR configuration table去配置DDR,不需要特意写二次bootloader初始化DDR3。

,

user4192203:

ddr牵扯到leveling,用二级麻烦点,但方便后期维护。

工程使用bios系统,配置文件里有resetFxn,firstFxn,lastFxn,
系统时钟初始化,ddr时钟、配置初始化,xmc配置初始化可以放在resetFxn里?
resetFxn是二级启动、cint0初始化之后调用?

,

Shine:

您可以参考C:\ti\C6678 SDK 5.03\pdk_c667x_2_0_13\packages\ti\boot\ibl里的源码。

赞(0)
未经允许不得转载:TI中文支持网 » 6678二级引导程序初始化DDR、XMC
分享到: 更多 (0)