keil MDK启动文件分析基于LPC2100系列其实都是相通的.docx

上传人:b****8 文档编号:11258589 上传时间:2023-02-26 格式:DOCX 页数:20 大小:26.65KB
下载 相关 举报
keil MDK启动文件分析基于LPC2100系列其实都是相通的.docx_第1页
第1页 / 共20页
keil MDK启动文件分析基于LPC2100系列其实都是相通的.docx_第2页
第2页 / 共20页
keil MDK启动文件分析基于LPC2100系列其实都是相通的.docx_第3页
第3页 / 共20页
keil MDK启动文件分析基于LPC2100系列其实都是相通的.docx_第4页
第4页 / 共20页
keil MDK启动文件分析基于LPC2100系列其实都是相通的.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

keil MDK启动文件分析基于LPC2100系列其实都是相通的.docx

《keil MDK启动文件分析基于LPC2100系列其实都是相通的.docx》由会员分享,可在线阅读,更多相关《keil MDK启动文件分析基于LPC2100系列其实都是相通的.docx(20页珍藏版)》请在冰豆网上搜索。

keil MDK启动文件分析基于LPC2100系列其实都是相通的.docx

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

这段代码用于定义一些模式,以及定义中断屏蔽位。

 

;//StackConfiguration(StackSizesinBytes)

;//  UndefinedMode     <0x0-0xFFFFFFFF:

8>

;//  SupervisorMode    <0x0-0xFFFFFFFF:

8>

;//  AbortMode         <0x0-0xFFFFFFFF:

8>

;//  FastInterruptMode<0x0-0xFFFFFFFF:

8>

;//  InterruptMode     <0x0-0xFFFFFFFF:

8>

;//  User/SystemMode   <0x0-0xFFFFFFFF:

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标题:

表示以下选项在一个组中,直到遇到,表示Heading标题标题结束。

(x=1,2,3...)--表示可以指定一个值的范围

 User/SystemMode<0x0-0xFFFFFFFF:

8>--表示用户模式下堆栈范围为0~0xFFFFFFFF之间,数字“8”表示每次递增或递减的步长为8.

上面代码生成的图形化配置界面如下图:

 

 

若将上图的interrupt Mode的值该为0x00000100,则启动代码的“IRQ_Stack_Size EQU    0x00000080”自动变为“IRQ_Stack_Size EQU    0x00000100”

 

;//HeapConfiguration

;//   HeapSize(inBytes)<0x0-0xFFFFFFFF>

;//

Heap_Size      EQU    0x00000000

               AREA   HEAP,NOINIT,READWRITE,ALIGN=3

__heap_base

Heap_Mem       SPACE  Heap_Size

__heap_limit

配置堆的大小,情况与配置堆栈十分相识。

 

;//VPBDIVSetup

;//PeripheralBusClockRate

;//    VPBDIV:

VPBClock

;//              <0=>VPBClock=CPUClock/4

;//              <1=>VPBClock=CPUClock

;//              <2=>VPBClock=CPUClock/2

;//    XCLKDIV:

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

--Heading且Enable标题:

表示以下选项在一个组中,选项可通过Checkbox使能

---修改数值的指定位

上面代码生成的图形化配置界面如下图:

 

 

;//PLLSetup

;//    MSEL:

PLLMultiplierSelection

;//              <1-32><#-1>

;//              MValue

;//    PSEL:

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

;//MAMSetup

;//    MAMControl

;//              <0=>Disabled

;//              <1=>PartiallyEnabled

;//              <2=>FullyEnabled

;//              Mode

;//    MAMTiming

;//              <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

;//ExternalMemoryController(EMC)

EMC_SETUP      EQU    0

;//  BankConfiguration0(BCFG0)

;//      IDCY:

IdleCycles<0-15>

;//      WST1:

WaitStates1<0-31>

;//    WST2:

WaitStates2<0-31>

;//        RBLE:

ReadByteLaneEnable

;//        WP:

WriteProtect

;//        BM:

BurstROM

;//    MW:

MemoryWidth <0=> 8-bit <1=>16-bit

;//                                  <2=>32-bit <3=>Reserved

;//  

BCFG0_SETUPEQU        0

BCFG0_Val  EQU        0x0000FBEF

;//  BankConfiguration1(BCFG1)

;//      IDCY:

IdleCycles<0-15>

;//      WST1:

WaitStates1<0-31>

;//    WST2:

WaitStates2<0-31>

;//        RBLE:

ReadByteLaneEnable

;//        WP:

WriteProtect

;//        BM:

BurstROM

;//    MW:

MemoryWidth <0=> 8-bit <1=>16-bit

;//                                  <2=>32-bit <3=>Reserved

;//  

BCFG1_SETUPEQU        0

BCFG1_Val  EQU        0x0000FBEF

;//  BankConfiguration2(BCFG2)

;//      IDCY:

IdleCycles<0-15>

;//      WST1:

WaitStates1<0-31>

;//    WST2:

WaitStates2<0-31>

;//        RBLE:

ReadByteLaneEnable

;//        WP:

WriteProtect

;//        BM:

BurstROM

;//    MW:

MemoryWidth <0=> 8-bit <1=>16-bit

;//                                  <2=>32-bit <3=>Reserved

;//  

BCFG2_SETUPEQU        0

BCFG2_Val  EQU        0x0000FBEF

;//  BankConfiguration3(BCFG3)

;//      IDCY:

IdleCycles<0-15>

;//      WST1:

WaitStates1<0-31>

;//    WST2:

WaitStates2<0-31>

;//        RBLE:

ReadByteLaneEnable

;//        WP:

WriteProtect

;//        BM:

BurstROM

;//    MW:

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执行这条指令还没有跳转时,

                                

展开阅读全文
相关搜索

当前位置:首页 > 初中教育 > 语文

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

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