]> git.sur5r.net Git - freertos/commitdiff
Kernel changes:
authorrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Sun, 21 Dec 2014 10:26:36 +0000 (10:26 +0000)
committerrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Sun, 21 Dec 2014 10:26:36 +0000 (10:26 +0000)
+ Made xTaskNotifyGiveFromISR() its own function, rather than a macro that calls xTaskNotifyFromISR() (minor performance improvement).
+ GCC and Keil Cortex-M4F ports now use vPortRaiseBASEPRI() in place of ulPortRaiseBASEPRI() where the return value is not required (minor performance improvement).

Demo changes:
Change the [very basic] FreeRTOS+UDP SAM4E driver to use task notifications rather than a semaphore (execution time now 55% what it was in FreeRTOS V8.1.2!).
Robustness improvements to IntQueue.c standard demo task.h.
Added the latest standard demo tasks, reg test tasks and int q  tasks to the SAM4E demo.

git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@2317 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

24 files changed:
FreeRTOS-Plus/Demo/Common/FreeRTOS_Plus_UDP_Demos/CLICommands/UDPCommandServer.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-UDP/FreeRTOS_UDP_IP.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-UDP/portable/NetworkInterface/SAM4E/NetworkInterface.c
FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_Keil/RTOSDemo.uvopt
FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_Keil/RTOSDemo.uvproj
FreeRTOS/Demo/CORTEX_M4_ATSAM4E_Atmel_Studio/RTOSDemo.atsuo
FreeRTOS/Demo/CORTEX_M4_ATSAM4E_Atmel_Studio/RTOSDemo.cproj
FreeRTOS/Demo/CORTEX_M4_ATSAM4E_Atmel_Studio/src/ASF/sam/drivers/tc/tc.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_M4_ATSAM4E_Atmel_Studio/src/ASF/sam/drivers/tc/tc.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_M4_ATSAM4E_Atmel_Studio/src/IntQueueTimer.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_M4_ATSAM4E_Atmel_Studio/src/IntQueueTimer.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_M4_ATSAM4E_Atmel_Studio/src/asf.h
FreeRTOS/Demo/CORTEX_M4_ATSAM4E_Atmel_Studio/src/config/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_M4_ATSAM4E_Atmel_Studio/src/main.c
FreeRTOS/Demo/CORTEX_M4_ATSAM4E_Atmel_Studio/src/main_full.c
FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/RTOSDemo.atsuo
FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/RTOSDemo.cproj
FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/IntQueueTimer.c
FreeRTOS/Demo/CORTEX_MPU_LM3Sxxxx_Rowley/RTOSDemo.hzs
FreeRTOS/Demo/Common/Minimal/IntQueue.c
FreeRTOS/Source/include/task.h
FreeRTOS/Source/portable/GCC/ARM_CM4F/portmacro.h
FreeRTOS/Source/portable/RVDS/ARM_CM4F/portmacro.h
FreeRTOS/Source/tasks.c

index e1211c18e6ae640a093513fdf6807a68cbdc1fef..bcc805bb126118d1dc1bc61a63279e60f56322ae 100644 (file)
@@ -85,7 +85,7 @@
 #define cmdMAX_INPUT_SIZE      60\r
 \r
 /* Dimensions the buffer into which string outputs can be placed. */\r
-#define cmdMAX_OUTPUT_SIZE     1024\r
+#define cmdMAX_OUTPUT_SIZE     1250\r
 \r
 /* Dimensions the buffer passed to the recvfrom() call. */\r
 #define cmdSOCKET_INPUT_BUFFER_SIZE 60\r
index e9006adf741d5b9d055b018c4d73daeea0fab4f7..a4d204b58f6c9dfa0b8dbcbefcdc55fab07f8765 100644 (file)
@@ -392,7 +392,7 @@ xIPStackEvent_t xReceivedEvent;
 \r
        /* Create the ARP timer, but don't start it until the network has\r
        connected. */\r
-       xARPTimer = xTimerCreate(       "ARPTimer", ( ipARP_TIMER_PERIOD_MS / portTICK_RATE_MS ), pdTRUE, ( void * ) eARPTimerEvent, vIPFunctionsTimerCallback );\r
+       xARPTimer = xTimerCreate( "ARPTimer", ( ipARP_TIMER_PERIOD_MS / portTICK_RATE_MS ), pdTRUE, ( void * ) eARPTimerEvent, vIPFunctionsTimerCallback );\r
        configASSERT( xARPTimer );\r
 \r
        /* Generate a dummy message to say that the network connection has gone\r
index 619bdee3afef331e99dd5032a7e6690dece72b64..0d262194ad702d3b993ba446711260a697fe008c 100644 (file)
@@ -81,13 +81,12 @@ static void prvGMACRxCallback( uint32_t ulStatus );
 /* The queue used to communicate Ethernet events to the IP task. */\r
 extern xQueueHandle xNetworkEventQueue;\r
 \r
-/* The semaphore used to wake the deferred interrupt handler task when an Rx\r
-interrupt is received. */\r
-static xSemaphoreHandle xGMACRxEventSemaphore = NULL;\r
-\r
 /* The GMAC driver instance. */\r
 static gmac_device_t xGMACStruct;\r
 \r
+/* Handle of the task used to process MAC events. */\r
+static TaskHandle_t xMACEventHandlingTask = NULL;\r
+\r
 /*-----------------------------------------------------------*/\r
 \r
 BaseType_t xNetworkInterfaceInitialise( void )\r
@@ -123,20 +122,6 @@ BaseType_t xReturn = pdFALSE;
                        vTaskDelay( xPHYDelay_400ms * 2UL );\r
                        if( ethernet_phy_set_link( GMAC, BOARD_GMAC_PHY_ADDR, 1 ) == GMAC_OK )\r
                        {\r
-                               /* Create the event semaphore if it has not already been\r
-                               created. */\r
-                               if( xGMACRxEventSemaphore == NULL )\r
-                               {\r
-                                       xGMACRxEventSemaphore = xSemaphoreCreateCounting( ULONG_MAX, 0 );\r
-                                       #if ipconfigINCLUDE_EXAMPLE_FREERTOS_PLUS_TRACE_CALLS == 1\r
-                                       {\r
-                                               /* If the trace recorder code is included name the semaphore for\r
-                                               viewing in FreeRTOS+Trace. */\r
-                                               vTraceSetQueueName( xGMACRxEventSemaphore, "MAC_RX" );\r
-                                       }\r
-                                       #endif /*  ipconfigINCLUDE_EXAMPLE_FREERTOS_PLUS_TRACE_CALLS == 1 */\r
-                               }\r
-\r
                                /* Register the callbacks. */\r
                                gmac_dev_set_rx_callback( &xGMACStruct, prvGMACRxCallback );\r
 \r
@@ -149,7 +134,7 @@ BaseType_t xReturn = pdFALSE;
                                                                configMINIMAL_STACK_SIZE,       /* Stack allocated to the task (defined in words, not bytes). */\r
                                                                NULL,                                           /* The task parameter is not used. */\r
                                                                configMAX_PRIORITIES - 1,       /* The priority assigned to the task. */\r
-                                                               NULL );                                         /* The handle is not required, so NULL is passed. */\r
+                                                               &xMACEventHandlingTask );       /* The handle is stored so the ISR knows which task to notify. */\r
 \r
                                /* Enable the interrupt and set its priority as configured.\r
                                THIS DRIVER REQUIRES configMAC_INTERRUPT_PRIORITY TO BE DEFINED,\r
@@ -169,10 +154,12 @@ static void prvGMACRxCallback( uint32_t ulStatus )
 {\r
 BaseType_t xHigherPriorityTaskWoken = pdFALSE;\r
 \r
+       configASSERT( xMACEventHandlingTask );\r
+\r
        /* Unblock the deferred interrupt handler task if the event was an Rx. */\r
        if( ulStatus == GMAC_RSR_REC )\r
        {\r
-               xSemaphoreGiveFromISR( xGMACRxEventSemaphore, &xHigherPriorityTaskWoken );\r
+               xTaskNotifyGiveFromISR( xMACEventHandlingTask, &xHigherPriorityTaskWoken );\r
        }\r
 \r
        portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );\r
@@ -220,8 +207,9 @@ xIPStackEvent_t xRxEvent = { eEthernetRxEvent, NULL };
 static const TickType_t xBufferWaitDelay = 1500UL / portTICK_RATE_MS;\r
 uint32_t ulReturned;\r
 \r
+       /* This is a very simply but also inefficient implementation. */\r
+\r
        ( void ) pvParameters;\r
