zoukankan      html  css  js  c++  java
  • UBoot200903移植笔记(点亮第一展灯)

      在U-Boot-2009-03移植笔记的最后,我们找到了U-boot的启动代码在cpu/arm920t/start.S中,这是一段汇编代码,我们的移植工作从这里开始。

      我们定位到reset标签

    1 reset:
    2     /*
    3      * set the cpu to SVC32 mode
    4      */
    5     mrs    r0,cpsr
    6     bic    r0,r0,#0x1f
    7     orr    r0,r0,#0xd3
    8     msr    cpsr,r0

    上面的注释很明白,设置CPU工作模式,不需要修改。

    接下来,我们关掉看门狗,并关闭中断

     1     ldr     r0, =pWTCON
     2     mov     r1, #0x0
     3     str     r1, [r0]
     4 
     5     /*
     6      * mask all IRQs by setting all bits in the INTMR - default
     7      */
     8     mov    r1, #0xffffffff
     9     ldr    r0, =INTMSK
    10     str    r1, [r0]
    11 
    12 
    13     /*modify by xinna*/
    14     ldr    r1, =0x7fff
    15     ldr    r0, =INTSUBMSK
    16     str    r1, [r0]

    我这里直接略过了原有U-boot的宏定义,因为我们只需要支持一款芯片即可,注意第14行,这是因为S3C2440于S3C2410中断控制器不同而修改的,具体原理请参见S3C2440的datasheet。在上面的代码里,我们完成了两件事情,关看门狗,关中断,接下来我们继续看代码,到了这里:

    1     /*
    2      * we do sys-critical inits only at reboot,
    3      * not when booting from ram!
    4      */
    5 #ifndef CONFIG_SKIP_LOWLEVEL_INIT
    6     bl    cpu_init_crit
    7 #endif

    子过程cpu_init_crit主要工作就是关闭Cache,并且调用lowlevel_init,我们要注意的是lowlevel_init,这里放了初始化SDRAM的代码。

    这个low_levelinit位于board/xinna2440/lowlevel_init.S文件中,这里会初始化好你的内存(xinna2440用的是两片16位的SDRAM并联组成32位的SDRAM),我们需要针对不同的芯片,连接方式修改以下这个文件中的寄存器配置。

    然后还有很重要的一点,你需要修改board/xinna2440/u-boot.lds文件,将lowlevel_init这段代码放在整个u-boot.bin的前4k代码中,所以我们需要这样修改

    
    
    1     . = 0x00000000;
    2 
    3     . = ALIGN(4);
    4     .text      :
    5     {
    6       cpu/arm920t/start.o    (.text)
    7       board/xinna2440/lowlevel_init.o (.text)
    8       *(.text)
    9     }
    然后我们在start.S的 bl cpu_init_crit后面增加以下代码,点亮第一盏灯。
    1     ldr r4,=0x56000010
    2     ldr r5,=( 1 << 10)
    3     str r5,[r4]
    4 
    5     ldr r4,=0x56000014
    6     ldr r5,=~( 1 << 5)
    7     str r5,[r4]
    8 loo:
    9     b loo
    通过openjtag烧到nandflash上,第一盏LED灯被点亮。
     
    80岁也要写程序
  • 相关阅读:
    No Hibernate Session bound to thread, and configuration does not allow
    谈谈数据库中MyISAM与InnoDB区别
    hibernate实体的几种状态:
    解决Eclipse导出javadoc乱码问题
    freemarker截取字符串
    many-to-one和one-to-many的配置比较
    one-to-many many-to-one配置解释
    extends:类似于java中的继承特征,extends="struts-default"
    eclipse 中创建maven web项目
    java.lang.ClassNotFoundException: javax.persistence.EntityListeners
  • 原文地址:https://www.cnblogs.com/smartcoder/p/3090791.html
Copyright © 2011-2022 走看看