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

📄 crt.s

📁 Bacnet protocol stack for linux
💻 S
📖 第 1 页 / 共 2 页
字号:
    			mov   sp, r0								/* set stack pointer for IRQ mode  */
    			sub   r0, r0, #IRQ_STACK_SIZE				/* adjust r0 past IRQ stack  */
    			
    			msr   CPSR_c, #ARM_MODE_SVC|I_BIT|F_BIT 	/* switch to Supervisor Mode */
    			mov   sp, r0								/* set stack pointer for SVC mode  */
    			sub   r0, r0, #SVC_STACK_SIZE				/* adjust r0 past SVC stack  */
    			
    			msr   CPSR_c, #ARM_MODE_SYS|I_BIT|F_BIT 	/* switch to System Mode */
    			mov   sp, r0								/* set stack pointer for SYS mode  */
    														/* we now start execution in SYSTEM mode */
    														/* This is exactly like USER mode (same stack) */
    														/* but SYSTEM mode has more privileges */

				/* copy initialized variables .data section  (Copy from ROM to RAM) */
                ldr     R1, =_etext
                ldr     R2, =_data
                ldr     R3, =_edata
1:        		cmp     R2, R3
                ldrlo   R0, [R1], #4
                strlo   R0, [R2], #4
                blo     1b

				/* Clear uninitialized variables .bss section (Zero init)  */
                mov     R0, #0
                ldr     R1, =_bss_start
                ldr     R2, =_bss_end
2:				cmp     R1, R2
                strlo   R0, [R1], #4
                blo     2b

				/* Enter the C code  */
                b       main




/* ======================================================================== */
/* Function: 			AT91F_Irq_Handler	       			 				*/
/*																			*/
/* This IRQ_Handler supports nested interrupts (an IRQ interrupt can itself	*/
/* be interrupted).															*/
/*	                                               							*/
/* This handler re-enables interrupts and switches to "Supervisor" mode to  */
/* prevent any corruption to the link and IP registers.						*/
/*	                                               							*/
/* The Interrupt Vector Register (AIC_IVR) is read to determine the address */
/* of the required interrupt service routine. The ISR routine can be a 		*/
/* standard C function since this handler minds all the save/restore 		*/
/* protocols.																*/
/*																			*/
/*																			*/
/* Programmers:																*/
/*--------------------------------------------------------------------------*/
/*         ATMEL Microcontroller Software Support  -  ROUSSET  -            */
/*--------------------------------------------------------------------------*/
/* DISCLAIMER:  THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS  */
/* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED        */
/* WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND      */
/* NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR   */
/* ANY DIRECT, INDIRECT,    INCIDENTAL, SPECIAL, EXEMPLARY, OR              */
/* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT    LIMITED TO, PROCUREMENT     */
/* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,    OR PROFITS; OR    */
/* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF    LIABILITY, */
/* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING    NEGLIGENCE  */
/* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,        */
/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.                       */
/* File source          : Cstartup.s79                                      */
/* Object               : Generic CStartup to AT91SAM7S256                  */
/* 1.0 09/May/06 JPP    : Creation                                          */
/*                                                                          */ 
/*																			*/
/* Note: taken from Atmel web site (www.at91.com)                           */
/*		 Keil example project:  AT91SAM7S-Interrupt_SAM7S                   */
/* ======================================================================== */
AT91F_Irq_Handler:

/* Manage Exception Entry  				*/
/* Adjust and save LR_irq in IRQ stack  */
				sub			lr, lr, #4
				stmfd		sp!, {lr}

/* Save r0 and SPSR (need to be saved for nested interrupt)  */
				mrs			r14, SPSR
				stmfd		sp!, {r0,r14}

/* Write in the IVR to support Protect Mode  				*/
/* No effect in Normal Mode  								*/
/* De-assert the NIRQ and clear the source in Protect Mode  */
				ldr			r14, =AT91C_BASE_AIC
				ldr			r0 , [r14, #AIC_IVR]
				str			r14, [r14, #AIC_IVR]

/* Enable Interrupt and Switch in Supervisor Mode  */
				msr			CPSR_c, #ARM_MODE_SVC

/* Save scratch/used registers and LR in User Stack  */
				stmfd		sp!, { r1-r3, r12, r14}

/* Branch to the routine pointed by the AIC_IVR  */
				mov			r14, pc
				bx			r0

/* Manage Exception Exit  								  */
/* Restore scratch/used registers and LR from User Stack  */
				ldmia		sp!, { r1-r3, r12, r14}

/* Disable Interrupt and switch back in IRQ mode  */
				msr			CPSR_c, #I_BIT | ARM_MODE_IRQ

/* Mark the End of Interrupt on the AIC  */
				ldr			r14, =AT91C_BASE_AIC
				str			r14, [r14, #AIC_EOICR]

/* Restore SPSR_irq and r0 from IRQ stack  */
				ldmia		sp!, {r0,r14}
				msr			SPSR_cxsf, r14

/* Restore adjusted  LR_irq from IRQ stack directly in the PC  */
				ldmia		sp!, {pc}^



/* ======================================================================== */
/* Function: 			AT91F_Dabt_Handler	       			 				*/
/*																			*/
/* Entered on Data Abort exception.                    						*/
/* Enters blink routine  (3 blinks followed by a pause)                		*/
/* processor hangs in the blink loop forever								*/
/*																			*/
/* ======================================================================== */
AT91F_Dabt_Handler:			mov     R0, #3
							b 		blinker
							
										
/* ======================================================================== */
/* Function: 			AT91F_Pabt_Handler	       			 				*/
/*																			*/
/* Entered on Prefetch Abort exception.                						*/
/* Enters blink routine  (2 blinks followed by a pause)                		*/
/* processor hangs in the blink loop forever								*/
/*																			*/
/* ======================================================================== */
AT91F_Pabt_Handler:			mov     R0, #2
							b 		blinker			
							
										
/* ======================================================================== */
/* Function: 			AT91F_Undef_Handler	       			 				*/
/*																			*/
/* Entered on Undefined Instruction exception.         						*/
/* Enters blink routine  (1 blinks followed by a pause)                		*/
/* processor hangs in the blink loop forever								*/
/*																			*/
/* ======================================================================== */
AT91F_Undef_Handler:		mov     R0, #1
							b 		blinker			


AT91F_Default_FIQ_handler:	b	AT91F_Default_FIQ_handler

AT91F_Default_IRQ_handler:	b	AT91F_Default_IRQ_handler

AT91F_Spurious_handler:		b	AT91F_Spurious_handler
.end

⌨️ 快捷键说明

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