Bootloader初始化启动过程分析

本文深入剖析Bootloader的启动流程,从加载存储器中的指令到管理命令解析,详述其在设备初始化中的关键作用。
摘要由CSDN通过智能技术生成

    今天我们讨论一下PXA255芯片的bootloader的初始化过程,也就是start_xscale.S的汇编文件中包含的内容。E1开发板的硬件配置是这样的,400M Turbo模式运行的PXA255处理器,32M Flash和64M SDRAM。start_xscale.S包含的主要内容是系统上电后的初始化过程,依次为:屏蔽硬件中断、初始化GPIO引脚、初始化Flash和SDRAM、拷贝bootloader代码到SDRAM中、拷贝内核代码到SDRAM中、最后跳转到bootloader的main程序中去执行。关于PXA255芯片的详细信息请参阅 《PXA255 Developer’s Manual》
 
1  屏蔽硬件中断
ldr     r12, =INTERRUPT_CONTROL_BASE
        ldr     r0, =0x00000000
        str     r0, [r12, #ICMR]
        str     r0, [r12, #ICLR]
这一部分的代码很简单 , 即使将中断屏蔽寄存器 ICMR 置 0 , 屏蔽所有硬件中断。
 
2  初始化GPIO引脚
gpio_init:
ldr     r12, =GPIO_BASE
 
   ldr     r0, =GAFR0L_VALUE
    str     r0, [r12, #GAFR0_L]
    ldr     r0, =GAFR0U_VALUE
    str     r0, [r12, #GAFR0_U]
 
    ldr     r0, =GAFR1L_VALUE
    str     r0, [r12, #GAFR1_L]
    ldr     r0, =GAFR1U_VALUE
    str     r0, [r12, #GAFR1_U]
 
    ldr     r0, =GAFR2L_VALUE
    str     r0, [r12, #GAFR2_L]
    ldr     r0, =GAFR2U_VALUE
    str     r0, [r12, #GAFR2_U]
 
    ldr     r0, =GPSR0_VALUE
    str     r0, [r12, #GPSR0]
    ldr     r0, =GPSR1_VALUE
    str     r0, [r12, #GPSR1]
    ldr     r0, =GPSR2_VALUE
    str     r0, [r12, #GPSR2]
 
    ldr     r0, =GPCR0_VALUE
    str     r0, [r12, #GPCR0]
    ldr     r0, =GPCR1_VALUE
    str     r0, [r12, #GPCR1]
    ldr     r0, =GPCR2_VALUE
    str     r0, [r12, #GPCR2]
 
    ldr     r0, =GPDR0_VALUE
    str     r0, [r12, #GPDR0]
    ldr     r0, =GPDR1_VALUE
    str     r0, [r12, #GPDR1]
    ldr     r0, =GPDR2_VALUE
    str     r0, [r12, #GPDR2]
 
// Clear the peripheral control register bits, so that we can use gpio as configured above
   ldr     r1, =PSSR
   ldr     r2, =(PSSR_RDH | PSSR_PH)
   str     r2, [r1]
       
   mov     pc, lr
 
这里我们着重讨论关于GPIO的功能寄存器的设置,也就是GAFR寄存器,有几个问题要注意:
1  静态存储器空间nCS0的片选信号没有与GPIO脚复用,,这是因为由于芯片当复位时自动跳转到地址0运行,因此对这一块地址需要专用的片选信号。其它静态存储器空间(nCS[1:5])的片选信号都与GPIO脚复用,即也可用做一般功能的GPIO,当系统有外部设备需要访问时(如FLASH、具有FIFO的专用芯片等),可以将该块地址的片选用对应GPIO引脚来代替。
2 GPIO[18] 被设置为RDY信号输入,如果芯片外接VLIO设备的话,需要用到该信号。
  该段代码最后通过向PSSR寄存器的RDH和PH位写1来清零该位,这时候GPIO才可以按照上面的配置进行工作。
 
3 初始化存储器
3.1  下面我们开始讨论Flash和SDRAM的初始化,在配置这二者之前,首先要做一些系统时钟方面的处理。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值