]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS/Source/portable/GCC/AVR32_UC3/port.c
Add xEventGroupClearBitsFromISR() and xEventGroupGetBitsFromISR() functions.
[freertos] / FreeRTOS / Source / portable / GCC / AVR32_UC3 / port.c
index 0bf9e165919d62b8ef1542169d38856c0463b4e1..225d8015cd41b7a9b6596ef4c1ba7511adae8c95 100644 (file)
  *****************************************************************************/\r
 \r
 /*\r
-    FreeRTOS V7.3.0 - Copyright (C) 2012 Real Time Engineers Ltd.\r
+    FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd. \r
+    All rights reserved\r
 \r
-    FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME.  PLEASE VISIT \r
-    http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
+    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
 \r
     ***************************************************************************\r
      *                                                                       *\r
-     *    FreeRTOS tutorial books are available in pdf and paperback.        *\r
-     *    Complete, revised, and edited pdf reference manuals are also       *\r
-     *    available.                                                         *\r
+     *    FreeRTOS provides completely free yet professionally developed,    *\r
+     *    robust, strictly quality controlled, supported, and cross          *\r
+     *    platform software that has become a de facto standard.             *\r
      *                                                                       *\r
-     *    Purchasing FreeRTOS documentation will not only help you, by       *\r
-     *    ensuring you get running as quickly as possible and with an        *\r
-     *    in-depth knowledge of how to use FreeRTOS, it will also help       *\r
-     *    the FreeRTOS project to continue with its mission of providing     *\r
-     *    professional grade, cross platform, de facto standard solutions    *\r
-     *    for microcontrollers - completely free of charge!                  *\r
+     *    Help yourself get started quickly and support the FreeRTOS         *\r
+     *    project by purchasing a FreeRTOS tutorial book, reference          *\r
+     *    manual, or both from: http://www.FreeRTOS.org/Documentation        *\r
      *                                                                       *\r
-     *    >>> See http://www.FreeRTOS.org/Documentation for details. <<<     *\r
-     *                                                                       *\r
-     *    Thank you for using FreeRTOS, and thank you for your support!      *\r
+     *    Thank you!                                                         *\r
      *                                                                       *\r
     ***************************************************************************\r
 \r
-\r
     This file is part of the FreeRTOS distribution.\r
 \r
     FreeRTOS is free software; you can redistribute it and/or modify it under\r
     the terms of the GNU General Public License (version 2) as published by the\r
-    Free Software Foundation AND MODIFIED BY the FreeRTOS exception.\r
-    >>>NOTE<<< The modification to the GPL is included to allow you to\r
-    distribute a combined work that includes FreeRTOS without being obliged to\r
-    provide the source code for proprietary components outside of the FreeRTOS\r
-    kernel.  FreeRTOS is distributed in the hope that it will be useful, but\r
-    WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\r
-    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r
-    more details. You should have received a copy of the GNU General Public\r
-    License and the FreeRTOS license exception along with FreeRTOS; if not it\r
-    can be viewed here: http://www.freertos.org/a00114.html and also obtained\r
-    by writing to Richard Barry, contact details for whom are available on the\r
-    FreeRTOS WEB site.\r
+    Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.\r
+\r
+    >>! NOTE: The modification to the GPL is included to allow you to distribute\r
+    >>! a combined work that includes FreeRTOS without being obliged to provide\r
+    >>! the source code for proprietary components outside of the FreeRTOS\r
+    >>! kernel.\r
+\r
+    FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
+    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
+    FOR A PARTICULAR PURPOSE.  Full license text is available from the following\r
+    link: http://www.freertos.org/a00114.html\r
 \r
     1 tab == 4 spaces!\r
-    \r
+\r
     ***************************************************************************\r
      *                                                                       *\r
      *    Having a problem?  Start by reading the FAQ "My application does   *\r
      *                                                                       *\r
     ***************************************************************************\r
 \r
-    \r
-    http://www.FreeRTOS.org - Documentation, training, latest versions, license \r
-    and contact details.  \r
-    \r
+    http://www.FreeRTOS.org - Documentation, books, training, latest versions,\r
+    license and Real Time Engineers Ltd. contact details.\r
+\r
     http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
-    including FreeRTOS+Trace - an indispensable productivity tool.\r
+    including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r
+    compatible FAT file system, and our tiny thread aware UDP/IP stack.\r
+\r
+    http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High\r
+    Integrity Systems to sell under the OpenRTOS brand.  Low cost OpenRTOS\r
+    licenses offer ticketed support, indemnification and middleware.\r
 \r
-    Real Time Engineers ltd license FreeRTOS to High Integrity Systems, who sell \r
-    the code with commercial support, indemnification, and middleware, under \r
-    the OpenRTOS brand: http://www.OpenRTOS.com.  High Integrity Systems also\r
-    provide a safety engineered and independently SIL3 certified version under \r
-    the SafeRTOS brand: http://www.SafeRTOS.com.\r
+    http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
+    engineered and independently SIL3 certified version for use in safety and\r
+    mission critical applications that require provable dependability.\r
+\r
+    1 tab == 4 spaces!\r
 */\r
 \r
 \r
 \r
 \r
 /* Constants required to setup the task context. */\r
