📄 ggt_cpu_a.s
字号:
/****************************************************************************************************
** Gogoto OS
** (c) Copyright 2007-2008, luyigui(卢益贵)
** All Rights Reserved
** V1.00.0
**
** 狗狗兔嵌入式多任务系统(基于消息机制)
** 绿城代码、GGT-OS、Gogoto OS、狗狗兔嵌入式、狗狗兔系统
** QQ:48092788
**
**------------------文件信息------------------------------------------------------------------------
** 文件名: GGT_CPU_a.s
** 创建人: 卢益贵
** 日 期: 2007年12月8日
** 版 本: V1.00.0
** 描 述: Gogoto OS 与CPU相关的汇编核心代码部分,将所有移植可能与CPU和编译器相关的部分放置与此,
方便移植。
**
**------------------修改记录------------------------------------------------------------------------
** 修改人: 卢益贵
** 版 本:
** 日 期: 2008年1月10日
** 描 述:
**
****************************************************************************************************/
/****************************************************************************************************
** 函数名: SWI_Handler?A
** 描 述: arm代码的软件中断服务程序,参数为:
** 输 入: 0:任务切换,1:关IRQ中断,达到独占CPU目的,2:开IRQ中断
** 输 出: 无
** 创建人: 卢益贵
** 日 期: 2007年12月8日
**------------------修改记录------------------------------------------------------------------------
** 修改人: 卢益贵
** 日 期: 2008年1月10日
** 说 明: 增加TaskLoad功能
** 原代码:
**--------------------------------------------------------------------------------------------------
****************************************************************************************************/
AREA ?C?SWI, CODE, READONLY, ALIGN=2
NOINT EQU 0x80
USR32MODE EQU 0x10
SVC32MODE EQU 0x13
SYS32MODE EQU 0x1F
IRQ32MODE EQU 0x12
FIQ32MODE EQU 0x11
EXTERN DATA (pOSTskNow)
EXTERN DATA (pOSTskReady)
PUBLIC SWI_Handler?A
SWI_Handler?A PROC CODE32
CMP R0, #4
LDRLO PC,[PC, R0, LSL #2] ;if R0 < 6,PC = PC + R0*4,else next
MOVS PC,LR
SWI_Function
DD TaskSW
DD TaskLoad
DD IRQLock
DD IRQUnlock
TaskSW
TaskSave
STMDB SP!,{R0-R1}
STMDB SP,{SP}^
LDMDB SP,{R0}
STMDB R0!,{LR}
STMDB R0!,{R2-R12,LR}^
MRS R1,SPSR
LDMIA SP!,{R2-R3}
STMDB R0!,{R1-R3}
LDR R1,=pOSTskNow
LDR R1,[R1]
STR R0,[R1,#4]
TaskLoad
LDR R4,=pOSTskNow ;当前任务变量地址
LDR R3,=pOSTskReady ;就绪任务变量地址
MOV R5, R3 ;保存就绪任务变量地址
LDR R3,[R3] ;R3=就绪任务数据区地址
STR R3,[R4] ;pOSTskNow = pOSTskReady
LDR R3,[R3] ;R3=pOSTskReady-pNext
STR R3,[R5] ;pOSTskReady = pOSTskReady-pNext
LDR R4,[R4]
LDR LR,[R4,#4]
LDMIA LR!,{R2}
MSR SPSR_cxsf,R2
ADD R0,LR,#60
STMDB SP,{R0}
LDMDB SP,{SP}^
LDMIA LR!,{R0-R12,LR}^
LDMIA LR!,{LR}
MOVS PC, LR
IRQLock
MRS R0, SPSR
ORR R0, R0, #NOINT
MSR SPSR_c, R0
MOVS PC, LR
IRQUnlock
MRS R0, SPSR
BIC R0, R0, #NOINT
MSR SPSR_c, R0
MOVS PC, LR
ENDP
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -