]> git.sur5r.net Git - freertos/commitdiff
PPC405 work in progress.
authorrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Wed, 5 Mar 2008 10:13:59 +0000 (10:13 +0000)
committerrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Wed, 5 Mar 2008 10:13:59 +0000 (10:13 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@231 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

Source/portable/GCC/PPC405/port.c
Source/portable/GCC/PPC405/portasm.s
Source/portable/GCC/PPC405/portmacro.h

index 07b90fea5fa7ed10707726adad56e350d627dc46..02aedd2d529ade05f5531a26d5d2d2f8fc192c9a 100644 (file)
@@ -51,6 +51,8 @@
 \r
 /* Library includes. */\r
 #include "xtime_l.h"\r
+#include "xintc.h"\r
+#include "xintc_i.h"\r
 \r
 /* Standard includes. */\r
 #include <string.h>\r
@@ -171,9 +173,6 @@ portBASE_TYPE xPortStartScheduler( void )
 {\r
 extern void *pxCurrentTCB;\r
 \r
-       XExc_Init();\r
-       XExc_mDisableExceptions( XEXC_NON_CRITICAL ) ;  \r
-\r
        prvSetupTimerInterrupt();\r
 \r
        XExc_RegisterHandler( XEXC_ID_SYSTEM_CALL, ( XExceptionHandler ) vPortYield, ( void * ) 0 );\r
@@ -229,3 +228,53 @@ static unsigned portLONG ulTicks = 0;
 }\r
 /*-----------------------------------------------------------*/\r
 \r
+void vPortISRHandler( void *DeviceId )\r
+{\r
+Xuint32 IntrStatus;\r
+Xuint32 IntrMask = 1;\r
+int IntrNumber;\r
+//extern XIntc xInterruptController;\r
+XIntc_Config *CfgPtr;// = xInterruptController.CfgPtr;\r
+         \r
+    /* Get the configuration data using the device ID */\r
+    //CfgPtr = &XIntc_ConfigTable[(Xuint32)DeviceId];\r
+       CfgPtr = &XIntc_ConfigTable[(Xuint32)XPAR_OPB_INTC_0_DEVICE_ID];\r
+  \r
+    /* Get the interrupts that are waiting to be serviced */\r
+    IntrStatus = XIntc_mGetIntrStatus(CfgPtr->BaseAddress);\r
+  \r
+    /* Service each interrupt that is active and enabled by checking each\r
+     * bit in the register from LSB to MSB which corresponds to an interrupt\r
+     * intput signal\r
+     */\r
+    for (IntrNumber = 0; IntrNumber < XPAR_INTC_MAX_NUM_INTR_INPUTS;\r
+         IntrNumber++)\r
+    {\r
+        if (IntrStatus & 1)\r
+        {\r
+            XIntc_VectorTableEntry *TablePtr;\r
+      \r
+            /* The interrupt is active and enabled, call the interrupt\r
+             * handler that was setup with the specified parameter\r
+             */\r
+            TablePtr = &(CfgPtr->HandlerTable[IntrNumber]);\r
+            TablePtr->Handler(TablePtr->CallBackRef);\r
+\r
+                       /* Clear the interrupt. */      \r
+            XIntc_mAckIntr(CfgPtr->BaseAddress, IntrMask);\r
+                       break;\r
+        }\r
+        \r
+        /* Move to the next interrupt to check */\r
+        IntrMask <<= 1;\r
+        IntrStatus >>= 1;\r
+      \r
+        /* If there are no other bits set indicating that all interrupts\r
+         * have been serviced, then exit the loop\r
+         */\r
+        if (IntrStatus == 0)\r
+        {\r
+            break;\r
+        }\r
+    }\r
+}\r
index 3810a881159b8d8ab7d1f4786c1199aee67d1877..64b511ed8dfcb25e2d2a19601212072566310aa9 100644 (file)
@@ -3,10 +3,12 @@
        .extern pxCurrentTCB\r
        .extern vTaskSwitchContext\r
        .extern vTaskIncrementTick\r
+       .extern vPortISRHandler\r
 \r
        .global vPortStartFirstTask\r
        .global vPortYield\r
        .global vPortTickISR\r
+       .global vPortISRWrapper\r
 \r
 .set portCONTEXT_SIZE, 156\r
 .set portR0_OFFSET, 152\r
@@ -231,4 +233,9 @@ vPortTickISR:
        portEXIT_SWITCHING_ISR\r
        blr\r
 \r
+vPortISRWrapper:\r
 \r
+       portENTER_SWITCHING_ISR\r
+       bl vPortISRHandler\r
+       portEXIT_SWITCHING_ISR\r
+       blr\r
index 5b6be119ae65565c1894557906782d24364859a2..461eed85f9b1a855a22db7db0b5338fd3770b8fd 100644 (file)
@@ -96,7 +96,7 @@ void vTaskExitCritical( void );
 /* Task utilities. */\r
 void vPortYield( void );\r
 #define portYIELD() asm volatile ( "SC \n\t NOP" )\r
-#define portYIELD_FROM_ISR()\r
+#define portYIELD_FROM_ISR() vTaskSwitchContext()\r
 /*-----------------------------------------------------------*/\r
 \r
 /* Hardware specifics. */\r