-       configASSERT( xGMACRxEventSemaphore );\r
 \r
        for( ;; )\r
        {\r
@@ -229,9 +217,9 @@ uint32_t ulReturned;
                received.  The while() loop is only needed if INCLUDE_vTaskSuspend is\r
                set to 0 in FreeRTOSConfig.h.  If INCLUDE_vTaskSuspend is set to 1\r
                then portMAX_DELAY would be an indefinite block time and\r
-               xSemaphoreTake() would only return when the semaphore was actually\r
-               obtained. */\r
-               while( xSemaphoreTake( xGMACRxEventSemaphore, portMAX_DELAY ) == pdFALSE );\r
+               xTaskNotifyTake() would only return when the task was actually\r
+               notified. */\r
+               while( ulTaskNotifyTake( pdFALSE, portMAX_DELAY ) == 0 );\r
 \r
                /* Allocate a buffer to hold the data. */\r
                pxNetworkBuffer = pxNetworkBufferGet( ipTOTAL_ETHERNET_FRAME_SIZE, xBufferWaitDelay );\r
index 4d3070ec6d08c98234a1f14c80bdccbc89f92b6e..40c44a1b156d2d91e8906eca63f8cfb2f32b9ed4 100644 (file)
@@ -73,7 +73,7 @@
       <OPTFL>
         <tvExp>1</tvExp>
         <tvExpOptDlg>0</tvExpOptDlg>
-        <IsCurrentTarget>1</IsCurrentTarget>
+        <IsCurrentTarget>0</IsCurrentTarget>
       </OPTFL>
       <CpuCode>255</CpuCode>
       <Books>
           <Path>datashts\arm\cortex_m4\r0p1\DUI0553A_CORTEX_M4_DGUG.PDF</Path>
         </Book>
       </Books>
-      <DllOpt>
-        <SimDllName>SARMCM3.DLL</SimDllName>
-        <SimDllArguments>-MPU -REMAP</SimDllArguments>
-        <SimDlgDllName>DCM.DLL</SimDlgDllName>
-        <SimDlgDllArguments>-pCM4</SimDlgDllArguments>
-        <TargetDllName>SARMCM3.DLL</TargetDllName>
-        <TargetDllArguments>-MPU</TargetDllArguments>
-        <TargetDlgDllName>TCM.DLL</TargetDlgDllName>
-        <TargetDlgDllArguments>-pCM4</TargetDlgDllArguments>
-      </DllOpt>
       <DebugOpt>
         <uSim>0</uSim>
         <uTrg>1</uTrg>
         <tRfunc>0</tRfunc>
         <tRbox>1</tRbox>
         <tRtrace>0</tRtrace>
+        <sRSysVw>1</sRSysVw>
+        <tRSysVw>1</tRSysVw>
         <sRunDeb>0</sRunDeb>
         <sLrtime>0</sLrtime>
-        <nTsel>7</nTsel>
+        <nTsel>6</nTsel>
         <sDll></sDll>
         <sDllPa></sDllPa>
         <sDlgDll></sDlgDll>
           <WinNumber>1</WinNumber>
           <SubType>5</SubType>
           <ItemText>0x0C000000</ItemText>
+          <AccSizeX>0</AccSizeX>
         </Mm>
       </MemoryWindow1>
       <Tracepoint>
       <OPTFL>
         <tvExp>1</tvExp>
         <tvExpOptDlg>0</tvExpOptDlg>
-        <IsCurrentTarget>0</IsCurrentTarget>
+        <IsCurrentTarget>1</IsCurrentTarget>
       </OPTFL>
       <CpuCode>255</CpuCode>
       <Books>
           <Path>datashts\arm\cortex_m4\r0p1\DUI0553A_CORTEX_M4_DGUG.PDF</Path>
         </Book>
       </Books>
-      <DllOpt>
-        <SimDllName>SARMCM3.DLL</SimDllName>
-        <SimDllArguments>-MPU -REMAP</SimDllArguments>
-        <SimDlgDllName>DCM.DLL</SimDlgDllName>
-        <SimDlgDllArguments>-pCM4</SimDlgDllArguments>
-        <TargetDllName>SARMCM3.DLL</TargetDllName>
-        <TargetDllArguments>-MPU</TargetDllArguments>
-        <TargetDlgDllName>TCM.DLL</TargetDlgDllName>
-        <TargetDlgDllArguments>-pCM4</TargetDlgDllArguments>
-      </DllOpt>
       <DebugOpt>
         <uSim>0</uSim>
         <uTrg>1</uTrg>
         <tRfunc>0</tRfunc>
         <tRbox>1</tRbox>
         <tRtrace>0</tRtrace>
+        <sRSysVw>1</sRSysVw>
+        <tRSysVw>1</tRSysVw>
         <sRunDeb>0</sRunDeb>
         <sLrtime>0</sLrtime>
-        <nTsel>7</nTsel>
+        <nTsel>6</nTsel>
         <sDll></sDll>
         <sDllPa></sDllPa>
         <sDlgDll></sDlgDll>
           <WinNumber>1</WinNumber>
           <SubType>2</SubType>
           <ItemText>0x20005f90</ItemText>
+          <AccSizeX>0</AccSizeX>
         </Mm>
       </MemoryWindow1>
       <Tracepoint>
       <DebugFlag>
         <trace>0</trace>
         <periodic>1</periodic>
-        <aLwin>1</aLwin>
+        <aLwin>0</aLwin>
         <aCover>0</aCover>
         <aSer1>0</aSer1>
         <aSer2>0</aSer2>
           <Path>datashts\arm\cortex_m4\r0p1\DUI0553A_CORTEX_M4_DGUG.PDF</Path>
         </Book>
       </Books>
-      <DllOpt>
-        <SimDllName>SARMCM3.DLL</SimDllName>
-        <SimDllArguments>-MPU -REMAP</SimDllArguments>
-        <SimDlgDllName>DCM.DLL</SimDlgDllName>
-        <SimDlgDllArguments>-pCM4</SimDlgDllArguments>
-        <TargetDllName>SARMCM3.DLL</TargetDllName>
-        <TargetDllArguments>-MPU</TargetDllArguments>
-        <TargetDlgDllName>TCM.DLL</TargetDlgDllName>
-        <TargetDlgDllArguments>-pCM4</TargetDlgDllArguments>
-      </DllOpt>
       <DebugOpt>
         <uSim>0</uSim>
         <uTrg>1</uTrg>
         <tRfunc>0</tRfunc>
         <tRbox>1</tRbox>
         <tRtrace>0</tRtrace>
+        <sRSysVw>1</sRSysVw>
+        <tRSysVw>1</tRSysVw>
         <sRunDeb>0</sRunDeb>
         <sLrtime>0</sLrtime>
         <nTsel>7</nTsel>
           <WinNumber>1</WinNumber>
           <SubType>5</SubType>
           <ItemText>0x0C000000</ItemText>
+          <AccSizeX>0</AccSizeX>
         </Mm>
       </MemoryWindow1>
       <Tracepoint>
       <FileType>2</FileType>
       <tvExp>0</tvExp>
       <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
       <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>277</TopLine>
-      <CurrentLine>289</CurrentLine>
       <bDave2>0</bDave2>
       <PathWithFileName>.\startup_XMC4500.s</PathWithFileName>
       <FilenameWithoutPath>startup_XMC4500.s</FilenameWithoutPath>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
       <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
       <bDave2>0</bDave2>
       <PathWithFileName>.\System_XMC4500.c</PathWithFileName>
       <FilenameWithoutPath>System_XMC4500.c</FilenameWithoutPath>
       <FileType>2</FileType>
       <tvExp>0</tvExp>
       <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
       <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>276</TopLine>
-      <CurrentLine>288</CurrentLine>
       <bDave2>0</bDave2>
       <PathWithFileName>.\startup_XMC4200.s</PathWithFileName>
       <FilenameWithoutPath>startup_XMC4200.s</FilenameWithoutPath>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
       <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
       <bDave2>0</bDave2>
       <PathWithFileName>.\system_XMC4200.c</PathWithFileName>
       <FilenameWithoutPath>system_XMC4200.c</FilenameWithoutPath>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <Focus>0</Focus>
-      <ColumnNumber>7</ColumnNumber>
       <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
       <bDave2>0</bDave2>
       <PathWithFileName>.\system_XMC4400.c</PathWithFileName>
       <FilenameWithoutPath>system_XMC4400.c</FilenameWithoutPath>
       <FileType>2</FileType>
       <tvExp>0</tvExp>
       <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
       <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>276</TopLine>
-      <CurrentLine>288</CurrentLine>
       <bDave2>0</bDave2>
       <PathWithFileName>.\startup_XMC4400.s</PathWithFileName>
       <FilenameWithoutPath>startup_XMC4400.s</FilenameWithoutPath>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <Focus>0</Focus>
-      <ColumnNumber>45</ColumnNumber>
       <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>63</TopLine>
-      <CurrentLine>97</CurrentLine>
       <bDave2>0</bDave2>
       <PathWithFileName>.\main.c</PathWithFileName>
       <FilenameWithoutPath>main.c</FilenameWithoutPath>
       <FileType>5</FileType>
       <tvExp>0</tvExp>
       <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
       <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>1</TopLine>
-      <CurrentLine>1</CurrentLine>
       <bDave2>0</bDave2>
       <PathWithFileName>.\FreeRTOSConfig.h</PathWithFileName>
       <FilenameWithoutPath>FreeRTOSConfig.h</FilenameWithoutPath>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
       <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
       <bDave2>0</bDave2>
       <PathWithFileName>.\RegTest.c</PathWithFileName>
       <FilenameWithoutPath>RegTest.c</FilenameWithoutPath>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
       <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
       <bDave2>0</bDave2>
       <PathWithFileName>.\main_full.c</PathWithFileName>
       <FilenameWithoutPath>main_full.c</FilenameWithoutPath>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
       <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
       <bDave2>0</bDave2>
       <PathWithFileName>.\main_blinky.c</PathWithFileName>
       <FilenameWithoutPath>main_blinky.c</FilenameWithoutPath>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
       <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
       <bDave2>0</bDave2>
       <PathWithFileName>..\..\Source\timers.c</PathWithFileName>
       <FilenameWithoutPath>timers.c</FilenameWithoutPath>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
       <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
       <bDave2>0</bDave2>
       <PathWithFileName>..\..\Source\list.c</PathWithFileName>
       <FilenameWithoutPath>list.c</FilenameWithoutPath>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
       <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>552</TopLine>
-      <CurrentLine>560</CurrentLine>
       <bDave2>0</bDave2>
       <PathWithFileName>..\..\Source\queue.c</PathWithFileName>
       <FilenameWithoutPath>queue.c</FilenameWithoutPath>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
       <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
       <bDave2>0</bDave2>
       <PathWithFileName>..\..\Source\tasks.c</PathWithFileName>
       <FilenameWithoutPath>tasks.c</FilenameWithoutPath>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
       <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>420</TopLine>
-      <CurrentLine>428</CurrentLine>
       <bDave2>0</bDave2>
       <PathWithFileName>..\..\Source\portable\RVDS\ARM_CM4F\port.c</PathWithFileName>
       <FilenameWithoutPath>port.c</FilenameWithoutPath>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
       <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
       <bDave2>0</bDave2>
       <PathWithFileName>..\..\Source\portable\MemMang\heap_4.c</PathWithFileName>
       <FilenameWithoutPath>heap_4.c</FilenameWithoutPath>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
       <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
       <bDave2>0</bDave2>
       <PathWithFileName>..\Common\Minimal\semtest.c</PathWithFileName>
       <FilenameWithoutPath>semtest.c</FilenameWithoutPath>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
       <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>254</TopLine>
-      <CurrentLine>262</CurrentLine>
       <bDave2>0</bDave2>
       <PathWithFileName>..\Common\Minimal\sp_flop.c</PathWithFileName>
       <FilenameWithoutPath>sp_flop.c</FilenameWithoutPath>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
       <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
       <bDave2>0</bDave2>
       <PathWithFileName>..\Common\Minimal\blocktim.c</PathWithFileName>
       <FilenameWithoutPath>blocktim.c</FilenameWithoutPath>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
       <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
       <bDave2>0</bDave2>
       <PathWithFileName>..\Common\Minimal\countsem.c</PathWithFileName>
       <FilenameWithoutPath>countsem.c</FilenameWithoutPath>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
       <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
       <bDave2>0</bDave2>
       <PathWithFileName>..\Common\Minimal\dynamic.c</PathWithFileName>
       <FilenameWithoutPath>dynamic.c</FilenameWithoutPath>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
       <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
       <bDave2>0</bDave2>
       <PathWithFileName>..\Common\Minimal\GenQTest.c</PathWithFileName>
       <FilenameWithoutPath>GenQTest.c</FilenameWithoutPath>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <Focus>0</Focus>
-      <ColumnNumber>0</ColumnNumber>
       <tvExpOptDlg>0</tvExpOptDlg>
-      <TopLine>0</TopLine>
-      <CurrentLine>0</CurrentLine>
       <bDave2>0</bDave2>
       <PathWithFileName>..\Common\Minimal\recmutex.c</PathWithFileName>
       <FilenameWithoutPath>recmutex.c</FilenameWithoutPath>
index eed7550aa9fbf8e1bbb081523e71c95c375eefa6..54126d504aa14cf31a62711cfa7baf0855f53a08 100644 (file)
@@ -30,6 +30,7 @@
           <SLE66AMisc></SLE66AMisc>
           <SLE66LinkerMisc></SLE66LinkerMisc>
           <SFDFile>SFD\Infineon\XMC4500\xmc4500.sfr</SFDFile>
+          <bCustSvd>0</bCustSvd>
           <UseEnv>0</UseEnv>
           <BinPath></BinPath>
           <IncludePath></IncludePath>
@@ -71,6 +72,8 @@
             <UserProg2Name></UserProg2Name>
             <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
             <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+            <nStopB1X>0</nStopB1X>
+            <nStopB2X>0</nStopB2X>
           </BeforeMake>
           <AfterMake>
             <RunUserProg1>0</RunUserProg1>
           <StopOnExitCode>3</StopOnExitCode>
           <CustomArgument></CustomArgument>
           <IncludeLibraryModules></IncludeLibraryModules>
+          <ComprImg>1</ComprImg>
         </CommonProperty>
         <DllOption>
           <SimDllName>SARMCM3.DLL</SimDllName>
             <RestoreFunctions>1</RestoreFunctions>
             <RestoreToolbox>1</RestoreToolbox>
             <LimitSpeedToRealTime>0</LimitSpeedToRealTime>
+            <RestoreSysVw>1</RestoreSysVw>
           </Simulator>
           <Target>
             <UseTarget>1</UseTarget>
             <RestoreFunctions>0</RestoreFunctions>
             <RestoreToolbox>1</RestoreToolbox>
             <RestoreTracepoints>0</RestoreTracepoints>
+            <RestoreSysVw>1</RestoreSysVw>
           </Target>
           <RunDebugAfterBuild>0</RunDebugAfterBuild>
-          <TargetSelection>7</TargetSelection>
+          <TargetSelection>6</TargetSelection>
           <SimDlls>
             <CpuDll></CpuDll>
             <CpuDllArguments></CpuDllArguments>
           <Flash2>BIN\UL2CM3.DLL</Flash2>
           <Flash3>"" ()</Flash3>
           <Flash4></Flash4>
+          <pFcarmOut></pFcarmOut>
+          <pFcarmGrp></pFcarmGrp>
+          <pFcArmRoot></pFcArmRoot>
+          <FcArmLst>0</FcArmLst>
         </Utilities>
         <TargetArmAds>
           <ArmAdsMisc>
             <wLevel>0</wLevel>
             <uThumb>0</uThumb>
             <uSurpInc>0</uSurpInc>
+            <uC99>0</uC99>
+            <useXO>0</useXO>
             <VariousControls>
               <MiscControls>--cpu Cortex-M4.fp --no_allow_fpreg_for_nonfpdata</MiscControls>
               <Define>rvkdm PART_XMC4500</Define>
             <SwStkChk>0</SwStkChk>
             <NoWarn>0</NoWarn>
             <uSurpInc>0</uSurpInc>
+            <useXO>0</useXO>
             <VariousControls>
               <MiscControls></MiscControls>
               <Define></Define>
             <useFile>0</useFile>
             <TextAddressRange>0x0C000000</TextAddressRange>
             <DataAddressRange>0x10000000</DataAddressRange>
+            <pXoBase></pXoBase>
             <ScatterFile></ScatterFile>
             <IncludeLibs></IncludeLibs>
             <IncludeLibsPath></IncludeLibsPath>
                   <StopOnExitCode>11</StopOnExitCode>
                   <CustomArgument></CustomArgument>
                   <IncludeLibraryModules></IncludeLibraryModules>
+                  <ComprImg>1</ComprImg>
                 </CommonProperty>
                 <FileArmAds>
                   <Aads>
                     <SwStkChk>2</SwStkChk>
                     <NoWarn>2</NoWarn>
                     <uSurpInc>2</uSurpInc>
+                    <useXO>2</useXO>
                     <VariousControls>
                       <MiscControls></MiscControls>
                       <Define></Define>
                   <StopOnExitCode>11</StopOnExitCode>
                   <CustomArgument></CustomArgument>
                   <IncludeLibraryModules></IncludeLibraryModules>
+                  <ComprImg>1</ComprImg>
                 </CommonProperty>
                 <FileArmAds>
                   <Cads>
                     <wLevel>0</wLevel>
                     <uThumb>2</uThumb>
                     <uSurpInc>2</uSurpInc>
+                    <uC99>2</uC99>
+                    <useXO>2</useXO>
                     <VariousControls>
                       <MiscControls></MiscControls>
                       <Define></Define>
                   <StopOnExitCode>11</StopOnExitCode>
                   <CustomArgument></CustomArgument>
                   <IncludeLibraryModules></IncludeLibraryModules>
+                  <ComprImg>1</ComprImg>
                 </CommonProperty>
                 <FileArmAds>
                   <Cads>
                     <wLevel>0</wLevel>
                     <uThumb>2</uThumb>
                     <uSurpInc>2</uSurpInc>
+                    <uC99>2</uC99>
+                    <useXO>2</useXO>
                     <VariousControls>
                       <MiscControls></MiscControls>
                       <Define></Define>
                   <StopOnExitCode>11</StopOnExitCode>
                   <CustomArgument></CustomArgument>
                   <IncludeLibraryModules></IncludeLibraryModules>
+                  <ComprImg>1</ComprImg>
                 </CommonProperty>
                 <FileArmAds>
                   <Aads>
                     <SwStkChk>2</SwStkChk>
                     <NoWarn>2</NoWarn>
                     <uSurpInc>2</uSurpInc>
+                    <useXO>2</useXO>
                     <VariousControls>
                       <MiscControls></MiscControls>
                       <Define></Define>
           <SLE66AMisc></SLE66AMisc>
           <SLE66LinkerMisc></SLE66LinkerMisc>
           <SFDFile>SFD\Infineon\XMC4400\xmc4400.SFR</SFDFile>
+          <bCustSvd>0</bCustSvd>
           <UseEnv>0</UseEnv>
           <BinPath></BinPath>
           <IncludePath></IncludePath>
             <UserProg2Name></UserProg2Name>
             <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
             <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+            <nStopB1X>0</nStopB1X>
+            <nStopB2X>0</nStopB2X>
           </BeforeMake>
           <AfterMake>
             <RunUserProg1>0</RunUserProg1>
           <StopOnExitCode>3</StopOnExitCode>
           <CustomArgument></CustomArgument>
           <IncludeLibraryModules></IncludeLibraryModules>
+          <ComprImg>1</ComprImg>
         </CommonProperty>
         <DllOption>
           <SimDllName>SARMCM3.DLL</SimDllName>
             <RestoreFunctions>1</RestoreFunctions>
             <RestoreToolbox>1</RestoreToolbox>
             <LimitSpeedToRealTime>0</LimitSpeedToRealTime>
+            <RestoreSysVw>1</RestoreSysVw>
           </Simulator>
           <Target>
             <UseTarget>1</UseTarget>
             <RestoreFunctions>0</RestoreFunctions>
             <RestoreToolbox>1</RestoreToolbox>
             <RestoreTracepoints>0</RestoreTracepoints>
+            <RestoreSysVw>1</RestoreSysVw>
           </Target>
           <RunDebugAfterBuild>0</RunDebugAfterBuild>
-          <TargetSelection>7</TargetSelection>
+          <TargetSelection>6</TargetSelection>
           <SimDlls>
             <CpuDll></CpuDll>
             <CpuDllArguments></CpuDllArguments>
           <Flash2>BIN\UL2CM3.DLL</Flash2>
           <Flash3></Flash3>
           <Flash4></Flash4>
+          <pFcarmOut></pFcarmOut>
+          <pFcarmGrp></pFcarmGrp>
+          <pFcArmRoot></pFcArmRoot>
+          <FcArmLst>0</FcArmLst>
         </Utilities>
         <TargetArmAds>
           <ArmAdsMisc>
           </ArmAdsMisc>
           <Cads>
             <interw>1</interw>
-            <Optim>2</Optim>
+            <Optim>1</Optim>
             <oTime>0</oTime>
             <SplitLS>0</SplitLS>
             <OneElfS>0</OneElfS>
             <wLevel>0</wLevel>
             <uThumb>0</uThumb>
             <uSurpInc>0</uSurpInc>
+            <uC99>0</uC99>
+            <useXO>0</useXO>
             <VariousControls>
               <MiscControls>--cpu Cortex-M4.fp --no_allow_fpreg_for_nonfpdata</MiscControls>
               <Define>rvkdm PART_XMC4400</Define>
             <SwStkChk>0</SwStkChk>
             <NoWarn>0</NoWarn>
             <uSurpInc>0</uSurpInc>
+            <useXO>0</useXO>
             <VariousControls>
               <MiscControls></MiscControls>
               <Define></Define>
             <useFile>0</useFile>
             <TextAddressRange>0x0C000000</TextAddressRange>
             <DataAddressRange>0x10000000</DataAddressRange>
+            <pXoBase></pXoBase>
             <ScatterFile></ScatterFile>
             <IncludeLibs></IncludeLibs>
             <IncludeLibsPath></IncludeLibsPath>
                   <StopOnExitCode>11</StopOnExitCode>
                   <CustomArgument></CustomArgument>
                   <IncludeLibraryModules></IncludeLibraryModules>
+                  <ComprImg>1</ComprImg>
                 </CommonProperty>
                 <FileArmAds>
                   <Aads>
                     <SwStkChk>2</SwStkChk>
                     <NoWarn>2</NoWarn>
                     <uSurpInc>2</uSurpInc>
+                    <useXO>2</useXO>
                     <VariousControls>
                       <MiscControls></MiscControls>
                       <Define></Define>
                   <StopOnExitCode>11</StopOnExitCode>
                   <CustomArgument></CustomArgument>
                   <IncludeLibraryModules></IncludeLibraryModules>
+                  <ComprImg>1</ComprImg>
                 </CommonProperty>
                 <FileArmAds>
                   <Cads>
                     <wLevel>0</wLevel>
                     <uThumb>2</uThumb>
                     <uSurpInc>2</uSurpInc>
+                    <uC99>2</uC99>
+                    <useXO>2</useXO>
                     <VariousControls>
                       <MiscControls></MiscControls>
                       <Define></Define>
                   <StopOnExitCode>11</StopOnExitCode>
                   <CustomArgument></CustomArgument>
                   <IncludeLibraryModules></IncludeLibraryModules>
+                  <ComprImg>1</ComprImg>
                 </CommonProperty>
                 <FileArmAds>
                   <Aads>
                     <SwStkChk>2</SwStkChk>
                     <NoWarn>2</NoWarn>
                     <uSurpInc>2</uSurpInc>
+                    <useXO>2</useXO>
                     <VariousControls>
                       <MiscControls></MiscControls>
                       <Define></Define>
                   <StopOnExitCode>11</StopOnExitCode>
                   <CustomArgument></CustomArgument>
                   <IncludeLibraryModules></IncludeLibraryModules>
+                  <ComprImg>1</ComprImg>
                 </CommonProperty>
                 <FileArmAds>
                   <Cads>
                     <wLevel>0</wLevel>
                     <uThumb>2</uThumb>
                     <uSurpInc>2</uSurpInc>
+                    <uC99>2</uC99>
+                    <useXO>2</useXO>
                     <VariousControls>
                       <MiscControls></MiscControls>
                       <Define></Define>
           <SLE66AMisc></SLE66AMisc>
           <SLE66LinkerMisc></SLE66LinkerMisc>
           <SFDFile>SFD\Infineon\XMC4200-4100\xmc4200.SFR</SFDFile>
+          <bCustSvd>0</bCustSvd>
           <UseEnv>0</UseEnv>
           <BinPath></BinPath>
           <IncludePath></IncludePath>
             <UserProg2Name></UserProg2Name>
             <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
             <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+            <nStopB1X>0</nStopB1X>
+            <nStopB2X>0</nStopB2X>
           </BeforeMake>
           <AfterMake>
             <RunUserProg1>0</RunUserProg1>
           <StopOnExitCode>3</StopOnExitCode>
           <CustomArgument></CustomArgument>
           <IncludeLibraryModules></IncludeLibraryModules>
+          <ComprImg>1</ComprImg>
         </CommonProperty>
         <DllOption>
           <SimDllName>SARMCM3.DLL</SimDllName>
             <RestoreFunctions>1</RestoreFunctions>
             <RestoreToolbox>1</RestoreToolbox>
             <LimitSpeedToRealTime>0</LimitSpeedToRealTime>
+            <RestoreSysVw>1</RestoreSysVw>
           </Simulator>
           <Target>
             <UseTarget>1</UseTarget>
             <RestoreFunctions>0</RestoreFunctions>
             <RestoreToolbox>1</RestoreToolbox>
             <RestoreTracepoints>0</RestoreTracepoints>
+            <RestoreSysVw>1</RestoreSysVw>
           </Target>
           <RunDebugAfterBuild>0</RunDebugAfterBuild>
           <TargetSelection>7</TargetSelection>
           <Flash2>BIN\UL2CM3.DLL</Flash2>
           <Flash3>"" ()</Flash3>
           <Flash4></Flash4>
+          <pFcarmOut></pFcarmOut>
+          <pFcarmGrp></pFcarmGrp>
+          <pFcArmRoot></pFcArmRoot>
+          <FcArmLst>0</FcArmLst>
         </Utilities>
         <TargetArmAds>
           <ArmAdsMisc>
             <wLevel>0</wLevel>
             <uThumb>0</uThumb>
             <uSurpInc>0</uSurpInc>
+            <uC99>0</uC99>
+            <useXO>0</useXO>
             <VariousControls>
               <MiscControls>--cpu Cortex-M4.fp --no_allow_fpreg_for_nonfpdata</MiscControls>
               <Define>rvkdm PART_XMC4200</Define>
             <SwStkChk>0</SwStkChk>
             <NoWarn>0</NoWarn>
             <uSurpInc>0</uSurpInc>
+            <useXO>0</useXO>
             <VariousControls>
               <MiscControls></MiscControls>
               <Define></Define>
             <useFile>0</useFile>
             <TextAddressRange>0x0C000000</TextAddressRange>
             <DataAddressRange>0x10000000</DataAddressRange>
+            <pXoBase></pXoBase>
             <ScatterFile></ScatterFile>
             <IncludeLibs></IncludeLibs>
             <IncludeLibsPath></IncludeLibsPath>
                   <StopOnExitCode>11</StopOnExitCode>
                   <CustomArgument></CustomArgument>
                   <IncludeLibraryModules></IncludeLibraryModules>
+                  <ComprImg>1</ComprImg>
                 </CommonProperty>
                 <FileArmAds>
                   <Aads>
                     <SwStkChk>2</SwStkChk>
                     <NoWarn>2</NoWarn>
                     <uSurpInc>2</uSurpInc>
+                    <useXO>2</useXO>
                     <VariousControls>
                       <MiscControls></MiscControls>
                       <Define></Define>
                   <StopOnExitCode>11</StopOnExitCode>
                   <CustomArgument></CustomArgument>
                   <IncludeLibraryModules></IncludeLibraryModules>
+                  <ComprImg>1</ComprImg>
                 </CommonProperty>
                 <FileArmAds>
                   <Cads>
                     <wLevel>0</wLevel>
                     <uThumb>2</uThumb>
                     <uSurpInc>2</uSurpInc>
+                    <uC99>2</uC99>
+                    <useXO>2</useXO>
                     <VariousControls>
                       <MiscControls></MiscControls>
                       <Define></Define>
                   <StopOnExitCode>11</StopOnExitCode>
                   <CustomArgument></CustomArgument>
                   <IncludeLibraryModules></IncludeLibraryModules>
+                  <ComprImg>1</ComprImg>
                 </CommonProperty>
                 <FileArmAds>
                   <Cads>
                     <wLevel>0</wLevel>
                     <uThumb>2</uThumb>
                     <uSurpInc>2</uSurpInc>
+                    <uC99>2</uC99>
+                    <useXO>2</useXO>
                     <VariousControls>
                       <MiscControls></MiscControls>
                       <Define></Define>
                   <StopOnExitCode>11</StopOnExitCode>
                   <CustomArgument></CustomArgument>
                   <IncludeLibraryModules></IncludeLibraryModules>
+                  <ComprImg>1</ComprImg>
                 </CommonProperty>
                 <FileArmAds>
                   <Aads>
                     <SwStkChk>2</SwStkChk>
                     <NoWarn>2</NoWarn>
                     <uSurpInc>2</uSurpInc>
+                    <useXO>2</useXO>
                     <VariousControls>
                       <MiscControls></MiscControls>
                       <Define></Define>
index 4cebd752971d5b9f3ae8a725c6e445f94d39b6bb..08cf7bfc19fe885da34795b35dcb85c47c0e1741 100644 (file)
Binary files a/FreeRTOS/Demo/CORTEX_M4_ATSAM4E_Atmel_Studio/RTOSDemo.atsuo and b/FreeRTOS/Demo/CORTEX_M4_ATSAM4E_Atmel_Studio/RTOSDemo.atsuo differ
index b917a2836c85190ebd13d4268d46d44b05d33e88..e3941f3a68a27106869e7e220da2ec1857e25182 100644 (file)
@@ -15,8 +15,9 @@
           <option id="sam.components.display.aat31xx" value="Add" config="" content-id="Atmel.ASF" />\r
           <option id="sam.components.display.ili93xx" value="Add" config="" content-id="Atmel.ASF" />\r
           <option id="sam.components.ethernet_phy.ksz8051mnl" value="Add" config="" content-id="Atmel.ASF" />\r
-          <option id="sam.drivers.gmac" value="Add" config="" content-id="Atmel.ASF" />\r
           <option id="sam.drivers.smc" value="Add" config="" content-id="Atmel.ASF" />\r
+          <option id="sam.drivers.gmac" value="Add" config="" content-id="Atmel.ASF" />\r
+          <option id="sam.drivers.tc" value="Add" config="" content-id="Atmel.ASF" />\r
           <option id="common.applications.user_application" value="Add" config="" content-id="Atmel.ASF" />\r
           <option id="sam.utils.cmsis.sam4e.source.template" value="Add" config="" content-id="Atmel.ASF" />\r
         </options>\r
           <file path="src/Config/conf_ili93xx.h" framework="" version="3.11.0" source="sam\components\display\ili93xx\module_config\conf_ili93xx.h" changed="False" content-id="Atmel.ASF" />\r
           <file path="src/ASF/sam/drivers/ebi/smc/smc.c" framework="" version="3.11.0" source="sam\drivers\ebi\smc\smc.c" changed="False" content-id="Atmel.ASF" />\r
           <file path="src/ASF/sam/drivers/ebi/smc/smc.h" framework="" version="3.11.0" source="sam\drivers\ebi\smc\smc.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/ASF/sam/drivers/tc/tc.c" framework="" version="3.11.0" source="sam\drivers\tc\tc.c" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/ASF/sam/drivers/tc/tc.h" framework="" version="3.11.0" source="sam\drivers\tc\tc.h" changed="False" content-id="Atmel.ASF" />\r
         </files>\r
         <documentation help="http://asf.atmel.com/docs/3.11.0/common.applications.user_application.sam4e_ek/html/index.html" />\r
         <offline-documentation help="" />\r
       <ToolOptions>\r
         <InterfaceProperties>\r
           <JtagEnableExtResetOnStartSession>false</JtagEnableExtResetOnStartSession>\r
-          <SwdClock>12000000</SwdClock>\r
+          <SwdClock>7020000</SwdClock>\r
         </InterfaceProperties>\r
         <InterfaceName>SWD</InterfaceName>\r
       </ToolOptions>\r
       <ToolType>com.atmel.avrdbg.tool.samice</ToolType>\r
-      <ToolNumber>000158000789</ToolNumber>\r
+      <ToolNumber>158000789</ToolNumber>\r
       <ToolName>J-Link</ToolName>\r
     </com_atmel_avrdbg_tool_samice>\r
     <avrtoolinterface>SWD</avrtoolinterface>\r
       <Value>../src/ASF/sam/components/display/aat31xx</Value>\r
       <Value>../src/ASF/sam/components/display/ili93xx</Value>\r
       <Value>../src/ASF/sam/drivers/ebi/smc</Value>\r
+      <Value>../src/ASF/sam/drivers/tc</Value>\r
     </ListValues>\r
   </armgcc.compiler.directories.IncludePaths>\r
   <armgcc.compiler.optimization.level>Optimize for size (-Os)</armgcc.compiler.optimization.level>\r
       <Value>../src/ASF/sam/components/display/aat31xx</Value>\r
       <Value>../src/ASF/sam/components/display/ili93xx</Value>\r
       <Value>../src/ASF/sam/drivers/ebi/smc</Value>\r
+      <Value>../src/ASF/sam/drivers/tc</Value>\r
     </ListValues>\r
   </armgcc.preprocessingassembler.general.IncludePaths>\r
 </ArmGcc>\r
       <Value>../src/ASF/sam/components/display/ili93xx</Value>\r
       <Value>../src/ASF/sam/drivers/ebi/smc</Value>\r
       <Value>../../../../FreeRTOS-Plus/Demo/Common/FreeRTOS_Plus_UDP_Demos/EchoClients</Value>\r
+      <Value>../src/ASF/sam/drivers/tc</Value>\r
     </ListValues>\r
   </armgcc.compiler.directories.IncludePaths>\r
   <armgcc.compiler.optimization.OtherFlags>-fdata-sections</armgcc.compiler.optimization.OtherFlags>\r
     </ListValues>\r
   </armgcc.linker.libraries.LibrarySearchPaths>\r
   <armgcc.linker.optimization.GarbageCollectUnusedSections>True</armgcc.linker.optimization.GarbageCollectUnusedSections>\r
+  <armgcc.linker.memorysettings.ExternalRAM />\r
   <armgcc.linker.miscellaneous.LinkerFlags>-Wl,--entry=Reset_Handler -Wl,--cref -mthumb -T../src/ASF/sam/utils/linker_scripts/sam4e/sam4e16e/gcc/flash.ld</armgcc.linker.miscellaneous.LinkerFlags>\r
   <armgcc.assembler.debugging.DebugLevel>Default (-g)</armgcc.assembler.debugging.DebugLevel>\r
   <armgcc.preprocessingassembler.general.AssemblerFlags>-DARM_MATH_CM4=true -DBOARD=SAM4E_EK -D__SAM4E16E__ -Dprintf=iprintf</armgcc.preprocessingassembler.general.AssemblerFlags>\r
       <Value>../src/ASF/sam/components/display/aat31xx</Value>\r
       <Value>../src/ASF/sam/components/display/ili93xx</Value>\r
       <Value>../src/ASF/sam/drivers/ebi/smc</Value>\r
+      <Value>../src/ASF/sam/drivers/tc</Value>\r
     </ListValues>\r
   </armgcc.preprocessingassembler.general.IncludePaths>\r
   <armgcc.preprocessingassembler.debugging.DebugLevel>Default (-Wa,-g)</armgcc.preprocessingassembler.debugging.DebugLevel>\r
       <SubType>compile</SubType>\r
       <Link>src\Common Demo Tasks\GenQTest.c</Link>\r
     </Compile>\r
+    <Compile Include="..\Common\Minimal\IntQueue.c">\r
+      <SubType>compile</SubType>\r
+      <Link>src\Common Demo Tasks\IntQueue.c</Link>\r
+    </Compile>\r
+    <Compile Include="..\Common\Minimal\IntSemTest.c">\r
+      <SubType>compile</SubType>\r
+      <Link>src\Common Demo Tasks\IntSemTest.c</Link>\r
+    </Compile>\r
     <Compile Include="..\Common\Minimal\QPeek.c">\r
       <SubType>compile</SubType>\r
       <Link>src\Common Demo Tasks\QPeek.c</Link>\r
       <SubType>compile</SubType>\r
       <Link>src\Common Demo Tasks\semtest.c</Link>\r
     </Compile>\r
+    <Compile Include="..\Common\Minimal\TaskNotify.c">\r
+      <SubType>compile</SubType>\r
+      <Link>src\Common Demo Tasks\TaskNotify.c</Link>\r
+    </Compile>\r
+    <Compile Include="..\Common\Minimal\TimerDemo.c">\r
+      <SubType>compile</SubType>\r
+      <Link>src\Common Demo Tasks\TimerDemo.c</Link>\r
+    </Compile>\r
     <Compile Include="src\ASF\sam\components\display\aat31xx\aat31xx.c">\r
       <SubType>compile</SubType>\r
     </Compile>\r
     <None Include="src\ASF\sam\drivers\ebi\smc\smc.h">\r
       <SubType>compile</SubType>\r
     </None>\r
+    <Compile Include="src\ASF\sam\drivers\tc\tc.c">\r
+      <SubType>compile</SubType>\r
+    </Compile>\r
+    <None Include="src\ASF\sam\drivers\tc\tc.h">\r
+      <SubType>compile</SubType>\r
+    </None>\r
     <Compile Include="src\ASF\sam\utils\syscalls\gcc\syscalls.c">\r
       <SubType>compile</SubType>\r
     </Compile>\r
     <Compile Include="src\FreeRTOS+\FreeRTOS+FAT SL\API\fat_sl.h">\r
       <SubType>compile</SubType>\r
     </Compile>\r
+    <Compile Include="src\IntQueueTimer.c">\r
+      <SubType>compile</SubType>\r
+    </Compile>\r
     <Compile Include="src\LCDUtils.c">\r
       <SubType>compile</SubType>\r
     </Compile>\r
     <Folder Include="src\ASF\sam\drivers\ebi\smc\" />\r
     <Folder Include="src\ASF\sam\drivers\gmac\" />\r
     <Folder Include="src\ASF\sam\drivers\pmc\" />\r
+    <Folder Include="src\ASF\sam\drivers\tc\" />\r
     <Folder Include="src\ASF\sam\utils\" />\r
     <Folder Include="src\ASF\sam\utils\cmsis\" />\r
     <Folder Include="src\ASF\sam\utils\cmsis\sam4e\" />\r
diff --git a/FreeRTOS/Demo/CORTEX_M4_ATSAM4E_Atmel_Studio/src/ASF/sam/drivers/tc/tc.c b/FreeRTOS/Demo/CORTEX_M4_ATSAM4E_Atmel_Studio/src/ASF/sam/drivers/tc/tc.c
new file mode 100644 (file)
index 0000000..dd95a52
--- /dev/null
@@ -0,0 +1,596 @@
+/**\r
+ * \file\r
+ *\r
+ * \brief Timer Counter (TC) driver for SAM.\r
+ *\r
+ * Copyright (c) 2011-2013 Atmel Corporation. All rights reserved.\r
+ *\r
+ * \asf_license_start\r
+ *\r
+ * \page License\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * 1. Redistributions of source code must retain the above copyright notice,\r
+ *    this list of conditions and the following disclaimer.\r
+ *\r
+ * 2. Redistributions in binary form must reproduce the above copyright notice,\r
+ *    this list of conditions and the following disclaimer in the documentation\r
+ *    and/or other materials provided with the distribution.\r
+ *\r
+ * 3. The name of Atmel may not be used to endorse or promote products derived\r
+ *    from this software without specific prior written permission.\r
+ *\r
+ * 4. This software may only be redistributed and used in connection with an\r
+ *    Atmel microcontroller product.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED\r
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR\r
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\r
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\r
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ * POSSIBILITY OF SUCH DAMAGE.\r
+ *\r
+ * \asf_license_stop\r
+ *\r
+ */\r
+\r
+#include <assert.h>\r
+#include "tc.h"\r
+\r
+/// @cond 0\r
+/**INDENT-OFF**/\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+/**INDENT-ON**/\r
+/// @endcond\r
+\r
+#define TC_WPMR_WPKEY_VALUE TC_WPMR_WPKEY((uint32_t)0x54494D)\r
+\r
+/**\r
+ * \defgroup sam_drivers_tc_group Timer Counter (TC)\r
+ *\r
+ * The Timer Counter (TC) includes three identical 32-bit Timer Counter\r
+ * channels. Each channel can be independently programmed to perform a wide\r
+ * range of functions including frequency measurement, event counting,\r
+ * interval measurement, pulse generation, delay timing and pulse width\r
+ * modulation.\r
+ *\r
+ * @{\r
+ */\r
+\r
+/**\r
+ * \brief Configure TC for timer, waveform generation or capture.\r
+ *\r
+ * \param p_tc Pointer to a TC instance.\r
+ * \param ul_channel Channel to configure.\r
+ * \param ul_mode Control mode register value to set.\r
+ *\r
+ * \attention If the TC is configured for waveform generation, the external\r
+ * event selection (EEVT) should only be set to \c TC_CMR_EEVT_TIOB or the\r
+ * equivalent value \c 0 if it really is the intention to use TIOB as an\r
+ * external event trigger.\n\r
+ * This is because the setting forces TIOB to be an input even if the\r
+ * external event trigger has not been enabled with \c TC_CMR_ENETRG, and\r
+ * thus prevents normal operation of TIOB.\r
+ */\r
+void tc_init(Tc *p_tc, uint32_t ul_channel, uint32_t ul_mode)\r
+{\r
+       TcChannel *tc_channel;\r
+\r
+       Assert(ul_channel <\r
+                       (sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0])));\r
+       tc_channel = p_tc->TC_CHANNEL + ul_channel;\r
+\r
+       /*  Disable TC clock. */\r
+       tc_channel->TC_CCR = TC_CCR_CLKDIS;\r
+\r
+       /*  Disable interrupts. */\r
+       tc_channel->TC_IDR = 0xFFFFFFFF;\r
+\r
+       /*  Clear status register. */\r
+       tc_channel->TC_SR;\r
+\r
+       /*  Set mode. */\r
+       tc_channel->TC_CMR = ul_mode;\r
+}\r
+\r
+/**\r
+ * \brief Asserts a SYNC signal to generate a software trigger to\r
+ * all channels.\r
+ *\r
+ * \param p_tc Pointer to a TC instance.\r
+ *\r
+ */\r
+void tc_sync_trigger(Tc *p_tc)\r
+{\r
+  p_tc->TC_BCR = TC_BCR_SYNC;\r
+}\r
+\r
+/**\r
+ * \brief Configure TC Block mode.\r
+ * \note tc_init() must be called first.\r
+ *\r
+ * \param p_tc Pointer to a TC instance.\r
+ * \param ul_blockmode Block mode register value to set.\r
+ *\r
+ */\r
+void tc_set_block_mode(Tc *p_tc, uint32_t ul_blockmode)\r
+{\r
+       p_tc->TC_BMR = ul_blockmode;\r
+}\r
+\r
+#if (!SAM3U)\r
+\r
+/**\r
+ * \brief Configure TC for 2-bit Gray Counter for Stepper Motor.\r
+ * \note tc_init() must be called first.\r
+ *\r
+ * \param p_tc Pointer to a TC instance.\r
+ * \param ul_channel Channel to configure.\r
+ * \param ul_steppermode Stepper motor mode register value to set.\r
+ *\r
+ * \return 0 for OK.\r
+ */\r
+uint32_t tc_init_2bit_gray(Tc *p_tc, uint32_t ul_channel,\r
+               uint32_t ul_steppermode)\r
+{\r
+       Assert(ul_channel <\r
+                       (sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0])));\r
+\r
+       p_tc->TC_CHANNEL[ul_channel].TC_SMMR = ul_steppermode;\r
+       return 0;\r
+}\r
+\r
+#endif\r
+\r
+/**\r
+ * \brief Start TC clock counter on the selected channel.\r
+ *\r
+ * \param p_tc Pointer to a TC instance.\r
+ * \param ul_channel Channel to configure.\r
+ */\r
+void tc_start(Tc *p_tc, uint32_t ul_channel)\r
+{\r
+       Assert(ul_channel <\r
+                       (sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0])));\r
+\r
+       p_tc->TC_CHANNEL[ul_channel].TC_CCR = TC_CCR_CLKEN | TC_CCR_SWTRG;\r
+}\r
+\r
+/**\r
+ * \brief Stop TC clock counter on the selected channel.\r
+ *\r
+ * \param p_tc Pointer to a TC instance.\r
+ * \param ul_channel Channel to configure.\r
+ */\r
+void tc_stop(Tc *p_tc, uint32_t ul_channel)\r
+{\r
+       Assert(ul_channel <\r
+                       (sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0])));\r
+\r
+       p_tc->TC_CHANNEL[ul_channel].TC_CCR = TC_CCR_CLKDIS;\r
+}\r
+\r
+/**\r
+ * \brief Read counter value on the selected channel.\r
+ *\r
+ * \param p_tc Pointer to a TC instance.\r
+ * \param ul_channel Channel to configure.\r
+ *\r
+ * \return Counter value.\r
+ */\r
+uint32_t tc_read_cv(Tc *p_tc, uint32_t ul_channel)\r
+{\r
+       Assert(ul_channel <\r
+                       (sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0])));\r
+\r
+       return p_tc->TC_CHANNEL[ul_channel].TC_CV;\r
+}\r
+\r
+/**\r
+ * \brief Read RA TC counter on the selected channel.\r
+ *\r
+ * \param p_tc Pointer to a TC instance.\r
+ * \param ul_channel Channel to configure.\r
+ *\r
+ * \return RA value.\r
+ */\r
+uint32_t tc_read_ra(Tc *p_tc, uint32_t ul_channel)\r
+{\r
+       Assert(ul_channel <\r
+                       (sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0])));\r
+\r
+       return p_tc->TC_CHANNEL[ul_channel].TC_RA;\r
+}\r
+\r
+/**\r
+ * \brief Read RB TC counter on the selected channel.\r
+ *\r
+ * \param p_tc Pointer to a TC instance.\r
+ * \param ul_channel Channel to configure.\r
+ *\r
+ * \return RB value.\r
+ */\r
+uint32_t tc_read_rb(Tc *p_tc, uint32_t ul_channel)\r
+{\r
+       Assert(ul_channel <\r
+                       (sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0])));\r
+\r
+       return p_tc->TC_CHANNEL[ul_channel].TC_RB;\r
+}\r
+\r
+/**\r
+ * \brief Read RC TC counter on the selected channel.\r
+ *\r
+ * \param p_tc Pointer to a TC instance.\r
+ * \param ul_channel Channel to configure.\r
+ *\r
+ * \return RC value.\r
+ */\r
+uint32_t tc_read_rc(Tc *p_tc, uint32_t ul_channel)\r
+{\r
+       Assert(ul_channel <\r
+                       (sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0])));\r
+\r
+       return p_tc->TC_CHANNEL[ul_channel].TC_RC;\r
+}\r
+\r
+/**\r
+ * \brief Write RA TC counter on the selected channel.\r
+ *\r
+ * \param p_tc Pointer to a TC instance.\r
+ * \param ul_channel Channel to configure.\r
+ * \param ul_value Value to set in register.\r
+ */\r
+void tc_write_ra(Tc *p_tc, uint32_t ul_channel,\r
+               uint32_t ul_value)\r
+{\r
+       Assert(ul_channel <\r
+                       (sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0])));\r
+\r
+       p_tc->TC_CHANNEL[ul_channel].TC_RA = ul_value;\r
+}\r
+\r
+/**\r
+ * \brief Write RB TC counter on the selected channel.\r
+ *\r
+ * \param p_tc Pointer to a TC instance.\r
+ * \param ul_channel Channel to configure.\r
+ * \param ul_value Value to set in register.\r
+ */\r
+void tc_write_rb(Tc *p_tc, uint32_t ul_channel,\r
+               uint32_t ul_value)\r
+{\r
+       Assert(ul_channel <\r
+                       (sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0])));\r
+\r
+       p_tc->TC_CHANNEL[ul_channel].TC_RB = ul_value;\r
+}\r
+\r
+/**\r
+ * \brief Write RC TC counter on the selected channel.\r
+ *\r
+ * \param p_tc Pointer to a TC instance.\r
+ * \param ul_channel Channel to configure.\r
+ * \param ul_value Value to set in register.\r
+ */\r
+void tc_write_rc(Tc *p_tc, uint32_t ul_channel,\r
+               uint32_t ul_value)\r
+{\r
+       Assert(ul_channel <\r
+                       (sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0])));\r
+\r
+       p_tc->TC_CHANNEL[ul_channel].TC_RC = ul_value;\r
+}\r
+\r
+/**\r
+ * \brief Enable TC interrupts on the selected channel.\r
+ *\r
+ * \param p_tc Pointer to a TC instance.\r
+ * \param ul_channel Channel to configure.\r
+ * \param ul_sources Interrupt sources bit map.\r
+ */\r
+void tc_enable_interrupt(Tc *p_tc, uint32_t ul_channel,\r
+               uint32_t ul_sources)\r
+{\r
+       TcChannel *tc_channel;\r
+\r
+       Assert(ul_channel <\r
+                       (sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0])));\r
+       tc_channel = p_tc->TC_CHANNEL + ul_channel;\r
+       tc_channel->TC_IER = ul_sources;\r
+}\r
+\r
+/**\r
+ * \brief Disable TC interrupts on the selected channel.\r
+ *\r
+ * \param p_tc Pointer to a TC instance.\r
+ * \param ul_channel Channel to configure.\r
+ * \param ul_sources Interrupt sources bit map.\r
+ */\r
+void tc_disable_interrupt(Tc *p_tc, uint32_t ul_channel,\r
+               uint32_t ul_sources)\r
+{\r
+       TcChannel *tc_channel;\r
+\r
+       Assert(ul_channel <\r
+                       (sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0])));\r
+       tc_channel = p_tc->TC_CHANNEL + ul_channel;\r
+       tc_channel->TC_IDR = ul_sources;\r
+}\r
+\r
+/**\r
+ * \brief Read TC interrupt mask on the selected channel.\r
+ *\r
+ * \param p_tc Pointer to a TC instance.\r
+ * \param ul_channel Channel to configure.\r
+ *\r
+ * \return The interrupt mask value.\r
+ */\r
+uint32_t tc_get_interrupt_mask(Tc *p_tc, uint32_t ul_channel)\r
+{\r
+       TcChannel *tc_channel;\r
+\r
+       Assert(ul_channel <\r
+                       (sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0])));\r
+       tc_channel = p_tc->TC_CHANNEL + ul_channel;\r
+       return tc_channel->TC_IMR;\r
+}\r
+\r
+/**\r
+ * \brief Get current status on the selected channel.\r
+ *\r
+ * \param p_tc Pointer to a TC instance.\r
+ * \param ul_channel Channel to configure.\r
+ *\r
+ * \return The current TC status.\r
+ */\r
+uint32_t tc_get_status(Tc *p_tc, uint32_t ul_channel)\r
+{\r
+       TcChannel *tc_channel;\r
+\r
+       Assert(ul_channel <\r
+                       (sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0])));\r
+       tc_channel = p_tc->TC_CHANNEL + ul_channel;\r
+       return tc_channel->TC_SR;\r
+}\r
+\r
+/* TC divisor used to find the lowest acceptable timer frequency */\r
+#define TC_DIV_FACTOR 65536\r
+\r
+#if (!SAM4L)\r
+\r
+#ifndef FREQ_SLOW_CLOCK_EXT\r
+#define FREQ_SLOW_CLOCK_EXT 32768 /* External slow clock frequency (hz) */\r
+#endif\r
+\r
+/**\r
+ * \brief Find the best MCK divisor.\r
+ *\r
+ * Finds the best MCK divisor given the timer frequency and MCK. The result\r
+ * is guaranteed to satisfy the following equation:\r
+ * \code\r
+ *   (MCK / (DIV * 65536)) <= freq <= (MCK / DIV)\r
+ * \endcode\r
+ * with DIV being the lowest possible value,\r
+ * to maximize timing adjust resolution.\r
+ *\r
+ * \param ul_freq  Desired timer frequency.\r
+ * \param ul_mck  Master clock frequency.\r
+ * \param p_uldiv  Divisor value.\r
+ * \param p_ultcclks  TCCLKS field value for divisor.\r
+ * \param ul_boardmck  Board clock frequency.\r
+ *\r
+ * \return 1 if a proper divisor has been found, otherwise 0.\r
+ */\r
+uint32_t tc_find_mck_divisor(uint32_t ul_freq, uint32_t ul_mck,\r
+               uint32_t *p_uldiv, uint32_t *p_ultcclks, uint32_t ul_boardmck)\r
+{\r
+       const uint32_t divisors[5] = { 2, 8, 32, 128,\r
+                       ul_boardmck / FREQ_SLOW_CLOCK_EXT };\r
+       uint32_t ul_index;\r
+       uint32_t ul_high, ul_low;\r
+\r
+       /*  Satisfy frequency bound. */\r
+       for (ul_index = 0;\r
+                       ul_index < (sizeof(divisors) / sizeof(divisors[0]));\r
+                       ul_index++) {\r
+               ul_high = ul_mck / divisors[ul_index];\r
+               ul_low  = ul_high / TC_DIV_FACTOR;\r
+               if (ul_freq > ul_high) {\r
+                       return 0;\r
+               } else if (ul_freq >= ul_low) {\r
+                       break;\r
+               }\r
+       }\r
+       if (ul_index >= (sizeof(divisors) / sizeof(divisors[0]))) {\r
+               return 0;\r
+       }\r
+\r
+       /*  Store results. */\r
+       if (p_uldiv) {\r
+               *p_uldiv = divisors[ul_index];\r
+       }\r
+\r
+       if (p_ultcclks) {\r
+               *p_ultcclks = ul_index;\r
+       }\r
+\r
+       return 1;\r
+}\r
+\r
+#endif\r
+\r
+#if (SAM4L)\r
+/**\r
+ * \brief Find the best PBA clock divisor.\r
+ *\r
+ * Finds the best divisor given the timer frequency and PBA clock. The result\r
+ * is guaranteed to satisfy the following equation:\r
+ * \code\r
+ *   (ul_pbaclk / (2* DIV * 65536)) <= freq <= (ul_pbaclk / (2* DIV))\r
+ * \endcode\r
+ * with DIV being the lowest possible value,\r
+ * to maximize timing adjust resolution.\r
+ *\r
+ * \param ul_freq  Desired timer frequency.\r
+ * \param ul_mck  PBA clock frequency.\r
+ * \param p_uldiv  Divisor value.\r
+ * \param p_ultcclks  TCCLKS field value for divisor.\r
+ * \param ul_boardmck  useless here.\r
+ *\r
+ * \return 1 if a proper divisor has been found, otherwise 0.\r
+ */\r
+uint32_t tc_find_mck_divisor(uint32_t ul_freq, uint32_t ul_mck,\r
+               uint32_t *p_uldiv, uint32_t *p_ultcclks, uint32_t ul_boardmck)\r
+{\r
+       const uint32_t divisors[5] = { 0, 2, 8, 32, 128};\r
+       uint32_t ul_index;\r
+       uint32_t ul_high, ul_low;\r
+\r
+       UNUSED(ul_boardmck);\r
+\r
+       /*  Satisfy frequency bound. */\r
+       for (ul_index = 1;\r
+                       ul_index < (sizeof(divisors) / sizeof(divisors[0]));\r
+                       ul_index++) {\r
+               ul_high = ul_mck / divisors[ul_index];\r
+               ul_low  = ul_high / TC_DIV_FACTOR;\r
+               if (ul_freq > ul_high) {\r
+                       return 0;\r
+               } else if (ul_freq >= ul_low) {\r
+                       break;\r
+               }\r
+       }\r
+       if (ul_index >= (sizeof(divisors) / sizeof(divisors[0]))) {\r
+               return 0;\r
+       }\r
+\r
+       /*  Store results. */\r
+       if (p_uldiv) {\r
+               *p_uldiv = divisors[ul_index];\r
+       }\r
+\r
+       if (p_ultcclks) {\r
+               *p_ultcclks = ul_index;\r
+       }\r
+\r
+       return 1;\r
+}\r
+\r
+#endif\r
+\r
+#if (!SAM4L)\r
+\r
+/**\r
+ * \brief Enable TC QDEC interrupts.\r
+ *\r
+ * \param p_tc Pointer to a TC instance.\r
+ * \param ul_sources Interrupts to be enabled.\r
+ */\r
+void tc_enable_qdec_interrupt(Tc *p_tc, uint32_t ul_sources)\r
+{\r
+       p_tc->TC_QIER = ul_sources;\r
+}\r
+\r
+/**\r
+ * \brief Disable TC QDEC interrupts.\r
+ *\r
+ * \param p_tc Pointer to a TC instance.\r
+ * \param ul_sources Interrupts to be disabled.\r
+ */\r
+void tc_disable_qdec_interrupt(Tc *p_tc, uint32_t ul_sources)\r
+{\r
+       p_tc->TC_QIDR = ul_sources;\r
+}\r
+\r
+/**\r
+ * \brief Read TC QDEC interrupt mask.\r
+ *\r
+ * \param p_tc Pointer to a TC instance.\r
+ *\r
+ * \return The interrupt mask value.\r
+ */\r
+uint32_t tc_get_qdec_interrupt_mask(Tc *p_tc)\r
+{\r
+       return p_tc->TC_QIMR;\r
+}\r
+\r
+/**\r
+ * \brief Get current QDEC status.\r
+ *\r
+ * \param p_tc Pointer to a TC instance.\r
+ *\r
+ * \return The current TC status.\r
+ */\r
+uint32_t tc_get_qdec_interrupt_status(Tc *p_tc)\r
+{\r
+       return p_tc->TC_QISR;\r
+}\r
+\r
+#endif\r
+\r
+#if (!SAM3U)\r
+\r
+/**\r
+ * \brief Enable or disable write protection of TC registers.\r
+ *\r
+ * \param p_tc Pointer to a TC instance.\r
+ * \param ul_enable 1 to enable, 0 to disable.\r
+ */\r
+void tc_set_writeprotect(Tc *p_tc, uint32_t ul_enable)\r
+{\r
+       if (ul_enable) {\r
+               p_tc->TC_WPMR = TC_WPMR_WPKEY_VALUE | TC_WPMR_WPEN;\r
+       } else {\r
+               p_tc->TC_WPMR = TC_WPMR_WPKEY_VALUE;\r
+       }\r
+}\r
+\r
+#endif\r
+\r
+#if SAM4L\r
+\r
+/**\r
+ * \brief Indicate features.\r
+ *\r
+ * \param p_tc Pointer to a TC instance.\r
+ *\r
+ * \return TC_FEATURES value.\r
+ */\r
+uint32_t tc_get_feature(Tc *p_tc)\r
+{\r
+       return p_tc->TC_FEATURES;\r
+}\r
+\r
+/**\r
+ * \brief Indicate version.\r
+ *\r
+ * \param p_tc Pointer to a TC instance.\r
+ *\r
+ * \return TC_VERSION value.\r
+ */\r
+uint32_t tc_get_version(Tc *p_tc)\r
+{\r
+       return p_tc->TC_VERSION;\r
+}\r
+\r
+#endif\r
+\r
+//@}\r
+\r
+/// @cond 0\r
+/**INDENT-OFF**/\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+/**INDENT-ON**/\r
+/// @endcond\r
diff --git a/FreeRTOS/Demo/CORTEX_M4_ATSAM4E_Atmel_Studio/src/ASF/sam/drivers/tc/tc.h b/FreeRTOS/Demo/CORTEX_M4_ATSAM4E_Atmel_Studio/src/ASF/sam/drivers/tc/tc.h
new file mode 100644 (file)
index 0000000..5dd1690
--- /dev/null
@@ -0,0 +1,114 @@
+/**\r
+ * \file\r
+ *\r
+ * \brief Timer Counter (TC) driver for SAM.\r
+ *\r
+ * Copyright (c) 2011-2013 Atmel Corporation. All rights reserved.\r
+ *\r
+ * \asf_license_start\r
+ *\r
+ * \page License\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * 1. Redistributions of source code must retain the above copyright notice,\r
+ *    this list of conditions and the following disclaimer.\r
+ *\r
+ * 2. Redistributions in binary form must reproduce the above copyright notice,\r
+ *    this list of conditions and the following disclaimer in the documentation\r
+ *    and/or other materials provided with the distribution.\r
+ *\r
+ * 3. The name of Atmel may not be used to endorse or promote products derived\r
+ *    from this software without specific prior written permission.\r
+ *\r
+ * 4. This software may only be redistributed and used in connection with an\r
+ *    Atmel microcontroller product.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED\r
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR\r
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\r
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\r
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ * POSSIBILITY OF SUCH DAMAGE.\r
+ *\r
+ * \asf_license_stop\r
+ *\r
+ */\r
+\r
+#ifndef TC_H_INCLUDED\r
+#define TC_H_INCLUDED\r
+\r
+#include "compiler.h"\r
+\r
+/// @cond 0\r
+/**INDENT-OFF**/\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+/**INDENT-ON**/\r
+/// @endcond\r
+\r
+void tc_init(Tc *p_tc, uint32_t ul_Channel, uint32_t ul_Mode);\r
+void tc_sync_trigger(Tc *p_tc);\r
+void tc_set_block_mode(Tc *p_tc, uint32_t ul_blockmode);\r
+\r
+#if (!SAM3U)\r
+uint32_t tc_init_2bit_gray(Tc *p_tc, uint32_t ul_channel,\r
+               uint32_t ul_steppermode);\r
+#endif\r
+\r
+void tc_start(Tc *p_tc, uint32_t ul_channel);\r
+void tc_stop(Tc *p_tc, uint32_t ul_channel);\r
+\r
+uint32_t tc_read_cv(Tc *p_tc, uint32_t ul_channel);\r
+uint32_t tc_read_ra(Tc *p_tc, uint32_t ul_channel);\r
+uint32_t tc_read_rb(Tc *p_tc, uint32_t ul_channel);\r
+uint32_t tc_read_rc(Tc *p_tc, uint32_t ul_channel);\r
+\r
+void tc_write_ra(Tc *p_tc, uint32_t ul_channel,\r
+               uint32_t ul_value);\r
+void tc_write_rb(Tc *p_tc, uint32_t ul_channel,\r
+               uint32_t ul_value);\r
+void tc_write_rc(Tc *p_tc, uint32_t ul_channel,\r
+               uint32_t ul_value);\r
+\r
+uint32_t tc_find_mck_divisor(uint32_t ul_freq, uint32_t ul_mck,\r
+               uint32_t *p_uldiv, uint32_t *ul_tcclks, uint32_t ul_boardmck);\r
+void tc_enable_interrupt(Tc *p_tc, uint32_t ul_channel,\r
+               uint32_t ul_sources);\r
+void tc_disable_interrupt(Tc *p_tc, uint32_t ul_channel,\r
+               uint32_t ul_sources);\r
+uint32_t tc_get_interrupt_mask(Tc *p_tc, uint32_t ul_channel);\r
+uint32_t tc_get_status(Tc *p_tc, uint32_t ul_channel);\r
+#if (!SAM4L)\r
+void tc_enable_qdec_interrupt(Tc *p_tc, uint32_t ul_sources);\r
+void tc_disable_qdec_interrupt(Tc *p_tc, uint32_t ul_sources);\r
+uint32_t tc_get_qdec_interrupt_mask(Tc *p_tc);\r
+uint32_t tc_get_qdec_interrupt_status(Tc *p_tc);\r
+#endif\r
+\r
+#if (!SAM3U)\r
+void tc_set_writeprotect(Tc *p_tc, uint32_t ul_enable);\r
+#endif\r
+\r
+#if SAM4L\r
+uint32_t tc_get_feature(Tc *p_tc);\r
+uint32_t tc_get_version(Tc *p_tc);\r
+\r
+#endif\r
+\r
+/// @cond 0\r
+/**INDENT-OFF**/\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+/**INDENT-ON**/\r
+/// @endcond\r
+\r
+#endif /* TC_H_INCLUDED */\r
diff --git a/FreeRTOS/Demo/CORTEX_M4_ATSAM4E_Atmel_Studio/src/IntQueueTimer.c b/FreeRTOS/Demo/CORTEX_M4_ATSAM4E_Atmel_Studio/src/IntQueueTimer.c
new file mode 100644 (file)
index 0000000..079cd1e
--- /dev/null
@@ -0,0 +1,198 @@
+/*\r
+    FreeRTOS V8.1.2 - Copyright (C) 2014 Real Time Engineers Ltd.\r
+    All rights reserved\r
+\r
+    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
+\r
+    ***************************************************************************\r
+     *                                                                       *\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
+     *    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
+     *    Thank you!                                                         *\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
+\r
+    >>!   NOTE: The modification to the GPL is included to allow you to     !<<\r
+    >>!   distribute a combined work that includes FreeRTOS without being   !<<\r
+    >>!   obliged to provide the source code for proprietary components     !<<\r
+    >>!   outside of the FreeRTOS 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
+     *    Having a problem?  Start by reading the FAQ "My application does   *\r
+     *    not run, what could be wrong?"                                     *\r
+     *                                                                       *\r
+     *    http://www.FreeRTOS.org/FAQHelp.html                               *\r
+     *                                                                       *\r
+    ***************************************************************************\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, 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
+    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
+ * Provides the two timers sources for the standard demo IntQueue test.  Also\r
+ * includes a high frequency timer to maximise the interrupt nesting achieved.\r
+ */\r
+\r
+/* Standard includes. */\r
+#include <limits.h>\r
+\r
+/* Scheduler includes. */\r
+#include "FreeRTOS.h"\r
+#include "task.h"\r
+\r
+/* Demo includes. */\r
+#include "IntQueueTimer.h"\r
+#include "IntQueue.h"\r
+\r
+/* System includes. */\r
+#include "board.h"\r
+#include "asf.h"\r
+\r
+/* The frequencies at which the first two timers expire are slightly offset to\r
+ensure they don't remain synchronised.  The frequency of the highest priority\r
+interrupt is 20 times faster so really hammers the interrupt entry and exit\r
+code. */\r
+#define tmrTIMER_0_FREQUENCY   ( 2000UL )\r
+#define tmrTIMER_1_FREQUENCY   ( 1003UL )\r
+#define tmrTIMER_2_FREQUENCY   ( 20000UL )\r
+\r
+/* Priorities used by the timer interrupts - these are set differently to make\r
+nesting likely/common.  The high frequency timer operates above the max\r
+system call interrupt priority, but does not use the RTOS API. */\r
+#define tmrTIMER_0_PRIORITY            ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY )\r
+#define tmrTIMER_1_PRIORITY            ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY + 1 )\r
+#define tmrTIMER_2_PRIORITY            ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY - 1 )\r
+\r
+/* The channels used within the TC0 timer. */\r
+#define tmrTIMER_0_CHANNEL             ( 0 )\r
+#define tmrTIMER_1_CHANNEL             ( 1 )\r
+#define tmrTIMER_2_CHANNEL             ( 2 )\r
+\r
+/* TC register bit specifics. */\r
+#define tmrTRIGGER_ON_RC               ( 1UL << 4UL )\r
+#define trmDIVIDER                             ( 128 )\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+/* Handers for the timer interrupts. */\r
+void TC0_Handler( void );\r
+void TC1_Handler( void );\r
+void TC2_Handler( void );\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+/* Incremented by the high frequency timer, which operates above the max\r
+syscall interrupt priority.  This is just for inspection. */\r
+volatile uint32_t ulHighFrequencyTimerInterrupts = 0;\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+void vInitialiseTimerForIntQueueTest( void )\r
+{\r
+uint32_t ulInputFrequency;\r
+\r
+       /* Calculate the frequency of the clock that feeds the TC. */\r
+       ulInputFrequency = configCPU_CLOCK_HZ;\r
+       ulInputFrequency /= trmDIVIDER;\r
+\r
+       /* Three channels are used - two that run at or under \r
+       configMAX_SYSCALL_INTERRUPT_PRIORITY, and one that runs over\r
+       configMAX_SYSCALL_INTERRUPT_PRIORITY. */\r
+       sysclk_enable_peripheral_clock( ID_TC0 );\r
+       sysclk_enable_peripheral_clock( ID_TC1 );\r
+       sysclk_enable_peripheral_clock( ID_TC2 );\r
+       \r
+       /* Init TC channels to waveform mode - up mode clean on RC match. */\r
+       tc_init( TC0, tmrTIMER_0_CHANNEL, TC_CMR_TCCLKS_TIMER_CLOCK4 | TC_CMR_WAVE | TC_CMR_ACPC_CLEAR | TC_CMR_CPCTRG );\r
+       tc_init( TC0, tmrTIMER_1_CHANNEL, TC_CMR_TCCLKS_TIMER_CLOCK4 | TC_CMR_WAVE | TC_CMR_ACPC_CLEAR | TC_CMR_CPCTRG );\r
+       tc_init( TC0, tmrTIMER_2_CHANNEL, TC_CMR_TCCLKS_TIMER_CLOCK4 | TC_CMR_WAVE | TC_CMR_ACPC_CLEAR | TC_CMR_CPCTRG );\r
+       \r
+       tc_enable_interrupt( TC0, tmrTIMER_0_CHANNEL, tmrTRIGGER_ON_RC );\r
+       tc_enable_interrupt( TC0, tmrTIMER_1_CHANNEL, tmrTRIGGER_ON_RC );\r
+       tc_enable_interrupt( TC0, tmrTIMER_2_CHANNEL, tmrTRIGGER_ON_RC );\r
+       \r
+       tc_write_rc( TC0, tmrTIMER_0_CHANNEL, ( ulInputFrequency / tmrTIMER_0_FREQUENCY ) );\r
+       tc_write_rc( TC0, tmrTIMER_1_CHANNEL, ( ulInputFrequency / tmrTIMER_1_FREQUENCY ) );\r
+       tc_write_rc( TC0, tmrTIMER_2_CHANNEL, ( ulInputFrequency / tmrTIMER_2_FREQUENCY ) );\r
+\r
+       NVIC_SetPriority( TC0_IRQn, tmrTIMER_0_PRIORITY );\r
+       NVIC_SetPriority( TC1_IRQn, tmrTIMER_1_PRIORITY );\r
+       NVIC_SetPriority( TC2_IRQn, tmrTIMER_2_PRIORITY );\r
+\r
+       NVIC_EnableIRQ( TC0_IRQn );\r
+       NVIC_EnableIRQ( TC1_IRQn );\r
+       NVIC_EnableIRQ( TC2_IRQn );\r
+\r
+       tc_start( TC0, tmrTIMER_0_CHANNEL );\r
+       tc_start( TC0, tmrTIMER_1_CHANNEL );\r
+       tc_start( TC0, tmrTIMER_2_CHANNEL );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void TC0_Handler( void )\r
+{\r
+       /* Handler for the first timer in the IntQueue test.  Was the interrupt\r
+       caused by a compare on RC? */\r
+       if( ( tc_get_status( TC0, tmrTIMER_0_CHANNEL ) & ~TC_SR_CPCS ) != 0 )\r
+       {\r
+               portYIELD_FROM_ISR( xFirstTimerHandler() );     \r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void TC1_Handler( void )\r
+{\r
+       /* Handler for the second timer in the IntQueue test.  Was the interrupt\r
+       caused by a compare on RC? */\r
+       if( ( tc_get_status( TC0, tmrTIMER_1_CHANNEL ) & ~TC_SR_CPCS ) != 0 )\r
+       {\r
+               portYIELD_FROM_ISR( xSecondTimerHandler() );\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void TC2_Handler( void )\r
+{\r
+       /* Handler for the high frequency timer that does nothing but increment a\r
+       variable to give an indication that it is running.  Was the interrupt caused\r
+       by a compare on RC? */\r
+       if( ( tc_get_status( TC0, tmrTIMER_2_CHANNEL ) & ~TC_SR_CPCS ) != 0 )\r
+       {\r
+               ulHighFrequencyTimerInterrupts++;\r
+       }\r
+}\r
diff --git a/FreeRTOS/Demo/CORTEX_M4_ATSAM4E_Atmel_Studio/src/IntQueueTimer.h b/FreeRTOS/Demo/CORTEX_M4_ATSAM4E_Atmel_Studio/src/IntQueueTimer.h
new file mode 100644 (file)
index 0000000..0afe32a
--- /dev/null
@@ -0,0 +1,74 @@
+/*\r
+    FreeRTOS V8.1.2 - Copyright (C) 2014 Real Time Engineers Ltd.\r
+    All rights reserved\r
+\r
+    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
+\r
+    ***************************************************************************\r
+     *                                                                       *\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
+     *    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
+     *    Thank you!                                                         *\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
+\r
+    >>!   NOTE: The modification to the GPL is included to allow you to     !<<\r
+    >>!   distribute a combined work that includes FreeRTOS without being   !<<\r
+    >>!   obliged to provide the source code for proprietary components     !<<\r
+    >>!   outside of the FreeRTOS 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
+     *    Having a problem?  Start by reading the FAQ "My application does   *\r
+     *    not run, what could be wrong?"                                     *\r
+     *                                                                       *\r
+     *    http://www.FreeRTOS.org/FAQHelp.html                               *\r
+     *                                                                       *\r
+    ***************************************************************************\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, 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
+    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
+#ifndef INT_QUEUE_TIMER_H\r
+#define INT_QUEUE_TIMER_H\r
+\r
+void vInitialiseTimerForIntQueueTest( void );\r
+BaseType_t xTimer0Handler( void );\r
+BaseType_t xTimer1Handler( void );\r
+\r
+#endif\r
+\r
index cbb258fa468aeac77cccb7194d55ab9da19b240c..b5036d02213421a9da4ba59fa24cab6fcc6992fc 100644 (file)
 // From module: System Clock Control - SAM4E implementation\r
 #include <sysclk.h>\r
 \r
+// From module: TC - Timer Counter\r
+#include <tc.h>\r
+\r
 #endif // ASF_H\r
index e5a23c4b90e9d3db127d3b121a09dc645db14ea3..aaf27b3aa2660f23896546c24b72c9a1fe65ba97 100644 (file)
@@ -87,13 +87,13 @@ extern uint32_t SystemCoreClock;
 #define configUSE_PREEMPTION                                   1\r
 #define configUSE_PORT_OPTIMISED_TASK_SELECTION        1\r
 #define configUSE_QUEUE_SETS                                   1\r
-#define configUSE_IDLE_HOOK                                            0\r
+#define configUSE_IDLE_HOOK                                            1\r
 #define configUSE_TICK_HOOK                                            1\r
 #define configCPU_CLOCK_HZ                                             ( SystemCoreClock )\r
 #define configTICK_RATE_HZ                                             ( 1000 )\r
 #define configMAX_PRIORITIES                                   ( 5 )\r
-#define configMINIMAL_STACK_SIZE                               ( ( unsigned short ) 130 )\r
-#define configTOTAL_HEAP_SIZE                                  ( ( size_t ) ( 46 * 1024 ) )\r
+#define configMINIMAL_STACK_SIZE                               ( ( unsigned short ) 120 )\r
+#define configTOTAL_HEAP_SIZE                                  ( ( size_t ) ( 47 * 1024 ) )\r
 #define configMAX_TASK_NAME_LEN                                        ( 10 )\r
 #define configUSE_TRACE_FACILITY                               1\r
 #define configUSE_16_BIT_TICKS                                 0\r
@@ -132,7 +132,7 @@ FreeRTOS/Source/tasks.c for limitations. */
 #define configUSE_TIMERS                               1\r
 #define configTIMER_TASK_PRIORITY              ( 2 )\r
 #define configTIMER_QUEUE_LENGTH               5\r
-#define configTIMER_TASK_STACK_DEPTH   ( configMINIMAL_STACK_SIZE * 2 )\r
+#define configTIMER_TASK_STACK_DEPTH   ( configMINIMAL_STACK_SIZE )\r
 \r
 /* Set the following definitions to 1 to include the API function, or zero\r
 to exclude the API function. */\r
@@ -194,17 +194,17 @@ each node on the network has a unique MAC address. */
 \r
 /* Default IP address configuration.  Used in ipconfigUSE_DNS is set to 0, or\r
 ipconfigUSE_DNS is set to 1 but a DNS server cannot be contacted. */\r
-#define configIP_ADDR0         192\r
-#define configIP_ADDR1         168\r
-#define configIP_ADDR2         0\r
+#define configIP_ADDR0         172\r
+#define configIP_ADDR1         25\r
+#define configIP_ADDR2         218\r
 #define configIP_ADDR3         200\r
 \r
 /* Default gateway IP address configuration.  Used in ipconfigUSE_DNS is set to\r
 0, or ipconfigUSE_DNS is set to 1 but a DNS server cannot be contacted. */\r
-#define configGATEWAY_ADDR0    192\r
-#define configGATEWAY_ADDR1    168\r
-#define configGATEWAY_ADDR2    0\r
-#define configGATEWAY_ADDR3    1\r
+#define configGATEWAY_ADDR0    172\r
+#define configGATEWAY_ADDR1    25\r
+#define configGATEWAY_ADDR2    218\r
+#define configGATEWAY_ADDR3    2\r
 \r
 /* Default DNS server configuration.  OpenDNS addresses are 208.67.222.222 and\r
 208.67.220.220.  Used in ipconfigUSE_DNS is set to 0, or ipconfigUSE_DNS is set\r
@@ -225,10 +225,10 @@ ipconfigUSE_DNS is set to 1 but a DNS server cannot be contacted. */
 UDP echo tasks (when mainINCLUDE_ECHO_CLIENT_TASKS is set to 1 in\r
 FreeRTOSConfig.h.\r
 http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/Embedded_Ethernet_Examples/Common_Echo_Clients.shtml */\r
-#define configECHO_SERVER_ADDR0        192\r
-#define configECHO_SERVER_ADDR1 168\r
-#define configECHO_SERVER_ADDR2 0\r
-#define configECHO_SERVER_ADDR3 2\r
+#define configECHO_SERVER_ADDR0        172\r
+#define configECHO_SERVER_ADDR1 25\r
+#define configECHO_SERVER_ADDR2 218\r
+#define configECHO_SERVER_ADDR3 100\r
 \r
 \r
 /* The priority used by the Ethernet MAC driver interrupt. */\r
index 5adaecdbfaf6fe7eefa6d275fd4bfd7e829cfbce..4f3ddcebb6fae33965218f303b36421ea4340e53 100644 (file)
@@ -141,6 +141,8 @@ static void prvSetupHardware( void )
 \r
 void vApplicationMallocFailedHook( void )\r
 {\r
+static volatile uint32_t ulCount = 0;\r
+\r
        /* vApplicationMallocFailedHook() will only be called if\r
        configUSE_MALLOC_FAILED_HOOK is set to 1 in FreeRTOSConfig.h.  It is a hook\r
        function that will get called if a call to pvPortMalloc() fails.\r
@@ -150,8 +152,12 @@ void vApplicationMallocFailedHook( void )
        heap available to pvPortMalloc() is defined by configTOTAL_HEAP_SIZE in\r
        FreeRTOSConfig.h, and the xPortGetFreeHeapSize() API function can be used\r
        to query the size of free heap space that remains (although it does not\r
-       provide information on how the remaining heap might be fragmented). */\r
-       vAssertCalled( __LINE__, __FILE__ );\r
+       provide information on how the remaining heap might be fragmented). \r
+       \r
+       Just count the number of malloc fails as some failures may occur simply\r
+       because the network load is very high, resulting in the consumption of a\r
+       lot of network buffers. */\r
+       ulCount++;      \r
 }\r
 /*-----------------------------------------------------------*/\r
 \r
index f936c97d7a3f9edbbc708d7dab4e6bffee3961f7..fc5ef172e0b21813b7c7810f249052909895e5f1 100644 (file)
 #include "QueueSet.h"\r
 #include "recmutex.h"\r
 #include "EventGroupsDemo.h"\r
+#include "TaskNotify.h"\r
+#include "IntSemTest.h"\r
+#include "TimerDemo.h"\r
+#include "IntQueue.h"\r
 \r
 /* The period after which the check timer will expire, in ms, provided no errors\r
 have been reported by any of the standard demo tasks.  ms are converted to the\r
@@ -182,7 +186,7 @@ http://www.FreeRTOS.org/udp */
 /* UDP command server and echo task parameters. */\r
 #define mainUDP_CLI_TASK_PRIORITY                      ( tskIDLE_PRIORITY )\r
 #define mainUDP_CLI_PORT_NUMBER                                ( 5001UL )\r
-#define mainUDP_CLI_TASK_STACK_SIZE                    ( configMINIMAL_STACK_SIZE * 2U )\r
+#define mainUDP_CLI_TASK_STACK_SIZE                    ( configMINIMAL_STACK_SIZE + 90 )\r
 #define mainECHO_CLIENT_STACK_SIZE                     ( configMINIMAL_STACK_SIZE + 30 )\r
 \r
 /* Set to 1 to include the UDP echo client tasks in the build.  The echo clients\r
@@ -191,6 +195,9 @@ configECHO_SERVER_ADDR0 to configECHO_SERVER_ADDR3 constants in
 FreeRTOSConfig.h. */\r
 #define mainINCLUDE_ECHO_CLIENT_TASKS          1\r
 \r
+/* Used by the standard demo timer tasks. */\r
+#define mainTIMER_TEST_PERIOD                          ( 50 )\r
+\r
 /*-----------------------------------------------------------*/\r
 \r
 /*\r
@@ -225,6 +232,14 @@ extern void vRegisterUDPCLICommands( void );
  */\r
 extern void vInitialiseLCD( void );\r
 \r
+/*\r
+ * Register check tasks, and the tasks used to write over and check the contents\r
+ * of the FPU registers, as described at the top of this file.  The nature of\r
+ * these files necessitates that they are written in an assembly file.\r
+ */\r
+static void prvRegTest1Task( void *pvParameters ) __attribute__((naked));\r
+static void prvRegTest2Task( void *pvParameters ) __attribute__((naked));\r
+\r
 /*-----------------------------------------------------------*/\r
 \r
 /* The default IP and MAC address used by the demo.  The address configuration\r
@@ -241,12 +256,16 @@ probably be read from flash memory or an EEPROM.  Here it is just hard coded.
 Note each node on a network must have a unique MAC address. */\r
 const uint8_t ucMACAddress[ 6 ] = { configMAC_ADDR0, configMAC_ADDR1, configMAC_ADDR2, configMAC_ADDR3, configMAC_ADDR4, configMAC_ADDR5 };\r
 \r
+/* The following two variables are used to communicate the status of the\r
+register check tasks to the check software timer.  If the variables keep\r
+incrementing, then the register check tasks has not discovered any errors.  If\r
+a variable stops incrementing, then an error has been found. */\r
+volatile unsigned long ulRegTest1LoopCounter = 0UL, ulRegTest2LoopCounter = 0UL;\r
+\r
 /*-----------------------------------------------------------*/\r
 \r
 int main_full( void )\r
 {\r
-TimerHandle_t xTimer = NULL;\r
-\r
        /* Usage instructions on http://www.FreeRTOS.org/Atmel_SAM4E_RTOS_Demo.html */\r
 \r
        /* Initialise the LCD and output a bitmap.  The IP address will also be\r
@@ -284,8 +303,7 @@ TimerHandle_t xTimer = NULL;
        has completed if DHCP is used). */\r
        FreeRTOS_IPInit( ucIPAddress, ucNetMask, ucGatewayAddress, ucDNSServerAddress, ucMACAddress );\r
 \r
-       /* Create all the other standard demo tasks. */\r
-       vStartLEDFlashTimers( mainNUM_FLASH_TIMER_LEDS );\r
+       /* Create all the other standard demo tasks. */ \r
        vCreateBlockTimeTasks();\r
        vStartSemaphoreTasks( mainSEM_TEST_PRIORITY );\r
        vStartGenericQueueTasks( mainGEN_QUEUE_TASK_PRIORITY );\r
@@ -296,19 +314,15 @@ TimerHandle_t xTimer = NULL;
        vStartQueueSetTasks();\r
        vStartRecursiveMutexTasks();\r
        vStartEventGroupTasks();\r
+       vStartTaskNotifyTask();\r
+       vStartInterruptSemaphoreTasks();\r
+       vStartTimerDemoTask( mainTIMER_TEST_PERIOD );\r
+       vStartInterruptQueueTasks();\r
 \r
-       /* Create the software timer that performs the 'check' functionality, as\r
-       described at the top of this file. */\r
-       xTimer = xTimerCreate(  "CheckTimer",                                   /* A text name, purely to help debugging. */\r
-                                                       ( mainCHECK_TIMER_PERIOD_MS ),  /* The timer period, in this case 3000ms (3s). */\r
-                                                       pdTRUE,                                                 /* This is an auto-reload timer, so xAutoReload is set to pdTRUE. */\r
-                                                       ( void * ) 0,                                   /* The ID is not used, so can be set to anything. */\r
-                                                       prvCheckTimerCallback );                /* The callback function that inspects the status of all the other tasks. */\r
-\r
-       if( xTimer != NULL )\r
-       {\r
-               xTimerStart( xTimer, mainDONT_BLOCK );\r
-       }\r
+       /* Create the register check tasks, as described at the top of this\r
+       file */\r
+       xTaskCreate( prvRegTest1Task, "Reg1", configMINIMAL_STACK_SIZE, ( void * ) NULL, tskIDLE_PRIORITY, NULL );\r
+       xTaskCreate( prvRegTest2Task, "Reg2", configMINIMAL_STACK_SIZE, ( void * ) NULL, tskIDLE_PRIORITY, NULL );\r
 \r
        /* Start the scheduler itself. */\r
        vTaskStartScheduler();\r
@@ -325,6 +339,7 @@ TimerHandle_t xTimer = NULL;
 static void prvCheckTimerCallback( TimerHandle_t xTimer )\r
 {\r
 static long lChangedTimerPeriodAlready = pdFALSE;\r
+static unsigned long ulLastRegTest1Value = 0, ulLastRegTest2Value = 0;\r
 unsigned long ulErrorOccurred = pdFALSE;\r
 \r
        /* Avoid compiler warnings. */\r
@@ -372,6 +387,37 @@ unsigned long ulErrorOccurred = pdFALSE;
        {\r
                ulErrorOccurred |= ( 0x01UL << 13UL );\r
        }\r
+       else if( xAreTaskNotificationTasksStillRunning() != pdTRUE )\r
+       {\r
+               ulErrorOccurred |= ( 0x01UL << 14UL );\r
+       }\r
+       else if( xAreInterruptSemaphoreTasksStillRunning() != pdTRUE )\r
+       {\r
+               ulErrorOccurred |= ( 0x01UL << 15UL );\r
+       }\r
+       else if( xAreTimerDemoTasksStillRunning( mainCHECK_TIMER_PERIOD_MS ) != pdTRUE )\r
+       {\r
+               ulErrorOccurred |= 1UL << 16UL;\r
+       }       \r
+       else if( xAreIntQueueTasksStillRunning() != pdTRUE )\r
+       {\r
+               ulErrorOccurred |= 1UL << 17UL;\r
+       }\r
+\r
+       \r
+       /* Check that the register test 1 task is still running. */\r
+       if( ulLastRegTest1Value == ulRegTest1LoopCounter )\r
+       {\r
+               ulErrorOccurred |= 1UL << 18UL;\r
+       }\r
+       ulLastRegTest1Value = ulRegTest1LoopCounter;\r
+\r
+       /* Check that the register test 2 task is still running. */\r
+       if( ulLastRegTest2Value == ulRegTest2LoopCounter )\r
+       {\r
+               ulErrorOccurred |= 1UL << 19UL;\r
+       }\r
+       ulLastRegTest2Value = ulRegTest2LoopCounter;\r
 \r
        if( ulErrorOccurred != pdFALSE )\r
        {\r
@@ -464,6 +510,30 @@ char cIPAddress[ 20 ];
 \r
 void vFullDemoIdleHook( void )\r
 {\r
+static TimerHandle_t xCheckTimer = NULL;\r
+               \r
+       if( xCheckTimer == NULL )\r
+       {\r
+               /* Create the software timer that performs the 'check' \r
+               functionality, in the full demo.  This is not done before the\r
+               scheduler is started as to do so would prevent the standard demo\r
+               timer tasks from passing their tests (they expect the timer\r
+               command queue to be empty. */\r
+               xCheckTimer = xTimerCreate( "CheckTimer",                                       /* A text name, purely to help debugging. */\r
+                                                                       ( mainCHECK_TIMER_PERIOD_MS ),  /* The timer period, in this case 3000ms (3s). */\r
+                                                                       pdTRUE,                                                 /* This is an auto-reload timer, so xAutoReload is set to pdTRUE. */\r
+                                                                       ( void * ) 0,                                   /* The ID is not used, so can be set to anything. */\r
+                                                                       prvCheckTimerCallback );                /* The callback function that inspects the status of all the other tasks. */\r
+\r
+               if( xCheckTimer != NULL )\r
+               {\r
+                       xTimerStart( xCheckTimer, mainDONT_BLOCK );\r
+               }\r
+               \r
+               /* Also start some timers that just flash LEDs. */\r
+               vStartLEDFlashTimers( mainNUM_FLASH_TIMER_LEDS );\r
+       }\r
+       \r
        /* If the file system is only going to be accessed from one task then\r
        F_FS_THREAD_AWARE can be set to 0 and the set of example files is created\r
        before the RTOS scheduler is started.  If the file system is going to be\r
@@ -497,6 +567,15 @@ void vFullDemoTickHook( void )
        \r
        /* Call the event group ISR tests. */\r
        vPeriodicEventGroupsProcessing();\r
+       \r
+       /* Exercise task notifications from interrupts. */\r
+       xNotifyTaskFromISR();\r
+       \r
+       /* Use mutexes from interrupts. */\r
+       vInterruptSemaphorePeriodicTest();\r
+       \r
+       /* Use timers from an interrupt. */\r
+       vTimerPeriodicISRTests();\r
 }\r
 /*-----------------------------------------------------------*/\r
 \r
@@ -510,3 +589,384 @@ void vApplicationPingReplyHook( ePingReplyStatus_t eStatus, uint16_t usIdentifie
 }\r
 /*-----------------------------------------------------------*/\r
 \r
+/* This is a naked function. */\r
+static void prvRegTest1Task( void *pvParameters )\r
+{\r
+       __asm volatile\r
+       (\r
+               "       /* Fill the core registers with known values. */                \n"\r
+               "       mov r0, #100                                                                                    \n"\r
+               "       mov r1, #101                                                                                    \n"\r
+               "       mov r2, #102                                                                                    \n"\r
+               "       mov r3, #103                                                                                    \n"\r
+               "       mov     r4, #104                                                                                        \n"\r
+               "       mov     r5, #105                                                                                        \n"\r
+               "       mov     r6, #106                                                                                        \n"\r
+               "       mov r7, #107                                                                                    \n"\r
+               "       mov     r8, #108                                                                                        \n"\r
+               "       mov     r9, #109                                                                                        \n"\r
+               "       mov     r10, #110                                                                                       \n"\r
+               "       mov     r11, #111                                                                                       \n"\r
+               "       mov r12, #112                                                                                   \n"\r
+               "                                                                                                                       \n"\r
+               "       /* Fill the VFP registers with known values. */                 \n"\r
+               "       vmov d0, r0, r1                                                                                 \n"\r
+               "       vmov d1, r2, r3                                                                                 \n"\r
+               "       vmov d2, r4, r5                                                                                 \n"\r
+               "       vmov d3, r6, r7                                                                                 \n"\r
+               "       vmov d4, r8, r9                                                                                 \n"\r
+               "       vmov d5, r10, r11                                                                               \n"\r
+               "       vmov d6, r0, r1                                                                                 \n"\r
+               "       vmov d7, r2, r3                                                                                 \n"\r
+               "       vmov d8, r4, r5                                                                                 \n"\r
+               "       vmov d9, r6, r7                                                                                 \n"\r
+               "       vmov d10, r8, r9                                                                                \n"\r
+               "       vmov d11, r10, r11                                                                              \n"\r
+               "       vmov d12, r0, r1                                                                                \n"\r
+               "       vmov d13, r2, r3                                                                                \n"\r
+               "       vmov d14, r4, r5                                                                                \n"\r
+               "       vmov d15, r6, r7                                                                                \n"\r
+               "                                                                                                                       \n"\r
+               "reg1_loop:                                                                                                     \n"\r
+               "       /* Check all the VFP registers still contain the values set above.\n"\r
+               "       First save registers that are clobbered by the test. */ \n"\r
+               "       push { r0-r1 }                                                                                  \n"\r
+               "                                                                                                                       \n"\r
+               "       vmov r0, r1, d0                                                                                 \n"\r
+               "       cmp r0, #100                                                                                    \n"\r
+               "       bne reg1_error_loopf                                                                    \n"\r
+               "       cmp r1, #101                                                                                    \n"\r
+               "       bne reg1_error_loopf                                                                    \n"\r
+               "       vmov r0, r1, d1                                                                                 \n"\r
+               "       cmp r0, #102                                                                                    \n"\r
+               "       bne reg1_error_loopf                                                                    \n"\r
+               "       cmp r1, #103                                                                                    \n"\r
+               "       bne reg1_error_loopf                                                                    \n"\r
+               "       vmov r0, r1, d2                                                                                 \n"\r
+               "       cmp r0, #104                                                                                    \n"\r
+               "       bne reg1_error_loopf                                                                    \n"\r
+               "       cmp r1, #105                                                                                    \n"\r
+               "       bne reg1_error_loopf                                                                    \n"\r
+               "       vmov r0, r1, d3                                                                                 \n"\r
+               "       cmp r0, #106                                                                                    \n"\r
+               "       bne reg1_error_loopf                                                                    \n"\r
+               "       cmp r1, #107                                                                                    \n"\r
+               "       bne reg1_error_loopf                                                                    \n"\r
+               "       vmov r0, r1, d4                                                                                 \n"\r
+               "       cmp r0, #108                                                                                    \n"\r
+               "       bne reg1_error_loopf                                                                    \n"\r
+               "       cmp r1, #109                                                                                    \n"\r
+               "       bne reg1_error_loopf                                                                    \n"\r
+               "       vmov r0, r1, d5                                                                                 \n"\r
+               "       cmp r0, #110                                                                                    \n"\r
+               "       bne reg1_error_loopf                                                                    \n"\r
+               "       cmp r1, #111                                                                                    \n"\r
+               "       bne reg1_error_loopf                                                                    \n"\r
+               "       vmov r0, r1, d6                                                                                 \n"\r
+               "       cmp r0, #100                                                                                    \n"\r
+               "       bne reg1_error_loopf                                                                    \n"\r
+               "       cmp r1, #101                                                                                    \n"\r
+               "       bne reg1_error_loopf                                                                    \n"\r
+               "       vmov r0, r1, d7                                                                                 \n"\r
+               "       cmp r0, #102                                                                                    \n"\r
+               "       bne reg1_error_loopf                                                                    \n"\r
+               "       cmp r1, #103                                                                                    \n"\r
+               "       bne reg1_error_loopf                                                                    \n"\r
+               "       vmov r0, r1, d8                                                                                 \n"\r
+               "       cmp r0, #104                                                                                    \n"\r
+               "       bne reg1_error_loopf                                                                    \n"\r
+               "       cmp r1, #105                                                                                    \n"\r
+               "       bne reg1_error_loopf                                                                    \n"\r
+               "       vmov r0, r1, d9                                                                                 \n"\r
+               "       cmp r0, #106                                                                                    \n"\r
+               "       bne reg1_error_loopf                                                                    \n"\r
+               "       cmp r1, #107                                                                                    \n"\r
+               "       bne reg1_error_loopf                                                                    \n"\r
+               "       vmov r0, r1, d10                                                                                \n"\r
+               "       cmp r0, #108                                                                                    \n"\r
+               "       bne reg1_error_loopf                                                                    \n"\r
+               "       cmp r1, #109                                                                                    \n"\r
+               "       bne reg1_error_loopf                                                                    \n"\r
+               "       vmov r0, r1, d11                                                                                \n"\r
+               "       cmp r0, #110                                                                                    \n"\r
+               "       bne reg1_error_loopf                                                                    \n"\r
+               "       cmp r1, #111                                                                                    \n"\r
+               "       bne reg1_error_loopf                                                                    \n"\r
+               "       vmov r0, r1, d12                                                                                \n"\r
+               "       cmp r0, #100                                                                                    \n"\r
+               "       bne reg1_error_loopf                                                                    \n"\r
+               "       cmp r1, #101                                                                                    \n"\r
+               "       bne reg1_error_loopf                                                                    \n"\r
+               "       vmov r0, r1, d13                                                                                \n"\r
+               "       cmp r0, #102                                                                                    \n"\r
+               "       bne reg1_error_loopf                                                                    \n"\r
+               "       cmp r1, #103                                                                                    \n"\r
+               "       bne reg1_error_loopf                                                                    \n"\r
+               "       vmov r0, r1, d14                                                                                \n"\r
+               "       cmp r0, #104                                                                                    \n"\r
+               "       bne reg1_error_loopf                                                                    \n"\r
+               "       cmp r1, #105                                                                                    \n"\r
+               "       bne reg1_error_loopf                                                                    \n"\r
+               "       vmov r0, r1, d15                                                                                \n"\r
+               "       cmp r0, #106                                                                                    \n"\r
+               "       bne reg1_error_loopf                                                                    \n"\r
+               "       cmp r1, #107                                                                                    \n"\r
+               "       bne reg1_error_loopf                                                                    \n"\r
+               "                                                                                                                       \n"\r
+               "       /* Restore the registers that were clobbered by the test. */\n"\r
+               "       pop {r0-r1}                                                                                             \n"\r
+               "                                                                                                                       \n"\r
+               "       /* VFP register test passed.  Jump to the core register test. */\n"\r
+               "       b reg1_loopf_pass                                                                               \n"\r
+               "                                                                                                                       \n"\r
+               "reg1_error_loopf:                                                                                      \n"\r
+               "       /* If this line is hit then a VFP register value was found to be\n"\r
+               "       incorrect. */                                                                                   \n"\r
+               "       b reg1_error_loopf                                                                              \n"\r
+               "                                                                                                                       \n"\r
+               "reg1_loopf_pass:                                                                                       \n"\r
+               "                                                                                                                       \n"\r
+               "       cmp     r0, #100                                                                                        \n"\r
+               "       bne     reg1_error_loop                                                                         \n"\r
+               "       cmp     r1, #101                                                                                        \n"\r
+               "       bne     reg1_error_loop                                                                         \n"\r
+               "       cmp     r2, #102                                                                                        \n"\r
+               "       bne     reg1_error_loop                                                                         \n"\r
+               "       cmp r3, #103                                                                                    \n"\r
+               "       bne     reg1_error_loop                                                                         \n"\r
+               "       cmp     r4, #104                                                                                        \n"\r
+               "       bne     reg1_error_loop                                                                         \n"\r
+               "       cmp     r5, #105                                                                                        \n"\r
+               "       bne     reg1_error_loop                                                                         \n"\r
+               "       cmp     r6, #106                                                                                        \n"\r
+               "       bne     reg1_error_loop                                                                         \n"\r
+               "       cmp     r7, #107                                                                                        \n"\r
+               "       bne     reg1_error_loop                                                                         \n"\r
+               "       cmp     r8, #108                                                                                        \n"\r
+               "       bne     reg1_error_loop                                                                         \n"\r
+               "       cmp     r9, #109                                                                                        \n"\r
+               "       bne     reg1_error_loop                                                                         \n"\r
+               "       cmp     r10, #110                                                                                       \n"\r
+               "       bne     reg1_error_loop                                                                         \n"\r
+               "       cmp     r11, #111                                                                                       \n"\r
+               "       bne     reg1_error_loop                                                                         \n"\r
+               "       cmp     r12, #112                                                                                       \n"\r
+               "       bne     reg1_error_loop                                                                         \n"\r
+               "                                                                                                                       \n"\r
+               "       /* Everything passed, increment the loop counter. */    \n"\r
+               "       push { r0-r1 }                                                                                  \n"\r
+               "       ldr     r0, =ulRegTest1LoopCounter                                                      \n"\r
+               "       ldr r1, [r0]                                                                                    \n"\r
+               "       adds r1, r1, #1                                                                                 \n"\r
+               "       str r1, [r0]                                                                                    \n"\r
+               "       pop { r0-r1 }                                                                                   \n"\r
+               "                                                                                                                       \n"\r
+               "       /* Start again. */                                                                              \n"\r
+               "       b reg1_loop                                                                                             \n"\r
+               "                                                                                                                       \n"\r
+               "reg1_error_loop:                                                                                       \n"\r
+               "       /* If this line is hit then there was an error in a core register value.\n"\r
+               "       The loop ensures the loop counter stops incrementing. */\n"\r
+               "       b reg1_error_loop                                                                               \n"\r
+               "       nop                                                                                                             "\r
+       );\r
+       \r
+       /* Remove compiler warnings about unused parameters. */\r
+       ( void ) pvParameters;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+/* This is a naked function. */\r
+static void prvRegTest2Task( void *pvParameters )\r
+{\r
+       __asm volatile\r
+       (\r
+               "       /* Set all the core registers to known values. */               \n"\r
+               "       mov r0, #-1                                                                                             \n"\r
+               "       mov r1, #1                                                                                              \n"\r
+               "       mov r2, #2                                                                                              \n"\r
+               "       mov r3, #3                                                                                              \n"\r
+               "       mov     r4, #4                                                                                          \n"\r
+               "       mov     r5, #5                                                                                          \n"\r
+               "       mov     r6, #6                                                                                          \n"\r
+               "       mov r7, #7                                                                                              \n"\r
+               "       mov     r8, #8                                                                                          \n"\r
+               "       mov     r9, #9                                                                                          \n"\r
+               "       mov     r10, #10                                                                                        \n"\r
+               "       mov     r11, #11                                                                                        \n"\r
+               "       mov r12, #12                                                                                    \n"\r
+               "                                                                                                                       \n"\r
+               "       /* Set all the VFP to known values. */                                  \n"\r
+               "       vmov d0, r0, r1                                                                                 \n"\r
+               "       vmov d1, r2, r3                                                                                 \n"\r
+               "       vmov d2, r4, r5                                                                                 \n"\r
+               "       vmov d3, r6, r7                                                                                 \n"\r
+               "       vmov d4, r8, r9                                                                                 \n"\r
+               "       vmov d5, r10, r11                                                                               \n"\r
+               "       vmov d6, r0, r1                                                                                 \n"\r
+               "       vmov d7, r2, r3                                                                                 \n"\r
+               "       vmov d8, r4, r5                                                                                 \n"\r
+               "       vmov d9, r6, r7                                                                                 \n"\r
+               "       vmov d10, r8, r9                                                                                \n"\r
+               "       vmov d11, r10, r11                                                                              \n"\r
+               "       vmov d12, r0, r1                                                                                \n"\r
+               "       vmov d13, r2, r3                                                                                \n"\r
+               "       vmov d14, r4, r5                                                                                \n"\r
+               "       vmov d15, r6, r7                                                                                \n"\r
+               "                                                                                                                       \n"\r
+               "reg2_loop:                                                                                                     \n"\r
+               "                                                                                                                       \n"\r
+               "       /* Check all the VFP registers still contain the values set above.\n"\r
+               "       First save registers that are clobbered by the test. */ \n"\r
+               "       push { r0-r1 }                                                                                  \n"\r
+               "                                                                                                                       \n"\r
+               "       vmov r0, r1, d0                                                                                 \n"\r
+               "       cmp r0, #-1                                                                                             \n"\r
+               "       bne reg2_error_loopf                                                                    \n"\r
+               "       cmp r1, #1                                                                                              \n"\r
+               "       bne reg2_error_loopf                                                                    \n"\r
+               "       vmov r0, r1, d1                                                                                 \n"\r
+               "       cmp r0, #2                                                                                              \n"\r
+               "       bne reg2_error_loopf                                                                    \n"\r
+               "       cmp r1, #3                                                                                              \n"\r
+               "       bne reg2_error_loopf                                                                    \n"\r
+               "       vmov r0, r1, d2                                                                                 \n"\r
+               "       cmp r0, #4                                                                                              \n"\r
+               "       bne reg2_error_loopf                                                                    \n"\r
+               "       cmp r1, #5                                                                                              \n"\r
+               "       bne reg2_error_loopf                                                                    \n"\r
+               "       vmov r0, r1, d3                                                                                 \n"\r
+               "       cmp r0, #6                                                                                              \n"\r
+               "       bne reg2_error_loopf                                                                    \n"\r
+               "       cmp r1, #7                                                                                              \n"\r
+               "       bne reg2_error_loopf                                                                    \n"\r
+               "       vmov r0, r1, d4                                                                                 \n"\r
+               "       cmp r0, #8                                                                                              \n"\r
+               "       bne reg2_error_loopf                                                                    \n"\r
+               "       cmp r1, #9                                                                                              \n"\r
+               "       bne reg2_error_loopf                                                                    \n"\r
+               "       vmov r0, r1, d5                                                                                 \n"\r
+               "       cmp r0, #10                                                                                             \n"\r
+               "       bne reg2_error_loopf                                                                    \n"\r
+               "       cmp r1, #11                                                                                             \n"\r
+               "       bne reg2_error_loopf                                                                    \n"\r
+               "       vmov r0, r1, d6                                                                                 \n"\r
+               "       cmp r0, #-1                                                                                             \n"\r
+               "       bne reg2_error_loopf                                                                    \n"\r
+               "       cmp r1, #1                                                                                              \n"\r
+               "       bne reg2_error_loopf                                                                    \n"\r
+               "       vmov r0, r1, d7                                                                                 \n"\r
+               "       cmp r0, #2                                                                                              \n"\r
+               "       bne reg2_error_loopf                                                                    \n"\r
+               "       cmp r1, #3                                                                                              \n"\r
+               "       bne reg2_error_loopf                                                                    \n"\r
+               "       vmov r0, r1, d8                                                                                 \n"\r
+               "       cmp r0, #4                                                                                              \n"\r
+               "       bne reg2_error_loopf                                                                    \n"\r
+               "       cmp r1, #5                                                                                              \n"\r
+               "       bne reg2_error_loopf                                                                    \n"\r
+               "       vmov r0, r1, d9                                                                                 \n"\r
+               "       cmp r0, #6                                                                                              \n"\r
+               "       bne reg2_error_loopf                                                                    \n"\r
+               "       cmp r1, #7                                                                                              \n"\r
+               "       bne reg2_error_loopf                                                                    \n"\r
+               "       vmov r0, r1, d10                                                                                \n"\r
+               "       cmp r0, #8                                                                                              \n"\r
+               "       bne reg2_error_loopf                                                                    \n"\r
+               "       cmp r1, #9                                                                                              \n"\r
+               "       bne reg2_error_loopf                                                                    \n"\r
+               "       vmov r0, r1, d11                                                                                \n"\r
+               "       cmp r0, #10                                                                                             \n"\r
+               "       bne reg2_error_loopf                                                                    \n"\r
+               "       cmp r1, #11                                                                                             \n"\r
+               "       bne reg2_error_loopf                                                                    \n"\r
+               "       vmov r0, r1, d12                                                                                \n"\r
+               "       cmp r0, #-1                                                                                             \n"\r
+               "       bne reg2_error_loopf                                                                    \n"\r
+               "       cmp r1, #1                                                                                              \n"\r
+               "       bne reg2_error_loopf                                                                    \n"\r
+               "       vmov r0, r1, d13                                                                                \n"\r
+               "       cmp r0, #2                                                                                              \n"\r
+               "       bne reg2_error_loopf                                                                    \n"\r
+               "       cmp r1, #3                                                                                              \n"\r
+               "       bne reg2_error_loopf                                                                    \n"\r
+               "       vmov r0, r1, d14                                                                                \n"\r
+               "       cmp r0, #4                                                                                              \n"\r
+               "       bne reg2_error_loopf                                                                    \n"\r
+               "       cmp r1, #5                                                                                              \n"\r
+               "       bne reg2_error_loopf                                                                    \n"\r
+               "       vmov r0, r1, d15                                                                                \n"\r
+               "       cmp r0, #6                                                                                              \n"\r
+               "       bne reg2_error_loopf                                                                    \n"\r
+               "       cmp r1, #7                                                                                              \n"\r
+               "       bne reg2_error_loopf                                                                    \n"\r
+               "                                                                                                                       \n"\r
+               "       /* Restore the registers that were clobbered by the test. */\n"\r
+               "       pop {r0-r1}                                                                                             \n"\r
+               "                                                                                                                       \n"\r
+               "       /* VFP register test passed.  Jump to the core register test. */\n"\r
+               "       b reg2_loopf_pass                                                                               \n"\r
+               "                                                                                                                       \n"\r
+               "reg2_error_loopf:                                                                                      \n"\r
+               "       /* If this line is hit then a VFP register value was found to be\n"\r
+               "       incorrect. */                                                                                   \n"\r
+               "       b reg2_error_loopf                                                                              \n"\r
+               "                                                                                                                       \n"\r
+               "reg2_loopf_pass:                                                                                       \n"\r
+               "                                                                                                                       \n"\r
+               "       cmp     r0, #-1                                                                                         \n"\r
+               "       bne     reg2_error_loop                                                                         \n"\r
+               "       cmp     r1, #1                                                                                          \n"\r
+               "       bne     reg2_error_loop                                                                         \n"\r
+               "       cmp     r2, #2                                                                                          \n"\r
+               "       bne     reg2_error_loop                                                                         \n"\r
+               "       cmp r3, #3                                                                                              \n"\r
+               "       bne     reg2_error_loop                                                                         \n"\r
+               "       cmp     r4, #4                                                                                          \n"\r
+               "       bne     reg2_error_loop                                                                         \n"\r
+               "       cmp     r5, #5                                                                                          \n"\r
+               "       bne     reg2_error_loop                                                                         \n"\r
+               "       cmp     r6, #6                                                                                          \n"\r
+               "       bne     reg2_error_loop                                                                         \n"\r
+               "       cmp     r7, #7                                                                                          \n"\r
+               "       bne     reg2_error_loop                                                                         \n"\r
+               "       cmp     r8, #8                                                                                          \n"\r
+               "       bne     reg2_error_loop                                                                         \n"\r
+               "       cmp     r9, #9                                                                                          \n"\r
+               "       bne     reg2_error_loop                                                                         \n"\r
+               "       cmp     r10, #10                                                                                        \n"\r
+               "       bne     reg2_error_loop                                                                         \n"\r
+               "       cmp     r11, #11                                                                                        \n"\r
+               "       bne     reg2_error_loop                                                                         \n"\r
+               "       cmp     r12, #12                                                                                        \n"\r
+               "       bne     reg2_error_loop                                                                         \n"\r
+               "                                                                                                                       \n"\r
+               "       /* Increment the loop counter to indicate this test is still functioning\n"\r
+               "       correctly. */                                                                                   \n"\r
+               "       push { r0-r1 }                                                                                  \n"\r
+               "       ldr     r0, =ulRegTest2LoopCounter                                                      \n"\r
+               "       ldr r1, [r0]                                                                                    \n"\r
+               "       adds r1, r1, #1                                                                                 \n"\r
+               "       str r1, [r0]                                                                                    \n"\r
+               "                                                                                                                       \n"\r
+               "       /* Yield to increase test coverage. */                                  \n"\r
+               "       movs r0, #0x01                                                                                  \n"\r
+               "       ldr r1, =0xe000ed04                                                                     \n" /* NVIC_INT_CTRL */\r
+               "       lsl r0, #28                                                                                     \n" /* Shift to PendSV bit */\r
+               "       str r0, [r1]                                                                                    \n"\r
+               "       dsb                                                                                                             \n"\r
+               "       pop { r0-r1 }                                                                                   \n"\r
+               "                                                                                                                       \n"\r
+               "       /* Start again. */                                                                              \n"\r
+               "       b reg2_loop                                                                                             \n"\r
+               "                                                                                                                       \n"\r
+               "reg2_error_loop:                                                                                       \n"\r
+               "       /* If this line is hit then there was an error in a core register value.\n"\r
+               "       This loop ensures the loop counter variable stops incrementing. */\n"\r
+               "       b reg2_error_loop                                                                               \n"\r
+               "       nop                                                                                                             \n"\r
+       );\r
+\r
+       /* Remove compiler warnings about unused parameters. */\r
+       ( void ) pvParameters;\r
+}\r
index a19959c2db33b42d383adc4c5bb5a835049ac0bb..bbb92eb939aed31a3b2820308623fcca8291559a 100644 (file)
Binary files a/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/RTOSDemo.atsuo and b/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/RTOSDemo.atsuo differ
index f953787d32d20269983af36579cac9242513a998..922bb614c8d9f9df9c0b761f6aad852abce9e438 100644 (file)
     <AsfVersion>2.11.1</AsfVersion>\r
     <AsfFrameworkConfig>\r
       <framework-data>\r
-  <options>\r
-    <option id="common.boards" value="Add" config="" content-id="Atmel.ASF" />\r
-    <option id="common.services.basic.clock" value="Add" config="" content-id="Atmel.ASF" />\r
-    <option id="common.services.basic.gpio" value="Add" config="" content-id="Atmel.ASF" />\r
-    <option id="sam.drivers.pio" value="Add" config="" content-id="Atmel.ASF" />\r
-    <option id="sam.drivers.usart" value="Add" config="" content-id="Atmel.ASF" />\r
-    <option id="sam.drivers.tc" value="Add" config="" content-id="Atmel.ASF" />\r
-  </options>\r
-  <configurations>\r
-    <configuration key="config.sam.pio.pio_handler" value="yes" default="yes" content-id="Atmel.ASF" />\r
-  </configurations>\r
-  <files>\r
-    <file path="src/asf.h" framework="" version="3.1.3" source="./common/applications/user_application/sam4s16c_sam4s_ek/as5_arm_template/asf.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/main.c" framework="" version="3.1.3" source="common/applications/user_application/main.c" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/config/conf_board.h" framework="" version="3.1.3" source="common/applications/user_application/sam4s16c_sam4s_ek/conf_board.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/common/boards/board.h" framework="" version="3.1.3" source="common/boards/board.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/common/services/gpio/gpio.h" framework="" version="3.1.3" source="common/services/gpio/gpio.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/common/services/gpio/sam_ioport/sam_gpio.h" framework="" version="3.1.3" source="common/services/gpio/sam_ioport/sam_gpio.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/common/utils/interrupt.h" framework="" version="3.1.3" source="common/utils/interrupt.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/common/utils/interrupt/interrupt_sam_nvic.c" framework="" version="3.1.3" source="common/utils/interrupt/interrupt_sam_nvic.c" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/common/utils/interrupt/interrupt_sam_nvic.h" framework="" version="3.1.3" source="common/utils/interrupt/interrupt_sam_nvic.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/boards/sam4s_ek/init.c" framework="" version="3.1.3" source="sam/boards/sam4s_ek/init.c" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/boards/sam4s_ek/sam4s_ek.h" framework="" version="3.1.3" source="sam/boards/sam4s_ek/sam4s_ek.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/drivers/pio/pio.c" framework="" version="3.1.3" source="sam/drivers/pio/pio.c" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/drivers/pio/pio.h" framework="" version="3.1.3" source="sam/drivers/pio/pio.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/drivers/pio/pio_handler.c" framework="" version="3.1.3" source="sam/drivers/pio/pio_handler.c" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/drivers/pio/pio_handler.h" framework="" version="3.1.3" source="sam/drivers/pio/pio_handler.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_acc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_acc.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_adc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_adc.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_chipid.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_chipid.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_crccu.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_crccu.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_dacc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_dacc.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_efc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_efc.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_gpbr.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_gpbr.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_hsmci.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_hsmci.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_matrix.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_matrix.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_pdc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_pdc.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_pio.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_pio.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_pmc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_pmc.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_pwm.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_pwm.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_rstc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_rstc.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_rtc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_rtc.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_rtt.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_rtt.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_smc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_smc.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_spi.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_spi.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_ssc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_ssc.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_supc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_supc.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_tc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_tc.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_twi.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_twi.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_uart.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_uart.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_udp.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_udp.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_usart.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_usart.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_wdt.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_wdt.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_acc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_acc.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_adc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_adc.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_chipid.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_chipid.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_crccu.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_crccu.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_dacc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_dacc.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_efc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_efc.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_gpbr.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_gpbr.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_hsmci.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_hsmci.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_matrix.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_matrix.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_pioa.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_pioa.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_piob.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_piob.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_pioc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_pioc.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_pmc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_pmc.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_pwm.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_pwm.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_rstc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_rstc.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_rtc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_rtc.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_rtt.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_rtt.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_smc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_smc.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_spi.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_spi.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_ssc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_ssc.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_supc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_supc.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_tc0.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_tc0.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_tc1.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_tc1.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_twi0.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_twi0.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_twi1.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_twi1.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_uart0.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_uart0.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_uart1.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_uart1.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_udp.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_udp.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_usart0.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_usart0.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_usart1.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_usart1.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_wdt.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_wdt.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/pio/pio_sam4s16c.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/pio/pio_sam4s16c.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/sam4s.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/sam4s.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/include/sam4s16c.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/sam4s16c.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/source/templates/exceptions.c" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/source/templates/exceptions.c" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/source/templates/exceptions.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/source/templates/exceptions.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/source/templates/gcc/startup_sam4s.c" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/source/templates/gcc/startup_sam4s.c" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/source/templates/system_sam4s.c" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/source/templates/system_sam4s.c" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/cmsis/sam4s/source/templates/system_sam4s.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/source/templates/system_sam4s.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/compiler.h" framework="" version="3.1.3" source="sam/utils/compiler.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/header_files/io.h" framework="" version="3.1.3" source="sam/utils/header_files/io.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/linker_scripts/sam4s/sam4s16/gcc/flash.ld" framework="" version="3.1.3" source="sam/utils/linker_scripts/sam4s/sam4s16/gcc/flash.ld" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/make/Makefile.in" framework="" version="3.1.3" source="sam/utils/make/Makefile.in" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/parts.h" framework="" version="3.1.3" source="sam/utils/parts.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/preprocessor/mrepeat.h" framework="" version="3.1.3" source="sam/utils/preprocessor/mrepeat.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/preprocessor/preprocessor.h" framework="" version="3.1.3" source="sam/utils/preprocessor/preprocessor.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/preprocessor/stringz.h" framework="" version="3.1.3" source="sam/utils/preprocessor/stringz.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/preprocessor/tpaste.h" framework="" version="3.1.3" source="sam/utils/preprocessor/tpaste.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/utils/status_codes.h" framework="" version="3.1.3" source="sam/utils/status_codes.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/thirdparty/CMSIS/CMSIS END USER LICENCE AGREEMENT.pdf" framework="" version="3.1.3" source="thirdparty/CMSIS/CMSIS END USER LICENCE AGREEMENT.pdf" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/thirdparty/CMSIS/Include/arm_math.h" framework="" version="3.1.3" source="thirdparty/CMSIS/Include/arm_math.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/thirdparty/CMSIS/Include/core_cm4.h" framework="" version="3.1.3" source="thirdparty/CMSIS/Include/core_cm4.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/thirdparty/CMSIS/Include/core_cm4_simd.h" framework="" version="3.1.3" source="thirdparty/CMSIS/Include/core_cm4_simd.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/thirdparty/CMSIS/Include/core_cmFunc.h" framework="" version="3.1.3" source="thirdparty/CMSIS/Include/core_cmFunc.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/thirdparty/CMSIS/Include/core_cmInstr.h" framework="" version="3.1.3" source="thirdparty/CMSIS/Include/core_cmInstr.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/thirdparty/CMSIS/Lib/GCC/libarm_cortexM4l_math.a" framework="" version="3.1.3" source="thirdparty/CMSIS/Lib/GCC/libarm_cortexM4l_math.a" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/thirdparty/CMSIS/README.txt" framework="" version="3.1.3" source="thirdparty/CMSIS/README.txt" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/thirdparty/CMSIS/license.txt" framework="" version="3.1.3" source="thirdparty/CMSIS/license.txt" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/drivers/pmc/pmc.c" framework="" version="" source="sam\drivers\pmc\pmc.c" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/drivers/pmc/pmc.h" framework="" version="" source="sam\drivers\pmc\pmc.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/drivers/pmc/sleep.h" framework="" version="" source="sam\drivers\pmc\sleep.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/common/services/clock/sam4s/sysclk.c" framework="" version="" source="common\services\clock\sam4s\sysclk.c" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/common/services/clock/sam4s/pll.h" framework="" version="" source="common\services\clock\sam4s\pll.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/common/services/clock/sam4s/osc.h" framework="" version="" source="common\services\clock\sam4s\osc.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/common/services/clock/genclk.h" framework="" version="" source="common\services\clock\genclk.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/common/services/clock/osc.h" framework="" version="" source="common\services\clock\osc.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/common/services/clock/sam4s/sysclk.h" framework="" version="" source="common\services\clock\sam4s\sysclk.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/common/services/clock/sam4s/genclk.h" framework="" version="" source="common\services\clock\sam4s\genclk.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/common/services/clock/sysclk.h" framework="" version="" source="common\services\clock\sysclk.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/common/services/clock/pll.h" framework="" version="" source="common\services\clock\pll.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/config/conf_clock.h" framework="" version="" source="common\services\clock\sam4s\module_config\conf_clock.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/drivers/usart/usart.c" framework="" version="" source="sam\drivers\usart\usart.c" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/asf/sam/drivers/usart/usart.h" framework="" version="" source="sam\drivers\usart\usart.h" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/ASF/sam/drivers/tc/tc.c" framework="" version="3.6.0" source="sam\drivers\tc\tc.c" changed="False" content-id="Atmel.ASF" />\r
-    <file path="src/ASF/sam/drivers/tc/tc.h" framework="" version="3.6.0" source="sam\drivers\tc\tc.h" changed="False" content-id="Atmel.ASF" />\r
-  </files>\r
-  <documentation help="" />\r
-  <offline-documentation help="" />\r
-  <dependencies>\r
-    <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.10.1" />\r
-  </dependencies>\r
-</framework-data>\r
+        <options>\r
+          <option id="common.boards" value="Add" config="" content-id="Atmel.ASF" />\r
+          <option id="common.services.basic.clock" value="Add" config="" content-id="Atmel.ASF" />\r
+          <option id="common.services.basic.gpio" value="Add" config="" content-id="Atmel.ASF" />\r
+          <option id="sam.drivers.pio" value="Add" config="" content-id="Atmel.ASF" />\r
+          <option id="sam.drivers.usart" value="Add" config="" content-id="Atmel.ASF" />\r
+          <option id="sam.drivers.tc" value="Add" config="" content-id="Atmel.ASF" />\r
+        </options>\r
+        <configurations>\r
+          <configuration key="config.sam.pio.pio_handler" value="yes" default="yes" content-id="Atmel.ASF" />\r
+        </configurations>\r
+        <files>\r
+          <file path="src/asf.h" framework="" version="3.1.3" source="./common/applications/user_application/sam4s16c_sam4s_ek/as5_arm_template/asf.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/main.c" framework="" version="3.1.3" source="common/applications/user_application/main.c" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/config/conf_board.h" framework="" version="3.1.3" source="common/applications/user_application/sam4s16c_sam4s_ek/conf_board.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/common/boards/board.h" framework="" version="3.1.3" source="common/boards/board.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/common/services/gpio/gpio.h" framework="" version="3.1.3" source="common/services/gpio/gpio.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/common/services/gpio/sam_ioport/sam_gpio.h" framework="" version="3.1.3" source="common/services/gpio/sam_ioport/sam_gpio.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/common/utils/interrupt.h" framework="" version="3.1.3" source="common/utils/interrupt.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/common/utils/interrupt/interrupt_sam_nvic.c" framework="" version="3.1.3" source="common/utils/interrupt/interrupt_sam_nvic.c" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/common/utils/interrupt/interrupt_sam_nvic.h" framework="" version="3.1.3" source="common/utils/interrupt/interrupt_sam_nvic.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/boards/sam4s_ek/init.c" framework="" version="3.1.3" source="sam/boards/sam4s_ek/init.c" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/boards/sam4s_ek/sam4s_ek.h" framework="" version="3.1.3" source="sam/boards/sam4s_ek/sam4s_ek.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/drivers/pio/pio.c" framework="" version="3.1.3" source="sam/drivers/pio/pio.c" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/drivers/pio/pio.h" framework="" version="3.1.3" source="sam/drivers/pio/pio.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/drivers/pio/pio_handler.c" framework="" version="3.1.3" source="sam/drivers/pio/pio_handler.c" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/drivers/pio/pio_handler.h" framework="" version="3.1.3" source="sam/drivers/pio/pio_handler.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_acc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_acc.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_adc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_adc.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_chipid.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_chipid.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_crccu.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_crccu.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_dacc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_dacc.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_efc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_efc.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_gpbr.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_gpbr.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_hsmci.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_hsmci.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_matrix.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_matrix.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_pdc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_pdc.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_pio.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_pio.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_pmc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_pmc.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_pwm.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_pwm.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_rstc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_rstc.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_rtc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_rtc.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_rtt.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_rtt.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_smc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_smc.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_spi.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_spi.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_ssc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_ssc.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_supc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_supc.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_tc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_tc.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_twi.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_twi.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_uart.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_uart.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_udp.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_udp.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_usart.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_usart.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/component/component_wdt.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/component/component_wdt.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_acc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_acc.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_adc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_adc.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_chipid.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_chipid.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_crccu.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_crccu.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_dacc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_dacc.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_efc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_efc.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_gpbr.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_gpbr.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_hsmci.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_hsmci.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_matrix.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_matrix.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_pioa.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_pioa.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_piob.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_piob.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_pioc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_pioc.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_pmc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_pmc.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_pwm.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_pwm.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_rstc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_rstc.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_rtc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_rtc.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_rtt.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_rtt.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_smc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_smc.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_spi.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_spi.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_ssc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_ssc.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_supc.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_supc.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_tc0.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_tc0.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_tc1.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_tc1.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_twi0.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_twi0.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_twi1.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_twi1.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_uart0.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_uart0.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_uart1.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_uart1.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_udp.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_udp.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_usart0.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_usart0.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_usart1.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_usart1.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/instance/instance_wdt.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/instance/instance_wdt.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/pio/pio_sam4s16c.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/pio/pio_sam4s16c.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/sam4s.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/sam4s.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/include/sam4s16c.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/include/sam4s16c.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/source/templates/exceptions.c" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/source/templates/exceptions.c" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/source/templates/exceptions.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/source/templates/exceptions.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/source/templates/gcc/startup_sam4s.c" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/source/templates/gcc/startup_sam4s.c" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/source/templates/system_sam4s.c" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/source/templates/system_sam4s.c" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/cmsis/sam4s/source/templates/system_sam4s.h" framework="" version="3.1.3" source="sam/utils/cmsis/sam4s/source/templates/system_sam4s.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/compiler.h" framework="" version="3.1.3" source="sam/utils/compiler.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/header_files/io.h" framework="" version="3.1.3" source="sam/utils/header_files/io.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/linker_scripts/sam4s/sam4s16/gcc/flash.ld" framework="" version="3.1.3" source="sam/utils/linker_scripts/sam4s/sam4s16/gcc/flash.ld" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/make/Makefile.in" framework="" version="3.1.3" source="sam/utils/make/Makefile.in" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/parts.h" framework="" version="3.1.3" source="sam/utils/parts.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/preprocessor/mrepeat.h" framework="" version="3.1.3" source="sam/utils/preprocessor/mrepeat.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/preprocessor/preprocessor.h" framework="" version="3.1.3" source="sam/utils/preprocessor/preprocessor.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/preprocessor/stringz.h" framework="" version="3.1.3" source="sam/utils/preprocessor/stringz.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/preprocessor/tpaste.h" framework="" version="3.1.3" source="sam/utils/preprocessor/tpaste.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/utils/status_codes.h" framework="" version="3.1.3" source="sam/utils/status_codes.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/thirdparty/CMSIS/CMSIS END USER LICENCE AGREEMENT.pdf" framework="" version="3.1.3" source="thirdparty/CMSIS/CMSIS END USER LICENCE AGREEMENT.pdf" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/thirdparty/CMSIS/Include/arm_math.h" framework="" version="3.1.3" source="thirdparty/CMSIS/Include/arm_math.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/thirdparty/CMSIS/Include/core_cm4.h" framework="" version="3.1.3" source="thirdparty/CMSIS/Include/core_cm4.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/thirdparty/CMSIS/Include/core_cm4_simd.h" framework="" version="3.1.3" source="thirdparty/CMSIS/Include/core_cm4_simd.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/thirdparty/CMSIS/Include/core_cmFunc.h" framework="" version="3.1.3" source="thirdparty/CMSIS/Include/core_cmFunc.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/thirdparty/CMSIS/Include/core_cmInstr.h" framework="" version="3.1.3" source="thirdparty/CMSIS/Include/core_cmInstr.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/thirdparty/CMSIS/Lib/GCC/libarm_cortexM4l_math.a" framework="" version="3.1.3" source="thirdparty/CMSIS/Lib/GCC/libarm_cortexM4l_math.a" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/thirdparty/CMSIS/README.txt" framework="" version="3.1.3" source="thirdparty/CMSIS/README.txt" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/thirdparty/CMSIS/license.txt" framework="" version="3.1.3" source="thirdparty/CMSIS/license.txt" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/drivers/pmc/pmc.c" framework="" version="" source="sam\drivers\pmc\pmc.c" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/drivers/pmc/pmc.h" framework="" version="" source="sam\drivers\pmc\pmc.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/drivers/pmc/sleep.h" framework="" version="" source="sam\drivers\pmc\sleep.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/common/services/clock/sam4s/sysclk.c" framework="" version="" source="common\services\clock\sam4s\sysclk.c" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/common/services/clock/sam4s/pll.h" framework="" version="" source="common\services\clock\sam4s\pll.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/common/services/clock/sam4s/osc.h" framework="" version="" source="common\services\clock\sam4s\osc.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/common/services/clock/genclk.h" framework="" version="" source="common\services\clock\genclk.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/common/services/clock/osc.h" framework="" version="" source="common\services\clock\osc.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/common/services/clock/sam4s/sysclk.h" framework="" version="" source="common\services\clock\sam4s\sysclk.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/common/services/clock/sam4s/genclk.h" framework="" version="" source="common\services\clock\sam4s\genclk.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/common/services/clock/sysclk.h" framework="" version="" source="common\services\clock\sysclk.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/common/services/clock/pll.h" framework="" version="" source="common\services\clock\pll.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/config/conf_clock.h" framework="" version="" source="common\services\clock\sam4s\module_config\conf_clock.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/drivers/usart/usart.c" framework="" version="" source="sam\drivers\usart\usart.c" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/asf/sam/drivers/usart/usart.h" framework="" version="" source="sam\drivers\usart\usart.h" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/ASF/sam/drivers/tc/tc.c" framework="" version="3.6.0" source="sam\drivers\tc\tc.c" changed="False" content-id="Atmel.ASF" />\r
+          <file path="src/ASF/sam/drivers/tc/tc.h" framework="" version="3.6.0" source="sam\drivers\tc\tc.h" changed="False" content-id="Atmel.ASF" />\r
+        </files>\r
+        <documentation help="" />\r
+        <offline-documentation help="" />\r
+        <dependencies>\r
+          <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.10.1" />\r
+        </dependencies>\r
+      </framework-data>\r
     </AsfFrameworkConfig>\r
     <avrdevice>ATSAM4S16C</avrdevice>\r
     <avrdeviceseries>sam4s</avrdeviceseries>\r
     <com_atmel_avrdbg_tool_samice>\r
       <ToolType>com.atmel.avrdbg.tool.samice</ToolType>\r
       <ToolName>J-Link</ToolName>\r
-      <ToolNumber>158002654</ToolNumber>\r
+      <ToolNumber>158000789</ToolNumber>\r
       <Channel>\r
         <host>127.0.0.1</host>\r
         <port>1637</port>\r
index 079cd1e6bb8f8eeb0fa77c1e933ae9d16305b22c..b5387a89658119961740aa59aef08e154b030bfa 100644 (file)
@@ -89,7 +89,7 @@ interrupt is 20 times faster so really hammers the interrupt entry and exit
 code. */\r
 #define tmrTIMER_0_FREQUENCY   ( 2000UL )\r
 #define tmrTIMER_1_FREQUENCY   ( 1003UL )\r
-#define tmrTIMER_2_FREQUENCY   ( 20000UL )\r
+#define tmrTIMER_2_FREQUENCY   ( 5000UL )\r
 \r
 /* Priorities used by the timer interrupts - these are set differently to make\r
 nesting likely/common.  The high frequency timer operates above the max\r
index 637fe364e1dd2b431d756aef0a3379f466a3b216..6086e553a7c73fd15210f6b86556c78ffcfb025c 100644 (file)
@@ -3,6 +3,9 @@
  <Bookmarks/>
  <Breakpoints/>
  <ExecutionProfileWindow/>
+ <FrameBufferWindow>
+  <FrameBufferWindow addressText="" bufferWidth="-1" bufferHeight="-1" addressSpace="" />
+ </FrameBufferWindow>
  <Memory1>
   <MemoryWindow autoEvaluate="0" addressText="0x200002d0" numColumns="8" sizeText="120" dataSize="1" radix="16" name="RTOSDemo" addressSpace="" />
  </Memory1>
   <ProjectSessionItem path="RTOSDemo;RTOSDemo;Source Files" name="unnamed" />
  </Project>
  <Register1>
-  <RegisterWindow openNodes="CPU;CPU/xPSR;CPU/CFBP;CPU/CFBP/CONTROL[0];CPU/CFBP/CONTROL[1];Interrupt_Type" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="CPU;Interrupt_Type" decimalNodes="" octalNodes="" asciiNodes="" name="RTOSDemo" />
+  <RegisterWindow openNodes="CPU;CPU/xPSR;CPU/CFBP;CPU/CFBP/CONTROL[0];CPU/CFBP/CONTROL[1];Interrupt_Type" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="RTOSDemo" />
  </Register1>
  <Register2>
-  <RegisterWindow openNodes="MPU;MPU/MPU_Control;MPU/MPU_Region_Number;MPU/MPU_Region_Base_Address;MPU/MPU_Attribute_and_Size" binaryNodes="MPU/MPU_Attribute_and_Size/SIZE" hiddenNodes="" unsignedNodes="" visibleGroups="MPU" decimalNodes="" octalNodes="" asciiNodes="" name="RTOSDemo" />
+  <RegisterWindow openNodes="MPU;MPU/MPU_Control;MPU/MPU_Region_Number;MPU/MPU_Region_Base_Address;MPU/MPU_Attribute_and_Size" binaryNodes="MPU/MPU_Attribute_and_Size/SIZE" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="RTOSDemo" />
  </Register2>
  <Register3>
-  <RegisterWindow openNodes="System_Control_Block;System_Control_Block/System_Handlers_8_11_Priority;System_Control_Block/System_Handler_Control_and_State" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="System_Control_Block" decimalNodes="" octalNodes="" asciiNodes="" name="RTOSDemo" />
+  <RegisterWindow openNodes="System_Control_Block;System_Control_Block/System_Handlers_8_11_Priority;System_Control_Block/System_Handler_Control_and_State" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="RTOSDemo" />
  </Register3>
  <Register4>
-  <RegisterWindow openNodes="" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="" decimalNodes="" octalNodes="" asciiNodes="" name="RTOSDemo" />
+  <RegisterWindow openNodes="" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="RTOSDemo" />
  </Register4>
  <TargetWindow programAction="" uploadFileType="" programLoadAddress="" programSize="" uploadFileName="" uploadMemoryInterface="" programFileName="" uploadStartAddress="" programFileType="" uploadSize="" programMemoryInterface="" />
  <TraceWindow>
@@ -51,7 +54,7 @@
   <Watches active="0" update="Never" />
  </Watch4>
  <Files>
-  <SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="C:\E\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Demo\CORTEX_MPU_LM3Sxxxx_Rowley\main.c" y="100" path="C:\E\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Demo\CORTEX_MPU_LM3Sxxxx_Rowley\main.c" left="17" selected="1" name="unnamed" top="60" />
+  <SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="C:/E/Dev/FreeRTOS/WorkingCopy/FreeRTOS/Demo/CORTEX_MPU_LM3Sxxxx_Rowley/main.c" y="100" path="C:/E/Dev/FreeRTOS/WorkingCopy/FreeRTOS/Demo/CORTEX_MPU_LM3Sxxxx_Rowley/main.c" left="0" selected="1" name="unnamed" top="60" />
  </Files>
- <ARMCrossStudioWindow activeProject="RTOSDemo" autoConnectTarget="Luminary USB Debug" debugSearchFileMap="" fileDialogInitialDirectory="C:\E\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Source\portable\GCC\ARM_CM3_MPU" fileDialogDefaultFilter="*.*" autoConnectCapabilities="388991" debugSearchPath="" buildConfiguration="THUMB Flash Debug" />
+ <ARMCrossStudioWindow activeProject="RTOSDemo" autoConnectTarget="Luminary USB Debug" debugSearchFileMap="" fileDialogInitialDirectory="C:/E/Dev/FreeRTOS/WorkingCopy/FreeRTOS/Source/portable/GCC/ARM_CM3_MPU" fileDialogDefaultFilter="*.*" autoConnectCapabilities="388991" debugSearchPath="" buildConfiguration="THUMB Flash Debug" />
 </session>
index c844887db06595f14f8f50b936079437beab2560..e8c75e64473c31738bcaf2418e49aa96f28329ab 100644 (file)
@@ -139,7 +139,10 @@ from within the interrupts. */
                uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();                                                                                                                     \\r
                {                                                                                                                                                                                                                                       \\r
                        uxValueForNormallyEmptyQueue++;                                                                                                                                                                 \\r
-                       xQueueSendFromISR( xNormallyEmptyQueue, ( void * ) &uxValueForNormallyEmptyQueue, &xHigherPriorityTaskWoken );  \\r
+                       if( xQueueSendFromISR( xNormallyEmptyQueue, ( void * ) &uxValueForNormallyEmptyQueue, &xHigherPriorityTaskWoken ) != pdPASS ) \\r
+                       {                                                                                                                                                                                                                               \\r
+                               uxValueForNormallyEmptyQueue--;                                                                                                                                                         \\r
+                       }                                                                                                                                                                                                                               \\r
                }                                                                                                                                                                                                                                       \\r
                portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );                                                                                                            \\r
        }                                                                                                                                                                                                                                               \\r
@@ -153,7 +156,10 @@ from within the interrupts. */
                uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();                                                                                                                     \\r
                {                                                                                                                                                                                                                                       \\r
                        uxValueForNormallyFullQueue++;                                                                                                                                                                  \\r
-                       xQueueSendFromISR( xNormallyFullQueue, ( void * ) &uxValueForNormallyFullQueue, &xHigherPriorityTaskWoken );    \\r
+                       if( xQueueSendFromISR( xNormallyFullQueue, ( void * ) &uxValueForNormallyFullQueue, &xHigherPriorityTaskWoken ) != pdPASS ) \\r
+                       {                                                                                                                                                                                                                               \\r
+                               uxValueForNormallyFullQueue--;                                                                                                                                                          \\r
+                       }                                                                                                                                                                                                                               \\r
                }                                                                                                                                                                                                                                       \\r
                portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );                                                                                                            \\r
        }                                                                                                                                                                                                                                               \\r
index c77d422f2eadeb88a44528f97a09d6ac47235891..f9af55730c2e59e6b045d20ae7883627de07023a 100644 (file)
@@ -1728,7 +1728,7 @@ BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, BaseType_t ulBitsToCl
  * \defgroup xTaskNotifyWait xTaskNotifyWait\r
  * \ingroup TaskNotifications\r
  */\r
-#define xTaskNotifyGiveFromISR( xTaskToNotify, pxHigherPriorityTaskWoken ) xTaskNotifyFromISR( ( xTaskToNotify ), 0, eIncrement, ( pxHigherPriorityTaskWoken ) )\r
+BaseType_t xTaskNotifyGiveFromISR( TaskHandle_t xTaskToNotify, BaseType_t *pxHigherPriorityTaskWoken );\r
 \r
 /**\r
  * task. h\r
index ae08cbf8ae2feabd19d2ba0012d0b4083054b5ff..fea0f9f4fbfeb63d005564f1ce9f535a4b97dec1 100644 (file)
@@ -126,7 +126,7 @@ extern void vPortEnterCritical( void );
 extern void vPortExitCritical( void );\r
 #define portSET_INTERRUPT_MASK_FROM_ISR()              ulPortRaiseBASEPRI()\r
 #define portCLEAR_INTERRUPT_MASK_FROM_ISR(x)   vPortSetBASEPRI(x)\r
-#define portDISABLE_INTERRUPTS()                               ulPortRaiseBASEPRI()\r
+#define portDISABLE_INTERRUPTS()                               vPortRaiseBASEPRI()\r
 #define portENABLE_INTERRUPTS()                                        vPortSetBASEPRI(0)\r
 #define portENTER_CRITICAL()                                   vPortEnterCritical()\r
 #define portEXIT_CRITICAL()                                            vPortExitCritical()\r
@@ -194,6 +194,22 @@ not necessary for to use this port.  They are defined so the common demo files
 \r
 /*-----------------------------------------------------------*/\r
 \r
+portFORCE_INLINE static void vPortRaiseBASEPRI( void )\r
+{\r
+uint32_t ulNewBASEPRI;\r
+\r
+       __asm volatile\r
+       (\r
+               "       mov %0, %1                                                                                              \n"     \\r
+               "       msr basepri, %0                                                                                 \n" \\r
+               "       isb                                                                                                             \n" \\r
+               "       dsb                                                                                                             \n" \\r
+               :"=r" (ulNewBASEPRI) : "i" ( configMAX_SYSCALL_INTERRUPT_PRIORITY )\r
+       );\r
+}\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
 portFORCE_INLINE static uint32_t ulPortRaiseBASEPRI( void )\r
 {\r
 uint32_t ulOriginalBASEPRI, ulNewBASEPRI;\r
index 2b29b7253ab826940f8b63f3833305bdf5824aae..8d1f5ff1309ce468c7072aee7a6fbc2ba55f7d54 100644 (file)
@@ -129,7 +129,7 @@ typedef unsigned long UBaseType_t;
 extern void vPortEnterCritical( void );\r
 extern void vPortExitCritical( void );\r
 \r
-#define portDISABLE_INTERRUPTS()                               ulPortRaiseBASEPRI()\r
+#define portDISABLE_INTERRUPTS()                               vPortRaiseBASEPRI()\r
 #define portENABLE_INTERRUPTS()                                        vPortSetBASEPRI( 0 )\r
 #define portENTER_CRITICAL()                                   vPortEnterCritical()\r
 #define portEXIT_CRITICAL()                                            vPortExitCritical()\r
@@ -200,6 +200,21 @@ static portFORCE_INLINE void vPortSetBASEPRI( uint32_t ulBASEPRI )
 }\r
 /*-----------------------------------------------------------*/\r
 \r
+static portFORCE_INLINE void vPortRaiseBASEPRI( void )\r
+{\r
+uint32_t ulNewBASEPRI = configMAX_SYSCALL_INTERRUPT_PRIORITY;\r
+\r
+       __asm\r
+       {\r
+               /* Set BASEPRI to the max syscall priority to effect a critical\r
+               section. */\r
+               msr basepri, ulNewBASEPRI\r
+               dsb\r
+               isb\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
 static portFORCE_INLINE uint32_t ulPortRaiseBASEPRI( void )\r
 {\r
 uint32_t ulReturn, ulNewBASEPRI = configMAX_SYSCALL_INTERRUPT_PRIORITY;\r
index 69aaebb76b1f8fc2d46ddd05871ebb9064e9049c..d0be17799338ddc38025c31ea1ada35e1f7cffec 100644 (file)
@@ -180,8 +180,8 @@ typedef struct tskTaskControlBlock
        #endif\r
 \r
        #if ( configUSE_TASK_NOTIFICATIONS == 1 )\r
-               uint32_t ulNotifiedValue;\r
-               eNotifyValue eNotifyState;\r
+               volatile uint32_t ulNotifiedValue;\r
+               volatile eNotifyValue eNotifyState;\r
        #endif\r
 \r
 } tskTCB;\r
@@ -4228,6 +4228,90 @@ TickType_t uxReturn;
 #endif /* configUSE_TASK_NOTIFICATIONS */\r
 /*-----------------------------------------------------------*/\r
 \r
+#if( configUSE_TASK_NOTIFICATIONS == 1 )\r
+\r
+       BaseType_t xTaskNotifyGiveFromISR( TaskHandle_t xTaskToNotify, BaseType_t *pxHigherPriorityTaskWoken )\r
+       {\r
+       TCB_t * pxTCB;\r
+       eNotifyValue eOriginalNotifyState;\r
+       BaseType_t xReturn = pdPASS;\r
+       UBaseType_t uxSavedInterruptStatus;\r
+\r
+               configASSERT( xTaskToNotify );\r
+\r
+               /* RTOS ports that support interrupt nesting have the concept of a\r
+               maximum system call (or maximum API call) interrupt priority.\r
+               Interrupts that are     above the maximum system call priority are keep\r
+               permanently enabled, even when the RTOS kernel is in a critical section,\r
+               but cannot make any calls to FreeRTOS API functions.  If configASSERT()\r
+               is defined in FreeRTOSConfig.h then\r
+               portASSERT_IF_INTERRUPT_PRIORITY_INVALID() will result in an assertion\r
+               failure if a FreeRTOS API function is called from an interrupt that has\r
+               been assigned a priority above the configured maximum system call\r
+               priority.  Only FreeRTOS functions that end in FromISR can be called\r
+               from interrupts that have been assigned a priority at or (logically)\r
+               below the maximum system call interrupt priority.  FreeRTOS maintains a\r
+               separate interrupt safe API to ensure interrupt entry is as fast and as\r
+               simple as possible.  More information (albeit Cortex-M specific) is\r
+               provided on the following link:\r
+               http://www.freertos.org/RTOS-Cortex-M3-M4.html */\r
+               portASSERT_IF_INTERRUPT_PRIORITY_INVALID();\r
+\r
+               pxTCB = ( TCB_t * ) xTaskToNotify;\r
+\r
+               uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();\r
+               {\r
+                       eOriginalNotifyState = pxTCB->eNotifyState;\r
+                       pxTCB->eNotifyState = eNotified;\r
+\r
+                       /* 'Giving' is equivalent to incrementing a count in a counting\r
+                       semaphore. */\r
+                       ( pxTCB->ulNotifiedValue )++;\r
+\r
+                       /* If the task is in the blocked state specifically to wait for a\r
+                       notification then unblock it now. */\r
+                       if( eOriginalNotifyState == eWaitingNotification )\r
+                       {\r
+                               /* The task should not have been on an event list. */\r
+                               configASSERT( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) == NULL );\r
+\r
+                               if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE )\r
+                               {\r
+                                       ( void ) uxListRemove( &( pxTCB->xGenericListItem ) );\r
+                                       prvAddTaskToReadyList( pxTCB );\r
+                               }\r
+                               else\r
+                               {\r
+                                       /* The delayed and ready lists cannot be accessed, so hold\r
+                                       this task pending until the scheduler is resumed. */\r
+                                       vListInsertEnd( &( xPendingReadyList ), &( pxTCB->xEventListItem ) );\r
+                               }\r
+\r
+                               if( pxTCB->uxPriority > pxCurrentTCB->uxPriority )\r
+                               {\r
+                                       /* The notified task has a priority above the currently\r
+                                       executing task so a yield is required. */\r
+                                       if( pxHigherPriorityTaskWoken != NULL )\r
+                                       {\r
+                                               *pxHigherPriorityTaskWoken = pdTRUE;\r
+                                       }\r
+                               }\r
+                               else\r
+                               {\r
+                                       mtCOVERAGE_TEST_MARKER();\r
+                               }\r
+                       }\r
+               }\r
+               portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );\r
+\r
+               return xReturn;\r
+       }\r
+\r
+#endif /* configUSE_TASK_NOTIFICATIONS */\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+\r
 #ifdef FREERTOS_MODULE_TEST\r
        #include "tasks_test_access_functions.h"\r
 #endif\r