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

📄 irq.s

📁 interrupt handler for at91rm92
💻 S
字号:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@                                                                   @
@                    Interrupt Handlers for ARM                     @
@                                                                   @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@ Author: 		Arthur Chang
@ Last Revision: 	4/30/2006		Initial Revision

   
    .equ	ARM_MODE_USR,		0x10
    .equ	ARM_MODE_FIQ,		0x11
    .equ	ARM_MODE_IRQ,		0x12
    .equ	ARM_MODE_SVC,		0x13
    .equ	ARM_MODE_ABT,		0x17
    .equ	ARM_MODE_UND,		0x1B
    .equ	ARM_MODE_SYS,		0x1F
    
    .equ	I_BIT,				0x80
    .equ	F_BIT,				0x40
    
	.equ	AIC_IVR,			0xfffff100
	.equ	AIC_EOICR,			0xfffff130
    
	.text
	.arm
	.align 0
	
	.global	IRQ_Handler
	
IRQ_Handler:

	SUB		PC,	 LR, #4				@Correct Prefetch
	STMFD	SP!, {R0-R12, LR}		@save the registers

	MRS		R4, SPSR				@save value of SPSR_IRQ

	LDR		R1, =AIC_IVR			@read AIC_IVR, clearing interrupt
	LDR		R0, [R1]

	@@@@@@@@@@@@@@@@@@@@@@@@@@@@ SYS MODE @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
	
	MOV		R4, #ARM_MODE_SYS
	MSR		CPSR_c, R4

	STMFD	SP!, {R12, LR}			@save the registers in SYS
	LDR		R1, =0xfffff108
	LDR		R2, [R1, R0, LSL #2]
	LDR		R2, =0xFFFFF0E4
	MOV		LR, PC
	BX		R2						@branch specific interrupt handler
	
	LDMFD	SP!, {R12, LR}			@restore register values
	
	@@@@@@@@@@@@@@@@@@@@@@@@@@@@ SYS MODE END @@@@@@@@@@@@@@@@@@@@@@@@@

	MOV		R7, #ARM_MODE_IRQ
	MSR		CPSR_c, R7				@change back to IRQ Mode
	MSR		SPSR_cf, R4				@restore value of SPSR_IRQ

	LDR		R1, =AIC_EOICR			@any value can be written to indicate
	STR		R0, [R1]				@  end of interrupt
	
	LDMFD	SP!, {R0-R12, PC}^		@restore registers in IRQ mode.
	
	.global IRQ_Enable

IRQ_Enable:
	
	MRS 	R0, CPSR				@Read in the CPSR value
	BIC 	R0, R0, #I_BIT			@clears the I_Bit, enabling interupt
	MSR 	CPSR_c, R0				@writes the value back
	BX		LR

⌨️ 快捷键说明

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