44binit分析.docx

上传人:b****8 文档编号:10909077 上传时间:2023-02-23 格式:DOCX 页数:16 大小:18.41KB
下载 相关 举报
44binit分析.docx_第1页
第1页 / 共16页
44binit分析.docx_第2页
第2页 / 共16页
44binit分析.docx_第3页
第3页 / 共16页
44binit分析.docx_第4页
第4页 / 共16页
44binit分析.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

44binit分析.docx

《44binit分析.docx》由会员分享,可在线阅读,更多相关《44binit分析.docx(16页珍藏版)》请在冰豆网上搜索。

44binit分析.docx

44binit分析

;****************************************************************************

;Name:

44BINIT.S

                    *

;Modified:

                2004-4-2620:

26

                    *

;Description:

                    *

;Cstartupcodes

                       *

;Configurememory,InitializeISR,stacks

                    *

;   InitializeC-variables

                    *

;Fillzerosintozero-initializedC-variables

                    *

;****************************************************************************

    INCLUDEoption.inc

    INCLUDEmemcfg.inc

;****************************************************************************

;存储器空间

;GCS664M16bit(8MB)DRAM/SDRAM(0xc000000-0xc7fffff)

;APP    RAM=0xc000000~0xc7effff

;44BMONRAM=0xc7f0000-0xc7fffff

;STACK   =0xc7ffa00   

;****************************************************************************

;中断控制预定义

;INTCON0x01e00000             ;中断控制寄存器

INTPND    EQU0x01e00004      ;中断挂起寄存器

INTMOD    EQU0x01e00008      ;中断模式寄存器

INTMSK    EQU0x01e0000c      ;中断屏蔽寄存器

;IRQ中断向量模式寄存器

I_ISPR    EQU0x01e00020      ;IRQ中断服务挂起寄存器

I_CMST    EQU0x01e0001c      ;当前master寄存器的IRQ优先级

;****************************************************************************

;看门狗定时器预定义

WTCON    EQU0x01d30000

;****************************************************************************

;系统时钟预定义

PLLCON    EQU0x01d80000           ;复位值0x38080

CLKCON    EQU0x01d80004           ;初始值0x7ff8

;CLKSLOW  EQU0x01d80008             ;慢时钟控制寄存器   初始值  0x9

LOCKTIME    EQU0x01d8000c           ;锁定时间计数值寄存器  初始值0xfff

;****************************************************************************

;存储器控制预定义

REFRESH    EQU0x01c80024        ;dram/sdram刷新控制寄存器  初始值0xac0000

;****************************************************************************

;BDMA目的寄存器

BDIDES0     EQU0x1f80008        ;BDMA0当前目标地址寄存器初始值0x00000000

BDIDES1     EQU0x1f80028        ;BDMA1初始目标地址寄存器初始值0x00000000

;****************************************************************************

;预定义常数(常量)

USERMODE    EQU0x10

FIQMODE    EQU0x11

IRQMODE    EQU0x12

SVCMODE    EQU0x13

ABORTMODE   EQU0x17

UNDEFMODE   EQU0x1b

MODEMASK    EQU0x1f

NOINT    EQU0xc0

;****************************************************************************

;检查是否使用tasm.exe进行编译

    GBLL    THUMBCODE

    [{CONFIG}=16

THUMBCODESETL{TRUE}

    CODE32

    |   

THUMBCODESETL{FALSE}

    ]

    [THUMBCODE

    CODE32   ;forstart-upcodeforThumbmode

    ]

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;

    IMPORT  Main;Themainentryofmon

program

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Code

Begin;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    AREA    Init,CODE,READONLY

    ENTRY

ResetEntry

    bResetHandler;fordebug

    ldrpc,=0x0c000004;handlerUndef

    ldrpc,=0x0c000008;SWIinterrupthandler

    ldrpc,=0x0c00000c;handlerPAbort

    ldrpc,=0x0c000010;handlerDAbort

    b.

;handlerReserved

    ldrpc,=0x0c000018

    ldrpc,=0x0c00001c

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;

;复位中断处理函数

;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;

ResetHandler

    ldr    r0,=WTCON    ;禁止看门狗

    ldr    r1,=0x0 

    str    r1,[r0]

    ldr    r0,=INTMSK

    ldr    r1,=0x07ffffff  ;禁止所有中断

    str    r1,[r0]

   ;以下三段设置时钟控制寄存器

    ldrr0,=LOCKTIME

    ldrr1,=0xfff

    strr1,[r0]

    ldrr0,=PLLCON                ;锁相环倍

频设定

    ldrr1,=((M_DIV<<12)+(P_DIV<<4)+S_DIV);设定

系统主时钟频率

    strr1,[r0]

    ldr    r0,=CLKCON 

    ldr    r1,=0x7ff8    ;所有功能单元块时钟使能

    str    r1,[r0]

;****************************************************

;changeBDMACONresetvalueforBDMA                *

;****************************************************

;传输的数据类型是halfword  

    ldr     r0,=BDIDES0       

    ldr     r1,=0x40000000   ;BDIDESnresetvalueshouldbe0x40000000 

    str     r1,[r0]

    ldr     r0,=BDIDES1      

    ldr     r1,=0x40000000   ;BDIDESnresetvalueshouldbe0x40000000 

    str     r1,[r0]

    ;****************************************************

    ;设定存储器控制寄存器            * 

    ;****************************************************

adrr0,ResetHandler         ;把参照的地址ResetHandler装载到给

定寄存器r0中

ldrr1,=ResetHandler        ;装载=ResetHandler到内存

subr0,r1,r0 ;R0=R1-R0

ldrr1,=SMRDATA

subr0,r1,r0

ldmia   r0,{r1-r13}              ;同时装载多个寄存器到内存R0中持有

的值指定的内存地址在每次装载之后增加R0   r0!

->r1-r13

ldrr0,=0x01c80000;BWSCONAddress

stmia   r0,{r1-r13}          ;同时存储多个寄存器从内存R0中持有的值

指定的内存地址在每次存储之后增加R0    r1-r13->r0

    ;****************************************************

    ;修正内存大小              *

    ;****************************************************

    movr0,#0

    ldrr1,=0x0c000000

    ldrr2,=0x0c000200

    strr0,[r1]

    movr0,#-1

    strr0,[r2]

    ldrr0,[r1]

    cmpr0,#0

ldrner0,=0x01c8001c

ldrner1,=((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN8))

strner1,[r0]

