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

📄 os_cpu_a.s

📁 ucos2.85移植LPC2104的接口和原代码
💻 S
字号:
            IMPORT  OSRunning                    
            IMPORT  OSPrioCur
            IMPORT  OSPrioHighRdy
            IMPORT  OSTCBCur
            IMPORT  OSTCBHighRdy
            IMPORT  OSIntNesting
            IMPORT  OSIntExit
            IMPORT  OSTaskSwHook
            IMPORT  TimeTick

            EXPORT  OS_CPU_SR_Save              
            EXPORT  OS_CPU_SR_Restore
            EXPORT  OSStartHighRdy               
            EXPORT  OSCtxSw
            EXPORT  OSIntCtxSw
            EXPORT  OS_CPU_IRQ_ISR
            EXPORT  OS_CPU_TIMETICK

NO_INT      EQU     0xC0                         
SYS32_MODE  EQU     0x1F
IRQ32_MODE  EQU     0x12
FIQ32_MODE	EQU		0x11

	CODE32
	PRESERVE8
    AREA    port,CODE,READONLY

OS_CPU_SR_Save
        MRS     R0,CPSR                     
        ORR     R1,R0,#NO_INT
        MSR     CPSR_c,R1         
        MOV     PC,LR                      

OS_CPU_SR_Restore
        MSR     CPSR_c,R0
        MOV     PC,LR


OSStartHighRdy  
        MSR     CPSR_cxsf, #0xDF        
        BL      OSTaskSwHook            
        LDR     R4, =OSRunning        
        MOV     R5, #1
        STRB    R5, [R4]
        LDR     R4, =OSTCBHighRdy    
        LDR     R4, [R4]                
        LDR     SP, [R4]                
        LDR     R4,  [SP], #4           
        MSR     CPSR_cxsf,R4
        LDMFD	SP!, {R0-R12,LR,PC}    

OSCtxSw
        STR     LR,  [SP, #-4]!         
        STMFD	SP!, {R0-R12,LR}     
        MRS     R4,  CPSR               
        STR     R4,  [SP, #-4]!
        LDR     R4, =OSTCBCur         
        LDR     R5, [R4]
        STR     SP, [R5]
        BL      OSTaskSwHook           
        LDR     R4, =OSPrioCur        
        LDR     R5, =OSPrioHighRdy
        LDRB    R6, [R5]
        STRB    R6, [R4]
        LDR     R4, =OSTCBCur         
        LDR     R6, =OSTCBHighRdy
        LDR     R6, [R6]
        STR     R6, [R4]
        LDR     SP, [R6]                
        LDR     R4,  [SP], #4          
        MSR     CPSR_cxsf, R4
        LDMFD	SP!, {R0-R12,LR,PC}

OSIntCtxSw
        BL      OSTaskSwHook            
        LDR     R4,=OSPrioCur        
        LDR     R5,=OSPrioHighRdy
        LDRB    R6,[R5]
        STRB    R6,[R4]
        LDR     R4,=OSTCBCur          
        LDR     R6,=OSTCBHighRdy
        LDR     R6,[R6]
        STR     R6,[R4]
        LDR     SP,[R6]                 
        LDR     R4,  [SP], #4           
        MSR     CPSR_cxsf, R4
        LDMFD	SP!, {R0-R12,LR,PC}

OS_CPU_IRQ_ISR
        STR     R3,  [SP, #-4]!                
        STR     R2,  [SP, #-4]!
        STR     R1,  [SP, #-4]!
        MOV     R1, SP                         
        ADD     SP, SP,#12                     
        SUB     R2, LR,#4                      
        MRS     R3, SPSR                       
        MSR     CPSR_c, #(NO_INT | SYS32_MODE) 
        STR     R2,  [SP, #-4]!                
        STMFD   SP!, {R4-R12,LR}   
        LDMFD   R1!, {R4-R6}   
        STMFD   SP!, {R4-R6}   
        STMFD   SP!, {R0,R3}
        LDR     R0, =OSIntNesting            
        LDRB    R1, [R0]
        ADD     R1, R1,#1
        STRB    R1, [R0]
        CMP     R1, #1                         
        BNE     OS_CPU_IRQ_ISR_1
        LDR     R4, =OSTCBCur               
        LDR     R5, [R4]
        STR     SP, [R5]                      
OS_CPU_IRQ_ISR_1
        MSR     CPSR_c, #(NO_INT | IRQ32_MODE) 
        BL      TimeTick         
        MSR     CPSR_c, #(NO_INT | SYS32_MODE) 
        BL      OSIntExit                     
        LDR     R4,  [SP], #4                 
        MSR     CPSR_cxsf, R4
        LDMFD	SP!, {R0-R12,LR,PC}
        
OS_CPU_TIMETICK
		STR     R3,  [SP, #-4]!                
        STR     R2,  [SP, #-4]!
        STR     R1,  [SP, #-4]!
        MOV     R1, SP                         
        ADD     SP, SP,#12                     
        SUB     R2, LR,#4                      
        MRS     R3, SPSR                       
        MSR     CPSR_c, #(NO_INT | SYS32_MODE) 
        STR     R2,  [SP, #-4]!                
        STMFD   SP!, {R4-R12,LR}   
        LDMFD   R1!, {R4-R6}   
        STMFD   SP!, {R4-R6}   
        STMFD   SP!, {R0,R3}
        LDR     R0, =OSIntNesting            
        LDRB    R1, [R0]
        ADD     R1, R1,#1
        STRB    R1, [R0]
        CMP     R1, #1                         
        BNE     OS_CPU_TIMETICK_1
        LDR     R4, =OSTCBCur               
        LDR     R5, [R4]
        STR     SP, [R5]                      
OS_CPU_TIMETICK_1
        MSR     CPSR_c, #(NO_INT | FIQ32_MODE) 
        BL      TimeTick         
        MSR     CPSR_c, #(NO_INT | SYS32_MODE) 
        BL      OSIntExit                     
        LDR     R4,  [SP], #4                 
        MSR     CPSR_cxsf, R4
        LDMFD	SP!, {R0-R12,LR,PC}

        END

⌨️ 快捷键说明

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