⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 startup.s

📁 周立功ARM9 2410试验平台的uCOS-II基础实验代码
💻 S
📖 第 1 页 / 共 2 页
字号:
;/****************************************Copyright (c)**************************************************
;**                               Guangzhou ZHIYUAN electronics Co.,LTD.
;**                                     
;**                                 http://www.zyinside.com
;**
;**--------------File Info-------------------------------------------------------------------------------
;** File Name:          startup.s
;** Last modified Date: 2006-01-06 
;** Last Version:       v1.1
;** Descriptions:       S3C2410异常向量入口及异常向量与c语言代码的接口,包括初始化堆栈、初始化PLL的代码
;**
;**------------------------------------------------------------------------------------------------------
;** Created By:         黄绍斌
;** Created date:       2005-11-11
;** Version:            v1.0
;** Descriptions:       创建
;**
;**------------------------------------------------------------------------------------------------------
;** Modified by:        甘达
;** Modified date:      2006-01-06 
;** Version:            v1.1
;** Descriptions:       
;**
;**------------------------------------------------------------------------------------------------------
;** Modified by:      
;** Modified date:     
;** Version:           
;** Descriptions:      
;**
;********************************************************************************************************/
    IMPORT __use_no_semihosting_swi

; /* 定义堆栈的大小 */
; **** 用户可根据实际需要修改 ****
SVC_STACK_LEGTH     EQU         16
FIQ_STACK_LEGTH     EQU         16
IRQ_STACK_LEGTH     EQU         9*8
ABT_STACK_LEGTH     EQU         0
UND_STACK_LEGTH     EQU         0

; /*************************************************************************/
; /* CPSR寄存器的位域                                                      */
; /*************************************************************************/
; /*                                                                       */
; /* 31  30  29   28         7   6   5   4   3   2   1   0                 */
; /*+---+---+---+---+--ss--+---+---+---+---+---+---+---+---+               */
; /*| N | Z | C | V |      | I | F | T |     M4 ~ M0       |               */
; /*+---+---+---+---+--ss--+---+---+---+---+---+---+---+---+               */
; /*                                                                       */
; /* Processor Mode and Mask                                               */
; /*                                                                       */
; /*************************************************************************/
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    ; when I bit is set (1), IRQ is disabled
F_BIT           EQU     0x40    ; when F bit is set (1), FIQ is disabled


; 总线宽度控制定义(0表示8位,1表示16位,2表示32位)
DW8                 EQU         (0x0)
DW16                EQU         (0x1)
DW32                EQU         (0x2)
WAIT                EQU         (0x1<<2)
UBLB                EQU         (0x1<<3)

; **** 用户可根据实际需要修改 ****
B7_BWCON            EQU         (DW16|WAIT|UBLB) 
B6_BWCON            EQU         (DW32|UBLB)  
B5_BWCON            EQU         (DW16|WAIT|UBLB)  
B4_BWCON            EQU         (DW16|WAIT|UBLB)  
B3_BWCON            EQU         (DW16|WAIT|UBLB)  
B2_BWCON            EQU         (DW16|WAIT|UBLB)  
B1_BWCON            EQU         (DW16|WAIT|UBLB)  


; CPU时钟设置(PLLCON控制值)
; 50.00MHz (外部晶振为12MHz时)
MDIV_50             EQU     0x5C
PDIV_50             EQU     0x4
SDIV_50             EQU     0x2

; 200.00MHz (外部晶振为12MHz时) 
; 设置值为:m=100,p=6,s=0, MPLL=FCLK=12*100/6=200MHz
MDIV_200            EQU     0x5C
PDIV_200            EQU     0x4
SDIV_200            EQU     0x0     
MPLLCON_200         EQU     ((MDIV_200 << 12) | (PDIV_200 << 4) | (SDIV_200)) 

; 寄存器定义
;=================
; WATCH DOG TIMER
;=================
WTCON           EQU     0x53000000      ;Watch-dog timer mode
WTDAT           EQU     0x53000004      ;Watch-dog timer data
WTCNT           EQU     0x53000008      ;Eatch-dog timer count

;=================
; INTERRUPT
;=================
SRCPND          EQU     0x4a000000      ;Interrupt request status
INTMOD          EQU     0x4a000004      ;Interrupt mode control
INTMSK          EQU     0x4a000008      ;Interrupt mask control
PRIORITY        EQU     0x4a00000c      ;IRQ priority control  
INTPND          EQU     0x4a000010      ;Interrupt request status
INTOFFSET       EQU     0x4a000014      ;Interruot request source offset
SUSSRCPND       EQU     0x4a000018      ;Sub source pending
INTSUBMSK       EQU     0x4a00001c      ;Interrupt sub mask

