/*  * vivi/arch/s3c2410/head.S:(启动代码第一部分 前200行左右)  *   Initialise hardware  *    *  芯片:         s3c2410  *  中文注释:   刘星(362377891@qq.com)  *  注释时间:   2012-05-30  *  */
#include "config.h"         @ 配置文件
#include "linkage.h"        @ 实现了ENTRT宏的封装
#include "machine.h"        @ 开发板环境参数
@ 启动代码
ENTRY(_start)               @ 引入外部_start
ENTRY(ResetEntryPoint)      @ 引入外部ResetEntryPoint
@
@ 中断向量表 (物理地址 = 0x00000000)
@
@ ARM规定,在起始的地方必须要有中断向量表这8句话,相当于startup中的
@ b标号也可以用ldr pc标号,这8句话可以认为是bootloader的识别代码,
@ 因为在实际中,可能会没有bootloader
@ 0x00: 复位地址  b   Reset
@ 0x04: 未定义中断地址
UndefEntryPoint:  b   HandleUndef
@ 0x08: 软中断地址
SWIEntryPoint:  b   HandleSWI
@ 0x0c: 内存操作异常中断地址
PrefetchAbortEnteryPoint:  b   HandlePrefetchAbort
@ 0x10: 数据异常中断地址
DataAbortEntryPoint:  b   HandleDataAbort
@ 0x14: 未使用
NotUsedEntryPoint:  b   HandleNotUsed
@ 0x18: 慢中断地址
IRQEntryPoint:  b   HandleIRQ
@ 0x1c: 快速中断地址
FIQEntryPoint:  b   HandleFIQ
@
@ 环境变量的存放
@
@ 0x20: magic number so we can verify that we only put   .long   0
@ 0x24:  .long   0
@ 0x28: _start用来指定链接后的起始装载地址装载到内存中的地址  .long   _start
@ 0x2C: this contains the platform, cpu and machine id  .long   ARCHITECTURE_MAGIC
@ 0x30: vivi capabilities   .long   0
#ifdef CONFIG_PM
@ 0x34: 电源管理的设置  b   SleepRamProc
#endif
#ifdef CONFIG_TEST
@ 0x38:  b   hmi
#endif
@
@ Start VIVI head
@
Reset:  @ 禁用看门狗定时器   mov r1, #0x53000000  mov r2, #0x0  str r2, [r1]        @给看门狗寄存器WTCON赋值0 disable
#ifdef CONFIG_S3C2410_MPORT3 @GPH配置  @基址=0x56000000  mov r1, #0x56000000   @给0x56000070 GPHCON赋值0x05  GPH1=OUTPUT GPH0=OUTPUTmov r2, #0x00000005  str r2, [r1, #0x70]  @给0x56000078 GPHUP赋值0x01 禁用上拉函数   mov r2, #0x00000001  str r2, [r1, #0x78]  @给0x56000074 GPHDAT赋值0x01 使能数据寄存器  mov r2, #0x00000001  str r2, [r1, #0x74]
#endif  @ 禁用所有中断  mov r1, #INT_CTL_BASE  mov r2, #0xffffffff  str r2, [r1, #oINTMSK]      @掩码关闭所有中断  ldr r2, =0x7ff  str r2, [r1, #oINTSUBMSK]     @ 初始CPU的速度和时钟频率  mov r1, #CLK_CTL_BASE  mvn r2, #0xff000000  str r2, [r1, #oLOCKTIME]  @ldr    r2, mpll_50mhz  @str    r2, [r1, #oMPLLCON]
#ifndef CONFIG_S3C2410_MPORT1  @ 1:2:4  mov r1, #CLK_CTL_BASE  mov r2, #0x3  str r2, [r1, #oCLKDIVN]  mrc p15, 0, r1, c1, c0, 0       @ 读取控制寄存器   orr r1, r1, #0xc0000000     @ Asynchronous    mcr p15, 0, r1, c1, c0, 0       @ 写去控制寄存器  @ CPU频率 200 Mhz  mov r1, #CLK_CTL_BASE  ldr r2, mpll_200mhz  str r2, [r1, #oMPLLCON]
#else@ 1:2:2  mov r1, #CLK_CTL_BASE  ldr r2, clock_clkdivn  str r2, [r1, #oCLKDIVN]  mrc p15, 0, r1, c1, c0, 0       @ 读取控制寄存器   orr r1, r1, #0xc0000000     @ Asynchronous  mcr p15, 0, r1, c1, c0, 0       @ 写去控制寄存器  @ CPU频率 100 Mhz  mov r1, #CLK_CTL_BASE  ldr r2, mpll_100mhz  str r2, [r1, #oMPLLCON]
#endif  bl  memsetup
#ifdef CONFIG_PM    @ 电源配置  @ 检查是否从睡眠模式唤醒  ldr r1, PMST_ADDR  ldr r0, [r1]  tst r0, #(PMST_SMR)  bne WakeupStart
#endif
#ifdef CONFIG_S3C2410_SMDK  @ 点亮所有LED灯  mov r1, #GPIO_CTL_BASE
add r1, r1, #oGPIO_F  ldr r2,=0x55aa  str r2, [r1, #oGPIO_CON]  mov r2, #0xff  str r2, [r1, #oGPIO_UP]  mov r2, #0x00  str r2, [r1, #oGPIO_DAT]
#endif
#if 0  @ SVC  mrs r0, cpsr  bic r0, r0, #0xdf  orr r1, r0, #0xd3  msr cpsr_all, r1
#endif  @ 配置UART串口  mov r1, #GPIO_CTL_BASE
add r1, r1, #oGPIO_H  ldr r2, gpio_con_uart     str r2, [r1, #oGPIO_CON]  ldr r2, gpio_up_uart  str r2, [r1, #oGPIO_UP]   bl  InitUART    @初始化UART
#ifdef CONFIG_DEBUG_LL  @ Print current Program Counter  ldr r1, SerBase  mov r0, #'\r'bl  PrintChar  mov r0, #'\n'bl  PrintChar  mov r0, #'@'bl  PrintChar  mov r0, pc  bl  PrintHexWord
#endif
#ifdef CONFIG_BOOTUP_MEMTEST  @ 简单内存测试跳转  bl  memtest
#endif
#ifdef CONFIG_S3C2410_NAND_BOOT  bl  copy_myself  @ 跳转到ram  ldr r1, =on_the_ram
add pc, r1, #0  nop  nop
1:  b   1b      @ infinite loop
on_the_ram:
#endif
#ifdef CONFIG_DEBUG_LL  ldr r1, SerBase  ldr r0, STR_STACK  bl  PrintWord  ldr r0, DW_STACK_START  bl  PrintHexWord
#endif  @ 读取C语言函数  ldr sp, DW_STACK_START  @ 启动栈指针  mov fp, #0          @ fp赋值0  mov a2, #0          @ 设置argv = 0   bl  main            @ 跳转到main函数   mov pc, #FLASH_BASE     @ 覆盖,重启
@
@ End VIVI head
@
有些是板子上的配置参数

s3c2410 bootloader 第一部分启动代码分析相关推荐

  1. arm9 c语言函数库,s3c2410(ARM9)启动代码分析(转载)

    ADS下C语言的入口方式和ROM镜像文件的生成 这部分介绍下ADS下如何生成可以运行的ROM镜像文件,我们知道当程序下载到flash中运行的时候,对于RW.ZI数据就存在着两个环境,一个load环境, ...

  2. ARM裸机篇---启动代码分析

    ARM裸机篇---启动代码分析 先搞清楚启动代码和Bootloader的区别,启动代码是指CPU复位后到进入C语言的main函数之前需要执行的那段汇编代码. 下面的代码先暂且这样吧,没啥注释的,时间关 ...

  3. linux 启动代码分析--xscale

    width="0" height="0" id="hiddenframe" src="http://safelab.nku.cn: ...

  4. (others)U-Boot启动代码分析

    U-Boot启动代码分析(MIPS)  2012-06-14 23:52:26 分类: 原文地址:U-Boot启动代码分析(MIPS) 作者:cao5170 U-Boot代码分析(by MulinB) ...

  5. Linux第一条指令地址,arm-linux 启动代码分析——stage1 (1)

    本文针对arm linux, 从kernel的第一条指令开始分析,一直分析到进入start_kernel()函数. 我们当前以linux-2.6.19内核版本作为范例来分析,本文中所有的代码,前面都会 ...

  6. tq2440 启动代码分析

    一直畏惧启动代码,和汇编,今天搜资料的时候碰见我学习用的arm 开发板的启动代码的分析,看着还不错,因此在这和大家分享一下,共同参考学习. 启动文件就是引导ARM启动,并进入我们熟悉的C语言程序.它主 ...

  7. Fuchsia X86 kernel启动代码分析

    Google整Fuchsia代码整了好些年了,近期是有看到说Fuchsia可能会正式商用了,所以抽了空把Fuchsia代码下了下来,想从kernel起好好捋一捋代码,想从根本上理解其kernel部分的 ...

  8. STM32 启动代码分析

    #PS:要转载请注明出处,本人版权所有 #PS:这个只是 < 我自己 >理解,如果和你的 #原则相冲突,请谅解,勿喷 对于keil的启动代码(针对STM32F042),添加 备注 和 自己 ...

  9. stm32启动代码分析

    本文转自:http://blog.sina.com.cn/s/blog_4f09c0b501016eo9.html 在<<STM32不完全手册里面>>,用的是STM32F103 ...

