Vxworks程序例子

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Vxworks程序例子

系统初始化

系统初始化对不同的CPU,基本步骤是类似的.

系统初始化的主要步骤如下

∙启动

∙关闭中断

∙放boot type到堆栈

∙清空缓存

VxWorks 系统的 PowerPC BSP,系统开机后执行的第一个函数 romInit(),在ROM的起点,这里是使用的PowerPC汇编语言

/* 定义内部函数 internals */

.globl romInit /* start of system code */

.globl _romInit /* start of system code */

/* 定义外部函数 externals */

.extern romStart /* system initialization routine */

.text

.align 2

/***************************************************************************** **

*

* romInit ( int startType /@ only used by 2nd entry point @/ )

*/

romInit:

_romInit:

bl cold /* 冷启动 */

bl warm /* 热启动 */

cold:

li p5, BOOT_COLD

bl start /* skip over next instruction */

warm:

or p5, p0, p0 /* startType to p5 */

start: /* 此处是系统启动开始 */

/* 屏蔽MSR中CE,EE位,关闭所有的外部中断

/*

* Disable external interrupts

*/

mfmsr p0 /* p0 = msr */

INT_MASK (p0, p1) /* mask EE and CE bit */

ori p1,p1,_PPC_MSR_ME /* enable machine checks */

mtmsr p1 /* msr = p1 */

isync

/* 下面两步是按照硬件定义初始化一些SPR,DCR寄存器,置0或置1

/* SPR是特殊功能寄存器,DCR为设备控制寄存器,还有MSR机器状态寄存器,这些是PowerPC内核中很重要的寄存器

/* 初始化SPR,DCR寄存器置0

* Initalize registers that need to be set to zero.

*/

addi r4,r0,0x0000

mtspr SGR,r4 /* 解锁所有存储区域 SPR 中 SGR 位置0 */

mtspr ESR, r4 /* SPR中的错误状态位 ESR 清0 */

mtspr TCR, r4 /* 关闭所有的 timers */

mtspr PIT, r4 /* 清0 PIT timer */

mtdcr UICER, r4 /* 关闭中断控制器(UIC)中的所有中断 */

mtspr XER, r4 /* 清0 integer exception 寄存器 */

/* 初始化另一些SPR,DCR寄存器置1

* Initalize registers that need to be cleared with 0xFFFFFFFF.

*/

addis r4,r0,0xffff

ori r4,r4,0xffff

mtspr TSR, r4 /* timer */

mtspr DBSR, r4 /* 调试状态位置1 */

mtdcr UICSR, r4 /* 清除中断控制器(UIC)中的所有 pending 中断 */

mtdcr dmasr, r4 /* DMA状态寄存器置1 */

/* PowerPC405用两个缓存,一个是16K指令缓存(ICU),一个是6K数据缓存(DCU),下面是清空着两个缓存,并根据硬件设置缓存 */

/* 清空指令缓存 */

/*BESR type regs ZZZZZZZZZZZZ

* Invalidate the entire instruction cache. This can be done

* with a single iccci instruction in the processor core.

*/

iccci r0, r0

/*清空数据缓存

* Invalidate the entire data cache.

* The 405 processor core in the 405GP has 128 congruence classes.

* Each cache line in the 405 processor is 32 bytes.

*/

/*

* Turn the instruction cache on for faster boot-up.

* Also, the icache is needed to help initialize Bank 0

* of the EBC to speed up accesses to flash.

* address space 0x00000000-0x07ffffff is cached

* address space 0xf8000000-0xffffffff is cached

*/

lis p0, HIADJ(_PPC403_ICCR_DEFAULT_VAL)

addi p0, p0, LO(_PPC403_ICCR_DEFAULT_VAL)

mtspr _PPC403_ICCR, p0

isync

/*初始化外部总线控制器(EBC),跳转指令BL,执行extBusCntlrInit

* /

bl extBusCntlrInit

/*

* Now that the EBC Bank 0 has been set up, turn the I-cache off if

* i-cache was not specified in config.h. It is also invalidated

* again.

相关文档
最新文档