S3C6410之uboot回炉再造(3)lowlevle_init.S

发布者:SparkStar22最新更新时间:2024-09-03 来源: cnblogs关键字:S3C6410  uboot 手机看文章 扫描二维码
随时随地手机看文章

  这一篇粗略讲一下lowlevel_init.S内部的模块。


  1、_TEXT_BASE


  1 #include

  2 #include

  3 

  4 #include

  5 

  6 #ifdef CONFIG_SERIAL1

  7 #define ELFIN_UART_CONSOLE_BASE (ELFIN_UART_BASE + ELFIN_UART0_OFFSET)

  8 #elif defined(CONFIG_SERIAL2)

  9 #define ELFIN_UART_CONSOLE_BASE (ELFIN_UART_BASE + ELFIN_UART1_OFFSET)

 10 #else

 11 #define ELFIN_UART_CONSOLE_BASE (ELFIN_UART_BASE + ELFIN_UART2_OFFSET)

 12 #endif

 13 

 14 _TEXT_BASE:

 15     .word    TEXT_BASE

 16 


  来看一下最后两句的的反汇编


00000000 <_TEXT_BASE>:      

   0:    57e00000     .word    0x57e00000

  看到这里的 0x57e00000 有种似曾相识的感觉,但是这段代码的特殊位置决定了这个地址是无效的。


  回想一下上一篇的地址无关性,就能明白了。


  2、点亮LED


 17     .globl lowlevel_init

 18 lowlevel_init:

 19     mov    r12, lr

 20 

 21     /* LED on only #8 */

 22     ldr    r0, =ELFIN_GPIO_BASE

 23     ldr    r1, =0x55540000

 24     str    r1, [r0, #GPNCON_OFFSET]

 25 

 26     ldr    r1, =0x55555555

 27     str    r1, [r0, #GPNPUD_OFFSET]

 28 

 29     ldr    r1, =0xf000

 30     str    r1, [r0, #GPNDAT_OFFSET]

 31 


  3、关闭看门狗


 32     /* Disable Watchdog */

 33     ldr    r0, =0x7e000000        @0x7e004000

 34     orr    r0, r0, #0x4000

 35     mov    r1, #0

 36     str    r1, [r0]

 37 


  从这里看到,在 start.S 中取出的关闭看门狗原来是移动到了这里执行。


  这样做的好处是,让每个单独部分的代码信息显得更紧凑一些。


  4、读一次外部中断,然后清除中断信号 


 38     /* External interrupt pending clear */

 39     ldr    r0, =(ELFIN_GPIO_BASE+EINTPEND_OFFSET)    /*EINTPEND*/

 40     ldr    r1, [r0]

 41     str    r1, [r0]

 42 

 43     ldr    r0, =ELFIN_VIC0_BASE_ADDR    @0x71200000

 44     ldr    r1, =ELFIN_VIC1_BASE_ADDR    @0x71300000

 45 


  5、将所有中断设置为IRQ


 51     /* Set all interrupts as IRQ */

 52     mov    r3, #0x0

 53     str    r3, [r0, #oINTMOD]

 54     str    r3, [r1, #oINTMOD]

 55 

  6、等待中断清除


 56     /* Pending Interrupt Clear */

 57     mov    r3, #0x0

 58     str    r3, [r0, #oVECTADDR]

 59     str    r3, [r1, #oVECTADDR]

 60 

  这里的作用应该等效于禁用中断。


  7、初始化系统时钟


 61     /* init system clock */

 62     bl system_clock_init

 63   //具体实现代码在118行

  8、初始化UART串口和NAND flash


 64 #ifndef CONFIG_NAND_SPL

 65     /* for UART */

 66     bl uart_asm_init

 67 #endif

 68 

 69 #ifdef CONFIG_BOOT_NAND

 70     /* simple init for NAND */

 71     bl nand_asm_init

 72 #endif

 73 


  9、内存控制的初始化


 74     /* Memory subsystem address 0x7e00f120 */

 75     ldr    r0, =ELFIN_MEM_SYS_CFG

 76 

 77     /* Xm0CSn2 = NFCON CS0, Xm0CSn3 = NFCON CS1 */

 78     mov    r1, #S3C64XX_MEM_SYS_CFG_NAND

 79     str    r1, [r0]

 80 

 81     bl    mem_ctrl_asm_init

 82 


  10、测试将要使用的功能


 83 /* Wakeup support. Don't know if it's going to be used, untested. */

 84     ldr    r0, =(ELFIN_CLOCK_POWER_BASE + RST_STAT_OFFSET)

 85     ldr    r1, [r0]

 86     bic    r1, r1, #0xfffffff7

 87     cmp    r1, #0x8

 88     beq    wakeup_reset

 89 

 90 1:

 91     mov    lr, r12

 92     mov    pc, lr

 93 

 94 wakeup_reset:

 95 

 96     /* Clear wakeup status register */

 97     ldr    r0, =(ELFIN_CLOCK_POWER_BASE + WAKEUP_STAT_OFFSET)

 98     ldr    r1, [r0]

 99     str    r1, [r0]

100 

101     /* LED test */

102     ldr    r0, =ELFIN_GPIO_BASE

103     ldr    r1, =0x3000

104     str    r1, [r0, #GPNDAT_OFFSET]

105 

106     /* Load return address and jump to kernel */

107     ldr    r0, =(ELFIN_CLOCK_POWER_BASE + INF_REG0_OFFSET)

108     /* r1 = physical address of s3c6400_cpu_resume function */

109     ldr    r1, [r0]

110     /* Jump to kernel (sleep-s3c6400.S) */

111     mov    pc, r1

112     nop

113     nop


  11、时钟初始化的执行代码


114 /*

115  * system_clock_init: Initialize core clock and bus clock.

116  * void system_clock_init(void)

117  */

118 system_clock_init:

119     ldr    r0, =ELFIN_CLOCK_POWER_BASE    /* 0x7e00f000 */

120 

121 #ifdef CONFIG_SYNC_MODE

122     ldr    r1, [r0, #OTHERS_OFFSET]

123     mov    r2, #0x40

124     orr    r1, r1, r2

125     str    r1, [r0, #OTHERS_OFFSET]

126 

127     nop

128     nop

129     nop

130     nop

131     nop

132 

133     ldr    r2, =0x80

134     orr    r1, r1, r2

135     str    r1, [r0, #OTHERS_OFFSET]

136 

137 check_syncack:

138     ldr    r1, [r0, #OTHERS_OFFSET]

139     ldr    r2, =0xf00

140     and    r1, r1, r2

141     cmp    r1, #0xf00

142     bne    check_syncack

143 #else    /* ASYNC Mode */

144     nop

145     nop

146     nop

147     nop

148     nop

149 

150     /*

151      * This was unconditional in original Samsung sources, but it doesn't

152      * seem to make much sense on S3C6400.

153      */

154 #ifndef CONFIG_S3C6400

155     ldr    r1, [r0, #OTHERS_OFFSET]

156     bic    r1, r1, #0xC0

157     orr    r1, r1, #0x40

158     str    r1, [r0, #OTHERS_OFFSET]

159 

160 wait_for_async:

161     ldr    r1, [r0, #OTHERS_OFFSET]

162     and    r1, r1, #0xf00

163     cmp    r1, #0x0

164     bne    wait_for_async

165 #endif

166 

167     ldr    r1, [r0, #OTHERS_OFFSET]

168     bic    r1, r1, #0x40

169     str    r1, [r0, #OTHERS_OFFSET]

170 #endif

171 

172     mov    r1, #0xff00

173     orr    r1, r1, #0xff

174     str    r1, [r0, #APLL_LOCK_OFFSET]

175     str    r1, [r0, #MPLL_LOCK_OFFSET]

176 

177     /* Set Clock Divider */

178     ldr    r1, [r0, #CLK_DIV0_OFFSET]

179     bic    r1, r1, #0x30000

180     bic    r1, r1, #0xff00

181     bic    r1, r1, #0xff

182     ldr    r2, =CLK_DIV_VAL

183     orr    r1, r1, r2

184     str    r1, [r0, #CLK_DIV0_OFFSET]

185 

186     ldr    r1, =APLL_VAL

187     str    r1, [r0, #APLL_CON_OFFSET]

188     ldr    r1, =MPLL_VAL

189     str    r1, [r0, #MPLL_CON_OFFSET]

190 

191     /* FOUT of EPLL is 96MHz */

192     ldr    r1, =0x200203

193     str    r1, [r0, #EPLL_CON0_OFFSET]

194     ldr    r1, =0x0

195     str    r1, [r0, #EPLL_CON1_OFFSET]

196 

197     /* APLL, MPLL, EPLL select to Fout */

198     ldr    r1, [r0, #CLK_SRC_OFFSET]

199     orr    r1, r1, #0x7

200     str    r1, [r0, #CLK_SRC_OFFSET]

201 

202     /* wait at least 200us to stablize all clock */

203     mov    r1, #0x10000

204 1:    subs    r1, r1, #1

205     bne    1b

206 

207     /* Synchronization for VIC port */

208 #if defined(CONFIG_SYNC_MODE)

209     ldr    r1, [r0, #OTHERS_OFFSET]

210     orr    r1, r1, #0x20

211     str    r1, [r0, #OTHERS_OFFSET]

212 #elif !defined(CONFIG_S3C6400)

213     /* According to 661558um_S3C6400X_rev10.pdf 0x20 is reserved */

214     ldr    r1, [r0, #OTHERS_OFFSET]

215     bic    r1, r1, #0x20

216     str    r1, [r0, #OTHERS_OFFSET]

217 #endif

[1] [2]
关键字:S3C6410  uboot 引用地址:S3C6410之uboot回炉再造(3)lowlevle_init.S

上一篇:S3C6410之uboot回炉再造(4)使能MMU
下一篇:S3C6410之uboot回炉再造(1)start.S - SVC模式设置

推荐阅读最新更新时间:2024-11-02 09:18

俘获年轻人的OPPO R9s,做好了三件事
集微网消息,不久前,今日头条算数中心以旗下6亿激活用户为研究样本,联合赛诺市场研究发布《2016年度手机报告》,报告结果显示,Android手机份额相比2015年有较大增长,其中国产手机品牌OPPO以4.76%的增长幅度名列第一,在年轻人,特别是高学历的年轻人中深受欢迎。 从今日头条的调研数据可以看出,年轻用户已经成为OPPO购机的主流人群,这部分人群拥有足够的购买力,对科技产品有着客观、理性的评判,要求极其挑剔,而OPPO能够收受到年轻群体的青睐,足见OPPO产品和品牌的受欢迎程度。 一直以来,在满足年轻用户的核心需求上,OPPO试图做到极致,通过研发创新,打造出具备高颜值、出色拍照能力和持久续航的VOOC闪充技术,这些
[手机便携]
怎样数s3c2410的interrupt controller中的中断源数量
通过数据手册的INTERRUPT SOURCES即可看出所有中断源,其中Descriptions列有讲述,带多个中断源的用括弧表述出来了。 以下中断源寄存器通过各自MAST连接到INTPND(只能一个位置一) SRCPND(可有多个位置一) 0~31共32-2(保留)=30个中断源——其实是56个中断源 上述的28个中断源中包括4个带子中断的中断源 INT_UART0(INT_RXD0,INT_TXD0,INT_ERR0) INT_UART1(INT_RXD1,INT_TXD1,INT_ERR1) INT_UART2(INT_RXD2,INT_TXD2,INT_ERR2) INT_ADC (INT_ADC/INT_TC) SUB
[单片机]
linux串口终端驱动——s3c6410平台(三)
上一篇关注的是tty上层字符层面的操作和注册,这一篇主要关注线程的注册,如何与上层建筑联系起来。 一、 tty_ldisc.c提供了tty_register_ldisc()接口用于注册线路规程,例如/driver/char/n_tty.c文件则针对N_TTY线路规程实现了具体的tty_disc结构体中的成员。 tty_register_ldisc(N_TTY, &tty_ldisc_N_TTY) 其中有 #define N_TTY 0 struct tty_ldisc_ops tty_ldisc_N_TTY = { .magic = TTY_LDISC_MAGIC, .name = n_tt
[单片机]
对于S5PV210加载u-boot过程的理解
本文对整体的加载逻辑进行梳理,不作详细说明,学习过程主要参考《嵌入式Linux学习笔记(基于S5PV210、TQ210)》。 上电后最先运行的时iRom中的代码( BL0, 由三星固化,不能修改,别人能不能改不一定) 会根据OM引脚配置选择一种启动方式, 主要用到sd卡启动和Nandflash启动,UART和USB启动没有测试过。对于没有代码的板子,使用SD启动,SD中存放的当然就是u-boot了,启动u-boot后,通过tftp 或者 其它方式将uboot将u-boot代码写入到nand中。 此时更改OM配置就能从Nand中启动了,不再使用SD卡。 对于iRom加载的代码(BL1, 存放在SD卡或Nand中),有格式要求,
[单片机]
三星Galaxy S10明年2月20日发布?
        据Gizmodo UK的消息称,Galaxy S10将于明年2月20日正式发布。也就是“2019年巴塞罗那世界移动通信大会MWC”前几天,发布后官方便开启预订工作,3月8日开启售卖。   而在今年的夏威夷毛伊岛举办的骁龙技术峰会,三星就曾登台发言,明年上半年会推出骁龙855的5G手机。不出所料,应该就是Galaxy S10。   在价格方面,Galaxy S10 Lite 5.8英寸的128GB版本价格约为669英镑,约合5800人民币。6.1英寸S10 128GB的价格为799英镑,而512GB的价格为999英镑。而Galaxy S10 Plus的售价分别为128GB为899英镑、512GB售价为
[手机便携]
中兴NBA联手 休斯敦火箭版Grand S曝光
    就在前不久的2013年中国国际信息通信展览会上,中兴通讯执行副总裁透露,中兴通讯已经与NBA休士顿火箭队达成了合作,双方将展开全方位合作。而近日,中兴首款休士顿火箭特别定制版Grand S也得到了曝光,手机中国也拿到了独家的一手资料。 休斯敦火箭版Grand S曝光   从图片看来,该机后背印有了明显的休士顿火箭队Logo,相信会吸引到不少的火箭球迷。同时该机内置了多张休士顿火箭以及球员的壁纸,这比起网上的图片来说更具官方性,同时也有更多的收藏价值。除此之外,该机与普通版没有过多的差别了。
[手机便携]
OPPO A57手机评测:R9s同款美颜镜头
对于OPPO手机,除了“充电五分钟,通话两小时”之外,其用户印象中,也有“美颜手机”的标签。对于销售不俗的R9/R9s,如果只关注其前置1600万像素美颜镜头,那么OPPO A57或许可以比R9/R9s更低的价格,令你接受。   OPPO A57于11月21日于线上线下同步预约,并于线下25日全国开卖,售价为1599元,依然以“金属自拍神器”作为主打。作为在2000元到1000元价位机型的一个补充,OPPO A57在性能和外观上面都更具有性价比,家族式的小清新外观和精致的自拍体验相信能俘获不少年轻用户的喜爱,就让小编带大家看看这款OPPO A57小家碧玉的外表下有着怎样的能耐吧。   在包装上,OPPO A57依旧延续了OP
[手机便携]
超越S参数测试-安捷伦科技最先进的矢量网络分析仪PNA-X
无论在研发还是在生产制造中,工程师们在测试射频元件时都面临许多重大挑战。在研发过程中,更快并以较少的重复工作来解决设计难题至关重要。生产制造过程中,需要在保持精度和最大产出率的同时,缩短测试时间和降低测试成本。 减缓压力的方法之一是使用灵活的高度综合的测试解决方案――如Agilent N5242A PNA-X微波网络分析仪。由于PNA-X的先进体系结构,它不仅提供卓越的性能和精度,而且还能针对超越与网络分析仪相关的传统散射参数(S参数)的各种测量进行配置。一些内置组件(如第二个信号源和宽带合路器)能对射频和微波器件,尤其是放大器、混频器和变频器的非线性特性进行非常精确的表征,让您对这些器件的性能有更加全面的了解。 确保精确的系
[应用]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved