\r
.extern pxCurrentTCB\r
.extern vTaskSwitchContext\r
+ .extern vTaskIncrementTick\r
\r
- .global vStartFirstTask\r
+ .global vPortStartFirstTask\r
.global vPortYield\r
+ .global vPortTickISR\r
\r
.set portCONTEXT_SIZE, 156\r
.set portR0_OFFSET, 152\r
.set portGPR_OFFSET, 32\r
.set portCR_OFFSET, 28\r
.set portXER_OFFSET, 24\r
-.set portLR_OFFSET, 20\r
+.set portLR_OFFSET, 16\r
.set portCTR_OFFSET, 16\r
.set portUSPRG0_OFFSET, 12\r
.set portSRR0_OFFSET, 8\r
# Store the stack pointer into the TCB\r
stw SP, 0( R2 )\r
\r
+ # Save the link register\r
+ stwu R1, -24( R1 )\r
+ mflr R0\r
+ stw R31, 20( R1 )\r
+ stw R0, 28( R1 )\r
+ mr R31, r1\r
+\r
.endm\r
\r
.macro portEXIT_SWITCHING_ISR\r
\r
+ # Restore the link register\r
+ lwz R11, 0( R1 )\r
+ lwz R0, 4( R11 )\r
+ mtlr R0\r
+ lwz R31, -4( R11 )\r
+ mr R1, R11\r
+\r
# Get the address of the TCB.\r
xor R0, R0, R0\r
addis SP, R0, pxCurrentTCB@ha\r
# Get the task stack pointer from the TCB.\r
lwz SP, 0( SP )\r
\r
- # Load up the LR for the correct return.\r
- lwz R0,LRField(R1)\r
- mtlr R0\r
-\r
-\r
.endm\r
\r
\r
-vStartFirstTask:\r
+vPortStartFirstTask:\r
\r
int_epilogue\r
rfi\r
\r
-#vStartFirstTask:\r
+#vPortStartFirstTask:\r
# portRESTORE_CONTEXT\r
# rfi\r
\r
portEXIT_SWITCHING_ISR\r
blr\r
\r
- NOP\r
- NOP\r
+vPortTickISR:\r
+\r
+ portENTER_SWITCHING_ISR\r
+ bl vTaskIncrementTick\r
+ #if configUSE_PREEMPTION == 1\r
+ bl vTaskSwitchContext\r
+ #endif\r
+\r
+ # Clear the interrupt\r
+ lis R0, 2048\r
+ mttsr R0\r
+\r
+ portEXIT_SWITCHING_ISR\r
+ blr\r
+\r
+\r