OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4825|回复: 0

mini2440启动代码分析之第一篇(注意名字,不是bootloader)

[复制链接]

79

主题

394

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1714
金钱
1714
注册时间
2015-9-21
在线时间
529 小时
发表于 2021-11-24 17:57:04 | 显示全部楼层 |阅读模式
启动代码主要是在主程序运行之前初始化系统硬件及软件的运行环境,它的主要功能包括以下的几个方面:
1、建立中断向量表
2、初始化系统堆栈
3、应用程序执行环境初始化
4、跳转至主函数
第一部分
GET option.inc           option.inc文件包含了开发板的配置信息—堆栈、时钟等
GET memcfg.inc          ;存储控制文件
GET 2440addr.inc         ;寄存器地址地址定义
注意:   汇编不能使用include包含头文件,所有用Get,功能:引进一个被编译过的文件
        汇编也不认识*.h 文件,所有只能用*.inc
第二部分
;EQU为程序中的常量、标号等定义一个等效的字符名称,相当于C语言中的define
;定义SDRAM工作在Refresh模式,SDRAM有两种刷新方式:autorefreshselfrefresh,前者是在其使用过程当中每隔一段时间发出刷新指令,SDRAM刷新一行,selfrefresh是在省电模式时使用。标示:REFRESH寄存器[22]bit : 0- auto refresh; 1 - self refresh
BIT_SELFREFRESH   EQU   (1<<22)   ;用于节电模式中,SDRAM自刷新标志位
第三部分(简单略过)
;系统的工作模式设定,共七种工作模式
USERMODE    EQU      0x10
FIQMODE      EQU      0x11
IRQMODE      EQU      0x12
SVCMODE      EQU      0x13
ABORTMODE   EQU      0x17
UNDEFMODE   EQU      0x1b
MODEMASK    EQU      0x1f
NOINT         EQU       0xc0
;设置6种工作模式的堆栈的起始地址
;option.inc中定义了_STACK_BASEADDRESS EQU  0x33ff8000
UserStack EQU (_STACK_BASEADDRESS-0x3800)   ;0x33ff4800 ~
SVCStack EQU (_STACK_BASEADDRESS-0x2800)   ;0x33ff5800 ~
UndefStack EQU (_STACK_BASEADDRESS-0x2400)  ;0x33ff5c00 ~
AbortStack EQU (_STACK_BASEADDRESS-0x2000)  ;0x33ff6000 ~
IRQStack EQU (_STACK_BASEADDRESS-0x1000)   ;0x33ff7000 ~
FIQStack EQU (_STACK_BASEADDRESS-0x0)      ;0x33ff8000 ~


第四部分:
;Check if tasm.exe(armasm -16 ...@ADS 1.0) is used.
; 判断是否THUMB指令
;   [ 代表IF| 指的是ELSE] 相当于ENDIF
      
GBLL    THUMBCODE ;定义一个全局的逻辑变量,变量名为THUMBCODE
       [ {CONFIG} = 16   ;如果是CONFIG}= 16表明现在处于thumb状态
THUMBCODE  SETL  {TRUE} ;该变量赋值为真,表示告诉系统当前想用Thumb,但实际启动时不行,只能从ARM启动后再跳转thumb
           CODE32 ;启动时强制使用32 ARM编译模式
             |
THUMBCODE SETL  {FALSE}如果系统要求是ARM 指令,则直接设置THUMBCODE
                              false ,说明当前的是32 位编译模式
        ]
            
  ;宏定义MOV_PC_LR,作用:子程序返回
   MACRO      ;宏定义
   MOV_PC_LR
   [ THUMBCODE      ;目标地址是THUMB指令
   bx lr            ;ARM模式中,要用BX指令跳转到THUMB指令,并转换模式
   |  
   mov pc,lr   ;如果目标地址是ARM指令,则直接把函数返回地址给PC
   ]
MEND ;宏定义结束
  ;宏定义MOVEQ_PC_LR,作用:带相等条件判断的子程序返回 。与宏定义
  ;带条件的函数返回,与MOV_PC_LR类似  
  MACRO
  MOVEQ_PC_LR
  [ THUMBCODE
bxeq lr
|
    moveq pc,lr
  ]
MEND ;宏定义结束

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-6-9 03:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表