;=================
; Memory control 
;=================
BWSCON          EQU     0x48000000     ;Bus width & wait status
BANKCON0        EQU     0x48000004     ;Boot ROM control
BANKCON1        EQU     0x48000008     ;BANK1 control
BANKCON2        EQU     0x4800000c     ;BANK2 cControl
BANKCON3        EQU     0x48000010     ;BANK3 control
BANKCON4        EQU     0x48000014     ;BANK4 control
BANKCON5        EQU     0x48000018     ;BANK5 control
BANKCON6        EQU     0x4800001c     ;BANK6 control
BANKCON7        EQU     0x48000020     ;BANK7 control
REFRESH         EQU     0x48000024     ;DRAM/SDRAM refresh
BANKSIZE        EQU     0x48000028     ;Flexible Bank Size
MRSRB6          EQU     0x4800002c     ;Mode register set for SDRAM
MRSRB7          EQU     0x48000030     ;Mode register set for SDRAM

;==========================
; CLOCK & POWER MANAGEMENT
;==========================
LOCKTIME        EQU     0x4c000000     ;PLL lock time counter
MPLLCON         EQU     0x4c000004     ;MPLL Control
UPLLCON         EQU     0x4c000008     ;UPLL Control
CLKCON          EQU     0x4c00000c     ;Clock generator control
CLKSLOW         EQU     0x4c000010     ;Slow clock control
CLKDIVN         EQU     0x4c000014     ;Clock divider control


; /************************************************************************/

; 引入的外部标号在这声明
        IMPORT  __main                          ;C语言主程序入口 
        IMPORT  SoftwareInterrupt
    

; 给外部使用的标号在这声明
        EXPORT  Reset
        EXPORT  VICVectAddr
        EXPORT  bottom_of_heap
        EXPORT  StackUsr

        EXPORT  __user_initial_stackheap    
    

; /************************************************************************/
        CODE32
        AREA    vectors,CODE,READONLY
; 异常向量表
Reset
        LDR     PC, ResetAddr
        LDR     PC, UndefinedAddr
        LDR     PC, SWI_Addr
        LDR     PC, PrefetchAddr
        LDR     PC, DataAbortAddr
        DCD     IRQ_Addr
        LDR     PC, IRQ_Addr
        LDR     PC, FIQ_Addr

ResetAddr           DCD     ResetInit
UndefinedAddr       DCD     Undefined
SWI_Addr            DCD     SoftwareInterrupt
PrefetchAddr        DCD     PrefetchAbort
DataAbortAddr       DCD     DataAbort
Nouse               DCD     0
IRQ_Addr            DCD     IRQ_Handler
FIQ_Addr            DCD     FIQ_Handler


; 未定义指令
Undefined
        B       Undefined

SwiFunction
        DCD     IRQDisable       ;0
        DCD     IRQEnable        ;1
        DCD     FIQDisable       ;2
        DCD     FIQEnable        ;3

IRQDisable
        ;关IRQ中断
        MRS     R0, SPSR
        ORR     R0, R0, #I_BIT
        MSR     SPSR_c, R0
        MOVS    PC, LR

IRQEnable
        ;开IRQ中断
        MRS     R0, SPSR
        BIC     R0, R0, #I_BIT
        MSR     SPSR_c, R0
        MOVS    PC, LR
        
FIQDisable
        ;关FIQ中断
        MRS     R0, SPSR
        ORR     R0, R0, #F_BIT
        MSR     SPSR_c, R0
        MOVS    PC, LR

FIQEnable
        ;开FIQ中断
        MRS     R0, SPSR
        BIC     R0, R0, #F_BIT
        MSR     SPSR_c, R0
        MOVS    PC, LR

        
; 取指中止
PrefetchAbort
        B       PrefetchAbort

; 取数据中止
DataAbort
        B       DataAbort
        
; IRQ中断
NoInt       EQU 0x80

USR32Mode   EQU 0x10
SVC32Mode   EQU 0x13
SYS32Mode   EQU 0x1f
IRQ32Mode   EQU 0x12
FIQ32Mode   EQU 0x11


;引入的外部标号在这声明
        IMPORT  OSIntCtxSw                      ;任务切换函数
        IMPORT  OSIntExit                       ;中断退出函数
        IMPORT  OSTCBCur
        IMPORT  OSTCBHighRdy
        IMPORT  OSIntNesting                    ;中断嵌套计数器
        IMPORT  OsEnterSum

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -