RSEG ICODE:CODE | |
CODE32 | |
EXTERN vTaskSwitchContext | |
EXTERN vTaskIncrementTick | |
PUBLIC vPortYieldProcessor | |
PUBLIC vPortPreemptiveTick | |
PUBLIC vPortStartFirstTask | |
#include "AT91SAM7S64_inc.h" | |
#include "ISR_Support.h" | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
; Starting the first task is just a matter of restoring the context that | |
; was created by pxPortInitialiseStack(). | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
vPortStartFirstTask: | |
portRESTORE_CONTEXT | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
; Manual context switch function. This is the SWI hander. | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
vPortYieldProcessor: | |
ADD LR, LR, #4 ; Add 4 to the LR to make the LR appear exactly | |
; as if the context was saved during and IRQ | |
; handler. | |
portSAVE_CONTEXT ; Save the context of the current task... | |
LDR R0, =vTaskSwitchContext ; before selecting the next task to execute. | |
mov lr, pc | |
BX R0 | |
portRESTORE_CONTEXT ; Restore the context of the selected task. | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
; Preemptive context switch function. This will only ever get installed if | |
; portUSE_PREEMPTION is set to 1 in portmacro.h. | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
vPortPreemptiveTick: | |
portSAVE_CONTEXT ; Save the context of the current task. | |
LDR R0, =vTaskIncrementTick ; Increment the tick count - this may wake a task. | |
mov lr, pc | |
BX R0 | |
LDR R0, =vTaskSwitchContext ; Select the next task to execute. | |
mov lr, pc | |
BX R0 | |
LDR R14, =AT91C_BASE_PITC ; Clear the PIT interrupt | |
LDR R0, [R14, #PITC_PIVR ] | |
LDR R14, =AT91C_BASE_AIC ; Mark the End of Interrupt on the AIC | |
STR R14, [R14, #AIC_EOICR] | |
portRESTORE_CONTEXT ; Restore the context of the selected task. | |
END | |