单片机
返回首页

U-Boot-2009-03移植笔记(点亮第一展灯)

2024-09-04 来源:cnblogs

在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;

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]

5     ldr r4,=0x56000014

6     ldr r5,=~( 1 << 5)

7     str r5,[r4]

8 loo:

9     b loo


通过openjtag烧到nandflash上,第一盏LED灯被点亮。


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 家用电源无载自动断电装置的设计与制作

  • 短波AM发射器电路设计图

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • RS-485基础知识:处理空闲总线条件的两种常见方法

  • 如何调制IC555振荡器

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章