44B0 Keil 启动代码详解.docx

上传人:b****7 文档编号:9062017 上传时间:2023-02-03 格式:DOCX 页数:20 大小:37.63KB
下载 相关 举报
44B0 Keil 启动代码详解.docx_第1页
第1页 / 共20页
44B0 Keil 启动代码详解.docx_第2页
第2页 / 共20页
44B0 Keil 启动代码详解.docx_第3页
第3页 / 共20页
44B0 Keil 启动代码详解.docx_第4页
第4页 / 共20页
44B0 Keil 启动代码详解.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

44B0 Keil 启动代码详解.docx

《44B0 Keil 启动代码详解.docx》由会员分享,可在线阅读,更多相关《44B0 Keil 启动代码详解.docx(20页珍藏版)》请在冰豆网上搜索。

44B0 Keil 启动代码详解.docx

44B0Keil启动代码详解

;/****************************************************************************/

;/*S3C2440A.S:

StartupfileforSamsungS3C440A                             */

;/*ThisfileispartoftheuVision/ARMdevelopmenttools.                  */

;/*Copyright(c)2005-2006KeilSoftware.Allrightsreserved.              */

;/*Thissoftwaremayonlybeusedunderthetermsofavalid,current,      */

;/*enduserlicencefromKEILforacompatibleversionofKEILsoftware     */

;/*developmenttools.Nothingelsegivesyoutherighttousethissoftware.*/

;/****************************************************************************/

                               ;系统的工作模式设定

Mode_USR       EQU    0x10   ;定义用户模式标志代码;//用户模式的CPSR代码

Mode_FIQ       EQU    0x11   ;定义快速中断模式标志代码;//快中断模式的CPSR代码

Mode_IRQ       EQU    0x12   ;定义普通中断模式标志代码;//中断模式的CPSR代码

Mode_SVC       EQU    0x13   ;定义管理模式标志代码;//管理模式的CPSR代码

Mode_ABT       EQU    0x17   ;定义中止模式标志代码;//中止模式的CPSR代码

Mode_UND       EQU    0x1B   ;定义未定义模式标志代码;//未定义模式的CPSR代码

Mode_SYS       EQU    0x1F   ;定义系统模式(特权模式)标志代码;//系统(特权)模式的CPSR代码

I_Bit          EQU    0x80   ;//普通中断开关(0×80:

打开;0×00:

关闭)

F_Bit          EQU    0x40   ;//快速中断开关(0×40:

打开;0×00:

关闭)

;//栈配置()

;系统的栈空间设定

UND_Stack_SizeEQU    0x00000000;未定义

SVC_Stack_SizeEQU    0x00000008;管理模式端栈长度

ABT_Stack_SizeEQU    0x00000000;中止模式端栈长度

FIQ_Stack_SizeEQU    0x00000000;快速中断模式端栈长度

IRQ_Stack_SizeEQU    0x00000080;普通中断模式模式端栈长度

USR_Stack_SizeEQU    0x00000400;用户模端栈长度

ISR_Stack_SizeEQU    (UND_Stack_Size+SVC_Stack_Size+ABT_Stack_Size+\FIQ_Stack_Size+IRQ_Stack_Size);所有的堆栈大小进行相加,得到总堆栈大小

/****************************************************************************

;//arm的汇编程序由段组成,段是相对独立的指令或数据单位,每个段由AREA伪指令定义,并定义段的属性:

;//READWRITE(读写)READONLY(只读)

*******************************************************************************

               AREA   STACK,NOINIT,READWRITE,ALIGN=3;开辟端栈段,段名(STACK)定义为可读可写,不初始化内存单元或将内存写0,字节对齐

Stack_Mem      SPACE  USR_Stack_Size;//申请栈内存空间

__initial_sp   SPACE  ISR_Stack_Size

Stack_Top      EQU    Stack_Mem+ISR_Stack_Size;//定义堆栈开始地址(最大地址,堆栈向下访问)

;//堆配置

;//堆大小(单位字节)//

Heap_Size      EQU    0x00000000       ;系统的堆空间设定//定义堆空间大小(配合最后的动态内存申请使用)

               AREA   HEAP,NOINIT,READWRITE,ALIGN=3;//段名(HEAP)声明堆代码段(不初始化内存,可读写,字节对齐)

Heap_Mem       SPACE  Heap_Size;//申请堆的内存空间

;时钟管理定义

CLK_BASE       EQU    0x4C000000     ;时钟基地址

LOCKTIME_OFS   EQU    0x00           ;PLL锁定时间计数器对应基地址的偏移值

MPLLCON_OFS    EQU    0x04           ;MPLL控制对应基地址的偏移值//认为MPLL分出三种模式:

FCLK、HCLK、PCLK

UPLLCON_OFS    EQU    0X08           ;UPLL控制对应基地址的偏移值//用于USB设备

CLKCON_OFS     EQU    0x0C           ;时钟生成控制对应基地址的偏移值

CLKSLOW_OFS    EQU    0x10           ;慢时钟控制对应基地址的偏移值

CLKDIVN_OFS    EQU    0X14           ;时钟除法器控制对应基地址的偏移值

CAMDIVN_OFS    EQU    0X18           ;摄象时钟除法器控制对应基地址的偏移值//UPLL提供

CLOCK_SETUP    EQU    1               ;时钟设置

LOCKTIME_Val   EQU    0x0FFF0FFF       ;PLL锁定时间计数器值

MPLLCON_Val    EQU    0x00043011       ;MPLL控制值

UPLLCON_Val    EQU    0x00038021       ;UPLL控制值

CLKCON_Val     EQU    0x001FFFF0       ;时钟生成控制值

CLKSLOW_Val    EQU    0x00000004       ;慢时钟控制值

CLKDIVN_Val    EQU    0x0000000F       ;时钟除法器控制值

CAMDIVN_Val    EQU    0x00000000       ;摄象时钟除法器控制值

;Interruptdefinitions     ;中断定义

INTOFFSET         EQU   0X4A000014                     ;中断请求源偏移地址

;//中断向量表

;//中断向量地址    <0x20-0x3fffff78>

;//中断向量表地址必须字对齐

;//

IntVT_SETUP     EQU    1           ;中断向量设置

IntVTAddress   EQU    0x33ffff20   ;中断向量地址

;-----------------------存储器设定------------------------------------

IRAM_BASE      EQU    0x40000000;//内存基地址

;//看门狗定义

WT_BASE        EQU    0x53000000     ;看门狗基地址

WTCON_OFS      EQU    0x00           ;看门狗控制对应基地址的偏移值

WTDAT_OFS      EQU    0x04           ;看门狗数据对应基地址的偏移值

WTCNT_OFS      EQU    0x08           ;看门狗记数对应基地址的偏移值

WT_SETUP       EQU    1               ;看门狗设置

WTCON_Val      EQU    0x00000000       ;看门狗控制

WTDAT_Val      EQU    0x00008000       ;看门狗数据

;存储控制器设定

MC_BASE        EQU    0x48000000     ;  存储控制器基地址

MC_SETUP       EQU    0               ;  存储控制器设定

BWSCON_Val     EQU    0x22000000       ;总线宽度和等待控制

BANKCON0_Val   EQU    0x00000700       ;BootROM控制

BANKCON1_Val   EQU    0x00000700       ;BANK1控制

BANKCON2_Val   EQU    0x00000700       ;BANK2控制

BANKCON3_Val   EQU    0x00000700       ;BANK3控制

BANKCON4_Val   EQU    0x00000700       ;BANK4控制

BANKCON5_Val   EQU    0x00000700       ;BANK5控制

BANKCON6_Val   EQU    0x00018005       ;BANK6控制

BANKCON7_Val   EQU    0x00018005       ;BANK7控制

REFRESH_Val    EQU    0x008404F3       ;DRAM/SDRAM刷新控制

BANKSIZE_Val   EQU    0x00000032       ;存储器大小控制

MRSRB6_Val     EQU    0x00000020       ;SDRAM的模式设置寄存器控制

MRSRB7_Val     EQU    0x00000020       ;SDRAM的模式设置寄存器控制

;存储控制器设定结束

;I/O口设定

PIO_BASE       EQU    0x56000000     ;端口基地址

PCONA_OFS      EQU    0x00           ;端口A控制对应基地址的偏移值

PCONB_OFS      EQU    0x10           ;端口B控制对应基地址的偏移值

PCONC_OFS      EQU    0x20           ;端口C控制对应基地址的偏移值

PCOND_OFS      EQU    0x30           ;端口D控制对应基地址的偏移值

PCONE_OFS      EQU    0x40           ;端口E控制对应基地址的偏移值

PCONF_OFS      EQU    0x50           ;端口F控制对应基地址的偏移值

PCONG_OFS      EQU    0x60           ;端口G控制对应基地址的偏移值

PCONH_OFS      EQU    0x70           ;端口H控制对应基地址的偏移值

PCONJ_OFS      EQU    0xD0           ;端口J控制对应基地址的偏移值

PUPB_OFS       EQU    0x18           ;端口B上拉控制对应基地址的偏移值

PUPC_OFS       EQU    0x28           ;端口C上拉控制对应基地址的偏移值

PUPD_OFS       EQU    0x38           ;端口D上拉控制对应基地址的偏移值

PUPE_OFS       EQU    0x48           ;端口E上拉控制对应基地址的偏移值

PUPF_OFS       EQU    0x58           ;端口F上拉控制对应基地址的偏移值

PUPG_OFS       EQU    0x68           ;端口G上拉控制对应基地址的偏移值

PUPH_OFS       EQU    0x78           ;端口H上拉控制对应基地址的偏移值

PUPJ_OFS       EQU    0xD8           ;端口J上拉控制对应基地址的偏移值

;--------端口配置--------------

PIO_SETUP      EQU    0

;端口A

PIOA_SETUP     EQU    0

PCONA_Val      EQU    0x000003FF

;端口B

PIOB_SETUP     EQU    0

PCONB_Val      EQU    0x00000000   ;

PUPB_Val       EQU    0x00000000    ;端口B上拉开启

;端口C

PIOC_SETUP     EQU    1

PCONC_Val      EQU    0x00001401   ;

PUPC_Val       EQU    0x00000000;端口C上拉开启

;端口D

PIOD_SETUP     EQU    0

PCOND_Val      EQU    0x00000000   ;

PUPD_Val       EQU    0x00000000   ;端口D上拉开启

;端口E

PIOE_SETUP     EQU    0

PCONE_Val      EQU    0x00000000   ;

PUPE_Val       EQU    0x00000000   ;端口E上拉开启

;端口F

PIOF_SETUP     EQU    0

PCONF_Val      EQU    0x00000000   ;

PUPF_Val       EQU    0x00000000   ;端口F上拉开启

;端口G

PIOG_SETUP     EQU    0

PCONG_Val      EQU    0x00000000   ;

PUPG_Val       EQU    0x00000000   ;端口G上拉开启

;端口H

PIOH_SETUP     EQU    0

PCONH_Val      EQU    0x000007FF

PUPH_Val       EQU    0x00000000    ;端口H上拉开启

;端口J

PIOJ_SETUP     EQU    0

PCONJ_Val      EQU    0x00000000   ;

PUPJ_Val       EQU    0x00000000   ;端口J上拉开启

               ;汇编程序数据8字节对齐

               PRESERVE8         ;c和汇编有8位对齐的要求,这个伪指令可以满足此要求

;//存储区设定和程序入口点

;//启动代码必须连接到第一个地址才能运行。

               AREA   RESET,CODE,READONLY;//开辟端栈段,段名(RESET)定义RESET代码段为只读

               ARM     ;//ARM模式运行程序

;//异常向量

;//影射到地址0

;//必须使用,绝对寻址方式。

;//虚处理(子程序)是用一个无限循环实现的,它是可修改的..//(11942295)翻译

Vectors        LDR    PC,Reset_Addr;复位

               LDR    PC,Undef_Addr;未定义指令

               LDR    PC,SWI_Addr  ;软件中断

               LDR    PC,PAbt_Addr;中止(预取)

               LDR    PC,DAbt_Addr;中止(数据)

               NOP                   ;保留向量

               LDR    PC,IRQ_Addr  ;普通

               LDR    PC,FIQ_Addr  ;快速中断

               IF     IntVT_SETUP<>0

;//中断向量表地址

HandleEINT0         EQU   IntVTAddress

HandleEINT1         EQU   IntVTAddress+4

HandleEINT2         EQU   IntVTAddress+4*2

HandleEINT3         EQU   IntVTAddress+4*3

HandleEINT4_7       EQU   IntVTAddress+4*4

HandleEINT8_23      EQU   IntVTAddress+4*5

HandleCAM           EQU   IntVTAddress+4*6

HandleBATFLT        EQU   IntVTAddress+4*7

HandleTICK          EQU   IntVTAddress+4*8

HandleWDT           EQU   IntVTAddress+4*9

HandleTIMER0        EQU   IntVTAddress+4*10

HandleTIMER1        EQU   IntVTAddress+4*11

HandleTIMER2        EQU   IntVTAddress+4*12

HandleTIMER3        EQU   IntVTAddress+4*13

HandleTIMER4        EQU   IntVTAddress+4*14

HandleUART2         EQU   IntVTAddress+4*15

HandleLCD           EQU   IntVTAddress+4*16

HandleDMA0          EQU   IntVTAddress+4*17

HandleDMA1          EQU   IntVTAddress+4*18

HandleDMA2          EQU   IntVTAddress+4*19

HandleDMA3          EQU   IntVTAddress+4*20

HandleMMC           EQU   IntVTAddress+4*21

HandleSPI0          EQU   IntVTAddress+4*22

HandleUART1         EQU   IntVTAddress+4*23

HandleNFCON         EQU   IntVTAddress+4*24

HandleUSBD          EQU   IntVTAddress+4*25

HandleUSBH          EQU   IntVTAddress+4*26

HandleIIC           EQU   IntVTAddress+4*27

HandleUART0         EQU   IntVTAddress+4*28

HandleSPI1          EQU   IntVTAddress+4*39

HandleRTC           EQU   IntVTAddress+4*30

HandleADC           EQU   IntVTAddress+4*31

IRQ_Entry

               sub   sp,sp,#4      ;//保留PC值

               stmfdsp!

{r8-r9}

               ldr   r9,=INTOFFSET

               ldr   r9,[r9]

               ldr   r8,=HandleEINT0

               add   r8,r8,r9,lsl#2

               ldr   r8,[r8]

               str   r8,[sp,#8]

               ldmfdsp!

{r8-r9,pc}

               ENDIF

Reset_Addr     DCD    Reset_Handler;定义中断的入口地址;以Reset_Addr为Reset_Handler分配一段字对齐的内存单元

Undef_Addr     DCD  

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 哲学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1