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

📄 viccontrol.s

📁 SmartARM2400系列开发板全套资料
💻 S
📖 第 1 页 / 共 2 页
字号:
        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
;/*********************************************************************************************************
;** Function name:           EnablevicIrq
;** Descriptions:            使能相应外设的中断
;** input parameters:        R0:         外设对应的中断通道号
;** output parameters:       none
;** Returned value:          1:          成功
;**                          0:          失败
;** Created by:              LinEnqiang
;** Created Date:            2008/04/30
;**-------------------------------------------------------------------------------------------------------
;** Modified by:
;** Modified date:
;**-------------------------------------------------------------------------------------------------------
;*********************************************************************************************************/

EnablevicIrq
        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                

;/*********************************************************************************************************
;** Function name:           DisablevicIrq
;** Descriptions:            禁止相应外设的中断
;** input parameters:        uiChannel:  外设对应的中断通道号
;** output parameters:       none
;** Returned value:          1:          成功
;**                          0:          失败
;** Created by:              LinEnqiang
;** Created Date:            2008/04/30
;**-------------------------------------------------------------------------------------------------------
;** Modified by:
;** Modified date:
;**-------------------------------------------------------------------------------------------------------
*********************************************************************************************************/

DisablevicIrq
        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
;/*********************************************************************************************************
;** Function name:           GetvicIrqStatus
;** Descriptions:            获取所选外设的中断通道号、优先级、中断服务函数地址及中断使能状态
;** input parameters:        R0:         外设对应的中断通道号
;** output parameters:       R2:         配置信息
;** Returned value:          1:          成功
;**                          0:          失败
;** Created by:              LinEnqiang
;** Created Date:            2008/04/30
;**-------------------------------------------------------------------------------------------------------
;** Modified by:
;** Modified date:
;**-------------------------------------------------------------------------------------------------------
;*********************************************************************************************************/

GetvicIrqStatus
        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        
;/*********************************************************************************************************
;** Function name:           SetvicFiq
;** Descriptions:            设置并使能所选中断通道号为FIQ中断
;** input parameters:        R0:        外设对应的中断通道号
;** output parameters:       none
;** Returned value:          1:          成功
;**                          0:          失败
;** Created by:              LinEnqiang
;** Created Date:            2008/04/30
;**-------------------------------------------------------------------------------------------------------
;** Modified by:
;** Modified date:
;**-------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
SetvicFiq
       	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
;/*********************************************************************************************************
;** Function name:           ClrvicFiq
;** Descriptions:            清除所选中断通道号的FIQ中断
;** input parameters:        R0:         外设对应的中断通道号
;** output parameters:       none
;** Returned value:          1:          成功
;**                          0:          失败;
;** Created by:              LinEnqiang
;** Created Date:            2008/04/30
;**-------------------------------------------------------------------------------------------------------
;** Modified by:
;** Modified date:
;**-------------------------------------------------------------------------------------------------------
*********************************************************************************************************/

ClrvicFiq
		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            
                 
    END
;/********************************************************************************************************
;**                            End Of File
;********************************************************************************************************/

⌨️ 快捷键说明

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