LPC2468 启动代码设计和分析.docx
《LPC2468 启动代码设计和分析.docx》由会员分享,可在线阅读,更多相关《LPC2468 启动代码设计和分析.docx(13页珍藏版)》请在冰豆网上搜索。
![LPC2468 启动代码设计和分析.docx](https://file1.bdocx.com/fileroot1/2022-11/23/33341e36-ef81-4009-8a7f-675a40906e45/33341e36-ef81-4009-8a7f-675a40906e451.gif)
LPC2468启动代码设计和分析
INCLUDELPC2400.INC;/*引入头文件*/
;/*定义堆栈的大小*/
SVC_STACK_LEGTHEQU1
FIQ_STACK_LEGTHEQU50
IRQ_STACK_LEGTHEQU9*256;/*每层嵌套需要256个字堆栈,*/
;/*允许9嵌套层*/
ABT_STACK_LEGTHEQU0
UND_STACK_LEGTHEQU0
NoIntEQU0x80;/*禁止IRQ中断宏定义*/
NoFIQEQU0x40;/*禁止FIQ中断宏定义*/
USR32ModeEQU0x10;/*用户模式宏定义*/
SVC32ModeEQU0x13;/*管理模式宏定义*/
SYS32ModeEQU0x1f;/*系统模式宏定义*/
IRQ32ModeEQU0x12;/*IRQ模式宏定义*/
FIQ32ModeEQU0x11;/*FIQ模式宏定义*/
;//静态RAM
WAITWEN0EQU0x0F;/*配置EMCStaticWaitWen0*/
WAITOEN0EQU0x08;/*配置EMCStaticWaitOen0*/
WAITRD0EQU0x04;/*配置EMCStaticWaitRd0*/
WAITPAGE0EQU0x1F;/*配置EMCStaticWaitPage0*/
WAITWR0EQU0x02;/*配置EMCStaticWaitWr0*/
WAITTURN0EQU0x0F;/*配置EMCStaticWaitTurn0*/
;//程序存储器
WAITWEN1EQU0x00;/*配置EMCStaticWaitWen1*/
WAITOEN1EQU0x02;/*配置EMCStaticWaitOen1*/
WAITRD1EQU0x03;/*配置EMCStaticWaitRd1*/
WAITPAGE1EQU0x1F;/*配置EMCStaticWaitPage1*/
WAITWR1EQU0x00;/*配置EMCStaticWaitWr1*/
WAITTURN1EQU0x00;/*配置EMCStaticWaitTurn1*/
;//液晶
WAITWEN2EQU0x00;/*配置EMCStaticWaitWen2*/
WAITOEN2EQU0x00;/*配置EMCStaticWaitOen2*/
WAITRD2EQU0x00;/*配置EMCStaticWaitRd2*/
WAITPAGE2EQU0x00;/*配置EMCStaticWaitPage2*/
WAITWR2EQU0x00;/*配置EMCStaticWaitWr2*/
WAITTURN2EQU0x00;/*配置EMCStaticWaitTurn2*/
;//未使用
WAITWEN3EQU0x0F;/*配置EMCStaticWaitWen3*/
WAITOEN3EQU0x0F;/*配置EMCStaticWaitOen3*/
WAITRD3EQU0x0F;/*配置EMCStaticWaitRd3*/
WAITPAGE3EQU0x1F;/*配置EMCStaticWaitPage3*/
WAITWR3EQU0x0F;/*配置EMCStaticWaitWr3*/
WAITTURN3EQU0x0F;/*配置EMCStaticWaitTurn3*/
BCFG_08DEFEQU0x00000000;/*8BitBus*/
BCFG_16DEFEQU0x00000001;/*16BitBus*/
BCFG_32DEFEQU0x00000002;/*32BitBus*/
;//|页模式|片选极性|字节定位状态|延长等待|写缓冲区|写保护|
;//|PM|PC|PB|EW|B|P|
;//|0:
禁能1:
使能|0:
低1:
高||0:
禁能1:
使能|0:
禁能1:
使能|0:
禁能1:
使能|
BCFG0EQU((0x01<<03):
OR:
(0x00<<06):
OR:
(0x01<<07):
OR:
(0x01<<8):
OR:
(0x00<<19):
OR:
(0x00<<20))
BCFG1EQU((0x00<<03):
OR:
(0x00<<06):
OR:
(0x01<<07):
OR:
(0x00<<8):
OR:
(0x00<<19):
OR:
(0x00<<20))
BCFG2EQU((0x00<<03):
OR:
(0x00<<06):
OR:
(0x01<<07):
OR:
(0x00<<8):
OR:
(0x00<<19):
OR:
(0x00<<20))
BCFG3EQU((0x00<<03):
OR:
(0x00<<06):
OR:
(0x01<<07):
OR:
(0x00<<8):
OR:
(0x00<<19):
OR:
(0x00<<20))
STATICCFG0EQU(BCFG_08DEF:
OR:
BCFG0)
STATICCFG1EQU(BCFG_16DEF:
OR:
BCFG1)
STATICCFG2EQU(BCFG_08DEF:
OR:
BCFG2)
STATICCFG3EQU(BCFG_16DEF:
OR:
BCFG3)
EMCC_CONTEQU0x01;禁止镜像
;//GPIO0
PINSEL0_ValEQU0xC05A8C50;GPIO,GPIO,TXD0,RXD0,GPIO,CAP2[1],GPIO,SCK1,MISO1,MOSI1,TXD2,RXD2,GPIO,GPIO,GPIO,SCK
PINSEL1_ValEQU0x0015403F;SSEL,MISO,MOSI,GPIO,GPIO,GPIO,GPIO,AD0[0],AD0[1],AD0[2],AD0[3],GPIO,GPIO,GPIO,GPIO,GPIO
;//GPIO1
PINSEL2_ValEQU0x000000C0;GPIO,GPIO,GPIO,PWM0[2],GPIO,GPIO,GPIO,GPIO,GPIO,GPIO,GPIO,GPIO,GPIO,GPIO,GPIO,GPIO
PINSEL3_ValEQU0x00030F00;GPIO,GPIO,GPIO,GPIO,SCK0,SSEL0,GPIO,GPIO,MOSI0,GPIO,GPIO,GPIO,GPIO,GPIO,GPIO,GPIO
;//GPIO2
PINSEL4_ValEQU0x1000000A;RXD1,TXD1,GPIO,GPIO,GPIO,GPIO,GPIO,GPIO,GPIO,GPIO,GPIO,GPIO,GPIO,GPIO,CS2,GPIO
PINSEL5_ValEQU0x05010115;CAS,RAS,CLKOUT0,GPIO,DYCS0,GPIO,GPIO,GPIO,CKEOUT0,GPIO,GPIO,GPIO,DQMOUT0,DQMOUT1,GPIO,GPIO
;//GPIO3
PINSEL6_ValEQU0x55555555;D0..D15
PINSEL7_ValEQU0x00008000;GPIO,GPIO,GPIO,GPIO,GPIO,GPIO,GPIO,CAP0[0],GPIO,GPIO,GPIO,GPIO,GPIO,GPIO,GPIO,GPIO
;//GPIO4
PINSEL8_ValEQU0x55555555;A0..A15
PINSEL9_ValEQU0x5F050555;A16,A17,A18,A19,A20,A21,GPIO,GPIO,OE,WE,GPIO,GPIO,TXD3,TXD3,CS0,CS1
PINSEL10_ValEQU0x00000000;
;/********************************************************************************************************
;Theimportedlabels
;引入的外部标号在这声明
;********************************************************************************************************/
IMPORT__main;/*C语言主程序入口*/
IMPORTRunFirst
IMPORTSys_SDRAM_Init
IMPORTvicControl
IMPORTFIQ_Exception;/*快速中断异常处理程序*/
IMPORTSys_ResetInit;/*目标板基本初始化*/
IMPORTSoftwareInterrupt
IMPORT__use_two_region_memory
IMPORT__use_no_semihosting_swi
;/********************************************************************************************************
;Theemportedlabels
;给外部使用的标号在这声明
;********************************************************************************************************/
PRESERVE8
EXPORTReset
EXPORTStackUsr
EXPORTInitStack
EXPORTbottom_of_heap
EXPORTSoftwareInterruptAdd
EXPORT__user_initial_stackheap
CODE32
AREAvectors,CODE,READONLY
ENTRY
Reset;/*中断向量表*/
LDRPC,ResetAddr
LDRPC,UndefinedAddr
LDRPC,SWI_Addr
LDRPC,PrefetchAddr
LDRPC,DataAbortAddr
DCD0xb9206e50
LDRPC,[PC,#-0x120]
LDRPC,FIQ_Addr
ResetAddrDCDResetInit
UndefinedAddrDCDUndefined
SWI_AddrDCDSoftwareInterruptAdd
PrefetchAddrDCDPrefetchAbort
DataAbortAddrDCDDataAbort
NouseDCD0
IRQ_AddrDCD0
FIQ_AddrDCDFIQ_Handler
Undefined
B.
PrefetchAbort
B.
DataAbort
B.
SoftwareInterruptAdd
CMPR0,#0x100
BLOSoftwareInterrupt
BvicControl
;/********************************************************************************************************
;快速中断
;********************************************************************************************************/
FIQ_Handler
STMFDSP!
{R0-R3,LR}
BLFIQ_Exception
LDMFDSP!
{R0-R3,LR}
SUBSPC,LR,#4
;/********************************************************************************************************
;**Functionname:
ResetInit
;**
;**Descriptions:
复位处理
;********************************************************************************************************/
ResetInit
BLRunFirst
;配置IO口,2011-6-1816:
58:
16
LDRR2,=PINSEL0
LDRR4,=PINSEL0_Val
STRR4,[R2]
LDRR2,=PINSEL1
LDRR4,=PINSEL1_Val
STRR4,[R2]
LDRR2,=PINSEL2
LDRR4,=PINSEL2_Val
STRR4,[R2]
LDRR2,=PINSEL3
LDRR4,=PINSEL3_Val
STRR4,[R2]
LDRR2,=PINSEL4
LDRR4,=PINSEL4_Val
STRR4,[R2]
LDRR2,=PINSEL5
LDRR4,=PINSEL5_Val
STRR4,[R2]
LDRR2,=PINSEL6
LDRR4,=PINSEL6_Val
STRR4,[R2]
LDRR2,=PINSEL7
LDRR4,=PINSEL7_Val
STRR4,[R2]
LDRR2,=PINSEL8
LDRR4,=PINSEL8_Val
STRR4,[R2]
LDRR2,=PINSEL9
LDRR4,=PINSEL9_Val
STRR4,[R2]
LDRR2,=PINSEL10
LDRR4,=PINSEL10_Val
STRR4,[R2]
;EMC配置,2011-6-209:
21:
00
LDRR2,=EMCControl
LDRR4,=EMCC_CONT
STRR4,[R2]
;静态存储器配置,2011-6-2015:
49:
41
LDRR1,=STATICCFG0;/*配置EMCStaticConfig0*/
LDRR2,=WAITWEN0;/*配置EMCStaticWaitWen0*/
LDRR3,=WAITOEN0;/*配置EMCStaticWaitOen0*/
LDRR4,=WAITRD0;/*配置EMCStaticWaitRd0*/
LDRR5,=WAITPAGE0;/*配置EMCStaticWaitPage0*/
LDRR6,=WAITWR0;/*配置EMCStaticWaitWr0*/
LDRR7,=WAITTURN0;/*配置EMCStaticWaitTurn0*/
LDRR0,=EMCStaticConfig0
STMIAR0!
{R1-R7}
LDRR1,=STATICCFG1;/*配置EMCStaticConfig1*/
LDRR2,=WAITWEN1;/*配置EMCStaticWaitWen1*/
LDRR3,=WAITOEN1;/*配置EMCStaticWaitOen1*/
LDRR4,=WAITRD1;/*配置EMCStaticWaitRd1*/
LDRR5,=WAITPAGE1;/*配置EMCStaticWaitPage1*/
LDRR6,=WAITWR1;/*配置EMCStaticWaitWr1*/
LDRR7,=WAITTURN1;/*配置EMCStaticWaitTurn1*/
LDRR0,=EMCStaticConfig1
STMIAR0!
{R1-R7}
LDRR1,=STATICCFG2;/*配置EMCStaticConfig2*/
LDRR2,=WAITWEN2;/*配置EMCStaticWaitWen2*/
LDRR3,=WAITOEN2;/*配置EMCStaticWaitOen2*/
LDRR4,=WAITRD2;/*配置EMCStaticWaitRd2*/
LDRR5,=WAITPAGE2;/*配置EMCStaticWaitPage2*/
LDRR6,=WAITWR2;/*配置EMCStaticWaitWr2*/
LDRR7,=WAITTURN2;/*配置EMCStaticWaitTurn2*/
LDRR0,=EMCStaticConfig2
STMIAR0!
{R1-R7}
BLInitStack;/*初始化堆栈*/
BLSys_ResetInit;/*目标板基本初始化*/
B__main;/*跳转到c语言入口*/
;/********************************************************************************************************
;**Functionname:
__user_initial_stackheap
;**
;**Descriptions:
库函数初始化堆和栈,不能删除
;********************************************************************************************************/
__user_initial_stackheap
LDRR0,=bottom_of_heap
LDRR2,=top_of_heap
LDRR3,=bottom_of_Stacks
BXLR
EXPORT_sys_exit
_sys_exit
B.
EXPORT__rt_div0
EXPORTfputc
EXPORTfgetc
EXPORT_sys_close
EXPORT_sys_write
EXPORT_sys_read
EXPORT_sys_istty
EXPORT_sys_seek
EXPORT_sys_ensure
EXPORT_sys_flen
EXPORT_sys_tmpnam
EXPORT_sys_command_string
__rt_div0
fputc
fgetc
_sys_close
_sys_write
_sys_read
_sys_istty
_sys_seek
_sys_ensure
_sys_flen
_sys_tmpnam
_sys_command_string
NOP
MOVR0,#0
BXLR
;/********************************************************************************************************
;**Functionname:
CrpData
;**
;**Descriptions:
加密芯片
;********************************************************************************************************/
IF:
DEF:
EN_CRP
IF.>=0x1fc
INFO1,"\nThedataat0x000001fcmustbe0x87654321.\nPleasedeletesomesourcebeforethisline."
ENDIF
CrpData
WHILE.<0x1fc
NOP
WEND
CrpData1
DCD0x87654321;/*当此数为0x87654321时,用户*/
;/*程序被保护*/
ENDIF
InitStack
MOVR0,LR
;BuildtheSVCstack
;设置管理模式堆栈
MSRCPSR_c,#0xd3
LDRSP,StackSvc
;BuildtheIRQstack
;设置中断模式堆栈
MSRCPSR_c,#0xd2
LDRSP,StackIrq
;BuildtheFIQstack
;设置快速中断模式堆栈
MSRCPSR_c,#0xd1
LDRSP,StackFiq
;BuildtheDATAABORTstack
;设置中止模式堆栈
MSRCPSR_c,#0xd7
LDRSP,StackAbt
;BuildtheUDFstack
;设置未定义模式堆栈
MSRCPSR_c,#0xdb
LDRSP,StackUnd
;BuildtheSYSstack
;设置系统模式堆栈
MSRCPSR_c,#SYS32Mode
LDRSP,=StackUsr
BXR0
LTORG
StackSvcDCDSvcStackSpace+(SVC_STACK_LEGTH-1)*4
StackIrqDCDIrqStackSpace+(IRQ_STACK_LEGTH-1)*4
StackFiqDCDFiqStackSpace+(FIQ_STACK_LEGTH-1)*4
StackAbtDCDAbtStackSpace+(ABT_STACK_LEGTH-1)*4
StackUndDCDUndtStackSpace+(UND_STACK_LEGTH-1)*4
AREAMyStacks,DATA,NOINIT,ALIGN=2;
;/*分配堆栈空间*/
SvcStackSpaceSPACESVC_STA