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

📄 71x_init.s

📁 ST ARM STR7系列在应用编程示例.采用串口下载.可供参考
💻 S
字号:
;******************** (C) COPYRIGHT 2004 STMicroelectronics ********************
;* File Name          : 71x_init.s
;* Author             : MCD Application Team
;* Date First Issued  : 05/16/2004
;* Description        : This is the first code executed after RESET.
;*                      This code used to initialize system stacks
;*                      and critical peripherals before entering the C code.
;*******************************************************************************
;* History:
;*  05/16/2003 : Created
;*  11/24/2004 : IAP Version 1.0
;********************************************************************************
; THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS WITH
; CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. AS A
; RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR
; CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT OF SUCH
; SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION CONTAINED HEREIN
; IN CONNECTION WITH THEIR PRODUCTS.
;********************************************************************************/

        PRESERVE8
        AREA    Init, CODE, READONLY


; --- Standard definitions of mode bits and interrupt (I & F) flags in PSRs

Mode_USR            EQU    0x10
Mode_FIQ            EQU    0x11
Mode_IRQ            EQU    0x12
Mode_SVC            EQU    0x13
Mode_ABT            EQU    0x17
Mode_UNDEF          EQU    0x1B
Mode_SYS            EQU    0x1F ; available on ARM Arch 4 and later

I_Bit               EQU    0x80 ; when I bit is set, IRQ is disabled
F_Bit               EQU    0x40 ; when F bit is set, FIQ is disabled


; --- System memory locations

RAM_Base            EQU    0x20000000
RAM_Limit           EQU    0x20010000
SRAM_Base           EQU    0x60000000
Stack_Base          EQU    RAM_Limit

SVC_Stack_Length    EQU    265
IRQ_Stack_Length    EQU    1024
USR_Stack_Length    EQU    1024
FIQ_Stack_Length    EQU    256
ABT_Stack_Length    EQU    256
UNDEF_Stack_Length  EQU    256


SVC_Stack           EQU    Stack_Base                 ; SVC stack
IRQ_Stack           EQU    SVC_Stack-SVC_Stack_Length ; followed by IRQ stack
USR_Stack           EQU    IRQ_Stack-IRQ_Stack_Length ; followed by USR stack
FIQ_Stack           EQU    USR_Stack-USR_Stack_Length ; followed by FIQ stack
ABT_Stack           EQU    FIQ_Stack-FIQ_Stack_Length ; followed by ABT stack
UNDEF_Stack         EQU    ABT_Stack-ABT_Stack_Length ; followed by UNDEF stack


GPIO1_Base_addr     EQU    0xE0004000; GPIO1 base address
PC0_off_addr        EQU    0x00      ; Port Configuration Register 0 offset
PC1_off_addr        EQU    0x04      ; Port Configuration Register 1 offset
PC2_off_addr        EQU    0x08      ; Port Configuration Register 2 offset
PD_off_addr         EQU    0x0C      ; Port Data Register offset


FlashProgram        EQU    0x40002000

        ENTRY

        EXPORT  Reset_Handler

Reset_Handler
        LDR     pc, =NextInst
NextInst
		NOP		; Wait for OSC stabilization
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP


; Stack definition
       MSR     CPSR_c, #Mode_ABT:OR:F_Bit:OR:I_Bit
       LDR     SP, =ABT_Stack

       MSR     CPSR_c, #Mode_UNDEF:OR:F_Bit:OR:I_Bit
       LDR     SP,= UNDEF_Stack

       MSR     CPSR_c, #Mode_SVC:OR:F_Bit:OR:I_Bit
       LDR     SP, =RAM_Limit

       MSR     CPSR_c, #Mode_FIQ:OR:I_Bit; Change to FIQ mode
       LDR     SP, =FIQ_Stack            ; Initialize FIQ stack pointer

       MSR     CPSR_c, #Mode_IRQ:OR:I_Bit; Change to IRQ mode
       LDR     SP, =IRQ_Stack            ; Initialize IRQ stack pointer

       MSR     CPSR_c, #Mode_USR  ; Change to User mode, Enable IRQ and FIQ
       LDR     SP, =USR_Stack     ; Initialize USR stack pointer

;      
; --- Test if SEL button is pushed (P1.8 Low) 
;
 
       LDR     r0, =GPIO1_Base_addr    ; configure P1.8 as Input TTL
       LDR     r1, =0x100
       STR     r1, [r0, #PC0_off_addr]
       LDR     r1, =0x0
       STR     r1, [r0, #PC1_off_addr]
       STR     r1, [r0, #PC2_off_addr]
       LDR     r1, [r0, #PD_off_addr]
       ANDS    r1, r1, #0x00000100
       BNE     NextSector                ; Branch to the user code  
              

     
       IMPORT  __main
       
; --- Now branches to a C lib function that copies RO data from their
;     load region to their execute region, create the RW and ZI regions
;     then jumps to user C main program.
       
       B       __main   ; Note : use B not BL, because an application will
                        ; never return this way
       
NextSector
       LDR    pc,=FlashProgram       
       LTORG
        
       END
;******************* (C) COPYRIGHT 2004 STMicroelectronics *****END OF FILE****

⌨️ 快捷键说明

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