Chinaunix首页 | 论坛 | 博客
  • 博客访问: 330273
  • 博文数量: 47
  • 博客积分: 834
  • 博客等级: 军士长
  • 技术积分: 695
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-07 09:38
文章分类
文章存档

2018年(1)

2015年(1)

2014年(2)

2013年(2)

2012年(23)

2011年(18)

分类: 嵌入式

2011-12-08 18:10:14

;***************************************************************************************
;* 本文件中用到的常量定义
;***************************************************************************************

SP_USR          EQU      0x30700000;0x0400fff0;       ; USR模式下的堆栈首指针
SP_SYS          EQU      0x30701000;0x0400fef0;       ; SYS模式下的堆栈首指针
SP_SVC          EQU      0x30702000;0x0400fdf0;       ; SVC模式下的堆栈首指针
SP_IRQ          EQU      0x30703000;0x0400fcf0;       ; IRQ模式下的堆栈首指针
SP_FIQ          EQU      0x30704000;0x0400fbf0;       ; FIQ模式下的堆栈首指针
SP_UND          EQU      0x30705000;0x0400faf0;       ; UND模式下的堆栈首指针
SP_ABT          EQU      0x30706000;0x0400f9f0;       ; ABT模式下的堆栈首指针

PMU_PLTR        EQU      0x10001000       ; PLL的稳定过渡时间
PMU_PMCR        EQU      0x10001004       ; 系统主时钟PLL的控制寄存器
PMU_PUCR        EQU      0x10001008       ; USB时钟PLL的控制寄存器
PMU_PCSR        EQU      0x1000100C       ; 内部模块时钟源供给的控制寄存器
PMU_PDSLOW      EQU      0x10001010       ; SLOW状态下时钟的分频因子
PMU_PMDR        EQU      0x10001014       ; 芯片工作模式寄存器
PMU_RCTR        EQU      0x10001018       ; Reset控制寄存器
PMU_CLRWAKUP    EQU      0x1000101C       ; WakeUp清除寄存器

EMI_CSACONF     EQU      0x11000000       ; CSA参数配置寄存器
EMI_CSECONF     EQU      0x11000010       ; CSE参数配置寄存器
EMI_CSFCONF     EQU      0x11000014       ; CSF参数配置寄存器
EMI_SDCONF1     EQU      0x11000018       ; SDRAM时序配置寄存器1
EMI_SDCONF2     EQU      0x1100001C       ; SDRAM时序配置寄存器2, SDRAM初始化用到的配置信息
EMI_REMAPCONF   EQU      0x11000020       ; 片选空间及地址映射REMAP配置寄存器

    AREA BOOT, CODE, READONLY                                                     
    ENTRY                                 标记的第一条指令的执行 
 
  EXPORT RST_DO


RST_DO

;*************************************************************************************
;* 分别切换到IRQ,FIQ,ABT,UND,SYS模式
;* 并初始化各种模式下的堆栈首指针,最后返回SVC模式。 到此步,完成环境的建立。
;*************************************************************************************
    ldr sp, =SP_SVC   ;init sp_svc
    mov R4, #0xD2 ;chmod to irq and init sp_irq
    msr cpsr_cf, R4   
    ldr sp, =SP_IRQ
    mov R4, #0XD1 ;chmod to fiq and init sp_fiq
    msr cpsr_cf, R4   
    ldr sp, =SP_FIQ  
    mov R4, #0XD7 ;chmod to abt and init sp_ABT
    msr cpsr_cf, R4   
    ldr sp, =SP_ABT 
    mov R4, #0XDB ;chmod to undf and init sp_UNDF
    msr cpsr_cf, R4   
    ldr sp, =SP_UND      ;chmod to abt and init sp_sys
    mov R4, #0xDF           ;all interrupts disabled      
    msr cpsr_cxsf, R4       ;SYSTEM mode, @32-bit code mode     
    ldr sp, =SP_SYS  
    
    mov R4, #0XD3           ;chmod to svc modle, CPSR IRQ bit  is disable
    msr cpsr_c, R4


;***************************************************************************************
;init the PMU and get the memory space;
;关于功耗管理模块的实现机制在后续版本可能会作出调整, 使其层次化更加清晰,封装性更好
;***************************************************************************************
    ldr    r4,    =PMU_PCSR         ; 打开所有模块时钟
    ldr    r5,    =0x0001FFFF       ; 由低位到高位依次(一共11bit有效)表示:esram lcdc pmu dmac emi mac adc ssi uart2 uart1 uart0       
    str    r5,    [ r4 ] 

    ldr    r4,    =PMU_PMDR         ; 由SLOW模式进入NORMAL模式
    ldr    r5,    =0x00000001       ; 00:slow,01:normal,10:sleep,11:idle         
    str    r5,    [ r4 ] 
    
    ldr    r4,    =PMU_PLTR         ; 配置PLL稳定过度时间为保守值50us.
    ldr    r5,    =0x00FA00FA       ; 其实,低16bit reserved
    str    r5,    [ r4 ] 
    
 
    ldr    r4,    =PMU_PMCR         ; 配置系统时钟为80MHz       
    ldr    r5,    =0x0000400b       ; 400a -- 80M,400b -- 88M
    str    r5,    [ r4 ] 
    
    ;//PMU_PMCR寄存器第15位需要有从低到高的翻转,才能触发PLL的时钟配置
    ldr    r4,    =PMU_PMCR        
    ldr    r5,    =0x0000c00b               
    str    r5,    [ r4 ]
 
    
;***************************************************************************************
;* 初始化EMI EMI  :  External Memory Interface  外部存储器接口
;***************************************************************************************
    ldr    r4,    =EMI_CSACONF       ; CSA片选时序参数配置
    ldr    r5,    =0x08a6a6a1                 
    str    r5,    [ r4 ]     
 
    ldr    r4,    =EMI_CSECONF       ; CSE片选时序参数配置,最保守配置
    ldr    r5,    =0x8cfffff1                 
    str    r5,    [ r4 ]
 
    ldr    r4,    =EMI_SDCONF1     ; SDRAM参数配置1
    ldr    r5,    =0x1e104177                 
    str    r5,    [ r4 ] 

    ldr    r4,    =EMI_SDCONF2     ; SDRAM参数配置2
    ldr    r5,    =0x80001860                 
    str    r5,    [ r4 ]

    ldr    r4,    =EMI_REMAPCONF   ; 重映射cse到0地址,将零地址映射到SDRAM
    ldr    r5,    =0x0000000b                 
    str    r5,    [ r4 ]

;**************************************************************************************
;* 打开IRQ中断。CPSR寄存器第七位,置零表示打开IRQ中断
;**************************************************************************************

    mrs R4, cpsr
    bic R4, R4, #0x80   ; set bit7 to zero设置第7位为0
    msr cpsr_c, R4

;**************************************************************************************
;* 跳转到主函数 main()
;**************************************************************************************

    IMPORT __main
    b __main 
;**************************************************************************************

    END
                                          
阅读(1252) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:S3C2440a的.s启动代码详解

给主人留下些什么吧!~~