summaryrefslogtreecommitdiff
path: root/FreeRTOS/Demo/uIP_Demo_Rowley_ARM7/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'FreeRTOS/Demo/uIP_Demo_Rowley_ARM7/main.c')
-rw-r--r--FreeRTOS/Demo/uIP_Demo_Rowley_ARM7/main.c321
1 files changed, 0 insertions, 321 deletions
diff --git a/FreeRTOS/Demo/uIP_Demo_Rowley_ARM7/main.c b/FreeRTOS/Demo/uIP_Demo_Rowley_ARM7/main.c
deleted file mode 100644
index 62e3a7785..000000000
--- a/FreeRTOS/Demo/uIP_Demo_Rowley_ARM7/main.c
+++ /dev/null
@@ -1,321 +0,0 @@
-/*
- FreeRTOS V9.0.0rc2 - Copyright (C) 2016 Real Time Engineers Ltd.
- All rights reserved
-
- VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
-
- 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 on the following
- link: http://www.freertos.org/a00114.html
-
- ***************************************************************************
- * *
- * FreeRTOS provides completely free yet professionally developed, *
- * robust, strictly quality controlled, supported, and cross *
- * platform software that is more than just the market leader, it *
- * is the industry's de facto standard. *
- * *
- * Help yourself get started quickly while simultaneously helping *
- * to support the FreeRTOS project by purchasing a FreeRTOS *
- * tutorial book, reference manual, or both: *
- * http://www.FreeRTOS.org/Documentation *
- * *
- ***************************************************************************
-
- http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading
- the FAQ page "My application does not run, what could be wrong?". Have you
- defined configASSERT()?
-
- http://www.FreeRTOS.org/support - In return for receiving this top quality
- embedded software for free we request you assist our global community by
- participating in the support forum.
-
- http://www.FreeRTOS.org/training - Investing in training allows your team to
- be as productive as possible as early as possible. Now you can receive
- FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers
- Ltd, and the world's leading authority on the world's leading RTOS.
-
- 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.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.
- Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.
-
- http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High
- Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS
- licenses offer ticketed support, indemnification and commercial 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!
-*/
-
-/*
- NOTE : Tasks run in system mode and the scheduler runs in Supervisor mode.
- The processor MUST be in supervisor mode when vTaskStartScheduler is
- called. The demo applications included in the FreeRTOS.org download switch
- to supervisor mode prior to main being called. If you are not using one of
- these demo application projects then ensure Supervisor mode is used.
-*/
-
-
-/*
- * Creates all the application tasks, then starts the scheduler.
- *
- * A task is created called "uIP". This executes the uIP stack and small
- * WEB server sample. All the other tasks are from the set of standard
- * demo tasks. The WEB documentation provides more details of the standard
- * demo application tasks.
- *
- * Main.c also creates a task called "Check". This only executes every three
- * seconds but has the highest priority so is guaranteed to get processor time.
- * Its main function is to check that all the other tasks are still operational.
- * Each standard demo task maintains a unique count that is incremented each
- * time the task successfully completes its function. Should any error occur
- * within such a task the count is permanently halted. The check task inspects
- * the count of each task to ensure it has changed since the last time the
- * check task executed. If all the count variables have changed all the tasks
- * are still executing error free, and the check task toggles the yellow LED.
- * Should any task contain an error at any time the LED toggle rate will change
- * from 3 seconds to 500ms.
- *
- */
-
-
-/* Standard includes. */
-#include <stdlib.h>
-#include <string.h>
-
-/* Scheduler includes. */
-#include "FreeRTOS.h"
-#include "task.h"
-
-/* Demo application includes. */
-#include "PollQ.h"
-#include "dynamic.h"
-#include "semtest.h"
-
-/*-----------------------------------------------------------*/
-
-/* Constants to setup the PLL. */
-#define mainPLL_MUL_4 ( ( unsigned char ) 0x0003 )
-#define mainPLL_DIV_1 ( ( unsigned char ) 0x0000 )
-#define mainPLL_ENABLE ( ( unsigned char ) 0x0001 )
-#define mainPLL_CONNECT ( ( unsigned char ) 0x0003 )
-#define mainPLL_FEED_BYTE1 ( ( unsigned char ) 0xaa )
-#define mainPLL_FEED_BYTE2 ( ( unsigned char ) 0x55 )
-#define mainPLL_LOCK ( ( unsigned long ) 0x0400 )
-
-/* Constants to setup the MAM. */
-#define mainMAM_TIM_3 ( ( unsigned char ) 0x03 )
-#define mainMAM_MODE_FULL ( ( unsigned char ) 0x02 )
-
-/* Constants to setup the peripheral bus. */
-#define mainBUS_CLK_FULL ( ( unsigned char ) 0x01 )
-
-/* Priorities/stacks for the demo application tasks. */
-#define mainQUEUE_POLL_PRIORITY ( tskIDLE_PRIORITY + 2 )
-#define mainCHECK_TASK_PRIORITY ( tskIDLE_PRIORITY + 4 )
-#define mainSEM_TEST_PRIORITY ( tskIDLE_PRIORITY + 1 )
-#define mainUIP_PRIORITY ( tskIDLE_PRIORITY + 3 )
-#define mainUIP_TASK_STACK_SIZE ( 150 )
-
-/* The rate at which the on board LED will toggle when there is/is not an
-error. */
-#define mainNO_ERROR_FLASH_PERIOD ( ( TickType_t ) 3000 / portTICK_PERIOD_MS )
-#define mainERROR_FLASH_PERIOD ( ( TickType_t ) 500 / portTICK_PERIOD_MS )
-#define mainON_BOARD_LED_BIT ( ( unsigned long ) 0x80 )
-#define mainYELLOW_LED ( 1 << 11 )
-
-/*-----------------------------------------------------------*/
-
-/*
- * This is the uIP task which is defined within the uip.c file. This has not
- * been placed into a header file in order to minimise the changes to the uip
- * code.
- */
-extern void ( vuIP_TASK ) ( void *pvParameters );
-
-/*
- * The Yellow LED is under the control of the Check task. All the other LED's
- * are under the control of the uIP task.
- */
-void prvToggleOnBoardLED( void );
-
-/*
- * Checks that all the demo application tasks are still executing without error
- * - as described at the top of the file.
- */
-static long prvCheckOtherTasksAreStillRunning( void );
-
-/*
- * The task that executes at the highest priority and calls
- * prvCheckOtherTasksAreStillRunning(). See the description at the top
- * of the file.
- */
-static void vErrorChecks( void *pvParameters );
-
-/*
- * Configure the processor for use with the Olimex demo board. This includes
- * setup for the I/O, system clock, and access timings.
- */
-static void prvSetupHardware( void );
-
-/*-----------------------------------------------------------*/
-
-/*
- * Starts all the other tasks, then starts the scheduler.
- */
-int main( void )
-{
- /* Configure the processor. */
- prvSetupHardware();
-
- /* Start the task that handles the TCP/IP functionality. */
- xTaskCreate( vuIP_TASK, "uIP", mainUIP_TASK_STACK_SIZE, NULL, mainUIP_PRIORITY, NULL );
-
- /* Start the demo/test application tasks. These are created in addition
- to the TCP/IP task for demonstration and test purposes. */
- vStartPolledQueueTasks( mainQUEUE_POLL_PRIORITY );
- vStartDynamicPriorityTasks();
- vStartSemaphoreTasks( mainSEM_TEST_PRIORITY );
-
- /* Start the check task - which is defined in this file. */
- xTaskCreate( vErrorChecks, "Check", configMINIMAL_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY, NULL );
-
- /* Now all the tasks have been started - start the scheduler.
-
- NOTE : Tasks run in system mode and the scheduler runs in Supervisor mode.
- The processor MUST be in supervisor mode when vTaskStartScheduler is
- called. The demo applications included in the FreeRTOS.org download switch
- to supervisor mode prior to main being called. If you are not using one of
- these demo application projects then ensure Supervisor mode is used here. */
- vTaskStartScheduler();
-
- /* Should never reach here! */
- return 0;
-}
-/*-----------------------------------------------------------*/
-
-static void vErrorChecks( void *pvParameters )
-{
-TickType_t xDelayPeriod = mainNO_ERROR_FLASH_PERIOD;
-
- /* Cycle for ever, delaying then checking all the other tasks are still
- operating without error. If an error is detected then the delay period
- is decreased from mainNO_ERROR_FLASH_PERIOD to mainERROR_FLASH_PERIOD so
- the on board LED flash rate will increase. */
- for( ;; )
- {
- /* Delay until it is time to execute again. */
- vTaskDelay( xDelayPeriod );
-
- /* Check all the standard demo application tasks are executing without
- error. */
- if( prvCheckOtherTasksAreStillRunning() != pdPASS )
- {
- /* An error has been detected in one of the tasks - flash faster. */
- xDelayPeriod = mainERROR_FLASH_PERIOD;
- }
-
- prvToggleOnBoardLED();
- }
-}
-/*-----------------------------------------------------------*/
-
-static void prvSetupHardware( void )
-{
- #ifdef RUN_FROM_RAM
- /* Remap the interrupt vectors to RAM if we are are running from RAM. */
- SCB_MEMMAP = 2;
- #endif
-
- /* Setup the PLL to multiply the XTAL input by 4. */
- SCB_PLLCFG = ( mainPLL_MUL_4 | mainPLL_DIV_1 );
-
- /* Activate the PLL by turning it on then feeding the correct sequence of
- bytes. */
- SCB_PLLCON = mainPLL_ENABLE;
- SCB_PLLFEED = mainPLL_FEED_BYTE1;
- SCB_PLLFEED = mainPLL_FEED_BYTE2;
-
- /* Wait for the PLL to lock... */
- while( !( SCB_PLLSTAT & mainPLL_LOCK ) );
-
- /* ...before connecting it using the feed sequence again. */
- SCB_PLLCON = mainPLL_CONNECT;
- SCB_PLLFEED = mainPLL_FEED_BYTE1;
- SCB_PLLFEED = mainPLL_FEED_BYTE2;
-
- /* Setup and turn on the MAM. Three cycle access is used due to the fast
- PLL used. It is possible faster overall performance could be obtained by
- tuning the MAM and PLL settings. */
- MAM_TIM = mainMAM_TIM_3;
- MAM_CR = mainMAM_MODE_FULL;
-
- /* Setup the peripheral bus to be the same as the PLL output. */
- SCB_VPBDIV = mainBUS_CLK_FULL;
-}
-/*-----------------------------------------------------------*/
-
-void prvToggleOnBoardLED( void )
-{
-unsigned long ulState;
-
- ulState = GPIO0_IOPIN;
- if( ulState & mainYELLOW_LED )
- {
- GPIO_IOCLR = mainYELLOW_LED;
- }
- else
- {
- GPIO_IOSET = mainYELLOW_LED;
- }
-}
-/*-----------------------------------------------------------*/
-
-static long prvCheckOtherTasksAreStillRunning( void )
-{
-long lReturn = ( long ) pdPASS;
-
- /* Check all the demo tasks (other than the flash tasks) to ensure
- that they are all still running, and that none of them have detected
- an error. */
-
- if( xArePollingQueuesStillRunning() != pdTRUE )
- {
- lReturn = ( long ) pdFAIL;
- }
-
- if( xAreDynamicPriorityTasksStillRunning() != pdTRUE )
- {
- lReturn = ( long ) pdFAIL;
- }
-
- if( xAreSemaphoreTasksStillRunning() != pdTRUE )
- {
- lReturn = ( long ) pdFAIL;
- }
-
- return lReturn;
-}
-
-
-