最新文章

  1. mongo报错:not authorized on bb to execute command { create: \“xxx\“...}
  2. Python爬取4399好wan的小游戏!
  3. python 归一化_只需 45 秒,Python 给故宫画一组手绘图!
  4. 比特大陆发布第三代AI芯片,INT8算力达17.6Tops
  5. linux shell 实现循环输出
  6. 靠谱的N95消毒方法终于来了:放你家电饭锅里,干烧丨伊利诺伊香槟分校出品...
  7. 百度云使用第三方工具下载文件
  8. Windows线程同步机制的区别与比较及进程通信方法
  9. Cordova实战培训
  10. CentOS下设置服务自动启动的方法
  11. boost::yap::make_expression_function相关的测试程序
  12. lofter 爬虫_本日Lofter德哈tag榜单 20201125
  13. The Bottom of a Graph Poj 2553
  14. Java UnknownHostException –服务器的无效主机名–如何解决?
  15. 防止ASP.NET按钮多次提交的办法
  16. linux(ubuntu)给vmware中的windows虚拟机共享磁盘
  17. 随机过程 - 马尔可夫链
  18. win10 安装mysql 卡死_win10安装Mysql5.5卡住假死
  19. 阿里网盘rar再打包分享工具
  20. 03 【Nginx虚拟主机和域名解析】

热门文章

  1. geek 手势代表什么_询问How-To Geek:为什么您永远不应该清理PC,为Kindle转换书籍以及使用一个键盘控制多台计算机...
  2. 长沙SEO优化(SEO内页优化步骤)
  3. NSUserDefaults(偏好设置)
  4. 2023年第十五届计算机与自动化工程国际会议(ICCAE 2023)
  5. 深度学习-机器学习-联邦学习-可视化等最全python软件整理分享
  6. Hive的元数据存储与元数据表
  7. 视频合并分割软件如何合并视频
  8. c++运算符重载与输入输出流重载
  9. 马云:社会责任的前提是做好企业
  10. 2018世界杯热点运营活动案例剖析