-#define portINITIAL_SR            ( ( portSTACK_TYPE ) 0x00400000 ) /* AVR32 : [M2:M0]=001 I1M=0 I0M=0, GM=0 */\r
-#define portINSTRUCTION_SIZE      ( ( portSTACK_TYPE ) 0 )\r
+#define portINITIAL_SR            ( ( StackType_t ) 0x00400000 ) /* AVR32 : [M2:M0]=001 I1M=0 I0M=0, GM=0 */\r
+#define portINSTRUCTION_SIZE      ( ( StackType_t ) 0 )\r
 \r
 /* Each task maintains its own critical nesting variable. */\r
-#define portNO_CRITICAL_NESTING   ( ( unsigned long ) 0 )\r
-volatile unsigned long ulCriticalNesting = 9999UL;\r
+#define portNO_CRITICAL_NESTING   ( ( uint32_t ) 0 )\r
+volatile uint32_t ulCriticalNesting = 9999UL;\r
 \r
 #if( configTICK_USE_TC==0 )\r
        static void prvScheduleNextTick( void );\r
@@ -133,7 +130,7 @@ void _init_startup(void)
        #if configHEAP_INIT\r
                extern void __heap_start__;\r
                extern void __heap_end__;\r
-               portBASE_TYPE *pxMem;\r
+               BaseType_t *pxMem;\r
        #endif\r
 \r
        /* Load the Exception Vector Base Address in the corresponding system register. */\r
@@ -148,7 +145,7 @@ void _init_startup(void)
        #if configHEAP_INIT\r
 \r
                /* Initialize the heap used by malloc. */\r
-               for( pxMem = &__heap_start__; pxMem < ( portBASE_TYPE * )&__heap_end__; )\r
+               for( pxMem = &__heap_start__; pxMem < ( BaseType_t * )&__heap_end__; )\r
                {\r
                        *pxMem++ = 0xA5A5A5A5;\r
                }\r
@@ -248,7 +245,7 @@ __attribute__((__naked__)) static void vTick( void )
        /* Because FreeRTOS is not supposed to run with nested interrupts, put all OS\r
        calls in a critical section . */\r
        portENTER_CRITICAL();\r
-               vTaskIncrementTick();\r
+               xTaskIncrementTick();\r
        portEXIT_CRITICAL();\r
 \r
        /* Restore the context of the "elected task". */\r
@@ -301,36 +298,36 @@ __attribute__((__noinline__)) void vPortExitCritical( void )
  *\r
  * See header file for description.\r
  */\r
-portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE pxCode, void *pvParameters )\r
+StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters )\r
 {\r
        /* Setup the initial stack of the task.  The stack is set exactly as\r
        expected by the portRESTORE_CONTEXT() macro. */\r
 \r
        /* When the task starts, it will expect to find the function parameter in R12. */\r
        pxTopOfStack--;\r
-       *pxTopOfStack-- = ( portSTACK_TYPE ) 0x08080808;                                        /* R8 */\r
-       *pxTopOfStack-- = ( portSTACK_TYPE ) 0x09090909;                                        /* R9 */\r
-       *pxTopOfStack-- = ( portSTACK_TYPE ) 0x0A0A0A0A;                                        /* R10 */\r
-       *pxTopOfStack-- = ( portSTACK_TYPE ) 0x0B0B0B0B;                                        /* R11 */\r
-       *pxTopOfStack-- = ( portSTACK_TYPE ) pvParameters;                                      /* R12 */\r
-       *pxTopOfStack-- = ( portSTACK_TYPE ) 0xDEADBEEF;                                        /* R14/LR */\r
-       *pxTopOfStack-- = ( portSTACK_TYPE ) pxCode + portINSTRUCTION_SIZE; /* R15/PC */\r
-       *pxTopOfStack-- = ( portSTACK_TYPE ) portINITIAL_SR;                            /* SR */\r
-       *pxTopOfStack-- = ( portSTACK_TYPE ) 0xFF0000FF;                                        /* R0 */\r
-       *pxTopOfStack-- = ( portSTACK_TYPE ) 0x01010101;                                        /* R1 */\r
-       *pxTopOfStack-- = ( portSTACK_TYPE ) 0x02020202;                                        /* R2 */\r
-       *pxTopOfStack-- = ( portSTACK_TYPE ) 0x03030303;                                        /* R3 */\r
-       *pxTopOfStack-- = ( portSTACK_TYPE ) 0x04040404;                                        /* R4 */\r
-       *pxTopOfStack-- = ( portSTACK_TYPE ) 0x05050505;                                        /* R5 */\r
-       *pxTopOfStack-- = ( portSTACK_TYPE ) 0x06060606;                                        /* R6 */\r
-       *pxTopOfStack-- = ( portSTACK_TYPE ) 0x07070707;                                        /* R7 */\r
-       *pxTopOfStack = ( portSTACK_TYPE ) portNO_CRITICAL_NESTING;                     /* ulCriticalNesting */\r
+       *pxTopOfStack-- = ( StackType_t ) 0x08080808;                                   /* R8 */\r
+       *pxTopOfStack-- = ( StackType_t ) 0x09090909;                                   /* R9 */\r
+       *pxTopOfStack-- = ( StackType_t ) 0x0A0A0A0A;                                   /* R10 */\r
+       *pxTopOfStack-- = ( StackType_t ) 0x0B0B0B0B;                                   /* R11 */\r
+       *pxTopOfStack-- = ( StackType_t ) pvParameters;                                 /* R12 */\r
+       *pxTopOfStack-- = ( StackType_t ) 0xDEADBEEF;                                   /* R14/LR */\r
+       *pxTopOfStack-- = ( StackType_t ) pxCode + portINSTRUCTION_SIZE; /* R15/PC */\r
+       *pxTopOfStack-- = ( StackType_t ) portINITIAL_SR;                               /* SR */\r
+       *pxTopOfStack-- = ( StackType_t ) 0xFF0000FF;                                   /* R0 */\r
+       *pxTopOfStack-- = ( StackType_t ) 0x01010101;                                   /* R1 */\r
+       *pxTopOfStack-- = ( StackType_t ) 0x02020202;                                   /* R2 */\r
+       *pxTopOfStack-- = ( StackType_t ) 0x03030303;                                   /* R3 */\r
+       *pxTopOfStack-- = ( StackType_t ) 0x04040404;                                   /* R4 */\r
+       *pxTopOfStack-- = ( StackType_t ) 0x05050505;                                   /* R5 */\r
+       *pxTopOfStack-- = ( StackType_t ) 0x06060606;                                   /* R6 */\r
+       *pxTopOfStack-- = ( StackType_t ) 0x07070707;                                   /* R7 */\r
+       *pxTopOfStack = ( StackType_t ) portNO_CRITICAL_NESTING;                        /* ulCriticalNesting */\r
 \r
        return pxTopOfStack;\r
 }\r
 /*-----------------------------------------------------------*/\r
 \r
-portBASE_TYPE xPortStartScheduler( void )\r
+BaseType_t xPortStartScheduler( void )\r
 {\r
        /* Start the timer that generates the tick ISR.  Interrupts are disabled\r
        here already. */\r
@@ -356,7 +353,7 @@ clock cycles from now. */
 #if( configTICK_USE_TC==0 )\r
        static void prvScheduleFirstTick(void)\r
        {\r
-               unsigned long lCycles;\r
+               uint32_t lCycles;\r
 \r
                lCycles = Get_system_register(AVR32_COUNT);\r
                lCycles += (configCPU_CLOCK_HZ/configTICK_RATE_HZ);\r
@@ -371,7 +368,7 @@ clock cycles from now. */
        \r
        __attribute__((__noinline__)) static void prvScheduleNextTick(void)\r
        {\r
-               unsigned long lCycles, lCount;\r
+               uint32_t lCycles, lCount;\r
 \r
                lCycles = Get_system_register(AVR32_COMPARE);\r
                lCycles += (configCPU_CLOCK_HZ/configTICK_RATE_HZ);\r