]> git.sur5r.net Git - freertos/commitdiff
Complete GCC/Cortex-A9 port.
authorrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Tue, 4 Feb 2014 14:49:48 +0000 (14:49 +0000)
committerrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Tue, 4 Feb 2014 14:49:48 +0000 (14:49 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@2189 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

FreeRTOS/Source/portable/GCC/ARM_CA9/port.c
FreeRTOS/Source/portable/GCC/ARM_CA9/portASM.S

index 023c269d3762a3e58dfb158cb6013f27ceaf9704..c52b0bb66af6993f455980102568c16950ac8a40 100644 (file)
        #error configMAX_API_CALL_INTERRUPT_PRIORITY must be greater than ( configUNIQUE_INTERRUPT_PRIORITIES / 2 )\r
 #endif\r
 \r
-#ifndef configINSTALL_FREERTOS_VECTOR_TABLE\r
-       #warning configINSTALL_FREERTOS_VECTOR_TABLE was undefined.  Defaulting configINSTALL_FREERTOS_VECTOR_TABLE to 0.\r
-#endif\r
-\r
 #ifndef configCLEAR_TICK_INTERRUPT\r
        #define configCLEAR_TICK_INTERRUPT()\r
 #endif\r
@@ -134,8 +130,7 @@ context. */
 #define portNO_FLOATING_POINT_CONTEXT  ( ( StackType_t ) 0 )\r
 \r
 /* Constants required to setup the initial task context. */\r
-#warning FIQ is disabled\r
-#define portINITIAL_SPSR                               ( ( StackType_t ) 0x5f ) /* System mode, ARM mode, IRQ enabled FIQ disabled.  1f is required to enable FIQ. */\r
+#define portINITIAL_SPSR                               ( ( StackType_t ) 0x1f ) /* System mode, ARM mode, IRQ enabled FIQ enabled. */\r
 #define portTHUMB_MODE_BIT                             ( ( StackType_t ) 0x20 )\r
 #define portINTERRUPT_ENABLE_BIT               ( 0x80UL )\r
 #define portTHUMB_MODE_ADDRESS                 ( 0x01UL )\r
@@ -334,15 +329,6 @@ uint32_t ulAPSR;
        ulAPSR &= portAPSR_MODE_BITS_MASK;\r
        configASSERT( ulAPSR != portAPSR_USER_MODE );\r
 \r
-       #if configINSTALL_FREERTOS_VECTOR_TABLE == 1\r
-       {\r
-               extern void vPortInstallFreeRTOSVectorTable( void );\r
-\r
-               vPortInstallFreeRTOSVectorTable();\r
-       }\r
-       #endif\r
-\r
-\r
        if( ulAPSR != portAPSR_USER_MODE )\r
        {\r
                /* Only continue if the binary point value is set to its lowest possible\r
index 844a3f18ed82723e0effd2195805189ecab54460..39556686865621b1ed8b582e5f34e777a2fae4ab 100644 (file)
@@ -53,6 +53,7 @@
 */\r
 \r
        .text\r
+       .arm\r
 \r
        .set SYS_MODE,  0x1f\r
        .set SVC_MODE,  0x13\r
@@ -70,6 +71,7 @@
        .extern vTaskSwitchContext\r
        .extern vApplicationIRQHandler\r
        .extern ulPortInterruptNesting\r
+       .extern ulPortTaskHasFPUContext\r
 \r
        .global FreeRTOS_IRQ_Handler\r
        .global FreeRTOS_SWI_Handler\r
 /******************************************************************************\r
  * SVC handler is used to start the scheduler and yield a task.\r
  *****************************************************************************/\r
+.align 4\r
+.type FreeRTOS_SWI_Handler, %function\r
 FreeRTOS_SWI_Handler:\r
        /* Save the context of the current task and select a new task to run. */\r
        portSAVE_CONTEXT\r
        LDR R0, vTaskSwitchContextConst\r
        BLX     R0\r
 \r
+.type vPortRestoreTaskContext, %function\r
 vPortRestoreTaskContext:\r
        portRESTORE_CONTEXT\r
 \r
+.align 4\r
+.type FreeRTOS_IRQ_Handler, %function\r
 FreeRTOS_IRQ_Handler:\r
        /* Return to the interrupted instruction. */\r
        SUB             lr, lr, #4\r
@@ -279,14 +286,6 @@ switch_before_exit:
        next. */\r
        portRESTORE_CONTEXT\r
 \r
-vPortInstallFreeRTOSVectorTable:\r
-       /* Set VBAR to the vector table that contains the FreeRTOS handlers. */\r
-       ldr     r0, =_freertos_vector_table\r
-       mcr     p15, 0, r0, c12, c0, 0\r
-       dsb\r
-       isb\r
-       bx lr\r
-\r
 ulICCIARConst: .word ulICCIAR\r
 ulICCEOIRConst:        .word ulICCEOIR\r
 ulICCPMRConst: .word ulICCPMR\r