📄 rominit.s
字号:
/* 保存r4到r7中*/
xor r7, r7, r7
add r7, r4, r7
mfspr r4, IMMR
lhz r5, PCPAR(0)(r4)
nor r6,r3,r3
/* li r6, 0xFFFFFCFF*/
and r5,r5,r6
sth r5, PCPAR(0)(r4)
lhz r5, PCSO(0)(r4)
/*li r6, 0xFFFFFCFF*/
and r5,r5,r6
sth r5, PCSO(0)(r4)
lhz r5, PCDIR(0)(r4)
/* ori r5,r5,0x0300*/
or r5,r5,r3
sth r5,PCDIR(0)(r4)
lhz r5, PCDAT(0)(r4)
cmpwi r7,LED_ON
bne LedCtrl_Off
and r5,r5, r6 /*turn on*/
sth r5, PCDAT(0)(r4)
blr
LedCtrl_Off:
or r5,r5,r3 /*turn off*/
sth r5, PCDAT(0)(r4)
bclr 20,0 /* return to caller */
/* This 50 MHz SDRAM table is for...
* 860EN Rev B.1 9829 and newer silicon
* 860T Rev B.3 9832 and newer silicon
*
* This table will NOT work with older 860EN or 860T parts.
*/
/***********************************************************
UPMTABLE
**********************************************************/
upmaTableSdram:
/* single read. (offset 0x0-0x4 in upm RAM) */
.long 0x1F0DFC04, 0xEEAFBC04, 0x11AF7C04, 0xEFBAFC00
.long 0x1FF5FC47
/* OFFsets 0x5-0x7 for precharge amd mrs */
.long 0x1FF5FC35, 0xEFEABC34, 0x1FB57C35
/* burst read. (oFFset 0x8-0xF in upm RAM) */
.long 0x1F0DFC04, 0xEEAFBC04, 0x10AF7C04, 0xF0AFFC00
.long 0xF0AFFC00, 0xF1AFFC00, 0xEFBAFC00, 0x1FF5FC47
/* OFFsets 0x10-x17 not used */
.long 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF
.long 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF
/* single write. (oFFset 0x18-0x1B in upm RAM)*/
.long 0x1F2DFC04, 0xEEABBC00, 0x01B27C04, 0x1FF5FC47
/* OFF 1C-1F not used */
.long 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF
/* burst write. (oFFset 20 in upm RAM) */
.long 0x1F0DFC04, 0xEEABBC00, 0x10A77C00, 0xF0AFFC00
.long 0xF0AFFC00, 0xE1BAFC04, 0x1FF5FC47, 0xFFFFFFFF
.long 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF
/* OFFsets 2b-2F not used */
.long 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF
.long 0xFFFFFFFF
/* ReFresh 70ns. (oFFset 30 in upm RAM) */
.long 0x1FFD7C84, 0xFFFFFC04, 0xFFFFFC04, 0xFFFFFC04
.long 0xFFFFFC84, 0xFFFFFC07, 0xFFFFFFFF
/* OFFsets 37-3b not used */
.long 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF
.long 0xFFFFFFFF
/* Exception. (oFFset 3c in upm RAM) */
.long 0x7FFFFC07, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF
upmaTableSdramEnd:
#if 0
/*romInit-->romStart(bootinit.c)-->usrInit(bootconfig.c)-->
usrRoot(bootconfig.c)-->bootCmdLoop(bootconfig.c)
_sysInit(sysalib.s)-->usrInit(usrconfig.c)-->usrRoot(usrconfig.c)-->
内存分配:
-----------------------------------------------------------------------------
| |0x18000000:FLASH_BASE_ADDR: BIOS起始地址,hextobin转换时需定义
|------------|---------------------------------------------------------------
| |
|------------|---------------------------------------------------------------
| |LOCAL_MEM_BANK_SIZE: 内存最大值
|------------|---------------------------------------------------------------
| |
|------------|---------------------------------------------------------------
| |RAM_UNZIP_ADRS: 加载后解压Data、Fpga、Dsp等的地址,主机启动后无效
|------------|---------------------------------------------------------------
| |
|------------|---------------------------------------------------------------
| |RAM_LOAD_ADRS: Tftp加载BSP或主机程序时保存的地址,主机启动后无效,不能低于LOCAL_MEM_SIZE或RAM_HIGH_ADRS+BIOS大小
|------------|---------------------------------------------------------------
|BIOS内存映像|
|------------|---------------------------------------------------------------
| |0x01200000:RAM_HIGH_ADRS: BIOS拷贝到SDRAM中的地址,makefile需定义,bios大小(512K),主机启动后无效
|------------|---------------------------------------------------------------
| |
|------------|---------------------------------------------------------------
| |LOCAL_MEM_SIZE: 分配给vxWorks的内存大小,10M,应小于RAM_HIGH_ADRS,否则冲掉bios?不会,vxworks自动保护
|------------|---------------------------------------------------------------
| |USER_RESERVED_MEM: 用户保留的内存,1M
|------------|---------------------------------------------------------------
| |
|------------|---------------------------------------------------------------
| |
|------------|---------------------------------------------------------------
| |0x00100000: RAM_LOW_ADRS,加载BSP或主机程序解压后存贮地址,makefile需定义
|------------|---------------------------------------------------------------
| |
|------------|---------------------------------------------------------------
| |0x00000000
-----------------------------------------------------------------------------
Dpram分配(共8K)
-----------------------------------------------------------------------------
| |0x1fff
|------------|---------------------------------------------------------------
| |0x1c00:parameter Ram
|------------|---------------------------------------------------------------
| |
|------------|---------------------------------------------------------------
| |
|------------|---------------------------------------------------------------
| |
|------------|---------------------------------------------------------------
| |
|------------|---------------------------------------------------------------
| |
|------------|---------------------------------------------------------------
| |
|------------|---------------------------------------------------------------
| |
|------------|---------------------------------------------------------------
| |
|------------|---------------------------------------------------------------
| |
|------------|---------------------------------------------------------------
| |0x15ff:SMC2发送Buff,128Byte
| |0x1580:SMC2发送Buff,128Byte
|------------|---------------------------------------------------------------
| |0x157f:SMC2接收Buff,128Byte
| |0x1500:SMC2接收Buff,128Byte
|------------|---------------------------------------------------------------
| |0x14ff:SMC2发送BD表,256Byte
| |0x1400:SMC2发送BD表,256Byte
|------------|---------------------------------------------------------------
| |0x13ff:SMC2接收BD表,256Byte
| |0x1300:SMC2接收BD表,256Byte
|------------|---------------------------------------------------------------
|------------|---------------------------------------------------------------
| |0x12ff:SMC1发送Buff,128Byte
| |0x1280:SMC1发送Buff,128Byte
|------------|---------------------------------------------------------------
| |0x127f:SMC1接收Buff,128Byte
| |0x1200:SMC1接收Buff,128Byte
|------------|---------------------------------------------------------------
| |0x11ff:SMC1发送BD表,256Byte
| |0x1100:SMC1发送BD表,256Byte
|------------|---------------------------------------------------------------
| |0x10ff:SMC1接收BD表,256Byte
| |0x1000:SMC1接收BD表,32个,256Byte
|------------|---------------------------------------------------------------
| |
| |
|------------|---------------------------------------------------------------
| |
| |
|------------|---------------------------------------------------------------
| |0x0d00:SCC4发送BD表,32个,256Byte
| |0x0c00:SCC4发送BD表,32个,256Byte
|------------|---------------------------------------------------------------
| |0x0bff:SCC4接收BD表,128个,1024Byte
| |0x0800:SCC4接收BD表,128个,1024Byte
|------------|---------------------------------------------------------------
| |0x07ff:预留2K
| |0x0000:预留2K
-----------------------------------------------------------------------------
DEFAULT_IMMR_ADRS + 0x2000 + offset
Flash地址分配:
第一个block用于存放非易失地变量,如加载状态字等;
第二个block用于存放错误码头和错误码
第三,四个block用于存放FPGA
第五个block用于存放测试flash时保存的数据
第六个block用于存放MEDIA配置文件
第七个block用于存放系统常用变量
第八个block用于作为第一个block的备份
以上为前1Mflash的分配情况
程序从1M开始往后分配
1.5M用于存放程序A;
1.5M用于存放程序B
1M用于存放数据
1M用于存放补丁
2M用于存放DSP
--------------0x7FFFFF(8M)
| 512K |0x780000(7.5M): BIOS_IN_FLASH_ADDR
|------------|---------------------------------------------------------------
| 2M |0x580000(5.5M): DSP_START_ADDRESS
|------------|---------------------------------------------------------------
| 1.5M |0x400000(4M): DATA_START_ADDRESS(大小1.5M)
|------------|---------------------------------------------------------------
| 1.5M |0x280000(2.5M): PROGRAM_B_START_ADDRESS
|------------|---------------------------------------------------------------
| 1.5M |0x100000(1M): PROGRAM_A_START_ADDRESS(大小1.5M)
|------------|---------------------------------------------------------------
| |0x000E0000+32: BOOT_INFO_IN_FLASH(单板MAC/IP/MASK/GATE等地址存放地址(224bytes))
| |0x000E0000+16: SOFT_FPGA_ADDRESS(是否启用软逻辑标志,1byte)
| |0x000E0000+14: BOOT_STATE_STAB_TIME_ADDRESS(给DEC中的减数器的值,即设置程序的稳定时间 每100ms减1)
| |0x000E0000+13: BOOT_STATE_TIMES_ADDRESS(启动失败的最大次数)
| |0x000E0000+12: BOOT_STATE_COUNT_ADDRESS(启动次数)
| |0x000E0000+08: BOOT_DATA_FLAG_ADDRESS(数据的加载标志存放地址)
| |0x000E0000+04: BOOT_PROG_FLAG_ADDRESS_BACK(程序的加载标志存放地址,第8个block)
|------------|---------------------------------------------------------------
| 128K |0xC0000(768K): 系统需要写入的变量。第7个block
|------------|---------------------------------------------------------------
| 128K |0xA0000(640K): 媒体配置文件的存放。第6个block
|------------|---------------------------------------------------------------
| 128K |0x80000(512K): 测试FLASH时擦除整个BLOCK,需要保存的数据为一个BLOCK。第5个block
|------------|---------------------------------------------------------------
| 256K |0x40000(256K): FPGA_START_ADDRESS(FPGA的存放地址,第3个block)
|------------|---------------------------------------------------------------
| 224Byte |0x00000000+32: BOOT_INFO_IN_FLASH(单板MAC/IP/MASK/GATE等地址存放地址(224bytes))
|------------|---------------------------------------------------------------
| 1Byte |0x00000000+16: SOFT_FPGA_ADDRESS(是否启用软逻辑标志,1byte)
|------------|---------------------------------------------------------------
| 2Byte |0x00000000+14: BOOT_STATE_STAB_TIME_ADDRESS(给DEC中的减数器的值,即设置程序的稳定时间 每100ms减1)
|------------|---------------------------------------------------------------
| 1Byte |0x00000000+13: BOOT_STATE_TIMES_ADDRESS(启动失败的最大次数)
|------------|---------------------------------------------------------------
| 4Byte |0x00000000+12: BOOT_STATE_COUNT_ADDRESS(启动次数)
|------------|---------------------------------------------------------------
| 4Byte |0x00000000+08: BOOT_DATA_FLAG_ADDRESS(数据的加载标志存放地址)
|------------|---------------------------------------------------------------
| 4Byte |0x00000000+04: BOOT_PROG_FLAG_OFFSET(程序的加载标志存放地址)
|------------|---------------------------------------------------------------
| |
--------------0x00000000
*/
*PCPAR(INTERNAL_MEM_MAP_ADDR) &= ~(PC15 | PC13);
*PCSO(INTERNAL_MEM_MAP_ADDR) &= ~(PC15 | PC13);
*PCDIR(INTERNAL_MEM_MAP_ADDR) |= (PC15 | PC13);
*PCDAT(INTERNAL_MEM_MAP_ADDR) &= ~PC13;
*PCDAT(INTERNAL_MEM_MAP_ADDR) &= ~PC15;
while(TRUE);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -