keil MDK启动文件分析基于LPC2100系列其实都是相通的.docx
- 文档编号:5720022
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:20
- 大小:26.65KB
keil MDK启动文件分析基于LPC2100系列其实都是相通的.docx
《keil MDK启动文件分析基于LPC2100系列其实都是相通的.docx》由会员分享,可在线阅读,更多相关《keil MDK启动文件分析基于LPC2100系列其实都是相通的.docx(20页珍藏版)》请在冰点文库上搜索。
keilMDK启动文件分析基于LPC2100系列其实都是相通的
keilMDK启动文件分析---基于LPC2100系列(其实都是相通的)
分类:
keilMDK2010-08-2719:
172642人阅读评论(41)收藏举报
转用MDK有一段时间了,越来越觉得MDK的强大,因为我之前都是用ADS1.2开发产品,所以更能体会到MDK的强大与易用性。
MDK编译出来的代码与ADS1.2相比,代码量减少了很多,我的一个工程用ADS1.2编译为25.4KB(都是bin格式),但用MDK编译出来仅有19.5KB(采用默认优化级别,即L2优化级别)。
根据我个人的经验,使用一个新的编译器,难点往往有三个,一个是建立一个新的工程,以及工程项目的配置;二是启动代码的编写;三是如何下载和单步调试。
今天重点写一下MDK的启动代码。
使用MDK版本为V4.01。
MDK编译器所追求的是要让arm处理器像单片机那样简单使用,所以每个厂家的各种ARM,MDK都会有一个自带的启动代码,值得提出的是,这个启动代码可以用图形化界面来配置,这对刚入门的人来说绝对是一条捷径。
下面看一下MDK的启动代码以及图形化界面。
1.新建一个工程
单击Project->New...->µVisionProject菜单项,µVision4将打开一个标准对话框,输入希望新建工程的名字即可创建一个新的工程,建议对每个新建工程使用独立的文件夹。
2.选择设备
在创建一个新的工程时,µVision要求为这个工程选择一款CPU。
选择设备对话框显示了µVision的设备数据库,只需要选择用户所需的微控制器即可。
例如,选择PhilipsLPC2114微控制器,这个选择设置了LPC2114设备的必要工具选项、简化了工具的配置。
当创建一个新的工程时,µVision会自动为所选择的CPU添加合适的启动代码。
如下图,点击确定即可复制LPC2100的启动代码。
启动代码的正文如下所示:
启动代码的图形配置界面:
µVision4的配置向导通过菜单的方式对汇编程序、C程序或调试初始化文件进行配置。
在配置文件中,对应这些配置菜单的是控制项(和html中的标签相似),它们嵌入在配置文件的注释中。
下面对启动代码做详细注释:
;/*****************************************************************************/
;/*STARTUP.S:
StartupfileforPhilipsLPC2000 */
;/*****************************************************************************/
;/*<<
;/*****************************************************************************/
;/*ThisfileispartoftheuVision/ARMdevelopmenttools. */
;/*Copyright(c)2005-2007KeilSoftware.Allrightsreserved. */
;/*Thissoftwaremayonlybeusedunderthetermsofavalid,current, */
;/*enduserlicencefromKEILforacompatibleversionofKEILsoftware */
;/*developmenttools.Nothingelsegivesyoutherighttousethissoftware.*/
;/*****************************************************************************/
这段是一些说明,无非说些版权,时间信息等,注意红色标注出的语句必须在前100行文本中声明如下语句,这样编辑器将以配置向导视图的形式打开配置文件。
;StandarddefinitionsofModebitsandInterrupt(I&F)flagsinPSRs
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
这段代码用于定义一些模式,以及定义中断屏蔽位。
;//
;//
8>
;//
8>
;//
8>
;//
8>
;//
8>
;//
8>
;//
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 STACK,NOINIT,READWRITE,ALIGN=3
Stack_Mem SPACE USR_Stack_Size
__initial_sp SPACE ISR_Stack_Size
Stack_Top
这一段配置堆栈空间,注意红色部分可以生成图形化的界面,
表示以下选项在一个组中,直到遇到,表示Heading标题标题结束。
User/SystemMode<0x0-0xFFFFFFFF:
8>--表示用户模式下堆栈范围为0~0xFFFFFFFF之间,数字“8”表示每次递增或递减的步长为8.
上面代码生成的图形化配置界面如下图:
若将上图的interrupt Mode的值该为0x00000100,则启动代码的“IRQ_Stack_Size EQU 0x00000080”自动变为“IRQ_Stack_Size EQU 0x00000100”
;//
;//
;//
Heap_Size EQU 0x00000000
AREA HEAP,NOINIT,READWRITE,ALIGN=3
__heap_base
Heap_Mem SPACE Heap_Size
__heap_limit
配置堆的大小,情况与配置堆栈十分相识。
;//
;//PeripheralBusClockRate
;//
VPBClock
;// <0=>VPBClock=CPUClock/4
;// <1=>VPBClock=CPUClock
;// <2=>VPBClock=CPUClock/2
;//
XCLKPin
;// <0=>XCLKPin=CPUClock/4
;// <1=>XCLKPin=CPUClock
;// <2=>XCLKPin=CPUClock/2
;//
VPBDIV_SETUP EQU 1
VPBDIV_Val EQU 0x00000000
;PhaseLockedLoop(PLL)definitions
PLL_BASE EQU 0xE01FC080 ;PLLBaseAddress
PLLCON_OFS EQU 0x00 ;PLLControlOffset
PLLCFG_OFS EQU 0x04 ;PLLConfigurationOffset
PLLSTAT_OFS EQU 0x08 ;PLLStatusOffset
PLLFEED_OFS EQU 0x0C ;PLLFeedOffset
PLLCON_PLLE EQU (1<<0) ;PLLEnable
PLLCON_PLLC EQU (1<<1) ;PLLConnect
PLLCFG_MSEL EQU (0x1F<<0) ;PLLMultiplier
PLLCFG_PSEL EQU (0x03<<5) ;PLLDivider
PLLSTAT_PLOCK EQU (1<<10) ;PLLLockStatus
配置VPBDIV
表示以下选项在一个组中,选项可通过Checkbox使能
上面代码生成的图形化配置界面如下图:
;//
;//
PLLMultiplierSelection
;// <1-32><#-1>
;// MValue
;//
PLLDividerSelection
;// <0=>1 <1=>2 <2=>4 <3=>8
;// PValue
;//
PLL_SETUP EQU 1
PLLCFG_Val EQU 0x00000023
配置PLL。
情况与配置VPBDIV十分相似。
;MemoryAcceleratorModule(MAM)definitions
MAM_BASE EQU 0xE01FC000 ;MAMBaseAddress
MAMCR_OFS EQU 0x00 ;MAMControlOffset
MAMTIM_OFS EQU 0x04 ;MAMTimingOffset
;//
;//
;// <0=>Disabled
;// <1=>PartiallyEnabled
;// <2=>FullyEnabled
;// Mode
;//
;// <0=>Reserved <1=>1 <2=>2 <3=>3
;// <4=>4 <5=>5 <6=>6 <7=>7
;// FetchCycles
;//
MAM_SETUP EQU 1
MAMCR_Val EQU 0x00000002
MAMTIM_Val EQU 0x00000004
配置存储器加速模块,情况与配置VPBDIV十分相似。
;ExternalMemoryController(EMC)definitions
EMC_BASE EQU 0xFFE00000 ;EMCBaseAddress
BCFG0_OFS EQU 0x00 ;BCFG0Offset
BCFG1_OFS EQU 0x04 ;BCFG1Offset
BCFG2_OFS EQU 0x08 ;BCFG2Offset
BCFG3_OFS EQU 0x0C ;BCFG3Offset
;//
EMC_SETUP EQU 0
;//
;//
IdleCycles<0-15>
;//
WaitStates1<0-31>
;//
WaitStates2<0-31>
;//
ReadByteLaneEnable
;//
WriteProtect
;//
BurstROM
;//
MemoryWidth <0=> 8-bit <1=>16-bit
;// <2=>32-bit <3=>Reserved
;//
BCFG0_SETUPEQU 0
BCFG0_Val EQU 0x0000FBEF
;//
;//
IdleCycles<0-15>
;//
WaitStates1<0-31>
;//
WaitStates2<0-31>
;//
ReadByteLaneEnable
;//
WriteProtect
;//
BurstROM
;//
MemoryWidth <0=> 8-bit <1=>16-bit
;// <2=>32-bit <3=>Reserved
;//
BCFG1_SETUPEQU 0
BCFG1_Val EQU 0x0000FBEF
;//
;//
IdleCycles<0-15>
;//
WaitStates1<0-31>
;//
WaitStates2<0-31>
;//
ReadByteLaneEnable
;//
WriteProtect
;//
BurstROM
;//
MemoryWidth <0=> 8-bit <1=>16-bit
;// <2=>32-bit <3=>Reserved
;//
BCFG2_SETUPEQU 0
BCFG2_Val EQU 0x0000FBEF
;//
;//
IdleCycles<0-15>
;//
WaitStates1<0-31>
;//
WaitStates2<0-31>
;//
ReadByteLaneEnable
;//
WriteProtect
;//
BurstROM
;//
MemoryWidth <0=> 8-bit <1=>16-bit
;// <2=>32-bit <3=>Reserved
;//
BCFG3_SETUPEQU 0
BCFG3_Val EQU 0x0000FBEF
;//EndofEMC
配置外部存储器,情况和配置VPBDIV类似。
;ExternalMemoryPinsdefinitions
PINSEL2 EQU 0xE002C014 ;PINSEL2Address
PINSEL2_Val EQU 0x0E6149E4 ;CS0..3,OE,WE,BLS0..3,
;D0..31,A2..23,JTAGPins
定义外部存储器引脚。
PRESERVE8
;AreaDefinitionandEntryPoint
; StartupCodemustbelinkedfirstatAddressatwhichitexpectstorun.
AREA RESET,CODE,READONLY
ARM ;声明使用ARM模式
默认连接下,启动代码必须放在RESET段内
;ExceptionVectors
; MappedtoAddress0.
; Absoluteaddressingmodemustbeused.
; DummyHandlersareimplementedasinfiniteloopswhichcanbemodified.
Vectors LDR PC,Reset_Addr ;定义异常向量-复位
LDR PC,Undef_Addr ;未定义指令
LDR PC,SWI_Addr ;软件中中断
LDR PC,PAbt_Addr ;预取指中止
LDR PC,DAbt_Addr ;数据中止
NOP ;ReservedVector保留
; LDR PC,IRQ_Addr ;IRQ中断,用下面的语句代替本句,这样能更快的进入中断
LDR PC,[PC,#-0x0FF0] ;从VicVectAddr寄存器读取中断向量地址. 当CPU执行这条指令还没有跳转时,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- keil MDK启动文件分析基于LPC2100系列其实都是相通的 MDK 启动 文件 分析 基于 LPC2100 系列 其实 都是 相通