]> git.sur5r.net Git - freertos/blobdiff - Source/portable/GCC/PPC405/portasm.s
More work in progress (PPC).
[freertos] / Source / portable / GCC / PPC405 / portasm.s
index 43dfeb2219e98c95e0134b7d548144de1274bbf0..3810a881159b8d8ab7d1f4786c1199aee67d1877 100644 (file)
@@ -2,16 +2,18 @@
 \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
@@ -205,5 +216,19 @@ vPortYield:
        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