mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-04-21 22:11:57 -04:00
Kernel changes:
+ 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.
This commit is contained in:
parent
2de32c0141
commit
fd02010886
|
@ -85,7 +85,7 @@
|
||||||
#define cmdMAX_INPUT_SIZE 60
|
#define cmdMAX_INPUT_SIZE 60
|
||||||
|
|
||||||
/* Dimensions the buffer into which string outputs can be placed. */
|
/* Dimensions the buffer into which string outputs can be placed. */
|
||||||
#define cmdMAX_OUTPUT_SIZE 1024
|
#define cmdMAX_OUTPUT_SIZE 1250
|
||||||
|
|
||||||
/* Dimensions the buffer passed to the recvfrom() call. */
|
/* Dimensions the buffer passed to the recvfrom() call. */
|
||||||
#define cmdSOCKET_INPUT_BUFFER_SIZE 60
|
#define cmdSOCKET_INPUT_BUFFER_SIZE 60
|
||||||
|
|
|
@ -81,13 +81,12 @@ static void prvGMACRxCallback( uint32_t ulStatus );
|
||||||
/* The queue used to communicate Ethernet events to the IP task. */
|
/* The queue used to communicate Ethernet events to the IP task. */
|
||||||
extern xQueueHandle xNetworkEventQueue;
|
extern xQueueHandle xNetworkEventQueue;
|
||||||
|
|
||||||
/* The semaphore used to wake the deferred interrupt handler task when an Rx
|
|
||||||
interrupt is received. */
|
|
||||||
static xSemaphoreHandle xGMACRxEventSemaphore = NULL;
|
|
||||||
|
|
||||||
/* The GMAC driver instance. */
|
/* The GMAC driver instance. */
|
||||||
static gmac_device_t xGMACStruct;
|
static gmac_device_t xGMACStruct;
|
||||||
|
|
||||||
|
/* Handle of the task used to process MAC events. */
|
||||||
|
static TaskHandle_t xMACEventHandlingTask = NULL;
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
BaseType_t xNetworkInterfaceInitialise( void )
|
BaseType_t xNetworkInterfaceInitialise( void )
|
||||||
|
@ -123,20 +122,6 @@ BaseType_t xReturn = pdFALSE;
|
||||||
vTaskDelay( xPHYDelay_400ms * 2UL );
|
vTaskDelay( xPHYDelay_400ms * 2UL );
|
||||||
if( ethernet_phy_set_link( GMAC, BOARD_GMAC_PHY_ADDR, 1 ) == GMAC_OK )
|
if( ethernet_phy_set_link( GMAC, BOARD_GMAC_PHY_ADDR, 1 ) == GMAC_OK )
|
||||||
{
|
{
|
||||||
/* Create the event semaphore if it has not already been
|
|
||||||
created. */
|
|
||||||
if( xGMACRxEventSemaphore == NULL )
|
|
||||||
{
|
|
||||||
xGMACRxEventSemaphore = xSemaphoreCreateCounting( ULONG_MAX, 0 );
|
|
||||||
#if ipconfigINCLUDE_EXAMPLE_FREERTOS_PLUS_TRACE_CALLS == 1
|
|
||||||
{
|
|
||||||
/* If the trace recorder code is included name the semaphore for
|
|
||||||
viewing in FreeRTOS+Trace. */
|
|
||||||
vTraceSetQueueName( xGMACRxEventSemaphore, "MAC_RX" );
|
|
||||||
}
|
|
||||||
#endif /* ipconfigINCLUDE_EXAMPLE_FREERTOS_PLUS_TRACE_CALLS == 1 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Register the callbacks. */
|
/* Register the callbacks. */
|
||||||
gmac_dev_set_rx_callback( &xGMACStruct, prvGMACRxCallback );
|
gmac_dev_set_rx_callback( &xGMACStruct, prvGMACRxCallback );
|
||||||
|
|
||||||
|
@ -149,7 +134,7 @@ BaseType_t xReturn = pdFALSE;
|
||||||
configMINIMAL_STACK_SIZE, /* Stack allocated to the task (defined in words, not bytes). */
|
configMINIMAL_STACK_SIZE, /* Stack allocated to the task (defined in words, not bytes). */
|
||||||
NULL, /* The task parameter is not used. */
|
NULL, /* The task parameter is not used. */
|
||||||
configMAX_PRIORITIES - 1, /* The priority assigned to the task. */
|
configMAX_PRIORITIES - 1, /* The priority assigned to the task. */
|
||||||
NULL ); /* The handle is not required, so NULL is passed. */
|
&xMACEventHandlingTask ); /* The handle is stored so the ISR knows which task to notify. */
|
||||||
|
|
||||||
/* Enable the interrupt and set its priority as configured.
|
/* Enable the interrupt and set its priority as configured.
|
||||||
THIS DRIVER REQUIRES configMAC_INTERRUPT_PRIORITY TO BE DEFINED,
|
THIS DRIVER REQUIRES configMAC_INTERRUPT_PRIORITY TO BE DEFINED,
|
||||||
|
@ -169,10 +154,12 @@ static void prvGMACRxCallback( uint32_t ulStatus )
|
||||||
{
|
{
|
||||||
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
||||||
|
|
||||||
|
configASSERT( xMACEventHandlingTask );
|
||||||
|
|
||||||
/* Unblock the deferred interrupt handler task if the event was an Rx. */
|
/* Unblock the deferred interrupt handler task if the event was an Rx. */
|
||||||
if( ulStatus == GMAC_RSR_REC )
|
if( ulStatus == GMAC_RSR_REC )
|
||||||
{
|
{
|
||||||
xSemaphoreGiveFromISR( xGMACRxEventSemaphore, &xHigherPriorityTaskWoken );
|
xTaskNotifyGiveFromISR( xMACEventHandlingTask, &xHigherPriorityTaskWoken );
|
||||||
}
|
}
|
||||||
|
|
||||||
portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );
|
portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );
|
||||||
|
@ -220,8 +207,9 @@ xIPStackEvent_t xRxEvent = { eEthernetRxEvent, NULL };
|
||||||
static const TickType_t xBufferWaitDelay = 1500UL / portTICK_RATE_MS;
|
static const TickType_t xBufferWaitDelay = 1500UL / portTICK_RATE_MS;
|
||||||
uint32_t ulReturned;
|
uint32_t ulReturned;
|
||||||
|
|
||||||
|
/* This is a very simply but also inefficient implementation. */
|
||||||
|
|
||||||
( void ) pvParameters;
|
( void ) pvParameters;
|
||||||
configASSERT( xGMACRxEventSemaphore );
|
|
||||||
|
|
||||||
for( ;; )
|
for( ;; )
|
||||||
{
|
{
|
||||||
|
@ -229,9 +217,9 @@ uint32_t ulReturned;
|
||||||
received. The while() loop is only needed if INCLUDE_vTaskSuspend is
|
received. The while() loop is only needed if INCLUDE_vTaskSuspend is
|
||||||
set to 0 in FreeRTOSConfig.h. If INCLUDE_vTaskSuspend is set to 1
|
set to 0 in FreeRTOSConfig.h. If INCLUDE_vTaskSuspend is set to 1
|
||||||
then portMAX_DELAY would be an indefinite block time and
|
then portMAX_DELAY would be an indefinite block time and
|
||||||
xSemaphoreTake() would only return when the semaphore was actually
|
xTaskNotifyTake() would only return when the task was actually
|
||||||
obtained. */
|
notified. */
|
||||||
while( xSemaphoreTake( xGMACRxEventSemaphore, portMAX_DELAY ) == pdFALSE );
|
while( ulTaskNotifyTake( pdFALSE, portMAX_DELAY ) == 0 );
|
||||||
|
|
||||||
/* Allocate a buffer to hold the data. */
|
/* Allocate a buffer to hold the data. */
|
||||||
pxNetworkBuffer = pxNetworkBufferGet( ipTOTAL_ETHERNET_FRAME_SIZE, xBufferWaitDelay );
|
pxNetworkBuffer = pxNetworkBufferGet( ipTOTAL_ETHERNET_FRAME_SIZE, xBufferWaitDelay );
|
||||||
|
|
|
@ -73,7 +73,7 @@
|
||||||
<OPTFL>
|
<OPTFL>
|
||||||
<tvExp>1</tvExp>
|
<tvExp>1</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<IsCurrentTarget>1</IsCurrentTarget>
|
<IsCurrentTarget>0</IsCurrentTarget>
|
||||||
</OPTFL>
|
</OPTFL>
|
||||||
<CpuCode>255</CpuCode>
|
<CpuCode>255</CpuCode>
|
||||||
<Books>
|
<Books>
|
||||||
|
@ -98,16 +98,6 @@
|
||||||
<Path>datashts\arm\cortex_m4\r0p1\DUI0553A_CORTEX_M4_DGUG.PDF</Path>
|
<Path>datashts\arm\cortex_m4\r0p1\DUI0553A_CORTEX_M4_DGUG.PDF</Path>
|
||||||
</Book>
|
</Book>
|
||||||
</Books>
|
</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>
|
<DebugOpt>
|
||||||
<uSim>0</uSim>
|
<uSim>0</uSim>
|
||||||
<uTrg>1</uTrg>
|
<uTrg>1</uTrg>
|
||||||
|
@ -126,9 +116,11 @@
|
||||||
<tRfunc>0</tRfunc>
|
<tRfunc>0</tRfunc>
|
||||||
<tRbox>1</tRbox>
|
<tRbox>1</tRbox>
|
||||||
<tRtrace>0</tRtrace>
|
<tRtrace>0</tRtrace>
|
||||||
|
<sRSysVw>1</sRSysVw>
|
||||||
|
<tRSysVw>1</tRSysVw>
|
||||||
<sRunDeb>0</sRunDeb>
|
<sRunDeb>0</sRunDeb>
|
||||||
<sLrtime>0</sLrtime>
|
<sLrtime>0</sLrtime>
|
||||||
<nTsel>7</nTsel>
|
<nTsel>6</nTsel>
|
||||||
<sDll></sDll>
|
<sDll></sDll>
|
||||||
<sDllPa></sDllPa>
|
<sDllPa></sDllPa>
|
||||||
<sDlgDll></sDlgDll>
|
<sDlgDll></sDlgDll>
|
||||||
|
@ -191,6 +183,7 @@
|
||||||
<WinNumber>1</WinNumber>
|
<WinNumber>1</WinNumber>
|
||||||
<SubType>5</SubType>
|
<SubType>5</SubType>
|
||||||
<ItemText>0x0C000000</ItemText>
|
<ItemText>0x0C000000</ItemText>
|
||||||
|
<AccSizeX>0</AccSizeX>
|
||||||
</Mm>
|
</Mm>
|
||||||
</MemoryWindow1>
|
</MemoryWindow1>
|
||||||
<Tracepoint>
|
<Tracepoint>
|
||||||
|
@ -280,7 +273,7 @@
|
||||||
<OPTFL>
|
<OPTFL>
|
||||||
<tvExp>1</tvExp>
|
<tvExp>1</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<IsCurrentTarget>0</IsCurrentTarget>
|
<IsCurrentTarget>1</IsCurrentTarget>
|
||||||
</OPTFL>
|
</OPTFL>
|
||||||
<CpuCode>255</CpuCode>
|
<CpuCode>255</CpuCode>
|
||||||
<Books>
|
<Books>
|
||||||
|
@ -305,16 +298,6 @@
|
||||||
<Path>datashts\arm\cortex_m4\r0p1\DUI0553A_CORTEX_M4_DGUG.PDF</Path>
|
<Path>datashts\arm\cortex_m4\r0p1\DUI0553A_CORTEX_M4_DGUG.PDF</Path>
|
||||||
</Book>
|
</Book>
|
||||||
</Books>
|
</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>
|
<DebugOpt>
|
||||||
<uSim>0</uSim>
|
<uSim>0</uSim>
|
||||||
<uTrg>1</uTrg>
|
<uTrg>1</uTrg>
|
||||||
|
@ -333,9 +316,11 @@
|
||||||
<tRfunc>0</tRfunc>
|
<tRfunc>0</tRfunc>
|
||||||
<tRbox>1</tRbox>
|
<tRbox>1</tRbox>
|
||||||
<tRtrace>0</tRtrace>
|
<tRtrace>0</tRtrace>
|
||||||
|
<sRSysVw>1</sRSysVw>
|
||||||
|
<tRSysVw>1</tRSysVw>
|
||||||
<sRunDeb>0</sRunDeb>
|
<sRunDeb>0</sRunDeb>
|
||||||
<sLrtime>0</sLrtime>
|
<sLrtime>0</sLrtime>
|
||||||
<nTsel>7</nTsel>
|
<nTsel>6</nTsel>
|
||||||
<sDll></sDll>
|
<sDll></sDll>
|
||||||
<sDllPa></sDllPa>
|
<sDllPa></sDllPa>
|
||||||
<sDlgDll></sDlgDll>
|
<sDlgDll></sDlgDll>
|
||||||
|
@ -391,6 +376,7 @@
|
||||||
<WinNumber>1</WinNumber>
|
<WinNumber>1</WinNumber>
|
||||||
<SubType>2</SubType>
|
<SubType>2</SubType>
|
||||||
<ItemText>0x20005f90</ItemText>
|
<ItemText>0x20005f90</ItemText>
|
||||||
|
<AccSizeX>0</AccSizeX>
|
||||||
</Mm>
|
</Mm>
|
||||||
</MemoryWindow1>
|
</MemoryWindow1>
|
||||||
<Tracepoint>
|
<Tracepoint>
|
||||||
|
@ -399,7 +385,7 @@
|
||||||
<DebugFlag>
|
<DebugFlag>
|
||||||
<trace>0</trace>
|
<trace>0</trace>
|
||||||
<periodic>1</periodic>
|
<periodic>1</periodic>
|
||||||
<aLwin>1</aLwin>
|
<aLwin>0</aLwin>
|
||||||
<aCover>0</aCover>
|
<aCover>0</aCover>
|
||||||
<aSer1>0</aSer1>
|
<aSer1>0</aSer1>
|
||||||
<aSer2>0</aSer2>
|
<aSer2>0</aSer2>
|
||||||
|
@ -505,16 +491,6 @@
|
||||||
<Path>datashts\arm\cortex_m4\r0p1\DUI0553A_CORTEX_M4_DGUG.PDF</Path>
|
<Path>datashts\arm\cortex_m4\r0p1\DUI0553A_CORTEX_M4_DGUG.PDF</Path>
|
||||||
</Book>
|
</Book>
|
||||||
</Books>
|
</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>
|
<DebugOpt>
|
||||||
<uSim>0</uSim>
|
<uSim>0</uSim>
|
||||||
<uTrg>1</uTrg>
|
<uTrg>1</uTrg>
|
||||||
|
@ -533,6 +509,8 @@
|
||||||
<tRfunc>0</tRfunc>
|
<tRfunc>0</tRfunc>
|
||||||
<tRbox>1</tRbox>
|
<tRbox>1</tRbox>
|
||||||
<tRtrace>0</tRtrace>
|
<tRtrace>0</tRtrace>
|
||||||
|
<sRSysVw>1</sRSysVw>
|
||||||
|
<tRSysVw>1</tRSysVw>
|
||||||
<sRunDeb>0</sRunDeb>
|
<sRunDeb>0</sRunDeb>
|
||||||
<sLrtime>0</sLrtime>
|
<sLrtime>0</sLrtime>
|
||||||
<nTsel>7</nTsel>
|
<nTsel>7</nTsel>
|
||||||
|
@ -591,6 +569,7 @@
|
||||||
<WinNumber>1</WinNumber>
|
<WinNumber>1</WinNumber>
|
||||||
<SubType>5</SubType>
|
<SubType>5</SubType>
|
||||||
<ItemText>0x0C000000</ItemText>
|
<ItemText>0x0C000000</ItemText>
|
||||||
|
<AccSizeX>0</AccSizeX>
|
||||||
</Mm>
|
</Mm>
|
||||||
</MemoryWindow1>
|
</MemoryWindow1>
|
||||||
<Tracepoint>
|
<Tracepoint>
|
||||||
|
@ -639,10 +618,7 @@
|
||||||
<FileType>2</FileType>
|
<FileType>2</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<Focus>0</Focus>
|
<Focus>0</Focus>
|
||||||
<ColumnNumber>0</ColumnNumber>
|
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<TopLine>277</TopLine>
|
|
||||||
<CurrentLine>289</CurrentLine>
|
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>.\startup_XMC4500.s</PathWithFileName>
|
<PathWithFileName>.\startup_XMC4500.s</PathWithFileName>
|
||||||
<FilenameWithoutPath>startup_XMC4500.s</FilenameWithoutPath>
|
<FilenameWithoutPath>startup_XMC4500.s</FilenameWithoutPath>
|
||||||
|
@ -655,10 +631,7 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<Focus>0</Focus>
|
<Focus>0</Focus>
|
||||||
<ColumnNumber>0</ColumnNumber>
|
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<TopLine>0</TopLine>
|
|
||||||
<CurrentLine>0</CurrentLine>
|
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>.\System_XMC4500.c</PathWithFileName>
|
<PathWithFileName>.\System_XMC4500.c</PathWithFileName>
|
||||||
<FilenameWithoutPath>System_XMC4500.c</FilenameWithoutPath>
|
<FilenameWithoutPath>System_XMC4500.c</FilenameWithoutPath>
|
||||||
|
@ -671,10 +644,7 @@
|
||||||
<FileType>2</FileType>
|
<FileType>2</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<Focus>0</Focus>
|
<Focus>0</Focus>
|
||||||
<ColumnNumber>0</ColumnNumber>
|
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<TopLine>276</TopLine>
|
|
||||||
<CurrentLine>288</CurrentLine>
|
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>.\startup_XMC4200.s</PathWithFileName>
|
<PathWithFileName>.\startup_XMC4200.s</PathWithFileName>
|
||||||
<FilenameWithoutPath>startup_XMC4200.s</FilenameWithoutPath>
|
<FilenameWithoutPath>startup_XMC4200.s</FilenameWithoutPath>
|
||||||
|
@ -687,10 +657,7 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<Focus>0</Focus>
|
<Focus>0</Focus>
|
||||||
<ColumnNumber>0</ColumnNumber>
|
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<TopLine>0</TopLine>
|
|
||||||
<CurrentLine>0</CurrentLine>
|
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>.\system_XMC4200.c</PathWithFileName>
|
<PathWithFileName>.\system_XMC4200.c</PathWithFileName>
|
||||||
<FilenameWithoutPath>system_XMC4200.c</FilenameWithoutPath>
|
<FilenameWithoutPath>system_XMC4200.c</FilenameWithoutPath>
|
||||||
|
@ -703,10 +670,7 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<Focus>0</Focus>
|
<Focus>0</Focus>
|
||||||
<ColumnNumber>7</ColumnNumber>
|
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<TopLine>0</TopLine>
|
|
||||||
<CurrentLine>0</CurrentLine>
|
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>.\system_XMC4400.c</PathWithFileName>
|
<PathWithFileName>.\system_XMC4400.c</PathWithFileName>
|
||||||
<FilenameWithoutPath>system_XMC4400.c</FilenameWithoutPath>
|
<FilenameWithoutPath>system_XMC4400.c</FilenameWithoutPath>
|
||||||
|
@ -719,10 +683,7 @@
|
||||||
<FileType>2</FileType>
|
<FileType>2</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<Focus>0</Focus>
|
<Focus>0</Focus>
|
||||||
<ColumnNumber>0</ColumnNumber>
|
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<TopLine>276</TopLine>
|
|
||||||
<CurrentLine>288</CurrentLine>
|
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>.\startup_XMC4400.s</PathWithFileName>
|
<PathWithFileName>.\startup_XMC4400.s</PathWithFileName>
|
||||||
<FilenameWithoutPath>startup_XMC4400.s</FilenameWithoutPath>
|
<FilenameWithoutPath>startup_XMC4400.s</FilenameWithoutPath>
|
||||||
|
@ -743,10 +704,7 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<Focus>0</Focus>
|
<Focus>0</Focus>
|
||||||
<ColumnNumber>45</ColumnNumber>
|
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<TopLine>63</TopLine>
|
|
||||||
<CurrentLine>97</CurrentLine>
|
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>.\main.c</PathWithFileName>
|
<PathWithFileName>.\main.c</PathWithFileName>
|
||||||
<FilenameWithoutPath>main.c</FilenameWithoutPath>
|
<FilenameWithoutPath>main.c</FilenameWithoutPath>
|
||||||
|
@ -759,10 +717,7 @@
|
||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<Focus>0</Focus>
|
<Focus>0</Focus>
|
||||||
<ColumnNumber>0</ColumnNumber>
|
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<TopLine>1</TopLine>
|
|
||||||
<CurrentLine>1</CurrentLine>
|
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>.\FreeRTOSConfig.h</PathWithFileName>
|
<PathWithFileName>.\FreeRTOSConfig.h</PathWithFileName>
|
||||||
<FilenameWithoutPath>FreeRTOSConfig.h</FilenameWithoutPath>
|
<FilenameWithoutPath>FreeRTOSConfig.h</FilenameWithoutPath>
|
||||||
|
@ -775,10 +730,7 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<Focus>0</Focus>
|
<Focus>0</Focus>
|
||||||
<ColumnNumber>0</ColumnNumber>
|
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<TopLine>0</TopLine>
|
|
||||||
<CurrentLine>0</CurrentLine>
|
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>.\RegTest.c</PathWithFileName>
|
<PathWithFileName>.\RegTest.c</PathWithFileName>
|
||||||
<FilenameWithoutPath>RegTest.c</FilenameWithoutPath>
|
<FilenameWithoutPath>RegTest.c</FilenameWithoutPath>
|
||||||
|
@ -791,10 +743,7 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<Focus>0</Focus>
|
<Focus>0</Focus>
|
||||||
<ColumnNumber>0</ColumnNumber>
|
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<TopLine>0</TopLine>
|
|
||||||
<CurrentLine>0</CurrentLine>
|
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>.\main_full.c</PathWithFileName>
|
<PathWithFileName>.\main_full.c</PathWithFileName>
|
||||||
<FilenameWithoutPath>main_full.c</FilenameWithoutPath>
|
<FilenameWithoutPath>main_full.c</FilenameWithoutPath>
|
||||||
|
@ -807,10 +756,7 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<Focus>0</Focus>
|
<Focus>0</Focus>
|
||||||
<ColumnNumber>0</ColumnNumber>
|
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<TopLine>0</TopLine>
|
|
||||||
<CurrentLine>0</CurrentLine>
|
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>.\main_blinky.c</PathWithFileName>
|
<PathWithFileName>.\main_blinky.c</PathWithFileName>
|
||||||
<FilenameWithoutPath>main_blinky.c</FilenameWithoutPath>
|
<FilenameWithoutPath>main_blinky.c</FilenameWithoutPath>
|
||||||
|
@ -831,10 +777,7 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<Focus>0</Focus>
|
<Focus>0</Focus>
|
||||||
<ColumnNumber>0</ColumnNumber>
|
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<TopLine>0</TopLine>
|
|
||||||
<CurrentLine>0</CurrentLine>
|
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>..\..\Source\timers.c</PathWithFileName>
|
<PathWithFileName>..\..\Source\timers.c</PathWithFileName>
|
||||||
<FilenameWithoutPath>timers.c</FilenameWithoutPath>
|
<FilenameWithoutPath>timers.c</FilenameWithoutPath>
|
||||||
|
@ -847,10 +790,7 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<Focus>0</Focus>
|
<Focus>0</Focus>
|
||||||
<ColumnNumber>0</ColumnNumber>
|
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<TopLine>0</TopLine>
|
|
||||||
<CurrentLine>0</CurrentLine>
|
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>..\..\Source\list.c</PathWithFileName>
|
<PathWithFileName>..\..\Source\list.c</PathWithFileName>
|
||||||
<FilenameWithoutPath>list.c</FilenameWithoutPath>
|
<FilenameWithoutPath>list.c</FilenameWithoutPath>
|
||||||
|
@ -863,10 +803,7 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<Focus>0</Focus>
|
<Focus>0</Focus>
|
||||||
<ColumnNumber>0</ColumnNumber>
|
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<TopLine>552</TopLine>
|
|
||||||
<CurrentLine>560</CurrentLine>
|
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>..\..\Source\queue.c</PathWithFileName>
|
<PathWithFileName>..\..\Source\queue.c</PathWithFileName>
|
||||||
<FilenameWithoutPath>queue.c</FilenameWithoutPath>
|
<FilenameWithoutPath>queue.c</FilenameWithoutPath>
|
||||||
|
@ -879,10 +816,7 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<Focus>0</Focus>
|
<Focus>0</Focus>
|
||||||
<ColumnNumber>0</ColumnNumber>
|
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<TopLine>0</TopLine>
|
|
||||||
<CurrentLine>0</CurrentLine>
|
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>..\..\Source\tasks.c</PathWithFileName>
|
<PathWithFileName>..\..\Source\tasks.c</PathWithFileName>
|
||||||
<FilenameWithoutPath>tasks.c</FilenameWithoutPath>
|
<FilenameWithoutPath>tasks.c</FilenameWithoutPath>
|
||||||
|
@ -895,10 +829,7 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<Focus>0</Focus>
|
<Focus>0</Focus>
|
||||||
<ColumnNumber>0</ColumnNumber>
|
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<TopLine>420</TopLine>
|
|
||||||
<CurrentLine>428</CurrentLine>
|
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>..\..\Source\portable\RVDS\ARM_CM4F\port.c</PathWithFileName>
|
<PathWithFileName>..\..\Source\portable\RVDS\ARM_CM4F\port.c</PathWithFileName>
|
||||||
<FilenameWithoutPath>port.c</FilenameWithoutPath>
|
<FilenameWithoutPath>port.c</FilenameWithoutPath>
|
||||||
|
@ -911,10 +842,7 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<Focus>0</Focus>
|
<Focus>0</Focus>
|
||||||
<ColumnNumber>0</ColumnNumber>
|
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<TopLine>0</TopLine>
|
|
||||||
<CurrentLine>0</CurrentLine>
|
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>..\..\Source\portable\MemMang\heap_4.c</PathWithFileName>
|
<PathWithFileName>..\..\Source\portable\MemMang\heap_4.c</PathWithFileName>
|
||||||
<FilenameWithoutPath>heap_4.c</FilenameWithoutPath>
|
<FilenameWithoutPath>heap_4.c</FilenameWithoutPath>
|
||||||
|
@ -935,10 +863,7 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<Focus>0</Focus>
|
<Focus>0</Focus>
|
||||||
<ColumnNumber>0</ColumnNumber>
|
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<TopLine>0</TopLine>
|
|
||||||
<CurrentLine>0</CurrentLine>
|
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>..\Common\Minimal\semtest.c</PathWithFileName>
|
<PathWithFileName>..\Common\Minimal\semtest.c</PathWithFileName>
|
||||||
<FilenameWithoutPath>semtest.c</FilenameWithoutPath>
|
<FilenameWithoutPath>semtest.c</FilenameWithoutPath>
|
||||||
|
@ -951,10 +876,7 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<Focus>0</Focus>
|
<Focus>0</Focus>
|
||||||
<ColumnNumber>0</ColumnNumber>
|
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<TopLine>254</TopLine>
|
|
||||||
<CurrentLine>262</CurrentLine>
|
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>..\Common\Minimal\sp_flop.c</PathWithFileName>
|
<PathWithFileName>..\Common\Minimal\sp_flop.c</PathWithFileName>
|
||||||
<FilenameWithoutPath>sp_flop.c</FilenameWithoutPath>
|
<FilenameWithoutPath>sp_flop.c</FilenameWithoutPath>
|
||||||
|
@ -967,10 +889,7 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<Focus>0</Focus>
|
<Focus>0</Focus>
|
||||||
<ColumnNumber>0</ColumnNumber>
|
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<TopLine>0</TopLine>
|
|
||||||
<CurrentLine>0</CurrentLine>
|
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>..\Common\Minimal\blocktim.c</PathWithFileName>
|
<PathWithFileName>..\Common\Minimal\blocktim.c</PathWithFileName>
|
||||||
<FilenameWithoutPath>blocktim.c</FilenameWithoutPath>
|
<FilenameWithoutPath>blocktim.c</FilenameWithoutPath>
|
||||||
|
@ -983,10 +902,7 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<Focus>0</Focus>
|
<Focus>0</Focus>
|
||||||
<ColumnNumber>0</ColumnNumber>
|
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<TopLine>0</TopLine>
|
|
||||||
<CurrentLine>0</CurrentLine>
|
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>..\Common\Minimal\countsem.c</PathWithFileName>
|
<PathWithFileName>..\Common\Minimal\countsem.c</PathWithFileName>
|
||||||
<FilenameWithoutPath>countsem.c</FilenameWithoutPath>
|
<FilenameWithoutPath>countsem.c</FilenameWithoutPath>
|
||||||
|
@ -999,10 +915,7 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<Focus>0</Focus>
|
<Focus>0</Focus>
|
||||||
<ColumnNumber>0</ColumnNumber>
|
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<TopLine>0</TopLine>
|
|
||||||
<CurrentLine>0</CurrentLine>
|
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>..\Common\Minimal\dynamic.c</PathWithFileName>
|
<PathWithFileName>..\Common\Minimal\dynamic.c</PathWithFileName>
|
||||||
<FilenameWithoutPath>dynamic.c</FilenameWithoutPath>
|
<FilenameWithoutPath>dynamic.c</FilenameWithoutPath>
|
||||||
|
@ -1015,10 +928,7 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<Focus>0</Focus>
|
<Focus>0</Focus>
|
||||||
<ColumnNumber>0</ColumnNumber>
|
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<TopLine>0</TopLine>
|
|
||||||
<CurrentLine>0</CurrentLine>
|
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>..\Common\Minimal\GenQTest.c</PathWithFileName>
|
<PathWithFileName>..\Common\Minimal\GenQTest.c</PathWithFileName>
|
||||||
<FilenameWithoutPath>GenQTest.c</FilenameWithoutPath>
|
<FilenameWithoutPath>GenQTest.c</FilenameWithoutPath>
|
||||||
|
@ -1031,10 +941,7 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<Focus>0</Focus>
|
<Focus>0</Focus>
|
||||||
<ColumnNumber>0</ColumnNumber>
|
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<TopLine>0</TopLine>
|
|
||||||
<CurrentLine>0</CurrentLine>
|
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>..\Common\Minimal\recmutex.c</PathWithFileName>
|
<PathWithFileName>..\Common\Minimal\recmutex.c</PathWithFileName>
|
||||||
<FilenameWithoutPath>recmutex.c</FilenameWithoutPath>
|
<FilenameWithoutPath>recmutex.c</FilenameWithoutPath>
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
<SLE66AMisc></SLE66AMisc>
|
<SLE66AMisc></SLE66AMisc>
|
||||||
<SLE66LinkerMisc></SLE66LinkerMisc>
|
<SLE66LinkerMisc></SLE66LinkerMisc>
|
||||||
<SFDFile>SFD\Infineon\XMC4500\xmc4500.sfr</SFDFile>
|
<SFDFile>SFD\Infineon\XMC4500\xmc4500.sfr</SFDFile>
|
||||||
|
<bCustSvd>0</bCustSvd>
|
||||||
<UseEnv>0</UseEnv>
|
<UseEnv>0</UseEnv>
|
||||||
<BinPath></BinPath>
|
<BinPath></BinPath>
|
||||||
<IncludePath></IncludePath>
|
<IncludePath></IncludePath>
|
||||||
|
@ -71,6 +72,8 @@
|
||||||
<UserProg2Name></UserProg2Name>
|
<UserProg2Name></UserProg2Name>
|
||||||
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
|
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
|
||||||
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
|
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
|
||||||
|
<nStopB1X>0</nStopB1X>
|
||||||
|
<nStopB2X>0</nStopB2X>
|
||||||
</BeforeMake>
|
</BeforeMake>
|
||||||
<AfterMake>
|
<AfterMake>
|
||||||
<RunUserProg1>0</RunUserProg1>
|
<RunUserProg1>0</RunUserProg1>
|
||||||
|
@ -97,6 +100,7 @@
|
||||||
<StopOnExitCode>3</StopOnExitCode>
|
<StopOnExitCode>3</StopOnExitCode>
|
||||||
<CustomArgument></CustomArgument>
|
<CustomArgument></CustomArgument>
|
||||||
<IncludeLibraryModules></IncludeLibraryModules>
|
<IncludeLibraryModules></IncludeLibraryModules>
|
||||||
|
<ComprImg>1</ComprImg>
|
||||||
</CommonProperty>
|
</CommonProperty>
|
||||||
<DllOption>
|
<DllOption>
|
||||||
<SimDllName>SARMCM3.DLL</SimDllName>
|
<SimDllName>SARMCM3.DLL</SimDllName>
|
||||||
|
@ -126,6 +130,7 @@
|
||||||
<RestoreFunctions>1</RestoreFunctions>
|
<RestoreFunctions>1</RestoreFunctions>
|
||||||
<RestoreToolbox>1</RestoreToolbox>
|
<RestoreToolbox>1</RestoreToolbox>
|
||||||
<LimitSpeedToRealTime>0</LimitSpeedToRealTime>
|
<LimitSpeedToRealTime>0</LimitSpeedToRealTime>
|
||||||
|
<RestoreSysVw>1</RestoreSysVw>
|
||||||
</Simulator>
|
</Simulator>
|
||||||
<Target>
|
<Target>
|
||||||
<UseTarget>1</UseTarget>
|
<UseTarget>1</UseTarget>
|
||||||
|
@ -137,9 +142,10 @@
|
||||||
<RestoreFunctions>0</RestoreFunctions>
|
<RestoreFunctions>0</RestoreFunctions>
|
||||||
<RestoreToolbox>1</RestoreToolbox>
|
<RestoreToolbox>1</RestoreToolbox>
|
||||||
<RestoreTracepoints>0</RestoreTracepoints>
|
<RestoreTracepoints>0</RestoreTracepoints>
|
||||||
|
<RestoreSysVw>1</RestoreSysVw>
|
||||||
</Target>
|
</Target>
|
||||||
<RunDebugAfterBuild>0</RunDebugAfterBuild>
|
<RunDebugAfterBuild>0</RunDebugAfterBuild>
|
||||||
<TargetSelection>7</TargetSelection>
|
<TargetSelection>6</TargetSelection>
|
||||||
<SimDlls>
|
<SimDlls>
|
||||||
<CpuDll></CpuDll>
|
<CpuDll></CpuDll>
|
||||||
<CpuDllArguments></CpuDllArguments>
|
<CpuDllArguments></CpuDllArguments>
|
||||||
|
@ -169,6 +175,10 @@
|
||||||
<Flash2>BIN\UL2CM3.DLL</Flash2>
|
<Flash2>BIN\UL2CM3.DLL</Flash2>
|
||||||
<Flash3>"" ()</Flash3>
|
<Flash3>"" ()</Flash3>
|
||||||
<Flash4></Flash4>
|
<Flash4></Flash4>
|
||||||
|
<pFcarmOut></pFcarmOut>
|
||||||
|
<pFcarmGrp></pFcarmGrp>
|
||||||
|
<pFcArmRoot></pFcArmRoot>
|
||||||
|
<FcArmLst>0</FcArmLst>
|
||||||
</Utilities>
|
</Utilities>
|
||||||
<TargetArmAds>
|
<TargetArmAds>
|
||||||
<ArmAdsMisc>
|
<ArmAdsMisc>
|
||||||
|
@ -347,6 +357,8 @@
|
||||||
<wLevel>0</wLevel>
|
<wLevel>0</wLevel>
|
||||||
<uThumb>0</uThumb>
|
<uThumb>0</uThumb>
|
||||||
<uSurpInc>0</uSurpInc>
|
<uSurpInc>0</uSurpInc>
|
||||||
|
<uC99>0</uC99>
|
||||||
|
<useXO>0</useXO>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls>--cpu Cortex-M4.fp --no_allow_fpreg_for_nonfpdata</MiscControls>
|
<MiscControls>--cpu Cortex-M4.fp --no_allow_fpreg_for_nonfpdata</MiscControls>
|
||||||
<Define>rvkdm PART_XMC4500</Define>
|
<Define>rvkdm PART_XMC4500</Define>
|
||||||
|
@ -363,6 +375,7 @@
|
||||||
<SwStkChk>0</SwStkChk>
|
<SwStkChk>0</SwStkChk>
|
||||||
<NoWarn>0</NoWarn>
|
<NoWarn>0</NoWarn>
|
||||||
<uSurpInc>0</uSurpInc>
|
<uSurpInc>0</uSurpInc>
|
||||||
|
<useXO>0</useXO>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls></MiscControls>
|
<MiscControls></MiscControls>
|
||||||
<Define></Define>
|
<Define></Define>
|
||||||
|
@ -379,6 +392,7 @@
|
||||||
<useFile>0</useFile>
|
<useFile>0</useFile>
|
||||||
<TextAddressRange>0x0C000000</TextAddressRange>
|
<TextAddressRange>0x0C000000</TextAddressRange>
|
||||||
<DataAddressRange>0x10000000</DataAddressRange>
|
<DataAddressRange>0x10000000</DataAddressRange>
|
||||||
|
<pXoBase></pXoBase>
|
||||||
<ScatterFile></ScatterFile>
|
<ScatterFile></ScatterFile>
|
||||||
<IncludeLibs></IncludeLibs>
|
<IncludeLibs></IncludeLibs>
|
||||||
<IncludeLibsPath></IncludeLibsPath>
|
<IncludeLibsPath></IncludeLibsPath>
|
||||||
|
@ -421,6 +435,7 @@
|
||||||
<StopOnExitCode>11</StopOnExitCode>
|
<StopOnExitCode>11</StopOnExitCode>
|
||||||
<CustomArgument></CustomArgument>
|
<CustomArgument></CustomArgument>
|
||||||
<IncludeLibraryModules></IncludeLibraryModules>
|
<IncludeLibraryModules></IncludeLibraryModules>
|
||||||
|
<ComprImg>1</ComprImg>
|
||||||
</CommonProperty>
|
</CommonProperty>
|
||||||
<FileArmAds>
|
<FileArmAds>
|
||||||
<Aads>
|
<Aads>
|
||||||
|
@ -432,6 +447,7 @@
|
||||||
<SwStkChk>2</SwStkChk>
|
<SwStkChk>2</SwStkChk>
|
||||||
<NoWarn>2</NoWarn>
|
<NoWarn>2</NoWarn>
|
||||||
<uSurpInc>2</uSurpInc>
|
<uSurpInc>2</uSurpInc>
|
||||||
|
<useXO>2</useXO>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls></MiscControls>
|
<MiscControls></MiscControls>
|
||||||
<Define></Define>
|
<Define></Define>
|
||||||
|
@ -461,6 +477,7 @@
|
||||||
<StopOnExitCode>11</StopOnExitCode>
|
<StopOnExitCode>11</StopOnExitCode>
|
||||||
<CustomArgument></CustomArgument>
|
<CustomArgument></CustomArgument>
|
||||||
<IncludeLibraryModules></IncludeLibraryModules>
|
<IncludeLibraryModules></IncludeLibraryModules>
|
||||||
|
<ComprImg>1</ComprImg>
|
||||||
</CommonProperty>
|
</CommonProperty>
|
||||||
<FileArmAds>
|
<FileArmAds>
|
||||||
<Cads>
|
<Cads>
|
||||||
|
@ -477,6 +494,8 @@
|
||||||
<wLevel>0</wLevel>
|
<wLevel>0</wLevel>
|
||||||
<uThumb>2</uThumb>
|
<uThumb>2</uThumb>
|
||||||
<uSurpInc>2</uSurpInc>
|
<uSurpInc>2</uSurpInc>
|
||||||
|
<uC99>2</uC99>
|
||||||
|
<useXO>2</useXO>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls></MiscControls>
|
<MiscControls></MiscControls>
|
||||||
<Define></Define>
|
<Define></Define>
|
||||||
|
@ -506,6 +525,7 @@
|
||||||
<StopOnExitCode>11</StopOnExitCode>
|
<StopOnExitCode>11</StopOnExitCode>
|
||||||
<CustomArgument></CustomArgument>
|
<CustomArgument></CustomArgument>
|
||||||
<IncludeLibraryModules></IncludeLibraryModules>
|
<IncludeLibraryModules></IncludeLibraryModules>
|
||||||
|
<ComprImg>1</ComprImg>
|
||||||
</CommonProperty>
|
</CommonProperty>
|
||||||
<FileArmAds>
|
<FileArmAds>
|
||||||
<Cads>
|
<Cads>
|
||||||
|
@ -522,6 +542,8 @@
|
||||||
<wLevel>0</wLevel>
|
<wLevel>0</wLevel>
|
||||||
<uThumb>2</uThumb>
|
<uThumb>2</uThumb>
|
||||||
<uSurpInc>2</uSurpInc>
|
<uSurpInc>2</uSurpInc>
|
||||||
|
<uC99>2</uC99>
|
||||||
|
<useXO>2</useXO>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls></MiscControls>
|
<MiscControls></MiscControls>
|
||||||
<Define></Define>
|
<Define></Define>
|
||||||
|
@ -551,6 +573,7 @@
|
||||||
<StopOnExitCode>11</StopOnExitCode>
|
<StopOnExitCode>11</StopOnExitCode>
|
||||||
<CustomArgument></CustomArgument>
|
<CustomArgument></CustomArgument>
|
||||||
<IncludeLibraryModules></IncludeLibraryModules>
|
<IncludeLibraryModules></IncludeLibraryModules>
|
||||||
|
<ComprImg>1</ComprImg>
|
||||||
</CommonProperty>
|
</CommonProperty>
|
||||||
<FileArmAds>
|
<FileArmAds>
|
||||||
<Aads>
|
<Aads>
|
||||||
|
@ -562,6 +585,7 @@
|
||||||
<SwStkChk>2</SwStkChk>
|
<SwStkChk>2</SwStkChk>
|
||||||
<NoWarn>2</NoWarn>
|
<NoWarn>2</NoWarn>
|
||||||
<uSurpInc>2</uSurpInc>
|
<uSurpInc>2</uSurpInc>
|
||||||
|
<useXO>2</useXO>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls></MiscControls>
|
<MiscControls></MiscControls>
|
||||||
<Define></Define>
|
<Define></Define>
|
||||||
|
@ -705,6 +729,7 @@
|
||||||
<SLE66AMisc></SLE66AMisc>
|
<SLE66AMisc></SLE66AMisc>
|
||||||
<SLE66LinkerMisc></SLE66LinkerMisc>
|
<SLE66LinkerMisc></SLE66LinkerMisc>
|
||||||
<SFDFile>SFD\Infineon\XMC4400\xmc4400.SFR</SFDFile>
|
<SFDFile>SFD\Infineon\XMC4400\xmc4400.SFR</SFDFile>
|
||||||
|
<bCustSvd>0</bCustSvd>
|
||||||
<UseEnv>0</UseEnv>
|
<UseEnv>0</UseEnv>
|
||||||
<BinPath></BinPath>
|
<BinPath></BinPath>
|
||||||
<IncludePath></IncludePath>
|
<IncludePath></IncludePath>
|
||||||
|
@ -746,6 +771,8 @@
|
||||||
<UserProg2Name></UserProg2Name>
|
<UserProg2Name></UserProg2Name>
|
||||||
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
|
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
|
||||||
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
|
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
|
||||||
|
<nStopB1X>0</nStopB1X>
|
||||||
|
<nStopB2X>0</nStopB2X>
|
||||||
</BeforeMake>
|
</BeforeMake>
|
||||||
<AfterMake>
|
<AfterMake>
|
||||||
<RunUserProg1>0</RunUserProg1>
|
<RunUserProg1>0</RunUserProg1>
|
||||||
|
@ -772,6 +799,7 @@
|
||||||
<StopOnExitCode>3</StopOnExitCode>
|
<StopOnExitCode>3</StopOnExitCode>
|
||||||
<CustomArgument></CustomArgument>
|
<CustomArgument></CustomArgument>
|
||||||
<IncludeLibraryModules></IncludeLibraryModules>
|
<IncludeLibraryModules></IncludeLibraryModules>
|
||||||
|
<ComprImg>1</ComprImg>
|
||||||
</CommonProperty>
|
</CommonProperty>
|
||||||
<DllOption>
|
<DllOption>
|
||||||
<SimDllName>SARMCM3.DLL</SimDllName>
|
<SimDllName>SARMCM3.DLL</SimDllName>
|
||||||
|
@ -801,6 +829,7 @@
|
||||||
<RestoreFunctions>1</RestoreFunctions>
|
<RestoreFunctions>1</RestoreFunctions>
|
||||||
<RestoreToolbox>1</RestoreToolbox>
|
<RestoreToolbox>1</RestoreToolbox>
|
||||||
<LimitSpeedToRealTime>0</LimitSpeedToRealTime>
|
<LimitSpeedToRealTime>0</LimitSpeedToRealTime>
|
||||||
|
<RestoreSysVw>1</RestoreSysVw>
|
||||||
</Simulator>
|
</Simulator>
|
||||||
<Target>
|
<Target>
|
||||||
<UseTarget>1</UseTarget>
|
<UseTarget>1</UseTarget>
|
||||||
|
@ -812,9 +841,10 @@
|
||||||
<RestoreFunctions>0</RestoreFunctions>
|
<RestoreFunctions>0</RestoreFunctions>
|
||||||
<RestoreToolbox>1</RestoreToolbox>
|
<RestoreToolbox>1</RestoreToolbox>
|
||||||
<RestoreTracepoints>0</RestoreTracepoints>
|
<RestoreTracepoints>0</RestoreTracepoints>
|
||||||
|
<RestoreSysVw>1</RestoreSysVw>
|
||||||
</Target>
|
</Target>
|
||||||
<RunDebugAfterBuild>0</RunDebugAfterBuild>
|
<RunDebugAfterBuild>0</RunDebugAfterBuild>
|
||||||
<TargetSelection>7</TargetSelection>
|
<TargetSelection>6</TargetSelection>
|
||||||
<SimDlls>
|
<SimDlls>
|
||||||
<CpuDll></CpuDll>
|
<CpuDll></CpuDll>
|
||||||
<CpuDllArguments></CpuDllArguments>
|
<CpuDllArguments></CpuDllArguments>
|
||||||
|
@ -844,6 +874,10 @@
|
||||||
<Flash2>BIN\UL2CM3.DLL</Flash2>
|
<Flash2>BIN\UL2CM3.DLL</Flash2>
|
||||||
<Flash3></Flash3>
|
<Flash3></Flash3>
|
||||||
<Flash4></Flash4>
|
<Flash4></Flash4>
|
||||||
|
<pFcarmOut></pFcarmOut>
|
||||||
|
<pFcarmGrp></pFcarmGrp>
|
||||||
|
<pFcArmRoot></pFcArmRoot>
|
||||||
|
<FcArmLst>0</FcArmLst>
|
||||||
</Utilities>
|
</Utilities>
|
||||||
<TargetArmAds>
|
<TargetArmAds>
|
||||||
<ArmAdsMisc>
|
<ArmAdsMisc>
|
||||||
|
@ -1010,7 +1044,7 @@
|
||||||
</ArmAdsMisc>
|
</ArmAdsMisc>
|
||||||
<Cads>
|
<Cads>
|
||||||
<interw>1</interw>
|
<interw>1</interw>
|
||||||
<Optim>2</Optim>
|
<Optim>1</Optim>
|
||||||
<oTime>0</oTime>
|
<oTime>0</oTime>
|
||||||
<SplitLS>0</SplitLS>
|
<SplitLS>0</SplitLS>
|
||||||
<OneElfS>0</OneElfS>
|
<OneElfS>0</OneElfS>
|
||||||
|
@ -1022,6 +1056,8 @@
|
||||||
<wLevel>0</wLevel>
|
<wLevel>0</wLevel>
|
||||||
<uThumb>0</uThumb>
|
<uThumb>0</uThumb>
|
||||||
<uSurpInc>0</uSurpInc>
|
<uSurpInc>0</uSurpInc>
|
||||||
|
<uC99>0</uC99>
|
||||||
|
<useXO>0</useXO>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls>--cpu Cortex-M4.fp --no_allow_fpreg_for_nonfpdata</MiscControls>
|
<MiscControls>--cpu Cortex-M4.fp --no_allow_fpreg_for_nonfpdata</MiscControls>
|
||||||
<Define>rvkdm PART_XMC4400</Define>
|
<Define>rvkdm PART_XMC4400</Define>
|
||||||
|
@ -1038,6 +1074,7 @@
|
||||||
<SwStkChk>0</SwStkChk>
|
<SwStkChk>0</SwStkChk>
|
||||||
<NoWarn>0</NoWarn>
|
<NoWarn>0</NoWarn>
|
||||||
<uSurpInc>0</uSurpInc>
|
<uSurpInc>0</uSurpInc>
|
||||||
|
<useXO>0</useXO>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls></MiscControls>
|
<MiscControls></MiscControls>
|
||||||
<Define></Define>
|
<Define></Define>
|
||||||
|
@ -1054,6 +1091,7 @@
|
||||||
<useFile>0</useFile>
|
<useFile>0</useFile>
|
||||||
<TextAddressRange>0x0C000000</TextAddressRange>
|
<TextAddressRange>0x0C000000</TextAddressRange>
|
||||||
<DataAddressRange>0x10000000</DataAddressRange>
|
<DataAddressRange>0x10000000</DataAddressRange>
|
||||||
|
<pXoBase></pXoBase>
|
||||||
<ScatterFile></ScatterFile>
|
<ScatterFile></ScatterFile>
|
||||||
<IncludeLibs></IncludeLibs>
|
<IncludeLibs></IncludeLibs>
|
||||||
<IncludeLibsPath></IncludeLibsPath>
|
<IncludeLibsPath></IncludeLibsPath>
|
||||||
|
@ -1086,6 +1124,7 @@
|
||||||
<StopOnExitCode>11</StopOnExitCode>
|
<StopOnExitCode>11</StopOnExitCode>
|
||||||
<CustomArgument></CustomArgument>
|
<CustomArgument></CustomArgument>
|
||||||
<IncludeLibraryModules></IncludeLibraryModules>
|
<IncludeLibraryModules></IncludeLibraryModules>
|
||||||
|
<ComprImg>1</ComprImg>
|
||||||
</CommonProperty>
|
</CommonProperty>
|
||||||
<FileArmAds>
|
<FileArmAds>
|
||||||
<Aads>
|
<Aads>
|
||||||
|
@ -1097,6 +1136,7 @@
|
||||||
<SwStkChk>2</SwStkChk>
|
<SwStkChk>2</SwStkChk>
|
||||||
<NoWarn>2</NoWarn>
|
<NoWarn>2</NoWarn>
|
||||||
<uSurpInc>2</uSurpInc>
|
<uSurpInc>2</uSurpInc>
|
||||||
|
<useXO>2</useXO>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls></MiscControls>
|
<MiscControls></MiscControls>
|
||||||
<Define></Define>
|
<Define></Define>
|
||||||
|
@ -1126,6 +1166,7 @@
|
||||||
<StopOnExitCode>11</StopOnExitCode>
|
<StopOnExitCode>11</StopOnExitCode>
|
||||||
<CustomArgument></CustomArgument>
|
<CustomArgument></CustomArgument>
|
||||||
<IncludeLibraryModules></IncludeLibraryModules>
|
<IncludeLibraryModules></IncludeLibraryModules>
|
||||||
|
<ComprImg>1</ComprImg>
|
||||||
</CommonProperty>
|
</CommonProperty>
|
||||||
<FileArmAds>
|
<FileArmAds>
|
||||||
<Cads>
|
<Cads>
|
||||||
|
@ -1142,6 +1183,8 @@
|
||||||
<wLevel>0</wLevel>
|
<wLevel>0</wLevel>
|
||||||
<uThumb>2</uThumb>
|
<uThumb>2</uThumb>
|
||||||
<uSurpInc>2</uSurpInc>
|
<uSurpInc>2</uSurpInc>
|
||||||
|
<uC99>2</uC99>
|
||||||
|
<useXO>2</useXO>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls></MiscControls>
|
<MiscControls></MiscControls>
|
||||||
<Define></Define>
|
<Define></Define>
|
||||||
|
@ -1171,6 +1214,7 @@
|
||||||
<StopOnExitCode>11</StopOnExitCode>
|
<StopOnExitCode>11</StopOnExitCode>
|
||||||
<CustomArgument></CustomArgument>
|
<CustomArgument></CustomArgument>
|
||||||
<IncludeLibraryModules></IncludeLibraryModules>
|
<IncludeLibraryModules></IncludeLibraryModules>
|
||||||
|
<ComprImg>1</ComprImg>
|
||||||
</CommonProperty>
|
</CommonProperty>
|
||||||
<FileArmAds>
|
<FileArmAds>
|
||||||
<Aads>
|
<Aads>
|
||||||
|
@ -1182,6 +1226,7 @@
|
||||||
<SwStkChk>2</SwStkChk>
|
<SwStkChk>2</SwStkChk>
|
||||||
<NoWarn>2</NoWarn>
|
<NoWarn>2</NoWarn>
|
||||||
<uSurpInc>2</uSurpInc>
|
<uSurpInc>2</uSurpInc>
|
||||||
|
<useXO>2</useXO>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls></MiscControls>
|
<MiscControls></MiscControls>
|
||||||
<Define></Define>
|
<Define></Define>
|
||||||
|
@ -1211,6 +1256,7 @@
|
||||||
<StopOnExitCode>11</StopOnExitCode>
|
<StopOnExitCode>11</StopOnExitCode>
|
||||||
<CustomArgument></CustomArgument>
|
<CustomArgument></CustomArgument>
|
||||||
<IncludeLibraryModules></IncludeLibraryModules>
|
<IncludeLibraryModules></IncludeLibraryModules>
|
||||||
|
<ComprImg>1</ComprImg>
|
||||||
</CommonProperty>
|
</CommonProperty>
|
||||||
<FileArmAds>
|
<FileArmAds>
|
||||||
<Cads>
|
<Cads>
|
||||||
|
@ -1227,6 +1273,8 @@
|
||||||
<wLevel>0</wLevel>
|
<wLevel>0</wLevel>
|
||||||
<uThumb>2</uThumb>
|
<uThumb>2</uThumb>
|
||||||
<uSurpInc>2</uSurpInc>
|
<uSurpInc>2</uSurpInc>
|
||||||
|
<uC99>2</uC99>
|
||||||
|
<useXO>2</useXO>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls></MiscControls>
|
<MiscControls></MiscControls>
|
||||||
<Define></Define>
|
<Define></Define>
|
||||||
|
@ -1380,6 +1428,7 @@
|
||||||
<SLE66AMisc></SLE66AMisc>
|
<SLE66AMisc></SLE66AMisc>
|
||||||
<SLE66LinkerMisc></SLE66LinkerMisc>
|
<SLE66LinkerMisc></SLE66LinkerMisc>
|
||||||
<SFDFile>SFD\Infineon\XMC4200-4100\xmc4200.SFR</SFDFile>
|
<SFDFile>SFD\Infineon\XMC4200-4100\xmc4200.SFR</SFDFile>
|
||||||
|
<bCustSvd>0</bCustSvd>
|
||||||
<UseEnv>0</UseEnv>
|
<UseEnv>0</UseEnv>
|
||||||
<BinPath></BinPath>
|
<BinPath></BinPath>
|
||||||
<IncludePath></IncludePath>
|
<IncludePath></IncludePath>
|
||||||
|
@ -1421,6 +1470,8 @@
|
||||||
<UserProg2Name></UserProg2Name>
|
<UserProg2Name></UserProg2Name>
|
||||||
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
|
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
|
||||||
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
|
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
|
||||||
|
<nStopB1X>0</nStopB1X>
|
||||||
|
<nStopB2X>0</nStopB2X>
|
||||||
</BeforeMake>
|
</BeforeMake>
|
||||||
<AfterMake>
|
<AfterMake>
|
||||||
<RunUserProg1>0</RunUserProg1>
|
<RunUserProg1>0</RunUserProg1>
|
||||||
|
@ -1447,6 +1498,7 @@
|
||||||
<StopOnExitCode>3</StopOnExitCode>
|
<StopOnExitCode>3</StopOnExitCode>
|
||||||
<CustomArgument></CustomArgument>
|
<CustomArgument></CustomArgument>
|
||||||
<IncludeLibraryModules></IncludeLibraryModules>
|
<IncludeLibraryModules></IncludeLibraryModules>
|
||||||
|
<ComprImg>1</ComprImg>
|
||||||
</CommonProperty>
|
</CommonProperty>
|
||||||
<DllOption>
|
<DllOption>
|
||||||
<SimDllName>SARMCM3.DLL</SimDllName>
|
<SimDllName>SARMCM3.DLL</SimDllName>
|
||||||
|
@ -1476,6 +1528,7 @@
|
||||||
<RestoreFunctions>1</RestoreFunctions>
|
<RestoreFunctions>1</RestoreFunctions>
|
||||||
<RestoreToolbox>1</RestoreToolbox>
|
<RestoreToolbox>1</RestoreToolbox>
|
||||||
<LimitSpeedToRealTime>0</LimitSpeedToRealTime>
|
<LimitSpeedToRealTime>0</LimitSpeedToRealTime>
|
||||||
|
<RestoreSysVw>1</RestoreSysVw>
|
||||||
</Simulator>
|
</Simulator>
|
||||||
<Target>
|
<Target>
|
||||||
<UseTarget>1</UseTarget>
|
<UseTarget>1</UseTarget>
|
||||||
|
@ -1487,6 +1540,7 @@
|
||||||
<RestoreFunctions>0</RestoreFunctions>
|
<RestoreFunctions>0</RestoreFunctions>
|
||||||
<RestoreToolbox>1</RestoreToolbox>
|
<RestoreToolbox>1</RestoreToolbox>
|
||||||
<RestoreTracepoints>0</RestoreTracepoints>
|
<RestoreTracepoints>0</RestoreTracepoints>
|
||||||
|
<RestoreSysVw>1</RestoreSysVw>
|
||||||
</Target>
|
</Target>
|
||||||
<RunDebugAfterBuild>0</RunDebugAfterBuild>
|
<RunDebugAfterBuild>0</RunDebugAfterBuild>
|
||||||
<TargetSelection>7</TargetSelection>
|
<TargetSelection>7</TargetSelection>
|
||||||
|
@ -1519,6 +1573,10 @@
|
||||||
<Flash2>BIN\UL2CM3.DLL</Flash2>
|
<Flash2>BIN\UL2CM3.DLL</Flash2>
|
||||||
<Flash3>"" ()</Flash3>
|
<Flash3>"" ()</Flash3>
|
||||||
<Flash4></Flash4>
|
<Flash4></Flash4>
|
||||||
|
<pFcarmOut></pFcarmOut>
|
||||||
|
<pFcarmGrp></pFcarmGrp>
|
||||||
|
<pFcArmRoot></pFcArmRoot>
|
||||||
|
<FcArmLst>0</FcArmLst>
|
||||||
</Utilities>
|
</Utilities>
|
||||||
<TargetArmAds>
|
<TargetArmAds>
|
||||||
<ArmAdsMisc>
|
<ArmAdsMisc>
|
||||||
|
@ -1697,6 +1755,8 @@
|
||||||
<wLevel>0</wLevel>
|
<wLevel>0</wLevel>
|
||||||
<uThumb>0</uThumb>
|
<uThumb>0</uThumb>
|
||||||
<uSurpInc>0</uSurpInc>
|
<uSurpInc>0</uSurpInc>
|
||||||
|
<uC99>0</uC99>
|
||||||
|
<useXO>0</useXO>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls>--cpu Cortex-M4.fp --no_allow_fpreg_for_nonfpdata</MiscControls>
|
<MiscControls>--cpu Cortex-M4.fp --no_allow_fpreg_for_nonfpdata</MiscControls>
|
||||||
<Define>rvkdm PART_XMC4200</Define>
|
<Define>rvkdm PART_XMC4200</Define>
|
||||||
|
@ -1713,6 +1773,7 @@
|
||||||
<SwStkChk>0</SwStkChk>
|
<SwStkChk>0</SwStkChk>
|
||||||
<NoWarn>0</NoWarn>
|
<NoWarn>0</NoWarn>
|
||||||
<uSurpInc>0</uSurpInc>
|
<uSurpInc>0</uSurpInc>
|
||||||
|
<useXO>0</useXO>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls></MiscControls>
|
<MiscControls></MiscControls>
|
||||||
<Define></Define>
|
<Define></Define>
|
||||||
|
@ -1729,6 +1790,7 @@
|
||||||
<useFile>0</useFile>
|
<useFile>0</useFile>
|
||||||
<TextAddressRange>0x0C000000</TextAddressRange>
|
<TextAddressRange>0x0C000000</TextAddressRange>
|
||||||
<DataAddressRange>0x10000000</DataAddressRange>
|
<DataAddressRange>0x10000000</DataAddressRange>
|
||||||
|
<pXoBase></pXoBase>
|
||||||
<ScatterFile></ScatterFile>
|
<ScatterFile></ScatterFile>
|
||||||
<IncludeLibs></IncludeLibs>
|
<IncludeLibs></IncludeLibs>
|
||||||
<IncludeLibsPath></IncludeLibsPath>
|
<IncludeLibsPath></IncludeLibsPath>
|
||||||
|
@ -1761,6 +1823,7 @@
|
||||||
<StopOnExitCode>11</StopOnExitCode>
|
<StopOnExitCode>11</StopOnExitCode>
|
||||||
<CustomArgument></CustomArgument>
|
<CustomArgument></CustomArgument>
|
||||||
<IncludeLibraryModules></IncludeLibraryModules>
|
<IncludeLibraryModules></IncludeLibraryModules>
|
||||||
|
<ComprImg>1</ComprImg>
|
||||||
</CommonProperty>
|
</CommonProperty>
|
||||||
<FileArmAds>
|
<FileArmAds>
|
||||||
<Aads>
|
<Aads>
|
||||||
|
@ -1772,6 +1835,7 @@
|
||||||
<SwStkChk>2</SwStkChk>
|
<SwStkChk>2</SwStkChk>
|
||||||
<NoWarn>2</NoWarn>
|
<NoWarn>2</NoWarn>
|
||||||
<uSurpInc>2</uSurpInc>
|
<uSurpInc>2</uSurpInc>
|
||||||
|
<useXO>2</useXO>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls></MiscControls>
|
<MiscControls></MiscControls>
|
||||||
<Define></Define>
|
<Define></Define>
|
||||||
|
@ -1801,6 +1865,7 @@
|
||||||
<StopOnExitCode>11</StopOnExitCode>
|
<StopOnExitCode>11</StopOnExitCode>
|
||||||
<CustomArgument></CustomArgument>
|
<CustomArgument></CustomArgument>
|
||||||
<IncludeLibraryModules></IncludeLibraryModules>
|
<IncludeLibraryModules></IncludeLibraryModules>
|
||||||
|
<ComprImg>1</ComprImg>
|
||||||
</CommonProperty>
|
</CommonProperty>
|
||||||
<FileArmAds>
|
<FileArmAds>
|
||||||
<Cads>
|
<Cads>
|
||||||
|
@ -1817,6 +1882,8 @@
|
||||||
<wLevel>0</wLevel>
|
<wLevel>0</wLevel>
|
||||||
<uThumb>2</uThumb>
|
<uThumb>2</uThumb>
|
||||||
<uSurpInc>2</uSurpInc>
|
<uSurpInc>2</uSurpInc>
|
||||||
|
<uC99>2</uC99>
|
||||||
|
<useXO>2</useXO>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls></MiscControls>
|
<MiscControls></MiscControls>
|
||||||
<Define></Define>
|
<Define></Define>
|
||||||
|
@ -1856,6 +1923,7 @@
|
||||||
<StopOnExitCode>11</StopOnExitCode>
|
<StopOnExitCode>11</StopOnExitCode>
|
||||||
<CustomArgument></CustomArgument>
|
<CustomArgument></CustomArgument>
|
||||||
<IncludeLibraryModules></IncludeLibraryModules>
|
<IncludeLibraryModules></IncludeLibraryModules>
|
||||||
|
<ComprImg>1</ComprImg>
|
||||||
</CommonProperty>
|
</CommonProperty>
|
||||||
<FileArmAds>
|
<FileArmAds>
|
||||||
<Cads>
|
<Cads>
|
||||||
|
@ -1872,6 +1940,8 @@
|
||||||
<wLevel>0</wLevel>
|
<wLevel>0</wLevel>
|
||||||
<uThumb>2</uThumb>
|
<uThumb>2</uThumb>
|
||||||
<uSurpInc>2</uSurpInc>
|
<uSurpInc>2</uSurpInc>
|
||||||
|
<uC99>2</uC99>
|
||||||
|
<useXO>2</useXO>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls></MiscControls>
|
<MiscControls></MiscControls>
|
||||||
<Define></Define>
|
<Define></Define>
|
||||||
|
@ -1901,6 +1971,7 @@
|
||||||
<StopOnExitCode>11</StopOnExitCode>
|
<StopOnExitCode>11</StopOnExitCode>
|
||||||
<CustomArgument></CustomArgument>
|
<CustomArgument></CustomArgument>
|
||||||
<IncludeLibraryModules></IncludeLibraryModules>
|
<IncludeLibraryModules></IncludeLibraryModules>
|
||||||
|
<ComprImg>1</ComprImg>
|
||||||
</CommonProperty>
|
</CommonProperty>
|
||||||
<FileArmAds>
|
<FileArmAds>
|
||||||
<Aads>
|
<Aads>
|
||||||
|
@ -1912,6 +1983,7 @@
|
||||||
<SwStkChk>2</SwStkChk>
|
<SwStkChk>2</SwStkChk>
|
||||||
<NoWarn>2</NoWarn>
|
<NoWarn>2</NoWarn>
|
||||||
<uSurpInc>2</uSurpInc>
|
<uSurpInc>2</uSurpInc>
|
||||||
|
<useXO>2</useXO>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls></MiscControls>
|
<MiscControls></MiscControls>
|
||||||
<Define></Define>
|
<Define></Define>
|
||||||
|
|
Binary file not shown.
|
@ -15,8 +15,9 @@
|
||||||
<option id="sam.components.display.aat31xx" value="Add" config="" content-id="Atmel.ASF" />
|
<option id="sam.components.display.aat31xx" value="Add" config="" content-id="Atmel.ASF" />
|
||||||
<option id="sam.components.display.ili93xx" value="Add" config="" content-id="Atmel.ASF" />
|
<option id="sam.components.display.ili93xx" value="Add" config="" content-id="Atmel.ASF" />
|
||||||
<option id="sam.components.ethernet_phy.ksz8051mnl" value="Add" config="" content-id="Atmel.ASF" />
|
<option id="sam.components.ethernet_phy.ksz8051mnl" value="Add" config="" content-id="Atmel.ASF" />
|
||||||
<option id="sam.drivers.gmac" value="Add" config="" content-id="Atmel.ASF" />
|
|
||||||
<option id="sam.drivers.smc" value="Add" config="" content-id="Atmel.ASF" />
|
<option id="sam.drivers.smc" value="Add" config="" content-id="Atmel.ASF" />
|
||||||
|
<option id="sam.drivers.gmac" value="Add" config="" content-id="Atmel.ASF" />
|
||||||
|
<option id="sam.drivers.tc" value="Add" config="" content-id="Atmel.ASF" />
|
||||||
<option id="common.applications.user_application" value="Add" config="" content-id="Atmel.ASF" />
|
<option id="common.applications.user_application" value="Add" config="" content-id="Atmel.ASF" />
|
||||||
<option id="sam.utils.cmsis.sam4e.source.template" value="Add" config="" content-id="Atmel.ASF" />
|
<option id="sam.utils.cmsis.sam4e.source.template" value="Add" config="" content-id="Atmel.ASF" />
|
||||||
</options>
|
</options>
|
||||||
|
@ -173,6 +174,8 @@
|
||||||
<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" />
|
<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" />
|
||||||
<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" />
|
<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" />
|
||||||
<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" />
|
<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" />
|
||||||
|
<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" />
|
||||||
|
<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" />
|
||||||
</files>
|
</files>
|
||||||
<documentation help="http://asf.atmel.com/docs/3.11.0/common.applications.user_application.sam4e_ek/html/index.html" />
|
<documentation help="http://asf.atmel.com/docs/3.11.0/common.applications.user_application.sam4e_ek/html/index.html" />
|
||||||
<offline-documentation help="" />
|
<offline-documentation help="" />
|
||||||
|
@ -207,12 +210,12 @@
|
||||||
<ToolOptions>
|
<ToolOptions>
|
||||||
<InterfaceProperties>
|
<InterfaceProperties>
|
||||||
<JtagEnableExtResetOnStartSession>false</JtagEnableExtResetOnStartSession>
|
<JtagEnableExtResetOnStartSession>false</JtagEnableExtResetOnStartSession>
|
||||||
<SwdClock>12000000</SwdClock>
|
<SwdClock>7020000</SwdClock>
|
||||||
</InterfaceProperties>
|
</InterfaceProperties>
|
||||||
<InterfaceName>SWD</InterfaceName>
|
<InterfaceName>SWD</InterfaceName>
|
||||||
</ToolOptions>
|
</ToolOptions>
|
||||||
<ToolType>com.atmel.avrdbg.tool.samice</ToolType>
|
<ToolType>com.atmel.avrdbg.tool.samice</ToolType>
|
||||||
<ToolNumber>000158000789</ToolNumber>
|
<ToolNumber>158000789</ToolNumber>
|
||||||
<ToolName>J-Link</ToolName>
|
<ToolName>J-Link</ToolName>
|
||||||
</com_atmel_avrdbg_tool_samice>
|
</com_atmel_avrdbg_tool_samice>
|
||||||
<avrtoolinterface>SWD</avrtoolinterface>
|
<avrtoolinterface>SWD</avrtoolinterface>
|
||||||
|
@ -261,6 +264,7 @@
|
||||||
<Value>../src/ASF/sam/components/display/aat31xx</Value>
|
<Value>../src/ASF/sam/components/display/aat31xx</Value>
|
||||||
<Value>../src/ASF/sam/components/display/ili93xx</Value>
|
<Value>../src/ASF/sam/components/display/ili93xx</Value>
|
||||||
<Value>../src/ASF/sam/drivers/ebi/smc</Value>
|
<Value>../src/ASF/sam/drivers/ebi/smc</Value>
|
||||||
|
<Value>../src/ASF/sam/drivers/tc</Value>
|
||||||
</ListValues>
|
</ListValues>
|
||||||
</armgcc.compiler.directories.IncludePaths>
|
</armgcc.compiler.directories.IncludePaths>
|
||||||
<armgcc.compiler.optimization.level>Optimize for size (-Os)</armgcc.compiler.optimization.level>
|
<armgcc.compiler.optimization.level>Optimize for size (-Os)</armgcc.compiler.optimization.level>
|
||||||
|
@ -310,6 +314,7 @@
|
||||||
<Value>../src/ASF/sam/components/display/aat31xx</Value>
|
<Value>../src/ASF/sam/components/display/aat31xx</Value>
|
||||||
<Value>../src/ASF/sam/components/display/ili93xx</Value>
|
<Value>../src/ASF/sam/components/display/ili93xx</Value>
|
||||||
<Value>../src/ASF/sam/drivers/ebi/smc</Value>
|
<Value>../src/ASF/sam/drivers/ebi/smc</Value>
|
||||||
|
<Value>../src/ASF/sam/drivers/tc</Value>
|
||||||
</ListValues>
|
</ListValues>
|
||||||
</armgcc.preprocessingassembler.general.IncludePaths>
|
</armgcc.preprocessingassembler.general.IncludePaths>
|
||||||
</ArmGcc>
|
</ArmGcc>
|
||||||
|
@ -372,6 +377,7 @@
|
||||||
<Value>../src/ASF/sam/components/display/ili93xx</Value>
|
<Value>../src/ASF/sam/components/display/ili93xx</Value>
|
||||||
<Value>../src/ASF/sam/drivers/ebi/smc</Value>
|
<Value>../src/ASF/sam/drivers/ebi/smc</Value>
|
||||||
<Value>../../../../FreeRTOS-Plus/Demo/Common/FreeRTOS_Plus_UDP_Demos/EchoClients</Value>
|
<Value>../../../../FreeRTOS-Plus/Demo/Common/FreeRTOS_Plus_UDP_Demos/EchoClients</Value>
|
||||||
|
<Value>../src/ASF/sam/drivers/tc</Value>
|
||||||
</ListValues>
|
</ListValues>
|
||||||
</armgcc.compiler.directories.IncludePaths>
|
</armgcc.compiler.directories.IncludePaths>
|
||||||
<armgcc.compiler.optimization.OtherFlags>-fdata-sections</armgcc.compiler.optimization.OtherFlags>
|
<armgcc.compiler.optimization.OtherFlags>-fdata-sections</armgcc.compiler.optimization.OtherFlags>
|
||||||
|
@ -391,6 +397,7 @@
|
||||||
</ListValues>
|
</ListValues>
|
||||||
</armgcc.linker.libraries.LibrarySearchPaths>
|
</armgcc.linker.libraries.LibrarySearchPaths>
|
||||||
<armgcc.linker.optimization.GarbageCollectUnusedSections>True</armgcc.linker.optimization.GarbageCollectUnusedSections>
|
<armgcc.linker.optimization.GarbageCollectUnusedSections>True</armgcc.linker.optimization.GarbageCollectUnusedSections>
|
||||||
|
<armgcc.linker.memorysettings.ExternalRAM />
|
||||||
<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>
|
<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>
|
||||||
<armgcc.assembler.debugging.DebugLevel>Default (-g)</armgcc.assembler.debugging.DebugLevel>
|
<armgcc.assembler.debugging.DebugLevel>Default (-g)</armgcc.assembler.debugging.DebugLevel>
|
||||||
<armgcc.preprocessingassembler.general.AssemblerFlags>-DARM_MATH_CM4=true -DBOARD=SAM4E_EK -D__SAM4E16E__ -Dprintf=iprintf</armgcc.preprocessingassembler.general.AssemblerFlags>
|
<armgcc.preprocessingassembler.general.AssemblerFlags>-DARM_MATH_CM4=true -DBOARD=SAM4E_EK -D__SAM4E16E__ -Dprintf=iprintf</armgcc.preprocessingassembler.general.AssemblerFlags>
|
||||||
|
@ -422,6 +429,7 @@
|
||||||
<Value>../src/ASF/sam/components/display/aat31xx</Value>
|
<Value>../src/ASF/sam/components/display/aat31xx</Value>
|
||||||
<Value>../src/ASF/sam/components/display/ili93xx</Value>
|
<Value>../src/ASF/sam/components/display/ili93xx</Value>
|
||||||
<Value>../src/ASF/sam/drivers/ebi/smc</Value>
|
<Value>../src/ASF/sam/drivers/ebi/smc</Value>
|
||||||
|
<Value>../src/ASF/sam/drivers/tc</Value>
|
||||||
</ListValues>
|
</ListValues>
|
||||||
</armgcc.preprocessingassembler.general.IncludePaths>
|
</armgcc.preprocessingassembler.general.IncludePaths>
|
||||||
<armgcc.preprocessingassembler.debugging.DebugLevel>Default (-Wa,-g)</armgcc.preprocessingassembler.debugging.DebugLevel>
|
<armgcc.preprocessingassembler.debugging.DebugLevel>Default (-Wa,-g)</armgcc.preprocessingassembler.debugging.DebugLevel>
|
||||||
|
@ -525,6 +533,14 @@
|
||||||
<SubType>compile</SubType>
|
<SubType>compile</SubType>
|
||||||
<Link>src\Common Demo Tasks\GenQTest.c</Link>
|
<Link>src\Common Demo Tasks\GenQTest.c</Link>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="..\Common\Minimal\IntQueue.c">
|
||||||
|
<SubType>compile</SubType>
|
||||||
|
<Link>src\Common Demo Tasks\IntQueue.c</Link>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="..\Common\Minimal\IntSemTest.c">
|
||||||
|
<SubType>compile</SubType>
|
||||||
|
<Link>src\Common Demo Tasks\IntSemTest.c</Link>
|
||||||
|
</Compile>
|
||||||
<Compile Include="..\Common\Minimal\QPeek.c">
|
<Compile Include="..\Common\Minimal\QPeek.c">
|
||||||
<SubType>compile</SubType>
|
<SubType>compile</SubType>
|
||||||
<Link>src\Common Demo Tasks\QPeek.c</Link>
|
<Link>src\Common Demo Tasks\QPeek.c</Link>
|
||||||
|
@ -545,6 +561,14 @@
|
||||||
<SubType>compile</SubType>
|
<SubType>compile</SubType>
|
||||||
<Link>src\Common Demo Tasks\semtest.c</Link>
|
<Link>src\Common Demo Tasks\semtest.c</Link>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="..\Common\Minimal\TaskNotify.c">
|
||||||
|
<SubType>compile</SubType>
|
||||||
|
<Link>src\Common Demo Tasks\TaskNotify.c</Link>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="..\Common\Minimal\TimerDemo.c">
|
||||||
|
<SubType>compile</SubType>
|
||||||
|
<Link>src\Common Demo Tasks\TimerDemo.c</Link>
|
||||||
|
</Compile>
|
||||||
<Compile Include="src\ASF\sam\components\display\aat31xx\aat31xx.c">
|
<Compile Include="src\ASF\sam\components\display\aat31xx\aat31xx.c">
|
||||||
<SubType>compile</SubType>
|
<SubType>compile</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
@ -569,6 +593,12 @@
|
||||||
<None Include="src\ASF\sam\drivers\ebi\smc\smc.h">
|
<None Include="src\ASF\sam\drivers\ebi\smc\smc.h">
|
||||||
<SubType>compile</SubType>
|
<SubType>compile</SubType>
|
||||||
</None>
|
</None>
|
||||||
|
<Compile Include="src\ASF\sam\drivers\tc\tc.c">
|
||||||
|
<SubType>compile</SubType>
|
||||||
|
</Compile>
|
||||||
|
<None Include="src\ASF\sam\drivers\tc\tc.h">
|
||||||
|
<SubType>compile</SubType>
|
||||||
|
</None>
|
||||||
<Compile Include="src\ASF\sam\utils\syscalls\gcc\syscalls.c">
|
<Compile Include="src\ASF\sam\utils\syscalls\gcc\syscalls.c">
|
||||||
<SubType>compile</SubType>
|
<SubType>compile</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
@ -590,6 +620,9 @@
|
||||||
<Compile Include="src\FreeRTOS+\FreeRTOS+FAT SL\API\fat_sl.h">
|
<Compile Include="src\FreeRTOS+\FreeRTOS+FAT SL\API\fat_sl.h">
|
||||||
<SubType>compile</SubType>
|
<SubType>compile</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="src\IntQueueTimer.c">
|
||||||
|
<SubType>compile</SubType>
|
||||||
|
</Compile>
|
||||||
<Compile Include="src\LCDUtils.c">
|
<Compile Include="src\LCDUtils.c">
|
||||||
<SubType>compile</SubType>
|
<SubType>compile</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
@ -1102,6 +1135,7 @@
|
||||||
<Folder Include="src\ASF\sam\drivers\ebi\smc\" />
|
<Folder Include="src\ASF\sam\drivers\ebi\smc\" />
|
||||||
<Folder Include="src\ASF\sam\drivers\gmac\" />
|
<Folder Include="src\ASF\sam\drivers\gmac\" />
|
||||||
<Folder Include="src\ASF\sam\drivers\pmc\" />
|
<Folder Include="src\ASF\sam\drivers\pmc\" />
|
||||||
|
<Folder Include="src\ASF\sam\drivers\tc\" />
|
||||||
<Folder Include="src\ASF\sam\utils\" />
|
<Folder Include="src\ASF\sam\utils\" />
|
||||||
<Folder Include="src\ASF\sam\utils\cmsis\" />
|
<Folder Include="src\ASF\sam\utils\cmsis\" />
|
||||||
<Folder Include="src\ASF\sam\utils\cmsis\sam4e\" />
|
<Folder Include="src\ASF\sam\utils\cmsis\sam4e\" />
|
||||||
|
|
|
@ -0,0 +1,596 @@
|
||||||
|
/**
|
||||||
|
* \file
|
||||||
|
*
|
||||||
|
* \brief Timer Counter (TC) driver for SAM.
|
||||||
|
*
|
||||||
|
* Copyright (c) 2011-2013 Atmel Corporation. All rights reserved.
|
||||||
|
*
|
||||||
|
* \asf_license_start
|
||||||
|
*
|
||||||
|
* \page License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* 3. The name of Atmel may not be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* 4. This software may only be redistributed and used in connection with an
|
||||||
|
* Atmel microcontroller product.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||||
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||||
|
* EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* \asf_license_stop
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
#include "tc.h"
|
||||||
|
|
||||||
|
/// @cond 0
|
||||||
|
/**INDENT-OFF**/
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
/**INDENT-ON**/
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
#define TC_WPMR_WPKEY_VALUE TC_WPMR_WPKEY((uint32_t)0x54494D)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \defgroup sam_drivers_tc_group Timer Counter (TC)
|
||||||
|
*
|
||||||
|
* The Timer Counter (TC) includes three identical 32-bit Timer Counter
|
||||||
|
* channels. Each channel can be independently programmed to perform a wide
|
||||||
|
* range of functions including frequency measurement, event counting,
|
||||||
|
* interval measurement, pulse generation, delay timing and pulse width
|
||||||
|
* modulation.
|
||||||
|
*
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Configure TC for timer, waveform generation or capture.
|
||||||
|
*
|
||||||
|
* \param p_tc Pointer to a TC instance.
|
||||||
|
* \param ul_channel Channel to configure.
|
||||||
|
* \param ul_mode Control mode register value to set.
|
||||||
|
*
|
||||||
|
* \attention If the TC is configured for waveform generation, the external
|
||||||
|
* event selection (EEVT) should only be set to \c TC_CMR_EEVT_TIOB or the
|
||||||
|
* equivalent value \c 0 if it really is the intention to use TIOB as an
|
||||||
|
* external event trigger.\n
|
||||||
|
* This is because the setting forces TIOB to be an input even if the
|
||||||
|
* external event trigger has not been enabled with \c TC_CMR_ENETRG, and
|
||||||
|
* thus prevents normal operation of TIOB.
|
||||||
|
*/
|
||||||
|
void tc_init(Tc *p_tc, uint32_t ul_channel, uint32_t ul_mode)
|
||||||
|
{
|
||||||
|
TcChannel *tc_channel;
|
||||||
|
|
||||||
|
Assert(ul_channel <
|
||||||
|
(sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0])));
|
||||||
|
tc_channel = p_tc->TC_CHANNEL + ul_channel;
|
||||||
|
|
||||||
|
/* Disable TC clock. */
|
||||||
|
tc_channel->TC_CCR = TC_CCR_CLKDIS;
|
||||||
|
|
||||||
|
/* Disable interrupts. */
|
||||||
|
tc_channel->TC_IDR = 0xFFFFFFFF;
|
||||||
|
|
||||||
|
/* Clear status register. */
|
||||||
|
tc_channel->TC_SR;
|
||||||
|
|
||||||
|
/* Set mode. */
|
||||||
|
tc_channel->TC_CMR = ul_mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Asserts a SYNC signal to generate a software trigger to
|
||||||
|
* all channels.
|
||||||
|
*
|
||||||
|
* \param p_tc Pointer to a TC instance.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void tc_sync_trigger(Tc *p_tc)
|
||||||
|
{
|
||||||
|
p_tc->TC_BCR = TC_BCR_SYNC;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Configure TC Block mode.
|
||||||
|
* \note tc_init() must be called first.
|
||||||
|
*
|
||||||
|
* \param p_tc Pointer to a TC instance.
|
||||||
|
* \param ul_blockmode Block mode register value to set.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void tc_set_block_mode(Tc *p_tc, uint32_t ul_blockmode)
|
||||||
|
{
|
||||||
|
p_tc->TC_BMR = ul_blockmode;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if (!SAM3U)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Configure TC for 2-bit Gray Counter for Stepper Motor.
|
||||||
|
* \note tc_init() must be called first.
|
||||||
|
*
|
||||||
|
* \param p_tc Pointer to a TC instance.
|
||||||
|
* \param ul_channel Channel to configure.
|
||||||
|
* \param ul_steppermode Stepper motor mode register value to set.
|
||||||
|
*
|
||||||
|
* \return 0 for OK.
|
||||||
|
*/
|
||||||
|
uint32_t tc_init_2bit_gray(Tc *p_tc, uint32_t ul_channel,
|
||||||
|
uint32_t ul_steppermode)
|
||||||
|
{
|
||||||
|
Assert(ul_channel <
|
||||||
|
(sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0])));
|
||||||
|
|
||||||
|
p_tc->TC_CHANNEL[ul_channel].TC_SMMR = ul_steppermode;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Start TC clock counter on the selected channel.
|
||||||
|
*
|
||||||
|
* \param p_tc Pointer to a TC instance.
|
||||||
|
* \param ul_channel Channel to configure.
|
||||||
|
*/
|
||||||
|
void tc_start(Tc *p_tc, uint32_t ul_channel)
|
||||||
|
{
|
||||||
|
Assert(ul_channel <
|
||||||
|
(sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0])));
|
||||||
|
|
||||||
|
p_tc->TC_CHANNEL[ul_channel].TC_CCR = TC_CCR_CLKEN | TC_CCR_SWTRG;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Stop TC clock counter on the selected channel.
|
||||||
|
*
|
||||||
|
* \param p_tc Pointer to a TC instance.
|
||||||
|
* \param ul_channel Channel to configure.
|
||||||
|
*/
|
||||||
|
void tc_stop(Tc *p_tc, uint32_t ul_channel)
|
||||||
|
{
|
||||||
|
Assert(ul_channel <
|
||||||
|
(sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0])));
|
||||||
|
|
||||||
|
p_tc->TC_CHANNEL[ul_channel].TC_CCR = TC_CCR_CLKDIS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Read counter value on the selected channel.
|
||||||
|
*
|
||||||
|
* \param p_tc Pointer to a TC instance.
|
||||||
|
* \param ul_channel Channel to configure.
|
||||||
|
*
|
||||||
|
* \return Counter value.
|
||||||
|
*/
|
||||||
|
uint32_t tc_read_cv(Tc *p_tc, uint32_t ul_channel)
|
||||||
|
{
|
||||||
|
Assert(ul_channel <
|
||||||
|
(sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0])));
|
||||||
|
|
||||||
|
return p_tc->TC_CHANNEL[ul_channel].TC_CV;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Read RA TC counter on the selected channel.
|
||||||
|
*
|
||||||
|
* \param p_tc Pointer to a TC instance.
|
||||||
|
* \param ul_channel Channel to configure.
|
||||||
|
*
|
||||||
|
* \return RA value.
|
||||||
|
*/
|
||||||
|
uint32_t tc_read_ra(Tc *p_tc, uint32_t ul_channel)
|
||||||
|
{
|
||||||
|
Assert(ul_channel <
|
||||||
|
(sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0])));
|
||||||
|
|
||||||
|
return p_tc->TC_CHANNEL[ul_channel].TC_RA;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Read RB TC counter on the selected channel.
|
||||||
|
*
|
||||||
|
* \param p_tc Pointer to a TC instance.
|
||||||
|
* \param ul_channel Channel to configure.
|
||||||
|
*
|
||||||
|
* \return RB value.
|
||||||
|
*/
|
||||||
|
uint32_t tc_read_rb(Tc *p_tc, uint32_t ul_channel)
|
||||||
|
{
|
||||||
|
Assert(ul_channel <
|
||||||
|
(sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0])));
|
||||||
|
|
||||||
|
return p_tc->TC_CHANNEL[ul_channel].TC_RB;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Read RC TC counter on the selected channel.
|
||||||
|
*
|
||||||
|
* \param p_tc Pointer to a TC instance.
|
||||||
|
* \param ul_channel Channel to configure.
|
||||||
|
*
|
||||||
|
* \return RC value.
|
||||||
|
*/
|
||||||
|
uint32_t tc_read_rc(Tc *p_tc, uint32_t ul_channel)
|
||||||
|
{
|
||||||
|
Assert(ul_channel <
|
||||||
|
(sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0])));
|
||||||
|
|
||||||
|
return p_tc->TC_CHANNEL[ul_channel].TC_RC;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Write RA TC counter on the selected channel.
|
||||||
|
*
|
||||||
|
* \param p_tc Pointer to a TC instance.
|
||||||
|
* \param ul_channel Channel to configure.
|
||||||
|
* \param ul_value Value to set in register.
|
||||||
|
*/
|
||||||
|
void tc_write_ra(Tc *p_tc, uint32_t ul_channel,
|
||||||
|
uint32_t ul_value)
|
||||||
|
{
|
||||||
|
Assert(ul_channel <
|
||||||
|
(sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0])));
|
||||||
|
|
||||||
|
p_tc->TC_CHANNEL[ul_channel].TC_RA = ul_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Write RB TC counter on the selected channel.
|
||||||
|
*
|
||||||
|
* \param p_tc Pointer to a TC instance.
|
||||||
|
* \param ul_channel Channel to configure.
|
||||||
|
* \param ul_value Value to set in register.
|
||||||
|
*/
|
||||||
|
void tc_write_rb(Tc *p_tc, uint32_t ul_channel,
|
||||||
|
uint32_t ul_value)
|
||||||
|
{
|
||||||
|
Assert(ul_channel <
|
||||||
|
(sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0])));
|
||||||
|
|
||||||
|
p_tc->TC_CHANNEL[ul_channel].TC_RB = ul_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Write RC TC counter on the selected channel.
|
||||||
|
*
|
||||||
|
* \param p_tc Pointer to a TC instance.
|
||||||
|
* \param ul_channel Channel to configure.
|
||||||
|
* \param ul_value Value to set in register.
|
||||||
|
*/
|
||||||
|
void tc_write_rc(Tc *p_tc, uint32_t ul_channel,
|
||||||
|
uint32_t ul_value)
|
||||||
|
{
|
||||||
|
Assert(ul_channel <
|
||||||
|
(sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0])));
|
||||||
|
|
||||||
|
p_tc->TC_CHANNEL[ul_channel].TC_RC = ul_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Enable TC interrupts on the selected channel.
|
||||||
|
*
|
||||||
|
* \param p_tc Pointer to a TC instance.
|
||||||
|
* \param ul_channel Channel to configure.
|
||||||
|
* \param ul_sources Interrupt sources bit map.
|
||||||
|
*/
|
||||||
|
void tc_enable_interrupt(Tc *p_tc, uint32_t ul_channel,
|
||||||
|
uint32_t ul_sources)
|
||||||
|
{
|
||||||
|
TcChannel *tc_channel;
|
||||||
|
|
||||||
|
Assert(ul_channel <
|
||||||
|
(sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0])));
|
||||||
|
tc_channel = p_tc->TC_CHANNEL + ul_channel;
|
||||||
|
tc_channel->TC_IER = ul_sources;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Disable TC interrupts on the selected channel.
|
||||||
|
*
|
||||||
|
* \param p_tc Pointer to a TC instance.
|
||||||
|
* \param ul_channel Channel to configure.
|
||||||
|
* \param ul_sources Interrupt sources bit map.
|
||||||
|
*/
|
||||||
|
void tc_disable_interrupt(Tc *p_tc, uint32_t ul_channel,
|
||||||
|
uint32_t ul_sources)
|
||||||
|
{
|
||||||
|
TcChannel *tc_channel;
|
||||||
|
|
||||||
|
Assert(ul_channel <
|
||||||
|
(sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0])));
|
||||||
|
tc_channel = p_tc->TC_CHANNEL + ul_channel;
|
||||||
|
tc_channel->TC_IDR = ul_sources;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Read TC interrupt mask on the selected channel.
|
||||||
|
*
|
||||||
|
* \param p_tc Pointer to a TC instance.
|
||||||
|
* \param ul_channel Channel to configure.
|
||||||
|
*
|
||||||
|
* \return The interrupt mask value.
|
||||||
|
*/
|
||||||
|
uint32_t tc_get_interrupt_mask(Tc *p_tc, uint32_t ul_channel)
|
||||||
|
{
|
||||||
|
TcChannel *tc_channel;
|
||||||
|
|
||||||
|
Assert(ul_channel <
|
||||||
|
(sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0])));
|
||||||
|
tc_channel = p_tc->TC_CHANNEL + ul_channel;
|
||||||
|
return tc_channel->TC_IMR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Get current status on the selected channel.
|
||||||
|
*
|
||||||
|
* \param p_tc Pointer to a TC instance.
|
||||||
|
* \param ul_channel Channel to configure.
|
||||||
|
*
|
||||||
|
* \return The current TC status.
|
||||||
|
*/
|
||||||
|
uint32_t tc_get_status(Tc *p_tc, uint32_t ul_channel)
|
||||||
|
{
|
||||||
|
TcChannel *tc_channel;
|
||||||
|
|
||||||
|
Assert(ul_channel <
|
||||||
|
(sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0])));
|
||||||
|
tc_channel = p_tc->TC_CHANNEL + ul_channel;
|
||||||
|
return tc_channel->TC_SR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TC divisor used to find the lowest acceptable timer frequency */
|
||||||
|
#define TC_DIV_FACTOR 65536
|
||||||
|
|
||||||
|
#if (!SAM4L)
|
||||||
|
|
||||||
|
#ifndef FREQ_SLOW_CLOCK_EXT
|
||||||
|
#define FREQ_SLOW_CLOCK_EXT 32768 /* External slow clock frequency (hz) */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Find the best MCK divisor.
|
||||||
|
*
|
||||||
|
* Finds the best MCK divisor given the timer frequency and MCK. The result
|
||||||
|
* is guaranteed to satisfy the following equation:
|
||||||
|
* \code
|
||||||
|
* (MCK / (DIV * 65536)) <= freq <= (MCK / DIV)
|
||||||
|
* \endcode
|
||||||
|
* with DIV being the lowest possible value,
|
||||||
|
* to maximize timing adjust resolution.
|
||||||
|
*
|
||||||
|
* \param ul_freq Desired timer frequency.
|
||||||
|
* \param ul_mck Master clock frequency.
|
||||||
|
* \param p_uldiv Divisor value.
|
||||||
|
* \param p_ultcclks TCCLKS field value for divisor.
|
||||||
|
* \param ul_boardmck Board clock frequency.
|
||||||
|
*
|
||||||
|
* \return 1 if a proper divisor has been found, otherwise 0.
|
||||||
|
*/
|
||||||
|
uint32_t tc_find_mck_divisor(uint32_t ul_freq, uint32_t ul_mck,
|
||||||
|
uint32_t *p_uldiv, uint32_t *p_ultcclks, uint32_t ul_boardmck)
|
||||||
|
{
|
||||||
|
const uint32_t divisors[5] = { 2, 8, 32, 128,
|
||||||
|
ul_boardmck / FREQ_SLOW_CLOCK_EXT };
|
||||||
|
uint32_t ul_index;
|
||||||
|
uint32_t ul_high, ul_low;
|
||||||
|
|
||||||
|
/* Satisfy frequency bound. */
|
||||||
|
for (ul_index = 0;
|
||||||
|
ul_index < (sizeof(divisors) / sizeof(divisors[0]));
|
||||||
|
ul_index++) {
|
||||||
|
ul_high = ul_mck / divisors[ul_index];
|
||||||
|
ul_low = ul_high / TC_DIV_FACTOR;
|
||||||
|
if (ul_freq > ul_high) {
|
||||||
|
return 0;
|
||||||
|
} else if (ul_freq >= ul_low) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ul_index >= (sizeof(divisors) / sizeof(divisors[0]))) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Store results. */
|
||||||
|
if (p_uldiv) {
|
||||||
|
*p_uldiv = divisors[ul_index];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p_ultcclks) {
|
||||||
|
*p_ultcclks = ul_index;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (SAM4L)
|
||||||
|
/**
|
||||||
|
* \brief Find the best PBA clock divisor.
|
||||||
|
*
|
||||||
|
* Finds the best divisor given the timer frequency and PBA clock. The result
|
||||||
|
* is guaranteed to satisfy the following equation:
|
||||||
|
* \code
|
||||||
|
* (ul_pbaclk / (2* DIV * 65536)) <= freq <= (ul_pbaclk / (2* DIV))
|
||||||
|
* \endcode
|
||||||
|
* with DIV being the lowest possible value,
|
||||||
|
* to maximize timing adjust resolution.
|
||||||
|
*
|
||||||
|
* \param ul_freq Desired timer frequency.
|
||||||
|
* \param ul_mck PBA clock frequency.
|
||||||
|
* \param p_uldiv Divisor value.
|
||||||
|
* \param p_ultcclks TCCLKS field value for divisor.
|
||||||
|
* \param ul_boardmck useless here.
|
||||||
|
*
|
||||||
|
* \return 1 if a proper divisor has been found, otherwise 0.
|
||||||
|
*/
|
||||||
|
uint32_t tc_find_mck_divisor(uint32_t ul_freq, uint32_t ul_mck,
|
||||||
|
uint32_t *p_uldiv, uint32_t *p_ultcclks, uint32_t ul_boardmck)
|
||||||
|
{
|
||||||
|
const uint32_t divisors[5] = { 0, 2, 8, 32, 128};
|
||||||
|
uint32_t ul_index;
|
||||||
|
uint32_t ul_high, ul_low;
|
||||||
|
|
||||||
|
UNUSED(ul_boardmck);
|
||||||
|
|
||||||
|
/* Satisfy frequency bound. */
|
||||||
|
for (ul_index = 1;
|
||||||
|
ul_index < (sizeof(divisors) / sizeof(divisors[0]));
|
||||||
|
ul_index++) {
|
||||||
|
ul_high = ul_mck / divisors[ul_index];
|
||||||
|
ul_low = ul_high / TC_DIV_FACTOR;
|
||||||
|
if (ul_freq > ul_high) {
|
||||||
|
return 0;
|
||||||
|
} else if (ul_freq >= ul_low) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ul_index >= (sizeof(divisors) / sizeof(divisors[0]))) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Store results. */
|
||||||
|
if (p_uldiv) {
|
||||||
|
*p_uldiv = divisors[ul_index];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p_ultcclks) {
|
||||||
|
*p_ultcclks = ul_index;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (!SAM4L)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Enable TC QDEC interrupts.
|
||||||
|
*
|
||||||
|
* \param p_tc Pointer to a TC instance.
|
||||||
|
* \param ul_sources Interrupts to be enabled.
|
||||||
|
*/
|
||||||
|
void tc_enable_qdec_interrupt(Tc *p_tc, uint32_t ul_sources)
|
||||||
|
{
|
||||||
|
p_tc->TC_QIER = ul_sources;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Disable TC QDEC interrupts.
|
||||||
|
*
|
||||||
|
* \param p_tc Pointer to a TC instance.
|
||||||
|
* \param ul_sources Interrupts to be disabled.
|
||||||
|
*/
|
||||||
|
void tc_disable_qdec_interrupt(Tc *p_tc, uint32_t ul_sources)
|
||||||
|
{
|
||||||
|
p_tc->TC_QIDR = ul_sources;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Read TC QDEC interrupt mask.
|
||||||
|
*
|
||||||
|
* \param p_tc Pointer to a TC instance.
|
||||||
|
*
|
||||||
|
* \return The interrupt mask value.
|
||||||
|
*/
|
||||||
|
uint32_t tc_get_qdec_interrupt_mask(Tc *p_tc)
|
||||||
|
{
|
||||||
|
return p_tc->TC_QIMR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Get current QDEC status.
|
||||||
|
*
|
||||||
|
* \param p_tc Pointer to a TC instance.
|
||||||
|
*
|
||||||
|
* \return The current TC status.
|
||||||
|
*/
|
||||||
|
uint32_t tc_get_qdec_interrupt_status(Tc *p_tc)
|
||||||
|
{
|
||||||
|
return p_tc->TC_QISR;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (!SAM3U)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Enable or disable write protection of TC registers.
|
||||||
|
*
|
||||||
|
* \param p_tc Pointer to a TC instance.
|
||||||
|
* \param ul_enable 1 to enable, 0 to disable.
|
||||||
|
*/
|
||||||
|
void tc_set_writeprotect(Tc *p_tc, uint32_t ul_enable)
|
||||||
|
{
|
||||||
|
if (ul_enable) {
|
||||||
|
p_tc->TC_WPMR = TC_WPMR_WPKEY_VALUE | TC_WPMR_WPEN;
|
||||||
|
} else {
|
||||||
|
p_tc->TC_WPMR = TC_WPMR_WPKEY_VALUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if SAM4L
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Indicate features.
|
||||||
|
*
|
||||||
|
* \param p_tc Pointer to a TC instance.
|
||||||
|
*
|
||||||
|
* \return TC_FEATURES value.
|
||||||
|
*/
|
||||||
|
uint32_t tc_get_feature(Tc *p_tc)
|
||||||
|
{
|
||||||
|
return p_tc->TC_FEATURES;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Indicate version.
|
||||||
|
*
|
||||||
|
* \param p_tc Pointer to a TC instance.
|
||||||
|
*
|
||||||
|
* \return TC_VERSION value.
|
||||||
|
*/
|
||||||
|
uint32_t tc_get_version(Tc *p_tc)
|
||||||
|
{
|
||||||
|
return p_tc->TC_VERSION;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//@}
|
||||||
|
|
||||||
|
/// @cond 0
|
||||||
|
/**INDENT-OFF**/
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
/**INDENT-ON**/
|
||||||
|
/// @endcond
|
|
@ -0,0 +1,114 @@
|
||||||
|
/**
|
||||||
|
* \file
|
||||||
|
*
|
||||||
|
* \brief Timer Counter (TC) driver for SAM.
|
||||||
|
*
|
||||||
|
* Copyright (c) 2011-2013 Atmel Corporation. All rights reserved.
|
||||||
|
*
|
||||||
|
* \asf_license_start
|
||||||
|
*
|
||||||
|
* \page License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* 3. The name of Atmel may not be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* 4. This software may only be redistributed and used in connection with an
|
||||||
|
* Atmel microcontroller product.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||||
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||||
|
* EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* \asf_license_stop
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef TC_H_INCLUDED
|
||||||
|
#define TC_H_INCLUDED
|
||||||
|
|
||||||
|
#include "compiler.h"
|
||||||
|
|
||||||
|
/// @cond 0
|
||||||
|
/**INDENT-OFF**/
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
/**INDENT-ON**/
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
void tc_init(Tc *p_tc, uint32_t ul_Channel, uint32_t ul_Mode);
|
||||||
|
void tc_sync_trigger(Tc *p_tc);
|
||||||
|
void tc_set_block_mode(Tc *p_tc, uint32_t ul_blockmode);
|
||||||
|
|
||||||
|
#if (!SAM3U)
|
||||||
|
uint32_t tc_init_2bit_gray(Tc *p_tc, uint32_t ul_channel,
|
||||||
|
uint32_t ul_steppermode);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void tc_start(Tc *p_tc, uint32_t ul_channel);
|
||||||
|
void tc_stop(Tc *p_tc, uint32_t ul_channel);
|
||||||
|
|
||||||
|
uint32_t tc_read_cv(Tc *p_tc, uint32_t ul_channel);
|
||||||
|
uint32_t tc_read_ra(Tc *p_tc, uint32_t ul_channel);
|
||||||
|
uint32_t tc_read_rb(Tc *p_tc, uint32_t ul_channel);
|
||||||
|
uint32_t tc_read_rc(Tc *p_tc, uint32_t ul_channel);
|
||||||
|
|
||||||
|
void tc_write_ra(Tc *p_tc, uint32_t ul_channel,
|
||||||
|
uint32_t ul_value);
|
||||||
|
void tc_write_rb(Tc *p_tc, uint32_t ul_channel,
|
||||||
|
uint32_t ul_value);
|
||||||
|
void tc_write_rc(Tc *p_tc, uint32_t ul_channel,
|
||||||
|
uint32_t ul_value);
|
||||||
|
|
||||||
|
uint32_t tc_find_mck_divisor(uint32_t ul_freq, uint32_t ul_mck,
|
||||||
|
uint32_t *p_uldiv, uint32_t *ul_tcclks, uint32_t ul_boardmck);
|
||||||
|
void tc_enable_interrupt(Tc *p_tc, uint32_t ul_channel,
|
||||||
|
uint32_t ul_sources);
|
||||||
|
void tc_disable_interrupt(Tc *p_tc, uint32_t ul_channel,
|
||||||
|
uint32_t ul_sources);
|
||||||
|
uint32_t tc_get_interrupt_mask(Tc *p_tc, uint32_t ul_channel);
|
||||||
|
uint32_t tc_get_status(Tc *p_tc, uint32_t ul_channel);
|
||||||
|
#if (!SAM4L)
|
||||||
|
void tc_enable_qdec_interrupt(Tc *p_tc, uint32_t ul_sources);
|
||||||
|
void tc_disable_qdec_interrupt(Tc *p_tc, uint32_t ul_sources);
|
||||||
|
uint32_t tc_get_qdec_interrupt_mask(Tc *p_tc);
|
||||||
|
uint32_t tc_get_qdec_interrupt_status(Tc *p_tc);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (!SAM3U)
|
||||||
|
void tc_set_writeprotect(Tc *p_tc, uint32_t ul_enable);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if SAM4L
|
||||||
|
uint32_t tc_get_feature(Tc *p_tc);
|
||||||
|
uint32_t tc_get_version(Tc *p_tc);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// @cond 0
|
||||||
|
/**INDENT-OFF**/
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
/**INDENT-ON**/
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
#endif /* TC_H_INCLUDED */
|
198
FreeRTOS/Demo/CORTEX_M4_ATSAM4E_Atmel_Studio/src/IntQueueTimer.c
Normal file
198
FreeRTOS/Demo/CORTEX_M4_ATSAM4E_Atmel_Studio/src/IntQueueTimer.c
Normal file
|
@ -0,0 +1,198 @@
|
||||||
|
/*
|
||||||
|
FreeRTOS V8.1.2 - Copyright (C) 2014 Real Time Engineers Ltd.
|
||||||
|
All rights reserved
|
||||||
|
|
||||||
|
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||||
|
|
||||||
|
***************************************************************************
|
||||||
|
* *
|
||||||
|
* FreeRTOS provides completely free yet professionally developed, *
|
||||||
|
* robust, strictly quality controlled, supported, and cross *
|
||||||
|
* platform software that has become a de facto standard. *
|
||||||
|
* *
|
||||||
|
* Help yourself get started quickly and support the FreeRTOS *
|
||||||
|
* project by purchasing a FreeRTOS tutorial book, reference *
|
||||||
|
* manual, or both from: http://www.FreeRTOS.org/Documentation *
|
||||||
|
* *
|
||||||
|
* Thank you! *
|
||||||
|
* *
|
||||||
|
***************************************************************************
|
||||||
|
|
||||||
|
This file is part of the FreeRTOS distribution.
|
||||||
|
|
||||||
|
FreeRTOS is free software; you can redistribute it and/or modify it under
|
||||||
|
the terms of the GNU General Public License (version 2) as published by the
|
||||||
|
Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.
|
||||||
|
|
||||||
|
>>! NOTE: The modification to the GPL is included to allow you to !<<
|
||||||
|
>>! distribute a combined work that includes FreeRTOS without being !<<
|
||||||
|
>>! obliged to provide the source code for proprietary components !<<
|
||||||
|
>>! outside of the FreeRTOS kernel. !<<
|
||||||
|
|
||||||
|
FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE. Full license text is available from the following
|
||||||
|
link: http://www.freertos.org/a00114.html
|
||||||
|
|
||||||
|
1 tab == 4 spaces!
|
||||||
|
|
||||||
|
***************************************************************************
|
||||||
|
* *
|
||||||
|
* Having a problem? Start by reading the FAQ "My application does *
|
||||||
|
* not run, what could be wrong?" *
|
||||||
|
* *
|
||||||
|
* http://www.FreeRTOS.org/FAQHelp.html *
|
||||||
|
* *
|
||||||
|
***************************************************************************
|
||||||
|
|
||||||
|
http://www.FreeRTOS.org - Documentation, books, training, latest versions,
|
||||||
|
license and Real Time Engineers Ltd. contact details.
|
||||||
|
|
||||||
|
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
|
||||||
|
including FreeRTOS+Trace - an indispensable productivity tool, a DOS
|
||||||
|
compatible FAT file system, and our tiny thread aware UDP/IP stack.
|
||||||
|
|
||||||
|
http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
|
||||||
|
Integrity Systems to sell under the OpenRTOS brand. Low cost OpenRTOS
|
||||||
|
licenses offer ticketed support, indemnification and middleware.
|
||||||
|
|
||||||
|
http://www.SafeRTOS.com - High Integrity Systems also provide a safety
|
||||||
|
engineered and independently SIL3 certified version for use in safety and
|
||||||
|
mission critical applications that require provable dependability.
|
||||||
|
|
||||||
|
1 tab == 4 spaces!
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Provides the two timers sources for the standard demo IntQueue test. Also
|
||||||
|
* includes a high frequency timer to maximise the interrupt nesting achieved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Standard includes. */
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
|
/* Scheduler includes. */
|
||||||
|
#include "FreeRTOS.h"
|
||||||
|
#include "task.h"
|
||||||
|
|
||||||
|
/* Demo includes. */
|
||||||
|
#include "IntQueueTimer.h"
|
||||||
|
#include "IntQueue.h"
|
||||||
|
|
||||||
|
/* System includes. */
|
||||||
|
#include "board.h"
|
||||||
|
#include "asf.h"
|
||||||
|
|
||||||
|
/* The frequencies at which the first two timers expire are slightly offset to
|
||||||
|
ensure they don't remain synchronised. The frequency of the highest priority
|
||||||
|
interrupt is 20 times faster so really hammers the interrupt entry and exit
|
||||||
|
code. */
|
||||||
|
#define tmrTIMER_0_FREQUENCY ( 2000UL )
|
||||||
|
#define tmrTIMER_1_FREQUENCY ( 1003UL )
|
||||||
|
#define tmrTIMER_2_FREQUENCY ( 20000UL )
|
||||||
|
|
||||||
|
/* Priorities used by the timer interrupts - these are set differently to make
|
||||||
|
nesting likely/common. The high frequency timer operates above the max
|
||||||
|
system call interrupt priority, but does not use the RTOS API. */
|
||||||
|
#define tmrTIMER_0_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY )
|
||||||
|
#define tmrTIMER_1_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY + 1 )
|
||||||
|
#define tmrTIMER_2_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY - 1 )
|
||||||
|
|
||||||
|
/* The channels used within the TC0 timer. */
|
||||||
|
#define tmrTIMER_0_CHANNEL ( 0 )
|
||||||
|
#define tmrTIMER_1_CHANNEL ( 1 )
|
||||||
|
#define tmrTIMER_2_CHANNEL ( 2 )
|
||||||
|
|
||||||
|
/* TC register bit specifics. */
|
||||||
|
#define tmrTRIGGER_ON_RC ( 1UL << 4UL )
|
||||||
|
#define trmDIVIDER ( 128 )
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Handers for the timer interrupts. */
|
||||||
|
void TC0_Handler( void );
|
||||||
|
void TC1_Handler( void );
|
||||||
|
void TC2_Handler( void );
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Incremented by the high frequency timer, which operates above the max
|
||||||
|
syscall interrupt priority. This is just for inspection. */
|
||||||
|
volatile uint32_t ulHighFrequencyTimerInterrupts = 0;
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vInitialiseTimerForIntQueueTest( void )
|
||||||
|
{
|
||||||
|
uint32_t ulInputFrequency;
|
||||||
|
|
||||||
|
/* Calculate the frequency of the clock that feeds the TC. */
|
||||||
|
ulInputFrequency = configCPU_CLOCK_HZ;
|
||||||
|
ulInputFrequency /= trmDIVIDER;
|
||||||
|
|
||||||
|
/* Three channels are used - two that run at or under
|
||||||
|
configMAX_SYSCALL_INTERRUPT_PRIORITY, and one that runs over
|
||||||
|
configMAX_SYSCALL_INTERRUPT_PRIORITY. */
|
||||||
|
sysclk_enable_peripheral_clock( ID_TC0 );
|
||||||
|
sysclk_enable_peripheral_clock( ID_TC1 );
|
||||||
|
sysclk_enable_peripheral_clock( ID_TC2 );
|
||||||
|
|
||||||
|
/* Init TC channels to waveform mode - up mode clean on RC match. */
|
||||||
|
tc_init( TC0, tmrTIMER_0_CHANNEL, TC_CMR_TCCLKS_TIMER_CLOCK4 | TC_CMR_WAVE | TC_CMR_ACPC_CLEAR | TC_CMR_CPCTRG );
|
||||||
|
tc_init( TC0, tmrTIMER_1_CHANNEL, TC_CMR_TCCLKS_TIMER_CLOCK4 | TC_CMR_WAVE | TC_CMR_ACPC_CLEAR | TC_CMR_CPCTRG );
|
||||||
|
tc_init( TC0, tmrTIMER_2_CHANNEL, TC_CMR_TCCLKS_TIMER_CLOCK4 | TC_CMR_WAVE | TC_CMR_ACPC_CLEAR | TC_CMR_CPCTRG );
|
||||||
|
|
||||||
|
tc_enable_interrupt( TC0, tmrTIMER_0_CHANNEL, tmrTRIGGER_ON_RC );
|
||||||
|
tc_enable_interrupt( TC0, tmrTIMER_1_CHANNEL, tmrTRIGGER_ON_RC );
|
||||||
|
tc_enable_interrupt( TC0, tmrTIMER_2_CHANNEL, tmrTRIGGER_ON_RC );
|
||||||
|
|
||||||
|
tc_write_rc( TC0, tmrTIMER_0_CHANNEL, ( ulInputFrequency / tmrTIMER_0_FREQUENCY ) );
|
||||||
|
tc_write_rc( TC0, tmrTIMER_1_CHANNEL, ( ulInputFrequency / tmrTIMER_1_FREQUENCY ) );
|
||||||
|
tc_write_rc( TC0, tmrTIMER_2_CHANNEL, ( ulInputFrequency / tmrTIMER_2_FREQUENCY ) );
|
||||||
|
|
||||||
|
NVIC_SetPriority( TC0_IRQn, tmrTIMER_0_PRIORITY );
|
||||||
|
NVIC_SetPriority( TC1_IRQn, tmrTIMER_1_PRIORITY );
|
||||||
|
NVIC_SetPriority( TC2_IRQn, tmrTIMER_2_PRIORITY );
|
||||||
|
|
||||||
|
NVIC_EnableIRQ( TC0_IRQn );
|
||||||
|
NVIC_EnableIRQ( TC1_IRQn );
|
||||||
|
NVIC_EnableIRQ( TC2_IRQn );
|
||||||
|
|
||||||
|
tc_start( TC0, tmrTIMER_0_CHANNEL );
|
||||||
|
tc_start( TC0, tmrTIMER_1_CHANNEL );
|
||||||
|
tc_start( TC0, tmrTIMER_2_CHANNEL );
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
void TC0_Handler( void )
|
||||||
|
{
|
||||||
|
/* Handler for the first timer in the IntQueue test. Was the interrupt
|
||||||
|
caused by a compare on RC? */
|
||||||
|
if( ( tc_get_status( TC0, tmrTIMER_0_CHANNEL ) & ~TC_SR_CPCS ) != 0 )
|
||||||
|
{
|
||||||
|
portYIELD_FROM_ISR( xFirstTimerHandler() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
void TC1_Handler( void )
|
||||||
|
{
|
||||||
|
/* Handler for the second timer in the IntQueue test. Was the interrupt
|
||||||
|
caused by a compare on RC? */
|
||||||
|
if( ( tc_get_status( TC0, tmrTIMER_1_CHANNEL ) & ~TC_SR_CPCS ) != 0 )
|
||||||
|
{
|
||||||
|
portYIELD_FROM_ISR( xSecondTimerHandler() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
void TC2_Handler( void )
|
||||||
|
{
|
||||||
|
/* Handler for the high frequency timer that does nothing but increment a
|
||||||
|
variable to give an indication that it is running. Was the interrupt caused
|
||||||
|
by a compare on RC? */
|
||||||
|
if( ( tc_get_status( TC0, tmrTIMER_2_CHANNEL ) & ~TC_SR_CPCS ) != 0 )
|
||||||
|
{
|
||||||
|
ulHighFrequencyTimerInterrupts++;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,74 @@
|
||||||
|
/*
|
||||||
|
FreeRTOS V8.1.2 - Copyright (C) 2014 Real Time Engineers Ltd.
|
||||||
|
All rights reserved
|
||||||
|
|
||||||
|
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||||
|
|
||||||
|
***************************************************************************
|
||||||
|
* *
|
||||||
|
* FreeRTOS provides completely free yet professionally developed, *
|
||||||
|
* robust, strictly quality controlled, supported, and cross *
|
||||||
|
* platform software that has become a de facto standard. *
|
||||||
|
* *
|
||||||
|
* Help yourself get started quickly and support the FreeRTOS *
|
||||||
|
* project by purchasing a FreeRTOS tutorial book, reference *
|
||||||
|
* manual, or both from: http://www.FreeRTOS.org/Documentation *
|
||||||
|
* *
|
||||||
|
* Thank you! *
|
||||||
|
* *
|
||||||
|
***************************************************************************
|
||||||
|
|
||||||
|
This file is part of the FreeRTOS distribution.
|
||||||
|
|
||||||
|
FreeRTOS is free software; you can redistribute it and/or modify it under
|
||||||
|
the terms of the GNU General Public License (version 2) as published by the
|
||||||
|
Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.
|
||||||
|
|
||||||
|
>>! NOTE: The modification to the GPL is included to allow you to !<<
|
||||||
|
>>! distribute a combined work that includes FreeRTOS without being !<<
|
||||||
|
>>! obliged to provide the source code for proprietary components !<<
|
||||||
|
>>! outside of the FreeRTOS kernel. !<<
|
||||||
|
|
||||||
|
FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE. Full license text is available from the following
|
||||||
|
link: http://www.freertos.org/a00114.html
|
||||||
|
|
||||||
|
1 tab == 4 spaces!
|
||||||
|
|
||||||
|
***************************************************************************
|
||||||
|
* *
|
||||||
|
* Having a problem? Start by reading the FAQ "My application does *
|
||||||
|
* not run, what could be wrong?" *
|
||||||
|
* *
|
||||||
|
* http://www.FreeRTOS.org/FAQHelp.html *
|
||||||
|
* *
|
||||||
|
***************************************************************************
|
||||||
|
|
||||||
|
http://www.FreeRTOS.org - Documentation, books, training, latest versions,
|
||||||
|
license and Real Time Engineers Ltd. contact details.
|
||||||
|
|
||||||
|
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
|
||||||
|
including FreeRTOS+Trace - an indispensable productivity tool, a DOS
|
||||||
|
compatible FAT file system, and our tiny thread aware UDP/IP stack.
|
||||||
|
|
||||||
|
http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
|
||||||
|
Integrity Systems to sell under the OpenRTOS brand. Low cost OpenRTOS
|
||||||
|
licenses offer ticketed support, indemnification and middleware.
|
||||||
|
|
||||||
|
http://www.SafeRTOS.com - High Integrity Systems also provide a safety
|
||||||
|
engineered and independently SIL3 certified version for use in safety and
|
||||||
|
mission critical applications that require provable dependability.
|
||||||
|
|
||||||
|
1 tab == 4 spaces!
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef INT_QUEUE_TIMER_H
|
||||||
|
#define INT_QUEUE_TIMER_H
|
||||||
|
|
||||||
|
void vInitialiseTimerForIntQueueTest( void );
|
||||||
|
BaseType_t xTimer0Handler( void );
|
||||||
|
BaseType_t xTimer1Handler( void );
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -101,4 +101,7 @@
|
||||||
// From module: System Clock Control - SAM4E implementation
|
// From module: System Clock Control - SAM4E implementation
|
||||||
#include <sysclk.h>
|
#include <sysclk.h>
|
||||||
|
|
||||||
|
// From module: TC - Timer Counter
|
||||||
|
#include <tc.h>
|
||||||
|
|
||||||
#endif // ASF_H
|
#endif // ASF_H
|
||||||
|
|
|
@ -87,13 +87,13 @@ extern uint32_t SystemCoreClock;
|
||||||
#define configUSE_PREEMPTION 1
|
#define configUSE_PREEMPTION 1
|
||||||
#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1
|
#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1
|
||||||
#define configUSE_QUEUE_SETS 1
|
#define configUSE_QUEUE_SETS 1
|
||||||
#define configUSE_IDLE_HOOK 0
|
#define configUSE_IDLE_HOOK 1
|
||||||
#define configUSE_TICK_HOOK 1
|
#define configUSE_TICK_HOOK 1
|
||||||
#define configCPU_CLOCK_HZ ( SystemCoreClock )
|
#define configCPU_CLOCK_HZ ( SystemCoreClock )
|
||||||
#define configTICK_RATE_HZ ( 1000 )
|
#define configTICK_RATE_HZ ( 1000 )
|
||||||
#define configMAX_PRIORITIES ( 5 )
|
#define configMAX_PRIORITIES ( 5 )
|
||||||
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 130 )
|
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 120 )
|
||||||
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 46 * 1024 ) )
|
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 47 * 1024 ) )
|
||||||
#define configMAX_TASK_NAME_LEN ( 10 )
|
#define configMAX_TASK_NAME_LEN ( 10 )
|
||||||
#define configUSE_TRACE_FACILITY 1
|
#define configUSE_TRACE_FACILITY 1
|
||||||
#define configUSE_16_BIT_TICKS 0
|
#define configUSE_16_BIT_TICKS 0
|
||||||
|
@ -132,7 +132,7 @@ FreeRTOS/Source/tasks.c for limitations. */
|
||||||
#define configUSE_TIMERS 1
|
#define configUSE_TIMERS 1
|
||||||
#define configTIMER_TASK_PRIORITY ( 2 )
|
#define configTIMER_TASK_PRIORITY ( 2 )
|
||||||
#define configTIMER_QUEUE_LENGTH 5
|
#define configTIMER_QUEUE_LENGTH 5
|
||||||
#define configTIMER_TASK_STACK_DEPTH ( configMINIMAL_STACK_SIZE * 2 )
|
#define configTIMER_TASK_STACK_DEPTH ( configMINIMAL_STACK_SIZE )
|
||||||
|
|
||||||
/* Set the following definitions to 1 to include the API function, or zero
|
/* Set the following definitions to 1 to include the API function, or zero
|
||||||
to exclude the API function. */
|
to exclude the API function. */
|
||||||
|
@ -194,17 +194,17 @@ each node on the network has a unique MAC address. */
|
||||||
|
|
||||||
/* Default IP address configuration. Used in ipconfigUSE_DNS is set to 0, or
|
/* Default IP address configuration. Used in ipconfigUSE_DNS is set to 0, or
|
||||||
ipconfigUSE_DNS is set to 1 but a DNS server cannot be contacted. */
|
ipconfigUSE_DNS is set to 1 but a DNS server cannot be contacted. */
|
||||||
#define configIP_ADDR0 192
|
#define configIP_ADDR0 172
|
||||||
#define configIP_ADDR1 168
|
#define configIP_ADDR1 25
|
||||||
#define configIP_ADDR2 0
|
#define configIP_ADDR2 218
|
||||||
#define configIP_ADDR3 200
|
#define configIP_ADDR3 200
|
||||||
|
|
||||||
/* Default gateway IP address configuration. Used in ipconfigUSE_DNS is set to
|
/* Default gateway IP address configuration. Used in ipconfigUSE_DNS is set to
|
||||||
0, or ipconfigUSE_DNS is set to 1 but a DNS server cannot be contacted. */
|
0, or ipconfigUSE_DNS is set to 1 but a DNS server cannot be contacted. */
|
||||||
#define configGATEWAY_ADDR0 192
|
#define configGATEWAY_ADDR0 172
|
||||||
#define configGATEWAY_ADDR1 168
|
#define configGATEWAY_ADDR1 25
|
||||||
#define configGATEWAY_ADDR2 0
|
#define configGATEWAY_ADDR2 218
|
||||||
#define configGATEWAY_ADDR3 1
|
#define configGATEWAY_ADDR3 2
|
||||||
|
|
||||||
/* Default DNS server configuration. OpenDNS addresses are 208.67.222.222 and
|
/* Default DNS server configuration. OpenDNS addresses are 208.67.222.222 and
|
||||||
208.67.220.220. Used in ipconfigUSE_DNS is set to 0, or ipconfigUSE_DNS is set
|
208.67.220.220. Used in ipconfigUSE_DNS is set to 0, or ipconfigUSE_DNS is set
|
||||||
|
@ -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
|
UDP echo tasks (when mainINCLUDE_ECHO_CLIENT_TASKS is set to 1 in
|
||||||
FreeRTOSConfig.h.
|
FreeRTOSConfig.h.
|
||||||
http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/Embedded_Ethernet_Examples/Common_Echo_Clients.shtml */
|
http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/Embedded_Ethernet_Examples/Common_Echo_Clients.shtml */
|
||||||
#define configECHO_SERVER_ADDR0 192
|
#define configECHO_SERVER_ADDR0 172
|
||||||
#define configECHO_SERVER_ADDR1 168
|
#define configECHO_SERVER_ADDR1 25
|
||||||
#define configECHO_SERVER_ADDR2 0
|
#define configECHO_SERVER_ADDR2 218
|
||||||
#define configECHO_SERVER_ADDR3 2
|
#define configECHO_SERVER_ADDR3 100
|
||||||
|
|
||||||
|
|
||||||
/* The priority used by the Ethernet MAC driver interrupt. */
|
/* The priority used by the Ethernet MAC driver interrupt. */
|
||||||
|
|
|
@ -141,6 +141,8 @@ static void prvSetupHardware( void )
|
||||||
|
|
||||||
void vApplicationMallocFailedHook( void )
|
void vApplicationMallocFailedHook( void )
|
||||||
{
|
{
|
||||||
|
static volatile uint32_t ulCount = 0;
|
||||||
|
|
||||||
/* vApplicationMallocFailedHook() will only be called if
|
/* vApplicationMallocFailedHook() will only be called if
|
||||||
configUSE_MALLOC_FAILED_HOOK is set to 1 in FreeRTOSConfig.h. It is a hook
|
configUSE_MALLOC_FAILED_HOOK is set to 1 in FreeRTOSConfig.h. It is a hook
|
||||||
function that will get called if a call to pvPortMalloc() fails.
|
function that will get called if a call to pvPortMalloc() fails.
|
||||||
|
@ -150,8 +152,12 @@ void vApplicationMallocFailedHook( void )
|
||||||
heap available to pvPortMalloc() is defined by configTOTAL_HEAP_SIZE in
|
heap available to pvPortMalloc() is defined by configTOTAL_HEAP_SIZE in
|
||||||
FreeRTOSConfig.h, and the xPortGetFreeHeapSize() API function can be used
|
FreeRTOSConfig.h, and the xPortGetFreeHeapSize() API function can be used
|
||||||
to query the size of free heap space that remains (although it does not
|
to query the size of free heap space that remains (although it does not
|
||||||
provide information on how the remaining heap might be fragmented). */
|
provide information on how the remaining heap might be fragmented).
|
||||||
vAssertCalled( __LINE__, __FILE__ );
|
|
||||||
|
Just count the number of malloc fails as some failures may occur simply
|
||||||
|
because the network load is very high, resulting in the consumption of a
|
||||||
|
lot of network buffers. */
|
||||||
|
ulCount++;
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -136,6 +136,10 @@
|
||||||
#include "QueueSet.h"
|
#include "QueueSet.h"
|
||||||
#include "recmutex.h"
|
#include "recmutex.h"
|
||||||
#include "EventGroupsDemo.h"
|
#include "EventGroupsDemo.h"
|
||||||
|
#include "TaskNotify.h"
|
||||||
|
#include "IntSemTest.h"
|
||||||
|
#include "TimerDemo.h"
|
||||||
|
#include "IntQueue.h"
|
||||||
|
|
||||||
/* The period after which the check timer will expire, in ms, provided no errors
|
/* The period after which the check timer will expire, in ms, provided no errors
|
||||||
have been reported by any of the standard demo tasks. ms are converted to the
|
have been reported by any of the standard demo tasks. ms are converted to the
|
||||||
|
@ -182,7 +186,7 @@ http://www.FreeRTOS.org/udp */
|
||||||
/* UDP command server and echo task parameters. */
|
/* UDP command server and echo task parameters. */
|
||||||
#define mainUDP_CLI_TASK_PRIORITY ( tskIDLE_PRIORITY )
|
#define mainUDP_CLI_TASK_PRIORITY ( tskIDLE_PRIORITY )
|
||||||
#define mainUDP_CLI_PORT_NUMBER ( 5001UL )
|
#define mainUDP_CLI_PORT_NUMBER ( 5001UL )
|
||||||
#define mainUDP_CLI_TASK_STACK_SIZE ( configMINIMAL_STACK_SIZE * 2U )
|
#define mainUDP_CLI_TASK_STACK_SIZE ( configMINIMAL_STACK_SIZE + 90 )
|
||||||
#define mainECHO_CLIENT_STACK_SIZE ( configMINIMAL_STACK_SIZE + 30 )
|
#define mainECHO_CLIENT_STACK_SIZE ( configMINIMAL_STACK_SIZE + 30 )
|
||||||
|
|
||||||
/* Set to 1 to include the UDP echo client tasks in the build. The echo clients
|
/* Set to 1 to include the UDP echo client tasks in the build. The echo clients
|
||||||
|
@ -191,6 +195,9 @@ configECHO_SERVER_ADDR0 to configECHO_SERVER_ADDR3 constants in
|
||||||
FreeRTOSConfig.h. */
|
FreeRTOSConfig.h. */
|
||||||
#define mainINCLUDE_ECHO_CLIENT_TASKS 1
|
#define mainINCLUDE_ECHO_CLIENT_TASKS 1
|
||||||
|
|
||||||
|
/* Used by the standard demo timer tasks. */
|
||||||
|
#define mainTIMER_TEST_PERIOD ( 50 )
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -225,6 +232,14 @@ extern void vRegisterUDPCLICommands( void );
|
||||||
*/
|
*/
|
||||||
extern void vInitialiseLCD( void );
|
extern void vInitialiseLCD( void );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Register check tasks, and the tasks used to write over and check the contents
|
||||||
|
* of the FPU registers, as described at the top of this file. The nature of
|
||||||
|
* these files necessitates that they are written in an assembly file.
|
||||||
|
*/
|
||||||
|
static void prvRegTest1Task( void *pvParameters ) __attribute__((naked));
|
||||||
|
static void prvRegTest2Task( void *pvParameters ) __attribute__((naked));
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/* The default IP and MAC address used by the demo. The address configuration
|
/* The default IP and MAC address used by the demo. The address configuration
|
||||||
|
@ -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. */
|
Note each node on a network must have a unique MAC address. */
|
||||||
const uint8_t ucMACAddress[ 6 ] = { configMAC_ADDR0, configMAC_ADDR1, configMAC_ADDR2, configMAC_ADDR3, configMAC_ADDR4, configMAC_ADDR5 };
|
const uint8_t ucMACAddress[ 6 ] = { configMAC_ADDR0, configMAC_ADDR1, configMAC_ADDR2, configMAC_ADDR3, configMAC_ADDR4, configMAC_ADDR5 };
|
||||||
|
|
||||||
|
/* The following two variables are used to communicate the status of the
|
||||||
|
register check tasks to the check software timer. If the variables keep
|
||||||
|
incrementing, then the register check tasks has not discovered any errors. If
|
||||||
|
a variable stops incrementing, then an error has been found. */
|
||||||
|
volatile unsigned long ulRegTest1LoopCounter = 0UL, ulRegTest2LoopCounter = 0UL;
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
int main_full( void )
|
int main_full( void )
|
||||||
{
|
{
|
||||||
TimerHandle_t xTimer = NULL;
|
|
||||||
|
|
||||||
/* Usage instructions on http://www.FreeRTOS.org/Atmel_SAM4E_RTOS_Demo.html */
|
/* Usage instructions on http://www.FreeRTOS.org/Atmel_SAM4E_RTOS_Demo.html */
|
||||||
|
|
||||||
/* Initialise the LCD and output a bitmap. The IP address will also be
|
/* Initialise the LCD and output a bitmap. The IP address will also be
|
||||||
|
@ -285,7 +304,6 @@ TimerHandle_t xTimer = NULL;
|
||||||
FreeRTOS_IPInit( ucIPAddress, ucNetMask, ucGatewayAddress, ucDNSServerAddress, ucMACAddress );
|
FreeRTOS_IPInit( ucIPAddress, ucNetMask, ucGatewayAddress, ucDNSServerAddress, ucMACAddress );
|
||||||
|
|
||||||
/* Create all the other standard demo tasks. */
|
/* Create all the other standard demo tasks. */
|
||||||
vStartLEDFlashTimers( mainNUM_FLASH_TIMER_LEDS );
|
|
||||||
vCreateBlockTimeTasks();
|
vCreateBlockTimeTasks();
|
||||||
vStartSemaphoreTasks( mainSEM_TEST_PRIORITY );
|
vStartSemaphoreTasks( mainSEM_TEST_PRIORITY );
|
||||||
vStartGenericQueueTasks( mainGEN_QUEUE_TASK_PRIORITY );
|
vStartGenericQueueTasks( mainGEN_QUEUE_TASK_PRIORITY );
|
||||||
|
@ -296,19 +314,15 @@ TimerHandle_t xTimer = NULL;
|
||||||
vStartQueueSetTasks();
|
vStartQueueSetTasks();
|
||||||
vStartRecursiveMutexTasks();
|
vStartRecursiveMutexTasks();
|
||||||
vStartEventGroupTasks();
|
vStartEventGroupTasks();
|
||||||
|
vStartTaskNotifyTask();
|
||||||
|
vStartInterruptSemaphoreTasks();
|
||||||
|
vStartTimerDemoTask( mainTIMER_TEST_PERIOD );
|
||||||
|
vStartInterruptQueueTasks();
|
||||||
|
|
||||||
/* Create the software timer that performs the 'check' functionality, as
|
/* Create the register check tasks, as described at the top of this
|
||||||
described at the top of this file. */
|
file */
|
||||||
xTimer = xTimerCreate( "CheckTimer", /* A text name, purely to help debugging. */
|
xTaskCreate( prvRegTest1Task, "Reg1", configMINIMAL_STACK_SIZE, ( void * ) NULL, tskIDLE_PRIORITY, NULL );
|
||||||
( mainCHECK_TIMER_PERIOD_MS ), /* The timer period, in this case 3000ms (3s). */
|
xTaskCreate( prvRegTest2Task, "Reg2", configMINIMAL_STACK_SIZE, ( void * ) NULL, tskIDLE_PRIORITY, NULL );
|
||||||
pdTRUE, /* This is an auto-reload timer, so xAutoReload is set to pdTRUE. */
|
|
||||||
( void * ) 0, /* The ID is not used, so can be set to anything. */
|
|
||||||
prvCheckTimerCallback ); /* The callback function that inspects the status of all the other tasks. */
|
|
||||||
|
|
||||||
if( xTimer != NULL )
|
|
||||||
{
|
|
||||||
xTimerStart( xTimer, mainDONT_BLOCK );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Start the scheduler itself. */
|
/* Start the scheduler itself. */
|
||||||
vTaskStartScheduler();
|
vTaskStartScheduler();
|
||||||
|
@ -325,6 +339,7 @@ TimerHandle_t xTimer = NULL;
|
||||||
static void prvCheckTimerCallback( TimerHandle_t xTimer )
|
static void prvCheckTimerCallback( TimerHandle_t xTimer )
|
||||||
{
|
{
|
||||||
static long lChangedTimerPeriodAlready = pdFALSE;
|
static long lChangedTimerPeriodAlready = pdFALSE;
|
||||||
|
static unsigned long ulLastRegTest1Value = 0, ulLastRegTest2Value = 0;
|
||||||
unsigned long ulErrorOccurred = pdFALSE;
|
unsigned long ulErrorOccurred = pdFALSE;
|
||||||
|
|
||||||
/* Avoid compiler warnings. */
|
/* Avoid compiler warnings. */
|
||||||
|
@ -372,6 +387,37 @@ unsigned long ulErrorOccurred = pdFALSE;
|
||||||
{
|
{
|
||||||
ulErrorOccurred |= ( 0x01UL << 13UL );
|
ulErrorOccurred |= ( 0x01UL << 13UL );
|
||||||
}
|
}
|
||||||
|
else if( xAreTaskNotificationTasksStillRunning() != pdTRUE )
|
||||||
|
{
|
||||||
|
ulErrorOccurred |= ( 0x01UL << 14UL );
|
||||||
|
}
|
||||||
|
else if( xAreInterruptSemaphoreTasksStillRunning() != pdTRUE )
|
||||||
|
{
|
||||||
|
ulErrorOccurred |= ( 0x01UL << 15UL );
|
||||||
|
}
|
||||||
|
else if( xAreTimerDemoTasksStillRunning( mainCHECK_TIMER_PERIOD_MS ) != pdTRUE )
|
||||||
|
{
|
||||||
|
ulErrorOccurred |= 1UL << 16UL;
|
||||||
|
}
|
||||||
|
else if( xAreIntQueueTasksStillRunning() != pdTRUE )
|
||||||
|
{
|
||||||
|
ulErrorOccurred |= 1UL << 17UL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Check that the register test 1 task is still running. */
|
||||||
|
if( ulLastRegTest1Value == ulRegTest1LoopCounter )
|
||||||
|
{
|
||||||
|
ulErrorOccurred |= 1UL << 18UL;
|
||||||
|
}
|
||||||
|
ulLastRegTest1Value = ulRegTest1LoopCounter;
|
||||||
|
|
||||||
|
/* Check that the register test 2 task is still running. */
|
||||||
|
if( ulLastRegTest2Value == ulRegTest2LoopCounter )
|
||||||
|
{
|
||||||
|
ulErrorOccurred |= 1UL << 19UL;
|
||||||
|
}
|
||||||
|
ulLastRegTest2Value = ulRegTest2LoopCounter;
|
||||||
|
|
||||||
if( ulErrorOccurred != pdFALSE )
|
if( ulErrorOccurred != pdFALSE )
|
||||||
{
|
{
|
||||||
|
@ -464,6 +510,30 @@ char cIPAddress[ 20 ];
|
||||||
|
|
||||||
void vFullDemoIdleHook( void )
|
void vFullDemoIdleHook( void )
|
||||||
{
|
{
|
||||||
|
static TimerHandle_t xCheckTimer = NULL;
|
||||||
|
|
||||||
|
if( xCheckTimer == NULL )
|
||||||
|
{
|
||||||
|
/* Create the software timer that performs the 'check'
|
||||||
|
functionality, in the full demo. This is not done before the
|
||||||
|
scheduler is started as to do so would prevent the standard demo
|
||||||
|
timer tasks from passing their tests (they expect the timer
|
||||||
|
command queue to be empty. */
|
||||||
|
xCheckTimer = xTimerCreate( "CheckTimer", /* A text name, purely to help debugging. */
|
||||||
|
( mainCHECK_TIMER_PERIOD_MS ), /* The timer period, in this case 3000ms (3s). */
|
||||||
|
pdTRUE, /* This is an auto-reload timer, so xAutoReload is set to pdTRUE. */
|
||||||
|
( void * ) 0, /* The ID is not used, so can be set to anything. */
|
||||||
|
prvCheckTimerCallback ); /* The callback function that inspects the status of all the other tasks. */
|
||||||
|
|
||||||
|
if( xCheckTimer != NULL )
|
||||||
|
{
|
||||||
|
xTimerStart( xCheckTimer, mainDONT_BLOCK );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Also start some timers that just flash LEDs. */
|
||||||
|
vStartLEDFlashTimers( mainNUM_FLASH_TIMER_LEDS );
|
||||||
|
}
|
||||||
|
|
||||||
/* If the file system is only going to be accessed from one task then
|
/* If the file system is only going to be accessed from one task then
|
||||||
F_FS_THREAD_AWARE can be set to 0 and the set of example files is created
|
F_FS_THREAD_AWARE can be set to 0 and the set of example files is created
|
||||||
before the RTOS scheduler is started. If the file system is going to be
|
before the RTOS scheduler is started. If the file system is going to be
|
||||||
|
@ -497,6 +567,15 @@ void vFullDemoTickHook( void )
|
||||||
|
|
||||||
/* Call the event group ISR tests. */
|
/* Call the event group ISR tests. */
|
||||||
vPeriodicEventGroupsProcessing();
|
vPeriodicEventGroupsProcessing();
|
||||||
|
|
||||||
|
/* Exercise task notifications from interrupts. */
|
||||||
|
xNotifyTaskFromISR();
|
||||||
|
|
||||||
|
/* Use mutexes from interrupts. */
|
||||||
|
vInterruptSemaphorePeriodicTest();
|
||||||
|
|
||||||
|
/* Use timers from an interrupt. */
|
||||||
|
vTimerPeriodicISRTests();
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -510,3 +589,384 @@ void vApplicationPingReplyHook( ePingReplyStatus_t eStatus, uint16_t usIdentifie
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* This is a naked function. */
|
||||||
|
static void prvRegTest1Task( void *pvParameters )
|
||||||
|
{
|
||||||
|
__asm volatile
|
||||||
|
(
|
||||||
|
" /* Fill the core registers with known values. */ \n"
|
||||||
|
" mov r0, #100 \n"
|
||||||
|
" mov r1, #101 \n"
|
||||||
|
" mov r2, #102 \n"
|
||||||
|
" mov r3, #103 \n"
|
||||||
|
" mov r4, #104 \n"
|
||||||
|
" mov r5, #105 \n"
|
||||||
|
" mov r6, #106 \n"
|
||||||
|
" mov r7, #107 \n"
|
||||||
|
" mov r8, #108 \n"
|
||||||
|
" mov r9, #109 \n"
|
||||||
|
" mov r10, #110 \n"
|
||||||
|
" mov r11, #111 \n"
|
||||||
|
" mov r12, #112 \n"
|
||||||
|
" \n"
|
||||||
|
" /* Fill the VFP registers with known values. */ \n"
|
||||||
|
" vmov d0, r0, r1 \n"
|
||||||
|
" vmov d1, r2, r3 \n"
|
||||||
|
" vmov d2, r4, r5 \n"
|
||||||
|
" vmov d3, r6, r7 \n"
|
||||||
|
" vmov d4, r8, r9 \n"
|
||||||
|
" vmov d5, r10, r11 \n"
|
||||||
|
" vmov d6, r0, r1 \n"
|
||||||
|
" vmov d7, r2, r3 \n"
|
||||||
|
" vmov d8, r4, r5 \n"
|
||||||
|
" vmov d9, r6, r7 \n"
|
||||||
|
" vmov d10, r8, r9 \n"
|
||||||
|
" vmov d11, r10, r11 \n"
|
||||||
|
" vmov d12, r0, r1 \n"
|
||||||
|
" vmov d13, r2, r3 \n"
|
||||||
|
" vmov d14, r4, r5 \n"
|
||||||
|
" vmov d15, r6, r7 \n"
|
||||||
|
" \n"
|
||||||
|
"reg1_loop: \n"
|
||||||
|
" /* Check all the VFP registers still contain the values set above.\n"
|
||||||
|
" First save registers that are clobbered by the test. */ \n"
|
||||||
|
" push { r0-r1 } \n"
|
||||||
|
" \n"
|
||||||
|
" vmov r0, r1, d0 \n"
|
||||||
|
" cmp r0, #100 \n"
|
||||||
|
" bne reg1_error_loopf \n"
|
||||||
|
" cmp r1, #101 \n"
|
||||||
|
" bne reg1_error_loopf \n"
|
||||||
|
" vmov r0, r1, d1 \n"
|
||||||
|
" cmp r0, #102 \n"
|
||||||
|
" bne reg1_error_loopf \n"
|
||||||
|
" cmp r1, #103 \n"
|
||||||
|
" bne reg1_error_loopf \n"
|
||||||
|
" vmov r0, r1, d2 \n"
|
||||||
|
" cmp r0, #104 \n"
|
||||||
|
" bne reg1_error_loopf \n"
|
||||||
|
" cmp r1, #105 \n"
|
||||||
|
" bne reg1_error_loopf \n"
|
||||||
|
" vmov r0, r1, d3 \n"
|
||||||
|
" cmp r0, #106 \n"
|
||||||
|
" bne reg1_error_loopf \n"
|
||||||
|
" cmp r1, #107 \n"
|
||||||
|
" bne reg1_error_loopf \n"
|
||||||
|
" vmov r0, r1, d4 \n"
|
||||||
|
" cmp r0, #108 \n"
|
||||||
|
" bne reg1_error_loopf \n"
|
||||||
|
" cmp r1, #109 \n"
|
||||||
|
" bne reg1_error_loopf \n"
|
||||||
|
" vmov r0, r1, d5 \n"
|
||||||
|
" cmp r0, #110 \n"
|
||||||
|
" bne reg1_error_loopf \n"
|
||||||
|
" cmp r1, #111 \n"
|
||||||
|
" bne reg1_error_loopf \n"
|
||||||
|
" vmov r0, r1, d6 \n"
|
||||||
|
" cmp r0, #100 \n"
|
||||||
|
" bne reg1_error_loopf \n"
|
||||||
|
" cmp r1, #101 \n"
|
||||||
|
" bne reg1_error_loopf \n"
|
||||||
|
" vmov r0, r1, d7 \n"
|
||||||
|
" cmp r0, #102 \n"
|
||||||
|
" bne reg1_error_loopf \n"
|
||||||
|
" cmp r1, #103 \n"
|
||||||
|
" bne reg1_error_loopf \n"
|
||||||
|
" vmov r0, r1, d8 \n"
|
||||||
|
" cmp r0, #104 \n"
|
||||||
|
" bne reg1_error_loopf \n"
|
||||||
|
" cmp r1, #105 \n"
|
||||||
|
" bne reg1_error_loopf \n"
|
||||||
|
" vmov r0, r1, d9 \n"
|
||||||
|
" cmp r0, #106 \n"
|
||||||
|
" bne reg1_error_loopf \n"
|
||||||
|
" cmp r1, #107 \n"
|
||||||
|
" bne reg1_error_loopf \n"
|
||||||
|
" vmov r0, r1, d10 \n"
|
||||||
|
" cmp r0, #108 \n"
|
||||||
|
" bne reg1_error_loopf \n"
|
||||||
|
" cmp r1, #109 \n"
|
||||||
|
" bne reg1_error_loopf \n"
|
||||||
|
" vmov r0, r1, d11 \n"
|
||||||
|
" cmp r0, #110 \n"
|
||||||
|
" bne reg1_error_loopf \n"
|
||||||
|
" cmp r1, #111 \n"
|
||||||
|
" bne reg1_error_loopf \n"
|
||||||
|
" vmov r0, r1, d12 \n"
|
||||||
|
" cmp r0, #100 \n"
|
||||||
|
" bne reg1_error_loopf \n"
|
||||||
|
" cmp r1, #101 \n"
|
||||||
|
" bne reg1_error_loopf \n"
|
||||||
|
" vmov r0, r1, d13 \n"
|
||||||
|
" cmp r0, #102 \n"
|
||||||
|
" bne reg1_error_loopf \n"
|
||||||
|
" cmp r1, #103 \n"
|
||||||
|
" bne reg1_error_loopf \n"
|
||||||
|
" vmov r0, r1, d14 \n"
|
||||||
|
" cmp r0, #104 \n"
|
||||||
|
" bne reg1_error_loopf \n"
|
||||||
|
" cmp r1, #105 \n"
|
||||||
|
" bne reg1_error_loopf \n"
|
||||||
|
" vmov r0, r1, d15 \n"
|
||||||
|
" cmp r0, #106 \n"
|
||||||
|
" bne reg1_error_loopf \n"
|
||||||
|
" cmp r1, #107 \n"
|
||||||
|
" bne reg1_error_loopf \n"
|
||||||
|
" \n"
|
||||||
|
" /* Restore the registers that were clobbered by the test. */\n"
|
||||||
|
" pop {r0-r1} \n"
|
||||||
|
" \n"
|
||||||
|
" /* VFP register test passed. Jump to the core register test. */\n"
|
||||||
|
" b reg1_loopf_pass \n"
|
||||||
|
" \n"
|
||||||
|
"reg1_error_loopf: \n"
|
||||||
|
" /* If this line is hit then a VFP register value was found to be\n"
|
||||||
|
" incorrect. */ \n"
|
||||||
|
" b reg1_error_loopf \n"
|
||||||
|
" \n"
|
||||||
|
"reg1_loopf_pass: \n"
|
||||||
|
" \n"
|
||||||
|
" cmp r0, #100 \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" cmp r1, #101 \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" cmp r2, #102 \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" cmp r3, #103 \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" cmp r4, #104 \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" cmp r5, #105 \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" cmp r6, #106 \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" cmp r7, #107 \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" cmp r8, #108 \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" cmp r9, #109 \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" cmp r10, #110 \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" cmp r11, #111 \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" cmp r12, #112 \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" \n"
|
||||||
|
" /* Everything passed, increment the loop counter. */ \n"
|
||||||
|
" push { r0-r1 } \n"
|
||||||
|
" ldr r0, =ulRegTest1LoopCounter \n"
|
||||||
|
" ldr r1, [r0] \n"
|
||||||
|
" adds r1, r1, #1 \n"
|
||||||
|
" str r1, [r0] \n"
|
||||||
|
" pop { r0-r1 } \n"
|
||||||
|
" \n"
|
||||||
|
" /* Start again. */ \n"
|
||||||
|
" b reg1_loop \n"
|
||||||
|
" \n"
|
||||||
|
"reg1_error_loop: \n"
|
||||||
|
" /* If this line is hit then there was an error in a core register value.\n"
|
||||||
|
" The loop ensures the loop counter stops incrementing. */\n"
|
||||||
|
" b reg1_error_loop \n"
|
||||||
|
" nop "
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Remove compiler warnings about unused parameters. */
|
||||||
|
( void ) pvParameters;
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* This is a naked function. */
|
||||||
|
static void prvRegTest2Task( void *pvParameters )
|
||||||
|
{
|
||||||
|
__asm volatile
|
||||||
|
(
|
||||||
|
" /* Set all the core registers to known values. */ \n"
|
||||||
|
" mov r0, #-1 \n"
|
||||||
|
" mov r1, #1 \n"
|
||||||
|
" mov r2, #2 \n"
|
||||||
|
" mov r3, #3 \n"
|
||||||
|
" mov r4, #4 \n"
|
||||||
|
" mov r5, #5 \n"
|
||||||
|
" mov r6, #6 \n"
|
||||||
|
" mov r7, #7 \n"
|
||||||
|
" mov r8, #8 \n"
|
||||||
|
" mov r9, #9 \n"
|
||||||
|
" mov r10, #10 \n"
|
||||||
|
" mov r11, #11 \n"
|
||||||
|
" mov r12, #12 \n"
|
||||||
|
" \n"
|
||||||
|
" /* Set all the VFP to known values. */ \n"
|
||||||
|
" vmov d0, r0, r1 \n"
|
||||||
|
" vmov d1, r2, r3 \n"
|
||||||
|
" vmov d2, r4, r5 \n"
|
||||||
|
" vmov d3, r6, r7 \n"
|
||||||
|
" vmov d4, r8, r9 \n"
|
||||||
|
" vmov d5, r10, r11 \n"
|
||||||
|
" vmov d6, r0, r1 \n"
|
||||||
|
" vmov d7, r2, r3 \n"
|
||||||
|
" vmov d8, r4, r5 \n"
|
||||||
|
" vmov d9, r6, r7 \n"
|
||||||
|
" vmov d10, r8, r9 \n"
|
||||||
|
" vmov d11, r10, r11 \n"
|
||||||
|
" vmov d12, r0, r1 \n"
|
||||||
|
" vmov d13, r2, r3 \n"
|
||||||
|
" vmov d14, r4, r5 \n"
|
||||||
|
" vmov d15, r6, r7 \n"
|
||||||
|
" \n"
|
||||||
|
"reg2_loop: \n"
|
||||||
|
" \n"
|
||||||
|
" /* Check all the VFP registers still contain the values set above.\n"
|
||||||
|
" First save registers that are clobbered by the test. */ \n"
|
||||||
|
" push { r0-r1 } \n"
|
||||||
|
" \n"
|
||||||
|
" vmov r0, r1, d0 \n"
|
||||||
|
" cmp r0, #-1 \n"
|
||||||
|
" bne reg2_error_loopf \n"
|
||||||
|
" cmp r1, #1 \n"
|
||||||
|
" bne reg2_error_loopf \n"
|
||||||
|
" vmov r0, r1, d1 \n"
|
||||||
|
" cmp r0, #2 \n"
|
||||||
|
" bne reg2_error_loopf \n"
|
||||||
|
" cmp r1, #3 \n"
|
||||||
|
" bne reg2_error_loopf \n"
|
||||||
|
" vmov r0, r1, d2 \n"
|
||||||
|
" cmp r0, #4 \n"
|
||||||
|
" bne reg2_error_loopf \n"
|
||||||
|
" cmp r1, #5 \n"
|
||||||
|
" bne reg2_error_loopf \n"
|
||||||
|
" vmov r0, r1, d3 \n"
|
||||||
|
" cmp r0, #6 \n"
|
||||||
|
" bne reg2_error_loopf \n"
|
||||||
|
" cmp r1, #7 \n"
|
||||||
|
" bne reg2_error_loopf \n"
|
||||||
|
" vmov r0, r1, d4 \n"
|
||||||
|
" cmp r0, #8 \n"
|
||||||
|
" bne reg2_error_loopf \n"
|
||||||
|
" cmp r1, #9 \n"
|
||||||
|
" bne reg2_error_loopf \n"
|
||||||
|
" vmov r0, r1, d5 \n"
|
||||||
|
" cmp r0, #10 \n"
|
||||||
|
" bne reg2_error_loopf \n"
|
||||||
|
" cmp r1, #11 \n"
|
||||||
|
" bne reg2_error_loopf \n"
|
||||||
|
" vmov r0, r1, d6 \n"
|
||||||
|
" cmp r0, #-1 \n"
|
||||||
|
" bne reg2_error_loopf \n"
|
||||||
|
" cmp r1, #1 \n"
|
||||||
|
" bne reg2_error_loopf \n"
|
||||||
|
" vmov r0, r1, d7 \n"
|
||||||
|
" cmp r0, #2 \n"
|
||||||
|
" bne reg2_error_loopf \n"
|
||||||
|
" cmp r1, #3 \n"
|
||||||
|
" bne reg2_error_loopf \n"
|
||||||
|
" vmov r0, r1, d8 \n"
|
||||||
|
" cmp r0, #4 \n"
|
||||||
|
" bne reg2_error_loopf \n"
|
||||||
|
" cmp r1, #5 \n"
|
||||||
|
" bne reg2_error_loopf \n"
|
||||||
|
" vmov r0, r1, d9 \n"
|
||||||
|
" cmp r0, #6 \n"
|
||||||
|
" bne reg2_error_loopf \n"
|
||||||
|
" cmp r1, #7 \n"
|
||||||
|
" bne reg2_error_loopf \n"
|
||||||
|
" vmov r0, r1, d10 \n"
|
||||||
|
" cmp r0, #8 \n"
|
||||||
|
" bne reg2_error_loopf \n"
|
||||||
|
" cmp r1, #9 \n"
|
||||||
|
" bne reg2_error_loopf \n"
|
||||||
|
" vmov r0, r1, d11 \n"
|
||||||
|
" cmp r0, #10 \n"
|
||||||
|
" bne reg2_error_loopf \n"
|
||||||
|
" cmp r1, #11 \n"
|
||||||
|
" bne reg2_error_loopf \n"
|
||||||
|
" vmov r0, r1, d12 \n"
|
||||||
|
" cmp r0, #-1 \n"
|
||||||
|
" bne reg2_error_loopf \n"
|
||||||
|
" cmp r1, #1 \n"
|
||||||
|
" bne reg2_error_loopf \n"
|
||||||
|
" vmov r0, r1, d13 \n"
|
||||||
|
" cmp r0, #2 \n"
|
||||||
|
" bne reg2_error_loopf \n"
|
||||||
|
" cmp r1, #3 \n"
|
||||||
|
" bne reg2_error_loopf \n"
|
||||||
|
" vmov r0, r1, d14 \n"
|
||||||
|
" cmp r0, #4 \n"
|
||||||
|
" bne reg2_error_loopf \n"
|
||||||
|
" cmp r1, #5 \n"
|
||||||
|
" bne reg2_error_loopf \n"
|
||||||
|
" vmov r0, r1, d15 \n"
|
||||||
|
" cmp r0, #6 \n"
|
||||||
|
" bne reg2_error_loopf \n"
|
||||||
|
" cmp r1, #7 \n"
|
||||||
|
" bne reg2_error_loopf \n"
|
||||||
|
" \n"
|
||||||
|
" /* Restore the registers that were clobbered by the test. */\n"
|
||||||
|
" pop {r0-r1} \n"
|
||||||
|
" \n"
|
||||||
|
" /* VFP register test passed. Jump to the core register test. */\n"
|
||||||
|
" b reg2_loopf_pass \n"
|
||||||
|
" \n"
|
||||||
|
"reg2_error_loopf: \n"
|
||||||
|
" /* If this line is hit then a VFP register value was found to be\n"
|
||||||
|
" incorrect. */ \n"
|
||||||
|
" b reg2_error_loopf \n"
|
||||||
|
" \n"
|
||||||
|
"reg2_loopf_pass: \n"
|
||||||
|
" \n"
|
||||||
|
" cmp r0, #-1 \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" cmp r1, #1 \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" cmp r2, #2 \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" cmp r3, #3 \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" cmp r4, #4 \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" cmp r5, #5 \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" cmp r6, #6 \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" cmp r7, #7 \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" cmp r8, #8 \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" cmp r9, #9 \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" cmp r10, #10 \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" cmp r11, #11 \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" cmp r12, #12 \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" \n"
|
||||||
|
" /* Increment the loop counter to indicate this test is still functioning\n"
|
||||||
|
" correctly. */ \n"
|
||||||
|
" push { r0-r1 } \n"
|
||||||
|
" ldr r0, =ulRegTest2LoopCounter \n"
|
||||||
|
" ldr r1, [r0] \n"
|
||||||
|
" adds r1, r1, #1 \n"
|
||||||
|
" str r1, [r0] \n"
|
||||||
|
" \n"
|
||||||
|
" /* Yield to increase test coverage. */ \n"
|
||||||
|
" movs r0, #0x01 \n"
|
||||||
|
" ldr r1, =0xe000ed04 \n" /* NVIC_INT_CTRL */
|
||||||
|
" lsl r0, #28 \n" /* Shift to PendSV bit */
|
||||||
|
" str r0, [r1] \n"
|
||||||
|
" dsb \n"
|
||||||
|
" pop { r0-r1 } \n"
|
||||||
|
" \n"
|
||||||
|
" /* Start again. */ \n"
|
||||||
|
" b reg2_loop \n"
|
||||||
|
" \n"
|
||||||
|
"reg2_error_loop: \n"
|
||||||
|
" /* If this line is hit then there was an error in a core register value.\n"
|
||||||
|
" This loop ensures the loop counter variable stops incrementing. */\n"
|
||||||
|
" b reg2_error_loop \n"
|
||||||
|
" nop \n"
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Remove compiler warnings about unused parameters. */
|
||||||
|
( void ) pvParameters;
|
||||||
|
}
|
||||||
|
|
Binary file not shown.
|
@ -144,7 +144,7 @@
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.10.1" />
|
<content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.10.1" />
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</framework-data>
|
</framework-data>
|
||||||
</AsfFrameworkConfig>
|
</AsfFrameworkConfig>
|
||||||
<avrdevice>ATSAM4S16C</avrdevice>
|
<avrdevice>ATSAM4S16C</avrdevice>
|
||||||
<avrdeviceseries>sam4s</avrdeviceseries>
|
<avrdeviceseries>sam4s</avrdeviceseries>
|
||||||
|
@ -165,7 +165,7 @@
|
||||||
<com_atmel_avrdbg_tool_samice>
|
<com_atmel_avrdbg_tool_samice>
|
||||||
<ToolType>com.atmel.avrdbg.tool.samice</ToolType>
|
<ToolType>com.atmel.avrdbg.tool.samice</ToolType>
|
||||||
<ToolName>J-Link</ToolName>
|
<ToolName>J-Link</ToolName>
|
||||||
<ToolNumber>158002654</ToolNumber>
|
<ToolNumber>158000789</ToolNumber>
|
||||||
<Channel>
|
<Channel>
|
||||||
<host>127.0.0.1</host>
|
<host>127.0.0.1</host>
|
||||||
<port>1637</port>
|
<port>1637</port>
|
||||||
|
|
|
@ -89,7 +89,7 @@ interrupt is 20 times faster so really hammers the interrupt entry and exit
|
||||||
code. */
|
code. */
|
||||||
#define tmrTIMER_0_FREQUENCY ( 2000UL )
|
#define tmrTIMER_0_FREQUENCY ( 2000UL )
|
||||||
#define tmrTIMER_1_FREQUENCY ( 1003UL )
|
#define tmrTIMER_1_FREQUENCY ( 1003UL )
|
||||||
#define tmrTIMER_2_FREQUENCY ( 20000UL )
|
#define tmrTIMER_2_FREQUENCY ( 5000UL )
|
||||||
|
|
||||||
/* Priorities used by the timer interrupts - these are set differently to make
|
/* Priorities used by the timer interrupts - these are set differently to make
|
||||||
nesting likely/common. The high frequency timer operates above the max
|
nesting likely/common. The high frequency timer operates above the max
|
||||||
|
|
|
@ -3,6 +3,9 @@
|
||||||
<Bookmarks/>
|
<Bookmarks/>
|
||||||
<Breakpoints/>
|
<Breakpoints/>
|
||||||
<ExecutionProfileWindow/>
|
<ExecutionProfileWindow/>
|
||||||
|
<FrameBufferWindow>
|
||||||
|
<FrameBufferWindow addressText="" bufferWidth="-1" bufferHeight="-1" addressSpace="" />
|
||||||
|
</FrameBufferWindow>
|
||||||
<Memory1>
|
<Memory1>
|
||||||
<MemoryWindow autoEvaluate="0" addressText="0x200002d0" numColumns="8" sizeText="120" dataSize="1" radix="16" name="RTOSDemo" addressSpace="" />
|
<MemoryWindow autoEvaluate="0" addressText="0x200002d0" numColumns="8" sizeText="120" dataSize="1" radix="16" name="RTOSDemo" addressSpace="" />
|
||||||
</Memory1>
|
</Memory1>
|
||||||
|
@ -21,16 +24,16 @@
|
||||||
<ProjectSessionItem path="RTOSDemo;RTOSDemo;Source Files" name="unnamed" />
|
<ProjectSessionItem path="RTOSDemo;RTOSDemo;Source Files" name="unnamed" />
|
||||||
</Project>
|
</Project>
|
||||||
<Register1>
|
<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>
|
</Register1>
|
||||||
<Register2>
|
<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>
|
</Register2>
|
||||||
<Register3>
|
<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>
|
</Register3>
|
||||||
<Register4>
|
<Register4>
|
||||||
<RegisterWindow openNodes="" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="" decimalNodes="" octalNodes="" asciiNodes="" name="RTOSDemo" />
|
<RegisterWindow openNodes="" binaryNodes="" unsignedNodes="" decimalNodes="" octalNodes="" asciiNodes="" visibleNodes="" name="RTOSDemo" />
|
||||||
</Register4>
|
</Register4>
|
||||||
<TargetWindow programAction="" uploadFileType="" programLoadAddress="" programSize="" uploadFileName="" uploadMemoryInterface="" programFileName="" uploadStartAddress="" programFileType="" uploadSize="" programMemoryInterface="" />
|
<TargetWindow programAction="" uploadFileType="" programLoadAddress="" programSize="" uploadFileName="" uploadMemoryInterface="" programFileName="" uploadStartAddress="" programFileType="" uploadSize="" programMemoryInterface="" />
|
||||||
<TraceWindow>
|
<TraceWindow>
|
||||||
|
@ -51,7 +54,7 @@
|
||||||
<Watches active="0" update="Never" />
|
<Watches active="0" update="Never" />
|
||||||
</Watch4>
|
</Watch4>
|
||||||
<Files>
|
<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>
|
</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>
|
</session>
|
||||||
|
|
|
@ -139,7 +139,10 @@ from within the interrupts. */
|
||||||
uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); \
|
uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); \
|
||||||
{ \
|
{ \
|
||||||
uxValueForNormallyEmptyQueue++; \
|
uxValueForNormallyEmptyQueue++; \
|
||||||
xQueueSendFromISR( xNormallyEmptyQueue, ( void * ) &uxValueForNormallyEmptyQueue, &xHigherPriorityTaskWoken ); \
|
if( xQueueSendFromISR( xNormallyEmptyQueue, ( void * ) &uxValueForNormallyEmptyQueue, &xHigherPriorityTaskWoken ) != pdPASS ) \
|
||||||
|
{ \
|
||||||
|
uxValueForNormallyEmptyQueue--; \
|
||||||
|
} \
|
||||||
} \
|
} \
|
||||||
portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); \
|
portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); \
|
||||||
} \
|
} \
|
||||||
|
@ -153,7 +156,10 @@ from within the interrupts. */
|
||||||
uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); \
|
uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); \
|
||||||
{ \
|
{ \
|
||||||
uxValueForNormallyFullQueue++; \
|
uxValueForNormallyFullQueue++; \
|
||||||
xQueueSendFromISR( xNormallyFullQueue, ( void * ) &uxValueForNormallyFullQueue, &xHigherPriorityTaskWoken ); \
|
if( xQueueSendFromISR( xNormallyFullQueue, ( void * ) &uxValueForNormallyFullQueue, &xHigherPriorityTaskWoken ) != pdPASS ) \
|
||||||
|
{ \
|
||||||
|
uxValueForNormallyFullQueue--; \
|
||||||
|
} \
|
||||||
} \
|
} \
|
||||||
portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); \
|
portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); \
|
||||||
} \
|
} \
|
||||||
|
|
|
@ -1728,7 +1728,7 @@ BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, BaseType_t ulBitsToCl
|
||||||
* \defgroup xTaskNotifyWait xTaskNotifyWait
|
* \defgroup xTaskNotifyWait xTaskNotifyWait
|
||||||
* \ingroup TaskNotifications
|
* \ingroup TaskNotifications
|
||||||
*/
|
*/
|
||||||
#define xTaskNotifyGiveFromISR( xTaskToNotify, pxHigherPriorityTaskWoken ) xTaskNotifyFromISR( ( xTaskToNotify ), 0, eIncrement, ( pxHigherPriorityTaskWoken ) )
|
BaseType_t xTaskNotifyGiveFromISR( TaskHandle_t xTaskToNotify, BaseType_t *pxHigherPriorityTaskWoken );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
|
|
|
@ -126,7 +126,7 @@ extern void vPortEnterCritical( void );
|
||||||
extern void vPortExitCritical( void );
|
extern void vPortExitCritical( void );
|
||||||
#define portSET_INTERRUPT_MASK_FROM_ISR() ulPortRaiseBASEPRI()
|
#define portSET_INTERRUPT_MASK_FROM_ISR() ulPortRaiseBASEPRI()
|
||||||
#define portCLEAR_INTERRUPT_MASK_FROM_ISR(x) vPortSetBASEPRI(x)
|
#define portCLEAR_INTERRUPT_MASK_FROM_ISR(x) vPortSetBASEPRI(x)
|
||||||
#define portDISABLE_INTERRUPTS() ulPortRaiseBASEPRI()
|
#define portDISABLE_INTERRUPTS() vPortRaiseBASEPRI()
|
||||||
#define portENABLE_INTERRUPTS() vPortSetBASEPRI(0)
|
#define portENABLE_INTERRUPTS() vPortSetBASEPRI(0)
|
||||||
#define portENTER_CRITICAL() vPortEnterCritical()
|
#define portENTER_CRITICAL() vPortEnterCritical()
|
||||||
#define portEXIT_CRITICAL() vPortExitCritical()
|
#define portEXIT_CRITICAL() vPortExitCritical()
|
||||||
|
@ -194,6 +194,22 @@ not necessary for to use this port. They are defined so the common demo files
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
portFORCE_INLINE static void vPortRaiseBASEPRI( void )
|
||||||
|
{
|
||||||
|
uint32_t ulNewBASEPRI;
|
||||||
|
|
||||||
|
__asm volatile
|
||||||
|
(
|
||||||
|
" mov %0, %1 \n" \
|
||||||
|
" msr basepri, %0 \n" \
|
||||||
|
" isb \n" \
|
||||||
|
" dsb \n" \
|
||||||
|
:"=r" (ulNewBASEPRI) : "i" ( configMAX_SYSCALL_INTERRUPT_PRIORITY )
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
portFORCE_INLINE static uint32_t ulPortRaiseBASEPRI( void )
|
portFORCE_INLINE static uint32_t ulPortRaiseBASEPRI( void )
|
||||||
{
|
{
|
||||||
uint32_t ulOriginalBASEPRI, ulNewBASEPRI;
|
uint32_t ulOriginalBASEPRI, ulNewBASEPRI;
|
||||||
|
|
|
@ -129,7 +129,7 @@ typedef unsigned long UBaseType_t;
|
||||||
extern void vPortEnterCritical( void );
|
extern void vPortEnterCritical( void );
|
||||||
extern void vPortExitCritical( void );
|
extern void vPortExitCritical( void );
|
||||||
|
|
||||||
#define portDISABLE_INTERRUPTS() ulPortRaiseBASEPRI()
|
#define portDISABLE_INTERRUPTS() vPortRaiseBASEPRI()
|
||||||
#define portENABLE_INTERRUPTS() vPortSetBASEPRI( 0 )
|
#define portENABLE_INTERRUPTS() vPortSetBASEPRI( 0 )
|
||||||
#define portENTER_CRITICAL() vPortEnterCritical()
|
#define portENTER_CRITICAL() vPortEnterCritical()
|
||||||
#define portEXIT_CRITICAL() vPortExitCritical()
|
#define portEXIT_CRITICAL() vPortExitCritical()
|
||||||
|
@ -200,6 +200,21 @@ static portFORCE_INLINE void vPortSetBASEPRI( uint32_t ulBASEPRI )
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
static portFORCE_INLINE void vPortRaiseBASEPRI( void )
|
||||||
|
{
|
||||||
|
uint32_t ulNewBASEPRI = configMAX_SYSCALL_INTERRUPT_PRIORITY;
|
||||||
|
|
||||||
|
__asm
|
||||||
|
{
|
||||||
|
/* Set BASEPRI to the max syscall priority to effect a critical
|
||||||
|
section. */
|
||||||
|
msr basepri, ulNewBASEPRI
|
||||||
|
dsb
|
||||||
|
isb
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
static portFORCE_INLINE uint32_t ulPortRaiseBASEPRI( void )
|
static portFORCE_INLINE uint32_t ulPortRaiseBASEPRI( void )
|
||||||
{
|
{
|
||||||
uint32_t ulReturn, ulNewBASEPRI = configMAX_SYSCALL_INTERRUPT_PRIORITY;
|
uint32_t ulReturn, ulNewBASEPRI = configMAX_SYSCALL_INTERRUPT_PRIORITY;
|
||||||
|
|
|
@ -180,8 +180,8 @@ typedef struct tskTaskControlBlock
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ( configUSE_TASK_NOTIFICATIONS == 1 )
|
#if ( configUSE_TASK_NOTIFICATIONS == 1 )
|
||||||
uint32_t ulNotifiedValue;
|
volatile uint32_t ulNotifiedValue;
|
||||||
eNotifyValue eNotifyState;
|
volatile eNotifyValue eNotifyState;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
} tskTCB;
|
} tskTCB;
|
||||||
|
@ -4228,6 +4228,90 @@ TickType_t uxReturn;
|
||||||
#endif /* configUSE_TASK_NOTIFICATIONS */
|
#endif /* configUSE_TASK_NOTIFICATIONS */
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
#if( configUSE_TASK_NOTIFICATIONS == 1 )
|
||||||
|
|
||||||
|
BaseType_t xTaskNotifyGiveFromISR( TaskHandle_t xTaskToNotify, BaseType_t *pxHigherPriorityTaskWoken )
|
||||||
|
{
|
||||||
|
TCB_t * pxTCB;
|
||||||
|
eNotifyValue eOriginalNotifyState;
|
||||||
|
BaseType_t xReturn = pdPASS;
|
||||||
|
UBaseType_t uxSavedInterruptStatus;
|
||||||
|
|
||||||
|
configASSERT( xTaskToNotify );
|
||||||
|
|
||||||
|
/* RTOS ports that support interrupt nesting have the concept of a
|
||||||
|
maximum system call (or maximum API call) interrupt priority.
|
||||||
|
Interrupts that are above the maximum system call priority are keep
|
||||||
|
permanently enabled, even when the RTOS kernel is in a critical section,
|
||||||
|
but cannot make any calls to FreeRTOS API functions. If configASSERT()
|
||||||
|
is defined in FreeRTOSConfig.h then
|
||||||
|
portASSERT_IF_INTERRUPT_PRIORITY_INVALID() will result in an assertion
|
||||||
|
failure if a FreeRTOS API function is called from an interrupt that has
|
||||||
|
been assigned a priority above the configured maximum system call
|
||||||
|
priority. Only FreeRTOS functions that end in FromISR can be called
|
||||||
|
from interrupts that have been assigned a priority at or (logically)
|
||||||
|
below the maximum system call interrupt priority. FreeRTOS maintains a
|
||||||
|
separate interrupt safe API to ensure interrupt entry is as fast and as
|
||||||
|
simple as possible. More information (albeit Cortex-M specific) is
|
||||||
|
provided on the following link:
|
||||||
|
http://www.freertos.org/RTOS-Cortex-M3-M4.html */
|
||||||
|
portASSERT_IF_INTERRUPT_PRIORITY_INVALID();
|
||||||
|
|
||||||
|
pxTCB = ( TCB_t * ) xTaskToNotify;
|
||||||
|
|
||||||
|
uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
|
||||||
|
{
|
||||||
|
eOriginalNotifyState = pxTCB->eNotifyState;
|
||||||
|
pxTCB->eNotifyState = eNotified;
|
||||||
|
|
||||||
|
/* 'Giving' is equivalent to incrementing a count in a counting
|
||||||
|
semaphore. */
|
||||||
|
( pxTCB->ulNotifiedValue )++;
|
||||||
|
|
||||||
|
/* If the task is in the blocked state specifically to wait for a
|
||||||
|
notification then unblock it now. */
|
||||||
|
if( eOriginalNotifyState == eWaitingNotification )
|
||||||
|
{
|
||||||
|
/* The task should not have been on an event list. */
|
||||||
|
configASSERT( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) == NULL );
|
||||||
|
|
||||||
|
if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE )
|
||||||
|
{
|
||||||
|
( void ) uxListRemove( &( pxTCB->xGenericListItem ) );
|
||||||
|
prvAddTaskToReadyList( pxTCB );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* The delayed and ready lists cannot be accessed, so hold
|
||||||
|
this task pending until the scheduler is resumed. */
|
||||||
|
vListInsertEnd( &( xPendingReadyList ), &( pxTCB->xEventListItem ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( pxTCB->uxPriority > pxCurrentTCB->uxPriority )
|
||||||
|
{
|
||||||
|
/* The notified task has a priority above the currently
|
||||||
|
executing task so a yield is required. */
|
||||||
|
if( pxHigherPriorityTaskWoken != NULL )
|
||||||
|
{
|
||||||
|
*pxHigherPriorityTaskWoken = pdTRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mtCOVERAGE_TEST_MARKER();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );
|
||||||
|
|
||||||
|
return xReturn;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* configUSE_TASK_NOTIFICATIONS */
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
#ifdef FREERTOS_MODULE_TEST
|
#ifdef FREERTOS_MODULE_TEST
|
||||||
#include "tasks_test_access_functions.h"
|
#include "tasks_test_access_functions.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue