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

📄 swix23232.s

📁 射频芯片nRF905例程
💻 S
字号:
;/*****************************************************************************/
;/* SWI.S: SWI Handler                                                        */
;/*****************************************************************************/
;/* This file is part of the uVision/ARM development tools.                   */
;/* Copyright (c) 2005-2006 Keil Software. All rights reserved.               */
;/* This software may only be used under the terms of a valid, current,       */
;/* end user licence from KEIL for a compatible version of KEIL software      */
;/* development tools. Nothing else gives you the right to use this software. */
;/*****************************************************************************/
T_Bit           EQU     0x20

                PRESERVE8                      ; 8-Byte aligned Stack
                AREA    SWI_Area, CODE, READONLY
                ARM

                EXPORT  SWI_Handler
SWI_Handler   
                MRS     R12, SPSR              ; Get SPSR
                TST     R12, #T_Bit            ; Check Thumb Bit
                LDRNEH  R12, [LR,#-2]          ; Thumb: Load Halfword
                BICNE   R12, R12, #0xFF00      ;        Extract SWI Number
                LDREQ   R12, [LR,#-4]          ; ARM:   Load Word
                BICEQ   R12, R12, #0xFF000000  ;        Extract SWI Number
                CMP     R12, #0;//SWI号判断,R12=0--SWI0,R12=1~7---SWI1~SWI7
                BNE     YYYY;//p+
				STMDB   SP,{SP}^  ;ARTX专用SWI0
				NOP
				LDMDB   SP,{R1}
				MRS     R12,SPSR
				STMDB   R1!,{R4-R7,R12,LR}
;				LDR     R4,=KKKK - 4
				LDR     R4,[PC,#0X00B0];?????
				LDR     R4,[R4]
				STR     R1,[R4,#0X0024]
				MOV     R4,R0
                ADR     R12, SWI_Table
				LDR     R12,[R12]
                MOV     LR, PC                 ; Return Address
                BX      R12                    ; Call SWI Function 
				LDR     LR,[R4,#0X24]
				LDRB    R0,[R4,#0X21]
				CMP     R0,#0
				BNE     XXXX
				LDMIA   R14!,{R4-R8,R12}
				MSR     SPSR_cxsf,R8
				STMDB   SP,{LR}
				LDMDB   SP,{SP}^
				NOP
				MOVS    PC,R12
XXXX	        ADD     R0,LR,#0X40
				LDMDB   R0,{R1-R3}
				MSR     SPSR_cxsf,R2
				STMDB   SP,{R0-R1}
				LDMDB   SP,{SP-LR}^
				NOP
				LDMIA   LR,{R0-R12}
				LDR     LR,[LR,#0X3C]
				MOVS    PC,LR
YYYY	   		STMDB   SP!,{R8,LR} ;SWI1~SWI7
				LDR     R8,[PC,#0X1C]
				CMP     R12,R8
				BCS     SWI_Dead
                ADR     R8, SWI_Table
                LDR     R12, [R8,R12,LSL #2]   ; Load SWI Function Address
                MOV     LR,PC
                BX      R12
                LDMIA   SP!,{R8,PC}^;执行SWI命令入口
;扩展SWI命令
SWI_Dead        B       SWI_Dead               ; None Existing SWI

SWI_Cnt         EQU    (SWI_End-SWI_Table)/4
SWI_Count       DCD     SWI_Cnt

                IMPORT  __SWI_0
                IMPORT  __SWI_1
                IMPORT  __SWI_2
                IMPORT  __SWI_3
                IMPORT  __SWI_4
                IMPORT  __SWI_5
                IMPORT  __SWI_6
                IMPORT  __SWI_7
                IMPORT  __SWI_8
SWI_Table
                DCD     __SWI_0                ; SWI 0 Function Entry
                DCD     __SWI_1                ; SWI 1 Function Entry
                DCD     __SWI_2                ; SWI 2 Function Entry
                DCD     __SWI_3                ; SWI 3 Function Entry
                DCD     __SWI_4                ; SWI 4 Function Entry
                DCD     __SWI_5                ; SWI 5 Function Entry
                DCD     __SWI_6                ; SWI 6 Function Entry
                DCD     __SWI_7                ; SWI 7 Function Entry
				DCD     __SWI_8
SWI_End
KKKK			   
                IMPORT	  os_runtask
                DCD       os_runtask;0x4000002C
                BX        PC
                NOP       
                B         0x00001C74
                LDR       R12,[PC]
                BX        R12
                ANDEQ     R1,R0,R13,ASR #23
                BX        PC
                NOP       
                B         0x00001ADC
                END

⌨️ 快捷键说明

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