?? vic_control.s
字號:
;/****************************************Copyright (c)**************************************************
;** Guangzhou ZHIYUAN electronics Co.,LTD.
;**
;** http://www.embedtools.com
;**
;**--------------File Info-------------------------------------------------------------------------------
;** File name: VIC_Control.s
;** Last modified Date: 2007-06-12
;** Last Version: 1.0
;** Descriptions: Provide VIC_Control in prerogative mode
;**------------------------------------------------------------------------------------------------------
;** Created by: LinEnqiang
;** Created date: 2007-06-12
;** Version: 1.0
;** Descriptions: The original version
;**
;**------------------------------------------------------------------------------------------------------
;** Modified by:
;** Modified date:
;** Version:
;** Descriptions:
;********************************************************************************************************/
INCLUDE LPC23xx.INC ; Include the head file 引入頭文件
NoInt EQU 0x80
NoFIQ EQU 0x40
SVC32Mode EQU 0x13
SYS32Mode EQU 0x1f
IMPORT StackUsr
EXPORT RunFirst
EXPORT VICControl
CODE32
AREA |RUNFIRST|, CODE, READONLY
RunFirst
;---------------------------------------
;初始化VIC
;Initial VIC And Enable VIC Be Protected;
LDR R2, =VICIntEnClr
MVN R3, #0x00
STR R3, [R2]
LDR R2, =VICIntSelect
MOV R3, #0x00
STR R3, [R2]
LDR R0, =VICVectAddr0
MOV R1, #0
MOV R2, #0
MOV R3, #0
MOV R4, #0
MOV R5, #0
MOV R6, #0
MOV R7, #0
MOV R8, #0
STMIA R0!, {R1-R8}
STMIA R0!, {R1-R8}
STMIA R0!, {R1-R8}
STMIA R0!, {R1-R8}
LDR R0, =VICVectPri0
STMIA R0!, {R1-R8}
STMIA R0!, {R1-R8}
STMIA R0!, {R1-R8}
STMIA R0!, {R1-R8}
LDR R2, =VICVectAddr
STR R3, [R2]
LDR R2, =VICProtection
MOV R3, #0x01
STR R3, [R2]
MOV PC, LR
;-----------------------------------------------
VICControl
SUB R0, R0, #0x100
CMP R0, #7
LDRLO PC, [PC, R0, LSL #2]
MOVS PC, LR
SwiFunctionAdd
DCD SetVICIRQFunction ;0
DCD FreeVICIRQFunction ;1
DCD ReEnableIRQ ;2
DCD DisableIRQ ;3
DCD GetIRQStatus ;4
DCD EnableVICFIQ ;5
DCD DisableVICFIQ ;6
EnableVICFIQ
MSR CPSR_c, #(NoFIQ | NoInt| SVC32Mode)
CMP R1, #32 ;if (通道號 >=32) return FALSE;
MOVCS R0, #0
MOVCSS PC, LR
LDR R0, =VICVectAddr0 ;if (IRQ已加載) return FALSE;
LDR R3,[R0,R1,LSL #2]
CMP R3,#0
MOVNE R0, #0
MOVNES PC, LR
LDR R0, =VICIntSelect
LDR R3, [R0]
MOV R2, #1
MOV R2, R2, lsl R1
ORR R3, R3, R2
STR R3, [R0]
LDR R0, =VICIntEnable
STR R3, [R0]
MOV R0, #1
MOVS PC, LR
DisableVICFIQ
MSR CPSR_c, #(NoFIQ | NoInt| SVC32Mode)
CMP R1, #32 ;if (通道號 >=32) return FALSE;
MOVCS R0, #0
MOVCSS PC, LR
LDR R0, =VICIntSelect ;if(FIQ未使能)return FALSE
LDR R3, [R0]
MOV R2, #1
MOV R2, R2, LSL R1
ANDS R2, R3, R2
MOVEQ R0, #0
MOVEQS PC, LR
LDR R0, =VICIntEnClr
MOV R3, R2
STR R3, [R0] ;Disable FIQ
LDR R0, =VICIntSelect
LDR R3, [R0]
BIC R3, R3,R2
STR R3, [R0]
MOV R0, #1
MOVS PC, LR
ReEnableIRQ
CMP R1, #32 ;if (通道號 >=32) return FALSE;
MOVCS R0, #0
MOVCSS PC, LR
LDR R0, =VICVectAddr0 ;if (未加載) return FALSE;
LDR R3, [R0, R1, lsl #2]
CMP R3, #0
MOVEQ R0, #0
MOVEQS PC, LR
LDR R0, =VICIntEnable
MOV R2, #1
MOV R3, R2, lsl R1
STR R3, [R0]
MOV R0, #1
MOVS PC, LR
DisableIRQ
CMP R1, #32 ;if (通道號 >=32) return FALSE;
MOVCS R0, #0
MOVCSS PC, LR
LDR R0, =VICVectAddr0 ;if (未加載) return FALSE;
LDR R3, [R0, R1, lsl #2]
CMP R3, #0
MOVEQ R0, #0
MOVEQS PC, LR
LDR R0, =VICIntEnClr
MOV R2, #1
MOV R3, R2, lsl R1
STR R3, [R0]
MOV R0, #1
MOVS PC, LR
FreeVICIRQFunction
CMP R1, #32 ;if (通道號 >=32) return FALSE;
MOVCS R0, #0
MOVCSS PC, LR
LDR R0, =VICIntSelect ;if (FIQ) return FALSE;
MOV R3, #1
MOV R3, R3, LSL R1
LDR R2, [R0]
ANDS R2, R2, R3
MOVNE R0, #0
MOVNES PC, LR
LDR R0, =VICVectAddr0 ;if (IRQ was not Set) return FALSE;
LDR R2,[R0,R1,LSL #2]
CMP R2,#0
MOVEQ R0, #0
MOVEQS PC, LR
LDR R0, =VICIntEnClr ;Disable IRQ
STR R3, [R0]
LDR R0, =VICVectAddr0 ;Clear VICVectAddr0
MOV R3, #0
STR R3, [R0, R1, lsl #2]
MOV R0, #1
MOVS PC, LR
GetIRQStatus
CMP R1, #32 ;if (通道號 >=32) return FALSE;
MOVCS R0, #0
MOVCSS PC, LR
LDR R0, =VICVectAddr0 ;if (未加載) return FALSE;
LDR R3, [R0, R1, lsl #2]
CMP R3, #0
MOVEQ R0, #0
MOVEQS PC, LR
STMIA R2!, {R1} ;通道號
LDR R0, =VICVectPri0
LDR R0, [R0, R1, lsl #2]
STMIA R2!, {R0} ;優先級
STMIA R2!, {R3} ;處理函數地址
LDR R0, =VICIntEnable
MOV R3, #1
MOV R1, R3, lsl R1
LDR R3, [R0]
AND R3, R3, R1
CMP R3, #0
MOVHI R3, #1
STMIA R2!,{R3} ;IRQ使能與否的狀態
MOV R0, #1
MOVS PC, LR
SetVICIRQFunction
CMP R1, #32 ;if (通道號 >=32) return FALSE;
MOVCS R0, #0
MOVCSS PC, LR
CMP R2, #16 ;if (優先級 >=16) return FALSE;
MOVCS R0, #0
MOVCSS PC, LR
CMP R3, #0 ;if (處理函數 ==0) return FALSE;
MOVEQ R0, #0
MOVEQS PC, LR
MSR CPSR_c, #(NoFIQ | NoInt | SYS32Mode)
STMFD SP!, {R2, R3}
MOV R2, #1 ;if (Enable) return FALSE;
MOV R3, R2, lsl R1
LDR R0, =VICIntEnable
LDR R2, [R0]
ANDS R2, R2, R3
BNE SetVICIRQFunction_j
LDR R0, =VICVectAddr0 ;if (IRQ已經使能) return FALSE;
LDR R3, [R0, R1, lsl #2]
CMP R3, #0
SetVICIRQFunction_j
LDMFD SP!, {R2, R3}
MSR CPSR_c, #(NoFIQ | NoInt | SVC32Mode)
MOVNE R0, #0
MOVNES PC, LR
STR R3, [R0, R1, lsl #2]
LDR R0, =VICVectPri0
STR R2, [R0, R1, lsl #2]
LDR R0, =VICIntEnable
MOV R2, #1
MOV R3, R2, lsl R1
STR R3, [R0]
MOV R0, #1
MOVS PC, LR
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -