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

📄 cstartup.s79

📁 ucosII 操作系统在at91sam7a3单片机上的实现。
💻 S79
字号:
;-----------------------------------------------------
;--函数名:Cstartup.S79
;--功  能:启动代码
;--公  司:深圳市百特电子
;--设  计:陈斌
;--时  间:2005.11.11
//-----------------------------------------------------
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
#include "AT91SAM7a3_inc.h"

RamEnd   	EQU		0x00204000
;-------------------------------------------------------------
		IMPORT  OS_CPU_IRQ_ISR


		PROGRAM	?RESET
		RSEG	INTRAMSTART_REMAP
		RSEG	INTRAMEND_REMAP

		RSEG	ICODE:CODE:ROOT(2)
		CODE32	; Always ARM mode after reset
		org	0

entry:
;-----------------------------------------------------------------------------
re_set
                B           InitReset           ;/* 0x00 Reset handler*/
undefvec
                B           undefvec            ;/* 0x04 Undefined Instruction */
swivec
                B           swivec              ;/* 0x08 Software Interrupt*/
pabtvec
                B           pabtvec             ;/* 0x0C Prefetch Abort*/
dabtvec
                B           dabtvec             ;/* 0x10 Data Abort*/
rsvdvec
                B           rsvdvec             ;/* 0x14 reserved*/
irqvec
		ldr 	    pc,=OS_CPU_IRQ_ISR
fiqvec               				;/* 0x1c FIQ*/
;------------------------------------------------------------------------------

FIQ_Handler_Entry

            mov         r9, r0
	    	ldr         r0, [r8, #AIC_FVR]
            msr         CPSR_c, #I_BIT | F_BIT | ARM_MODE_SVC

            stmfd       sp!, { r1-r3, r12, lr}

            mov         r14, pc
            bx          r0

            ldmia       sp!, { r1-r3, r12, lr}

            msr         CPSR_c, #I_BIT | F_BIT | ARM_MODE_FIQ

            mov         r0,r9

            subs        pc,lr,#4


InitReset
	ldr		r0,=0xFFFFFD08
	ldr     r1,=0xa5000001
	str		r1,[r0]
				
;------------------------------------------------------------------------------
            	EXTERN   AT91F_LowLevelInit

;define  __iramend 	SFB(INTRAMEND_REMAP)

            ldr     r13,=RamEnd            ; temporary stack in internal RAM*/
	    ldr	    r0,=AT91F_LowLevelInit
            mov     lr, pc
	    bx	    r0
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------

IRQ_STACK_SIZE  equ   (2*8*4)

ARM_MODE_USER           EQU     0x10
ARM_MODE_FIQ            EQU     0x11
ARM_MODE_IRQ            EQU     0x12
ARM_MODE_SVC            EQU     0x13
ARM_MODE_ABORT          EQU     0x17
ARM_MODE_UNDEF          EQU     0x1B
ARM_MODE_SYS            EQU     0x1F
I_BIT equ 0x80
F_BIT equ 0x40

;------------------------------------------------------------------------------
                ldr     r0, =RamEnd

                msr     CPSR_c, #ARM_MODE_FIQ | I_BIT | F_BIT

            	ldr     r8, =AT91C_BASE_AIC

                msr     CPSR_c, #ARM_MODE_IRQ | I_BIT | F_BIT
                mov     r13, r0                     ; Init stack IRQ*/
                sub     r0, r0, #IRQ_STACK_SIZE

                msr     CPSR_c, #ARM_MODE_SVC
                mov     r13, r0

;------------------------------------------------------------------------------
		EXTERN	__segment_init
		EXTERN	main

		ldr	r0,=__segment_init
                mov     lr, pc
		bx	r0

		PUBLIC	__main
jump_to_main:
		ldr	lr,=call_exit
		ldr	r0,=main
__main:
		bx	r0


;------------------------------------------------------------------------------

call_exit
End
            b       End
;------------------------------------------------------------------------------

IRQ_Handler_Entry

            sub         lr, lr, #4
            stmfd       sp!, {lr}

            stmfd       sp!, {r0}

            ldr         r14, =AT91C_BASE_AIC
            ldr         r0 , [r14, #AIC_IVR]
	    str         r14, [r14, #AIC_IVR]
	    msr         CPSR_c, #ARM_MODE_SVC

            stmfd       sp!, { r1-r3, r12, r14}

            mov         r14, pc
            bx          r0

            ldmia       sp!, { r1-r3, r12, r14}

            msr         CPSR_c, #I_BIT | ARM_MODE_IRQ


            ldr         r14, =AT91C_BASE_AIC
            str         r14, [r14, #AIC_EOICR]

;- Restore SPSR_irq and r0 from IRQ stack
            ldmia       sp!, {r0}

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

reinter		mov r2,#AT91C_ISRAM
			mov r3,#0
rein		ldr	r1,[r3]
			str r1,[r2]
			add r3,r3,#1
			cmp r3,#4
			bne rein
;-------------------------------------------------------------------------
		PUBLIC	AT91F_Default_FIQ_handler
		PUBLIC	AT91F_Default_IRQ_handler
		PUBLIC	AT91F_Spurious_handler

		CODE32	; Always ARM mode after exeption

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 + -