MDK自带S3C2440启动代码分析.docx
- 文档编号:10271345
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:31
- 大小:24.58KB
MDK自带S3C2440启动代码分析.docx
《MDK自带S3C2440启动代码分析.docx》由会员分享,可在线阅读,更多相关《MDK自带S3C2440启动代码分析.docx(31页珍藏版)》请在冰豆网上搜索。
MDK自带S3C2440启动代码分析
MDK自带S3C2440启动代码分析
ARM启动代码相当于我们电脑的BIOS,也就是ARM启动时对处理器的一些初始化及嵌入式系统硬件的一些初始化。
由于它直接面对处理器内核和硬件控制器进行编程,一般都是用汇编语言。
一般包括:
中断向量表,初始化存储器系统,初始化堆栈,初始化有特殊要求的断口,设备初始化,变量初始化等。
这几天对着RealViewMDK-ARM中自带的启动代码研究了一下,遇到问题又对着数据手册和指令表看了一下,总算对S3C2440A的硬件有了一个大致的了解。
学习嵌入式系统重在系统,学习ARM只是为学习嵌入式系统铺路,懒猫比较笨可能在上系统之前要裸奔几天以强化以下对S3C2440A内部结构的了解。
把MDK自带的S3C2440A.S文件的注释发一下,这些是懒猫结合数据手册与ARM指令表理解了,可能会有错误,放在这里只是引导一下像我一样还没有入门的兄弟们,希望你们不要害怕ARM害怕嵌入式,老毛他老人家说的对,世上无难事,只怕有心人,ARM指令就那么多,看一遍不会就多看几遍,还有一定要学习看软件自带的帮助文件.
;/*****************************************************************************/
;/*S3C2440.S:
StartupfileforSamsungS3C440 */
;/*****************************************************************************/
;/*<<
;/*****************************************************************************/
;/*ThisfileispartoftheuVision/ARMdevelopmenttools. */
;/*Copyright(c)2005-2008KeilSoftware.Allrightsreserved. */
;/*Thissoftwaremayonlybeusedunderthetermsofavalid,current, */
;/*enduserlicencefromKEILforacompatibleversionofKEILsoftware */
;/*developmenttools.Nothingelsegivesyoutherighttousethissoftware.*/
;/*****************************************************************************/
;下面这些参数是与CPSR状态寄存器有关
;参数的由来:
这里各个模式的参数是由寄存器CPSR的模式位设置M[4:
0]得来的,
;比如这里的用户模式,CPSR的M[4:
0]设置为10000就是0x10。
;
;Mode_USR--用户模式,正常程序执行模式,用于应用程序
;Mode_FIQ--快速中断模式,用于高速数据传输和通道处理。
;Mode_IRQ--外部中断模式,用于通用的中断处理。
;Mode_SVC--管理模式,使用的一种保护模式。
;Mode_ABT--数据访问中止模式,用于虚拟存储用存储保护
;Mode_UND--未定义指令中止模式,当未定义指令执行时进入此模式。
;Mode_SYS--系统模式,用于特权级的操作系统任务。
;I_Bit --如果I位被置1,则外部中断被禁止(IRQisdisabled)
;F_Bit --如果F位被置1,则快速中断被禁止(FIQisdisabled)
;
;----------------------------------------------------------------------
Mode_USR EQU 0x10
Mode_FIQ EQU 0x11
Mode_IRQ EQU 0x12
Mode_SVC EQU 0x13
Mode_ABT EQU 0x17
Mode_UND EQU 0x1B
Mode_SYS EQU 0x1F
I_Bit EQU 0x80 ;whenIbitisset,IRQisdisabled
F_Bit EQU 0x40 ;whenFbitisset,FIQisdisabled
;-----------------------------栈初始化定义-----------------------------------
;下面这些主要是栈配置,系统的栈空间设定
;
;UND_Stack_Size--未定义模式的栈大小
;SVC_Stack_Size--超级用户模式的栈大小
;ABT_Stack_Size--数据访问终止模式的栈大小
;FIQ_Stack_Size--快速中断模式的栈大小
;IRQ_Stack_Size--外部中断模式的栈大小
;USR_Stack_Size--用户模式的栈大小
;ISR_Stack_Size--总堆栈的大小,也就是所有模式下堆栈相加
;
;-----------------------------------------------------------------------
UND_Stack_Size EQU 0x00000000
SVC_Stack_Size EQU 0x00000008
ABT_Stack_Size EQU 0x00000000
FIQ_Stack_Size EQU 0x00000000
IRQ_Stack_Size EQU 0x00000080
USR_Stack_Size EQU 0x00000400
ISR_Stack_Size EQU (UND_Stack_Size+SVC_Stack_Size+ABT_Stack_Size+\
FIQ_Stack_Size+IRQ_Stack_Size)
;-----------------------------------------------------------------------
;AREA--是一个伪指令,用于段定义。
ARM的汇编程序由段组成,段是相对独立
; 的指令或数据单位,每个段由AREA伪指令定义,并定义段的属性。
; STACK --AREA指令的一个参数,定义段名称
; NOINIT--AREA指令的一个参数,指定本数据段仅仅保留了内在单元,而
; 将句初始值写入内存单元,也即将内存单元值初始化为0
; READWRITE--指定本段为可读可写,数据段默认为READWRITE。
; READWRITE(读写)、READONLY(只读)
;ALIGN--也是一个伪指令,指定对齐方式。
ALIGNn指令的对齐值有两种方案
; 即n或2^n,这里采用第二种方案即指定后面的指令8字节对齐。
;
;下面这句话的意思是:
;开辟一个堆栈段,段名字为STACK,定义为可读可写,将内存单元初始化为0,
;-----------------------------------------------------------------------
AREA STACK,NOINIT,READWRITE,ALIGN=3
;-----------------------------------------------------------------------
;SPACE--伪指令,用于分配一块内存单元,并用0初始化,与%同义
;其指令格式为:
; {lable} SPACE expr
;lable--内存起始地址标号 expr--所要分配的内存字节数
;-----------------------------------------------------------------------
Stack_Mem SPACE USR_Stack_Size ;堆栈内存起始地址标号
__initial_sp SPACE ISR_Stack_Size ;汇编代码的地址标号
Stack_Top ;堆栈段内容结束,在这里放个标号,用来获得堆栈顶部地址
Heap_Size EQU 0x00000000 ;定义堆大小设置
;开辟一个名字为HEAP可读可写,不初始化内存单的内存单元。
AREA HEAP,NOINIT,READWRITE,ALIGN=3
__heap_base ;堆的基址
Heap_Mem SPACE Heap_Size ;堆内存起始地址标号
__heap_limit ;堆结束
;----------------------------内存初始化定义-----------------------------
;在一些应用系统中除了扩展Flash,RAM挂接在外部存储器接口上外,可能还有其它
;的外设挂接在外部存储器接口上,不同外设的操作时序什么的都是不一样的,所以
;在使用这些外设之前必须初始化连接这些外设存储器接口。
这里因为没扩展,所以
;只定义一个片上内存基地址。
;-----------------------------------------------------------------------
IRAM_BASE EQU 0x40000000 ;片上SRAM的基地址,即内存基地址
;-------------------------看门狗初始化定义------------------------------
;看门狗在防止程序跑飞,进入无限死循环时起着重要作用。
有些应用可能用不上
;看门狗功能,也可能有些应用会用到外部看门狗。
在这个时候内部看门狗必须禁
;止,所以有时候会在初始化时将内部看门狗禁止,当以后应用用到时再开启它。
;看门狗定时器包括三个寄存器:
;WTCON--看门狗控制寄存器,设定看门狗定时器模式
;WTDAT--看门狗数据寄存器,用于设定超时宽度
;WTCNT--看门狗计数寄存器,里面存放的是看门狗定时器当前值
;
;WT_BASE --看门狗定时器基地址
;WTCON_OFS--看门狗控制寄存器偏移地址,相对于基址
;WTDAT_OFS--看门狗数据寄存器偏移地址,相对于基址
;WTCNT_OFS--看门狗计数寄存器偏移地址,相对于基址
;WT_SETUP --看门狗设置
;WTCON_Val--看门狗控制寄存器设置,关闭看门狗
;WTDAT_Val--看门狗数据寄存器设置,初始值即为0x8000
;-----------------------------------------------------------------------
WT_BASE EQU 0x53000000 ;WatchdogTimerBaseAddress
WTCON_OFS EQU 0x00 ;WatchdogTimerControlRegisterOffset
WTDAT_OFS EQU 0x04 ;WatchdogTimerDataRegister Offset
WTCNT_OFS EQU 0x08 ;WatchdogTimerCountRegister Offset
WT_SETUP EQU 0
WTCON_Val EQU 0x00000000
WTDAT_Val EQU 0x00008000
;----------------------------时钟与电源管理定义-------------------------
;S3C2440A中的时钟控制逻辑可以产生必须的时钟信号,包括CPU的FCLK,AHB总线的
;HCLK以及APB总线外设的PCLK3C2440A内部有两个锁相环(PLL):
一个提供FCLK,
;HCLK及PCLK,另一个专用于USB模块(48MHz).
;
;CLOCK_BASE --时钟基地址
;LOCKTIME_OFS--锁相环锁定时间计数寄存器偏移地址,相对于基址
;MPLLCON_OFS --MPLL配置寄存器偏移地址,相对于基址,主时钟源PLL
;UPLLCON_OFS --UPLL配置寄存器偏移地址,相对于基址,USB时钟源PLL
;CLKCON_OFS --时钟控制寄存器偏移地址,相对于基址
;CLKSLOW_OFS --时钟减慢控制寄存器偏移地址,相对于基址
;CLKDIVN_OFS --时钟分频器控制寄存器偏移地址,相对于基址
;CAMDIVN_OFS --摄像头时钟分频器控制寄存器偏移地址,相对于基址,UPLL提供
;
;CLOCK_SETUP --时钟设置
;LOCKTIME_Val--PLL锁定时间计数器值
;MPLLCON_Val --MPLL配置寄存器值
;UPLLCON_Val --UPLL配置寄存器值
;CLKCON_Val --时钟配置寄存器值
;CLKSLOW_Val --时钟减慢控制寄存器值
;CLKDIVN_Val --时钟分频控制寄存器值
;CAMDIVN_Val --摄像头分频控制寄存器值
;-----------------------------------------------------------------------
CLOCK_BASE EQU 0x4C000000 ;ClockBaseAddress
LOCKTIME_OFS EQU 0x00 ;PLLLockTimeCountRegister Offset
MPLLCON_OFS EQU 0x04 ;MPLLConfigurationRegister Offset
UPLLCON_OFS EQU 0x08 ;UPLLConfigurationRegister Offset
CLKCON_OFS EQU 0x0C ;ClockGeneratorControlReg Offset
CLKSLOW_OFS EQU 0x10 ;ClockSlowControlRegister Offset
CLKDIVN_OFS EQU 0x14 ;ClockDividerControlRegisterOffset
CAMDIVN_OFS EQU 0x18 ;CameraClockDividerRegister Offset
CLOCK_SETUP EQU 0
LOCKTIME_Val EQU 0x0FFF0FFF
MPLLCON_Val EQU 0x00043011
UPLLCON_Val EQU 0x00038021
CLKCON_Val EQU 0x001FFFF0
CLKSLOW_Val EQU 0x00000004
CLKDIVN_Val EQU 0x0000000F
CAMDIVN_Val EQU 0x00000000
;--------------------存储控制器设置定义---------------------------------
;下面这些都是一些关于存储控制器的地址宏定义
;
;MC_BASE --存储控制器基地址
;BWSCON_OFS --总线宽度和等待控制寄存器偏移地址
;BANKCON0_OFS--BANK1控制寄存器偏移地址
; .
; .
;BANKCON7_OFS--BANK7控制寄存器偏移地址
;REFRESH_OFS --DRAM/SDRAM刷新控制寄存器偏移地址
;BANKSIZE_OFS--可调的bank大小寄存器偏移地址
;MRSRB6_OFS --bank6模式控制寄存器偏移地址
;MRSRB7_OFS --bank7模式控制寄存器偏移地址
;
;MC_SETUP --存储器控制寄存器设置
;BWSCON_Val --写入总线宽度和等待控制寄存值
;BANKCON0_Val--写入Blank0的值
; .
; .
;BANKCON7_Val--写入BANK7的值
;REFRESH_Val --写入DRAM/SDRAM刷新控制寄存的值
;BANKSIZE_Val--写入可调的bank大小寄存的值
;MRSRB6_Val --写入bank6模式控制寄存器的值
;MRSRB7_Val --写入bank7模式控制寄存器的值
;-----------------------------------------------------------------------
MC_BASE EQU 0x48000000 ;MemoryControllerBaseAddress
BWSCON_OFS EQU 0x00 ;BusWidthandWaitStatusCtrlOffset
BANKCON0_OFS EQU 0x04 ;Bank0ControlRegister Offset
BANKCON1_OFS EQU 0x08 ;Bank1ControlRegister Offset
BANKCON2_OFS EQU 0x0C ;Bank2ControlRegister Offset
BANKCON3_OFS EQU 0x10 ;Bank3ControlRegister Offset
BANKCON4_OFS EQU 0x14 ;Bank4ControlRegister Offset
BANKCON5_OFS EQU 0x18 ;Bank5ControlRegister Offset
BANKCON6_OFS EQU 0x1C ;Bank6ControlRegister Offset
BANKCON7_OFS EQU 0x20 ;Bank7ControlRegister Offset
REFRESH_OFS EQU 0x24 ;SDRAMRefreshControlRegisterOffset
BANKSIZE_OFS EQU 0x28 ;FlexibleBankSizeRegister Offset
MRSRB6_OFS EQU 0x2C ;Bank6ModeRegister Offset
MRSRB7_OFS EQU 0x30 ;Bank7ModeRegister Offset
MC_SETUP EQU 1
BWSCON_Val EQU 0x22000000
BANKCON0_Val EQU 0x00000700
BANKCON1_Val EQU 0x00000700
BANKCON2_Val EQU 0x00000700
BANKCON3_Val EQU 0x00000700
BANKCON4_Val EQU 0x00000700
BANKCON5_Val EQU 0x00000700
BANKCON6_Val EQU 0x00018005
BANKCON7_Val EQU 0x00018005
REFRESH_Val EQU 0x008404F3
BANKSIZE_Val EQU 0x00000032
MRSRB6_Val EQU 0x00000020
MRSRB7_Val EQU 0x00000020
;---------------------I/O端口宏定义-------------------------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MDK S3C2440 启动 代码 分析