strner1,[r0,#4]

    ;****************************************************

    ;初始化堆栈              *

    ;****************************************************

    ldr    sp,=SVCStack;复位后位SVC模式

    bl    InitStacks

    ;****************************************************

    ;拷贝并粘贴RWdata/zeroinitializeddata    *

    ;****************************************************

adrr0,     ResetEntry

ldrr1,BaseOfROM

cmpr0,r1

ldreq        r0,TopOfROM          ;如果相等

beqInitRamData           

;****************************************************

;计算拷贝程序在flash中的实际位置    *

;****************************************************

ldrr2,=CopyProcBeg

subr1,r2,r1    ;CopyProcBeg-BaseOfROM

addr0,r0,r1;(CopyProcBeg-BaseOfROM)+TopOfROM

ldrr3,=CopyProcEnd

;****************************************************

;将拷贝程序复制到ram中    *

;****************************************************

0

ldmiar0!

{r4-r7}      ;拷贝程序

stmiar2!

{r4-r7}

cmpr2,r3

bcc%B0

;********************************************************

;开始用ram中的拷贝程序复本将所有剩下的代码复制到ram中*

;********************************************************

ldrr3,TopOfROM

ldrpc,=CopyProcBeg

;********************************************************

;本段将代码由实际烧入的地址拷贝到ro-base所指定的位置*

;只拷贝CopyProcEnd以后的代码*

;********************************************************

CopyProcBeg

0

ldmiar0!

{r4-r11}

stmiar2!

{r4-r11}

cmpr2,r3

bcc%B0

CopyProcEnd

subr1,r2,r3

subr0,r0,r1

InitRamData

ldrr2,BaseOfBSS

ldrr3,BaseOfZero

0

cmpr2,r3

ldrccr1,[r0],#4

strccr1,[r2],#4

bcc%B0

movr0,#0

ldrr3,EndOfBSS

1

cmpr2,r3

strccr0,[r2],#4

bcc%B1

  

    [:

LNOT:

THUMBCODE

BLMain    ;从汇编进入C语言代码空间,不要使

用main()

B.

    ]

    [THUMBCODE    ;forstart-upcodeforThumbmode

orr     lr,pc,#1

bx      lr

CODE16

bl      Main    ;从汇编进入C语言代码空间,不要使用main()

b       .

CODE32

    ]

    

LTORG

;***********************************************

IMPORT|Image$$RO$$Base|;ROMcodestart

IMPORT|Image$$RO$$Limit|;RAMdatastartsafterROMprogram

IMPORT|Image$$RW$$Base|;Pre-initialisedvariables

IMPORT|Image$$ZI$$Base|;uninitialisedvariables

IMPORT|Image$$ZI$$Limit|;EndofvariableRAMspace

        BaseOfROMDCD|Image$$RO$$Base|

        TopOfROMDCD|Image$$RO$$Limit|

        BaseOfBSSDCD|Image$$RW$$Base|

        BaseOfZeroDCD|Image$$ZI$$Base|

        EndOfBSSDCD|Image$$ZI$$Limit|

EXPORTGetBaseOfROM

EXPORTGetEndOfROM

EXPORTGetBaseOfBSS

EXPORTGetBaseOfZero

EXPORTGetEndOfBSS

GetBaseOfROM

ldrr0,BaseOfROM

movpc,lr

GetEndOfROM

ldrr0,TopOfROM

movpc,lr

GetBaseOfBSS

ldrr0,BaseOfBSS

movpc,lr

GetBaseOfZero

ldrr0,BaseOfZero

movpc,lr

GetEndOfBSS

ldrr0,EndOfBSS

movpc,lr

;****************************************************

;*Thefunctionforinitializingstack

*

;****************************************************

InitStacks

;DonotuseDRAM,suchasstmfd,ldmfd......

;SVCstackisinitializedbefore

;Undertoolkitver2.50,'msrcpsr,r1'canbeusedinsteadof'msr

cpsr_cxsf,r1'

    mrs    r0,cpsr

    bic    r0,r0,#MODEMASK

    orr    r1,r0,#UNDEFMODE|NOINT

    msr    cpsr_cxsf,r1;UndefMode

    ldr    sp,=UndefStack

    orr    r1,r0,#ABORTMODE|NOINT

    msr    cpsr_cxsf,r1     ;AbortMode

    ldr    sp,=AbortStack

    orr    r1,r0,#IRQMODE|NOINT

    msr    cpsr_cxsf,r1     ;IRQMode

    ldr    sp,=IRQStack

    orr    r1,r0,#FIQMODE|NOINT

    msr    cpsr_cxsf,r1     ;FIQMode

    ldr    sp,=FIQStack

    bic    r0,r0,#MODEMASK|NOINT

    orr    r1,r0,#SVCMODE

    msr    cpsr_cxsf,r1     ;SVCMode

    ldr    sp,=SVCStack

;USERmodeisnotinitialized.

    mov    pc,lr;TheLRregistermaybenotvalidforthemodechanges.

    

    LTORG

SMRDATADATA

;*****************************************************************

;Memoryconfigurationhastobeoptimizedforbestperformance  *

;Thefollowingparameterisnotoptimized.                      *

;*****************************************************************

;***memoryaccesscycleparameterstrategy***

;1)EvenFP-DRAM,EDOsettinghasmorelatefetchpointbyhalf-clock

;2)Thememorysettings,here,aremadethesafeparametersevenat66Mhz.

;3)FP-DRAMParameters:

tRCD=3fortRAC,tcas=2forpaddelay,tcp=2forbus

load.

;4)DRAMrefreshrateisfor40Mhz.

;bank016bitBOOTROMSST39VF160/SST39VF320    ;yes

;bank18bitNandFlashK9F2808U0A/K9F5608U0A   ;no

;bank216bitUSB1.1PDIUSBD12   

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

当前位置:首页 > 表格模板 > 书信模板

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

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