?? os_cpu_a.s
字號:
;/***************************************Copyright (c)****************************************************
;** Guangzhou ZHIYUAN electronics Co.,LTD.
;**
;** http://www.embedtools.com
;**
;**-------------File Info---------------------------------------------------------------------------------
;** File name: os_cpu_s.s
;** Latest modified Date: 2007-11-20
;** Latest Version: 1.0
;** Descriptions: μCOS-II在lpc210x上的移植代碼匯編代碼部分,用ads1.2編譯
;**-------------------------------------------------------------------------------------------------------
;** Created by: Chenmingji
;** Created date: 2007-11-20
;** Version: 1.0
;** Descriptions: The original version
;**
;**-------------------------------------------------------------------------------------------------------
;** Modified by:
;** Modified date:
;** Version:
;** Descriptions:
;**
;********************************************************************************************************/
;/********************************************************************************************************
; 宏定義
;********************************************************************************************************/
NoInt EQU 0x80
USR32Mode EQU 0x10
SVC32Mode EQU 0x13
SYS32Mode EQU 0x1f
IRQ32Mode EQU 0x12
FIQ32Mode EQU 0x11
T_bit EQU 0x20
CODE32
AREA |subr|, CODE, READONLY
IMPORT OSTCBCur ; 指向當前任務TCB的指針
IMPORT OSTCBHighRdy ; 指向將要運行的任務TCB的指針
IMPORT OSPrioCur ; 當前任務的優先級
IMPORT OSPrioHighRdy ; 將要運行的任務的優先級
IMPORT OSTaskSwHook ; 任務切換的鉤子函數
IMPORT OSRunning ; uC/OS-II運行標志
IMPORT OSIntNesting ; 中斷嵌套計數器
EXPORT OSIntCtxSw ; 中斷退出時的入口
EXPORT SoftwareInterrupt ; 軟中斷入口
;/********************************************************************************************************
;** Function name: SoftwareInterrupt
;** Descriptions: 軟件中斷,用于提供一些系統服務
;** input parameters: 依功能而定
;** output parameters: 依功能而定
;** Returned value: 依功能而定
;** Created by: chenmingji
;** Created Date: 2007/11/20
;**-------------------------------------------------------------------------------------------------------
;** Modified by:
;** Modified date:
;**-------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
SoftwareInterrupt
CMP R0, #8
LDRLO PC, [PC, R0, LSL #2]
MOVS PC, LR
SwiFunction
DCD TASK_SW ; 0
DCD _OSStartHighRdy ; 1
DCD ENTER_CRITICAL ; 2
DCD EXIT_CRITICAL ; 3
DCD ChangeToSYSMode ; 4
DCD ChangeToUSRMode ; 5
DCD ISRBegin ; 6
DCD OSISRNeedSwap ; 7
;/********************************************************************************************************
;** Function name: TASK_SW
;** Descriptions: 任務級調度
;** input parameters: none
;** output parameters: none
;** Returned value: none
;** Created by: chenmingji
;** Created Date: 2007/11/20
;**-------------------------------------------------------------------------------------------------------
;** Modified by:
;** Modified date:
;**-------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
TASK_SW
MRS R3, SPSR ; 保存任務的CPSR
MOV R2, LR ; 保存任務的PC
MSR CPSR_c, #(NoInt | SYS32Mode) ; 切換到系統模式
STMFD SP!, {R2} ; 保存PC到堆棧
STMFD SP!, {R0-R12, LR} ; 保存R0-R12,LR到堆棧
; 因為R0~R3沒有保存有用數據,
; 所以可以這樣做
B OSIntCtxSw_0 ; 真正進行任務切換
;/********************************************************************************************************
;** Function name: ENTER_CRITICAL
;** Descriptions: 進入臨界區
;** input parameters: none
;** output parameters: none
;** Returned value: none
;** Created by: chenmingji
;** Created Date: 2007/11/20
;**-------------------------------------------------------------------------------------------------------
;** Modified by:
;** Modified date:
;**-------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
ENTER_CRITICAL
; GulOsEnterSum++
LDR R1, =GulOsEnterSum
LDRB R2, [R1]
CMP R2, #0xff
MOVEQS PC, LR
ADD R2, R2, #1
STRB R2, [R1]
; 關中斷
MRS R0, SPSR
ORR R0, R0, #NoInt
MSR SPSR_c, R0
MOVS PC, LR
;/********************************************************************************************************
;** Function name: EXIT_CRITICAL
;** Descriptions: 退出臨界區
;** input parameters: none
;** output parameters: none
;** Returned value: none
;** Created by: chenmingji
;** Created Date: 2007/11/20
;**-------------------------------------------------------------------------------------------------------
;** Modified by:
;** Modified date:
;**-------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
EXIT_CRITICAL
; GulOsEnterSum--
LDR R1, =GulOsEnterSum
LDRB R2, [R1]
CMP R2, #0
MOVEQS PC, LR
SUB R2, R2, #1
STRB R2, [R1]
; if(GulOsEnterSum == 0) 開中斷;
CMP R2, #0
MRSEQ R0, SPSR
BICEQ R0, R0, #NoInt
MSREQ SPSR_c, R0
MOVS PC, LR
;/********************************************************************************************************
;** Function name: ChangeToSYSMode
;** Descriptions: 任務切換到系統模式
;** input parameters: none
;** output parameters: none
;** Returned value: none
;** Created by: chenmingji
;** Created Date: 2007/11/20
;**-------------------------------------------------------------------------------------------------------
;** Modified by:
;** Modified date:
;**-------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
ChangeToSYSMode
; 切換到系統模式
MRS R0, SPSR
BIC R0, R0, #0x1f
ORR R0, R0, #SYS32Mode
MSR SPSR_c, R0
MOVS PC, LR
;/********************************************************************************************************
;** Function name: ChangeToSYSMode
;** Descriptions: 任務切換到用戶模式
;** input parameters: none
;** output parameters: none
;** Returned value: none
;** Created by: chenmingji
;** Created Date: 2007/11/20
;**-------------------------------------------------------------------------------------------------------
;** Modified by:
;** Modified date:
;**-------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
ChangeToUSRMode
; 切換到用戶模式
MRS R0, SPSR
BIC R0, R0, #0x1f
ORR R0, R0, #USR32Mode
MSR SPSR_c, R0
MOVS PC, LR
;/********************************************************************************************************
;** Function name: ISRBegin
;** Descriptions: ISR開始處理
;** input parameters: none
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -