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

📄 boot_ads.s.svn-base

📁 Spearhead2000 的 USB驱动程序
💻 SVN-BASE
字号:
; ****************************************************************************; * This confidential and proprietary software may be used only as authorized*; * by a licensing agreement from STMicroelectronics.                        *; * In the event of publication, the following notice is applicable:         *; *                                                                          *; *                   (C) COPYRIGHT 2004 STMicroelectronics                  *; *                Innovative Systems Design Group - Central R&D             *; *                            ALL RIGHTS RESERVED                           *; *                                                                          *; * The entire notice above must be reproduced on all authorized copies.     *; *                                                                          *; * -- File:                  boot_ads.s                                     *; * -- Author:                Christian Gazzina  <christian.gazzina@st.com>  *; * -- Description:           Routine di Boot di PRICe			     * ; *                           Versione utilizzante il 'runtime' ADS          *; *                           (chiamata a __main)                            *; *                           (abilitazione delle dtcm fin dall'inizio)      *; *                                                                          *; * -- Modification History: - 1.1 (09/08/2004)                              *; ****************************************************************************; $Id: boot_ads.s,v 1.1 2005/05/26 15:51:47 sp_head Exp $; $Log: boot_ads.s,v $; Revision 1.1  2005/05/26 15:51:47  sp_head; user NI;; Revision 1.1.1.2  2004/12/03 15:34:24  spear; First import from CRD;; Revision 1.1.1.1  2004/12/02 11:07:22  spear; First import from CRD;; ;  Revision: 1.2 Tue Nov 23 10:14:57 2004 gazzina;  *** empty comment string ***; ;  Revision: 1.1 Mon Sep 13 21:32:56 2004 gazzina;  freeze pre-AFE 	INCLUDE arm.equ	INCLUDE mmu946T.s	INCLUDE MPU_TABLE.equ	        AREA    Boot, CODE, READONLY                ; Impostazione degli Stack Pointer; First...trials....Stack_Limit       EQU   0x02004000 ; 12 KB USR_Stack         EQU   Stack_LimitIRQ_Stack         EQU   Stack_Limit - 0x200SVC_Stack	  EQU   IRQ_Stack   - 0x200;Entry point        ENTRY; *****************; Exception Vectors; *****************        LDR     PC, Reset_Addr        LDR     PC, Undefined_Addr        LDR     PC, SWI_Addr        LDR     PC, Prefetch_Addr        LDR     PC, Abort_Addr        NOP                             ; Reserved vector        LDR     PC, IRQ_Addr        LDR     PC, FIQ_Addr                IMPORT  p_nIRQ_ISR              ; In code.c        Reset_Addr      DCD     Start_BootUndefined_Addr  DCD     Undefined_HandlerSWI_Addr        DCD     SWI_HandlerPrefetch_Addr   DCD     Prefetch_HandlerAbort_Addr      DCD     Abort_Handler                DCD     0               ; Reserved vectorIRQ_Addr        DCD     p_nIRQ_ISRFIQ_Addr        DCD     FIQ_Handler; ************************; Interrupt per ora; Disabilitati; ************************Undefined_Handler        B       ErrorSWI_Handler  	; SWI switches to SVC mode, with no IRQs (ARM Architecture Reference)	STMFD	sp!, {r0-r1}	LDR	r0, [lr, #-4]		; Read SWI instruction	BIC	r0, r0, #0xFF000000	; extract the SWI number	LDR	r1, =SWI_Angel	CMP	r0, r1	LDMFD	sp!, {r0-r1}		; restore register	BNE     uHALil_ExitSWI          ; Unknown SWI	CMP     r0, #angel_SWIreason_EnterSVC	BEQ     uHALir_SWIEnterOS       ; return in SVC mode	uHALil_ExitSWI	MOV	r0, #0			; Pretend it was all okay	MOVS	pc, lr			; just ignore SWI      ; MOVS pc.. will return the Thumb state if called      ;           from that stateuHALir_SWIEnterOS        STMFD   sp!, {r0}        MRS     r0, SPSR                ; Get spsr        TST     r0, #PSR_T_bit          ; Occurred in Thumb state?        ORRNE   r0, r0, #0x13           ; Put into SVC mode        MSRNE   SPSR_cxsf, r0           ; Save SPSR        LDMFD   sp!, {r0}               ; restore register        MOVNES  pc, lr        MOV     pc, lr	   Prefetch_Handler        B       ErrorAbort_Handler        B       ErrorFIQ_Handler        B       Error	Error	B	ErrorStart_Boot	        EXPORT Start_Boot;------------------------------------------------------------------------------; DTCM ENABLE;------------------------------------------------------------------------------        ; Set-Up Region Register        ; Preserve Misterius SBZ Bit...        RD_DTCM_REGION_REGISTER r4        AND     r4,r4,#0x00000001        LDR     r5, =CP9_DTCM_MAPPING        ORR     r4,r4,r5        WR_DTCM_REGION_REGISTER r4        ; Enable DTCM !        ENABLE_DTCM             r4	        ; Read the DTCM size (debug!!!)        MRC p15, 0, r4, c0, c0, 2;------------------------------------------------------------------------------; INIT STACK POINTERS;------------------------------------------------------------------------------	;Enter IRQ Mode and set up its stack	MOV R0, #MODE_IRQ_32:OR:DISABLE_IRQ:OR:DISABLE_FIQ; 	MSR CPSR_c, R0                      ;Enter IRQ Mode	LDR sp, =IRQ_Stack                  ;Setup IRQ stack pointer	;Enter SVC Mode and set up its stack	MOV R0, #MODE_SVC_32:OR:DISABLE_IRQ:OR:DISABLE_FIQ; 	MSR CPSR_c, R0                      ;Enter SVC Mode	LDR sp, =SVC_Stack                  ;Setup SVC stack pointer	;------------------------------------------------------------------------------; INIT SYSTEM RAM;------------------------------------------------------------------------------	;Enter USER Mode and set up its stack. IRQ Enabled 	MOV R0, #MODE_USR_32:OR:DISABLE_FIQ; 	MSR CPSR_c, R0                      ;Enter USER Mode	LDR sp, =USR_Stack                  ;Setup USER stack pointer        IMPORT  __main         B       __main; If above subroutine ever returns, just sit in an endless loophere    B       here        END

⌨️ 快捷键说明

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