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

📄 viccontrol.s

📁 SmartARM2400系列开发板全套资料
💻 S
📖 第 1 页 / 共 2 页
字号:
;/****************************************Copyright (c)***************************************************
;**                         Guangzhou ZHIYUAN electronics Co.,LTD.                               
;**                                     
;**                               http://www.embedtools.com
;**
;**--------------File Info-------------------------------------------------------------------------------
;** File name: 			vicControl.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: 		LinEnqiang
;** Modified date:		2008-04-30
;** Version:			1.1
;** Descriptions:       统一于代码规范V1.2
;********************************************************************************************************/
                                 INCLUDE     LPC2400.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     

;/********************************************************************************************************
;** Function name:           RunFirst
;** Descriptions:            VIC管理初始化
;** input parameters:        none
;** output parameters:       none
;** Returned value:          none
;** Created by:              LinEnqiang
;** Created Date:            2008/04/30
;**-------------------------------------------------------------------------------------------------------
;** Modified by:
;** Modified date:
;**-------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
		
RunFirst			
		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
		BX      LR 
;/********************************************************************************************************
;** Function name:           vicControl
;** Descriptions:            软件中断,用于提供VIC管理服务
;** input parameters:        依功能而定
;** output parameters:       依功能而定
;** Returned value:          依功能而定
;** Created by:              LinEnqiang
;** Created Date:            2008/04/30
;**-------------------------------------------------------------------------------------------------------
;** Modified by:
;** Modified date:
;**-------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
vicControl 
        SUB     R0, R0, #0x100
        CMP     R0, #7
        LDRLO   PC, [PC, R0, LSL #2]
        MOVS    PC, LR
        
SwiFunctionAdd
        DCD     SetvicIrqFunc                                           ;  0
        DCD     ClrvicIrqFunc                                           ;  1
        DCD     EnablevicIrq                                            ;  2
        DCD     DisablevicIrq                                           ;  3
        DCD     GetvicIrqStatus                                         ;  4
        DCD     SetvicFiq                                               ;  5
        DCD     ClrvicFiq                                               ;  6 

;/*********************************************************************************************************
;** Function name:           SetvicIrqFunc
;** Descriptions:            设置所选外设的中断优先级、中断服务函数地址,并使能中断
;** input parameters:        R0:         外设对应的中断通道号
;**                          R1:         中断优先级
;**                          R2:         中断服务函数地址
;** output parameters:       none
;** Returned value:          1:          成功
;**                          0:          失败
;** Created by:              LinEnqiang
;** Created Date:            2008/04/30
;**-------------------------------------------------------------------------------------------------------
;** Modified by:
;** Modified date:
;**-------------------------------------------------------------------------------------------------------
;*********************************************************************************************************/

SetvicIrqFunc
        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     SetvicIrqFunc_j
        
        LDR     R0, =VICVectAddr0                                       ;  if (IRQ已经使能) return FALSE
        LDR     R3, [R0, R1, lsl #2]
        CMP     R3, #0         
SetvicIrqFunc_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   
;/*********************************************************************************************************
;** Function name:           ClrvicIrqFunc
;** Descriptions:            清除所选外设的IRQ资源
;** input parameters:        R0:        外设对应的中断通道号
;** output parameters:       none
;** Returned value:          1:         成功
;**                          0:         失败
;** Created by:              LinEnqiang
;** Created Date:            2008/04/30
;**-------------------------------------------------------------------------------------------------------
;** Modified by:
;** Modified date:
;**-------------------------------------------------------------------------------------------------------
;*********************************************************************************************************/

ClrvicIrqFunc
        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 wasnt Set) return FALSE

⌨️ 快捷键说明

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