summaryrefslogtreecommitdiff
path: root/FreeRTOS/Demo/RX600_RX62N-RSK_GNURX/RTOSDemo/main-blinky.c
diff options
context:
space:
mode:
authorrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>2012-08-11 21:34:11 +0000
committerrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>2012-08-11 21:34:11 +0000
commitf279ebee719fa6bda3f91061819e6b42051c7395 (patch)
treec2ef3f908508343c26551949d5f947009cda3291 /FreeRTOS/Demo/RX600_RX62N-RSK_GNURX/RTOSDemo/main-blinky.c
parent24ce9d9c87e6b7b23f0915e1a91fb4a5bd2f7c3d (diff)
downloadfreertos-f279ebee719fa6bda3f91061819e6b42051c7395.tar.gz
Add FreeRTOS-Plus directory.
git-svn-id: http://svn.code.sf.net/p/freertos/code/trunk@1765 1d2547de-c912-0410-9cb9-b8ca96c0e9e2
Diffstat (limited to 'FreeRTOS/Demo/RX600_RX62N-RSK_GNURX/RTOSDemo/main-blinky.c')
-rw-r--r--FreeRTOS/Demo/RX600_RX62N-RSK_GNURX/RTOSDemo/main-blinky.c243
1 files changed, 243 insertions, 0 deletions
diff --git a/FreeRTOS/Demo/RX600_RX62N-RSK_GNURX/RTOSDemo/main-blinky.c b/FreeRTOS/Demo/RX600_RX62N-RSK_GNURX/RTOSDemo/main-blinky.c
new file mode 100644
index 000000000..f488a63b7
--- /dev/null
+++ b/FreeRTOS/Demo/RX600_RX62N-RSK_GNURX/RTOSDemo/main-blinky.c
@@ -0,0 +1,243 @@
+/*
+ FreeRTOS V7.1.1 - Copyright (C) 2012 Real Time Engineers Ltd.
+
+
+ ***************************************************************************
+ * *
+ * FreeRTOS tutorial books are available in pdf and paperback. *
+ * Complete, revised, and edited pdf reference manuals are also *
+ * available. *
+ * *
+ * Purchasing FreeRTOS documentation will not only help you, by *
+ * ensuring you get running as quickly as possible and with an *
+ * in-depth knowledge of how to use FreeRTOS, it will also help *
+ * the FreeRTOS project to continue with its mission of providing *
+ * professional grade, cross platform, de facto standard solutions *
+ * for microcontrollers - completely free of charge! *
+ * *
+ * >>> See http://www.FreeRTOS.org/Documentation for details. <<< *
+ * *
+ * Thank you for using FreeRTOS, and thank you for your support! *
+ * *
+ ***************************************************************************
+
+
+ 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. See the GNU General Public License for
+ more details. You should have received a copy of the GNU General Public
+ License and the FreeRTOS license exception along with FreeRTOS; if not it
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained
+ by writing to Richard Barry, contact details for whom are available on the
+ FreeRTOS WEB site.
+
+ 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, training, latest information,
+ license and contact details.
+
+ http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
+ including FreeRTOS+Trace - an indispensable productivity tool.
+
+ Real Time Engineers ltd license FreeRTOS to High Integrity Systems, who sell
+ the code with commercial support, indemnification, and middleware, under
+ the OpenRTOS brand: http://www.OpenRTOS.com. High Integrity Systems also
+ provide a safety engineered and independently SIL3 certified version under
+ the SafeRTOS brand: http://www.SafeRTOS.com.
+*/
+
+/*
+ * This is a very simple demo that creates two tasks and one queue. One task
+ * (the queue receive task) blocks on the queue to wait for data to arrive,
+ * toggling an LED each time '100' is received. The other task (the queue send
+ * task) repeatedly blocks for a fixed period before sending '100' to the queue
+ * (causing the first task to toggle the LED).
+ *
+ * For a much more complete and complex example select either the Debug or
+ * Debug_with_optimisation build configurations within the HEW IDE.
+*/
+
+/* Hardware specific includes. */
+#include "iodefine.h"
+
+/* Kernel includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+
+/* Demo includes. */
+#include "ParTest.h"
+
+/* Priorities at which the tasks are created. */
+#define configQUEUE_RECEIVE_TASK_PRIORITY ( tskIDLE_PRIORITY + 2 )
+#define configQUEUE_SEND_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 )
+
+/* The rate at which data is sent to the queue, specified in milliseconds. */
+#define mainQUEUE_SEND_FREQUENCY_MS ( 500 / portTICK_RATE_MS )
+
+/* The number of items the queue can hold. This is 1 as the receive task
+will remove items as they are added so the send task should always find the
+queue empty. */
+#define mainQUEUE_LENGTH ( 1 )
+
+/*
+ * The tasks as defined at the top of this file.
+ */
+static void prvQueueReceiveTask( void *pvParameters );
+static void prvQueueSendTask( void *pvParameters );
+
+/* The queue used by both tasks. */
+static xQueueHandle xQueue = NULL;
+
+/*-----------------------------------------------------------*/
+
+int main(void)
+{
+extern void HardwareSetup( void );
+
+ /* Renesas provided CPU configuration routine. The clocks are configured in
+ here. */
+ HardwareSetup();
+
+ /* Turn all LEDs off. */
+ vParTestInitialise();
+
+ /* Create the queue. */
+ xQueue = xQueueCreate( mainQUEUE_LENGTH, sizeof( unsigned long ) );
+
+ if( xQueue != NULL )
+ {
+ /* Start the two tasks as described at the top of this file. */
+ xTaskCreate( prvQueueReceiveTask, ( signed char * ) "Rx", configMINIMAL_STACK_SIZE, NULL, configQUEUE_RECEIVE_TASK_PRIORITY, NULL );
+ xTaskCreate( prvQueueSendTask, ( signed char * ) "TX", configMINIMAL_STACK_SIZE, NULL, configQUEUE_SEND_TASK_PRIORITY, NULL );
+
+ /* Start the tasks running. */
+ vTaskStartScheduler();
+ }
+
+ /* If all is well we will never reach here as the scheduler will now be
+ running. If we do reach here then it is likely that there was insufficient
+ heap available for the idle task to be created. */
+ for( ;; );
+}
+/*-----------------------------------------------------------*/
+
+static void prvQueueSendTask( void *pvParameters )
+{
+portTickType xNextWakeTime;
+const unsigned long ulValueToSend = 100UL;
+
+ /* Initialise xNextWakeTime - this only needs to be done once. */
+ xNextWakeTime = xTaskGetTickCount();
+
+ for( ;; )
+ {
+ /* Place this task in the blocked state until it is time to run again.
+ The block state is specified in ticks, the constant used converts ticks
+ to ms. */
+ vTaskDelayUntil( &xNextWakeTime, mainQUEUE_SEND_FREQUENCY_MS );
+
+ /* Send to the queue - causing the queue receive task to flash its LED. 0
+ is used so the send does not block - it shouldn't need to as the queue
+ should always be empty here. */
+ xQueueSend( xQueue, &ulValueToSend, 0 );
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvQueueReceiveTask( void *pvParameters )
+{
+unsigned long ulReceivedValue;
+
+ for( ;; )
+ {
+ /* Wait until something arives in the queue - this will block
+ indefinitely provided INCLUDE_vTaskSuspend is set to 1 in
+ FreeRTOSConfig.h. */
+ xQueueReceive( xQueue, &ulReceivedValue, portMAX_DELAY );
+
+ /* To get here something must have arrived, but is it the expected
+ value? If it is, toggle the LED. */
+ if( ulReceivedValue == 100UL )
+ {
+ vParTestToggleLED( 0 );
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+void vApplicationSetupTimerInterrupt( void )
+{
+ /* Enable compare match timer 0. */
+ MSTP( CMT0 ) = 0;
+
+ /* Interrupt on compare match. */
+ CMT0.CMCR.BIT.CMIE = 1;
+
+ /* Set the compare match value. */
+ CMT0.CMCOR = ( unsigned short ) ( ( ( configPERIPHERAL_CLOCK_HZ / configTICK_RATE_HZ ) -1 ) / 8 );
+
+ /* Divide the PCLK by 8. */
+ CMT0.CMCR.BIT.CKS = 0;
+
+ /* Enable the interrupt... */
+ _IEN( _CMT0_CMI0 ) = 1;
+
+ /* ...and set its priority to the application defined kernel priority. */
+ _IPR( _CMT0_CMI0 ) = configKERNEL_INTERRUPT_PRIORITY;
+
+ /* Start the timer. */
+ CMT.CMSTR0.BIT.STR0 = 1;
+}
+/*-----------------------------------------------------------*/
+
+/* This function is explained by the comments above its prototype at the top
+of this file. */
+void vApplicationMallocFailedHook( void )
+{
+ for( ;; );
+}
+/*-----------------------------------------------------------*/
+
+/* This function is explained by the comments above its prototype at the top
+of this file. */
+void vApplicationStackOverflowHook( xTaskHandle pxTask, signed char *pcTaskName )
+{
+ for( ;; );
+}
+/*-----------------------------------------------------------*/
+
+/* This function is explained by the comments above its prototype at the top
+of this file. */
+void vApplicationIdleHook( void )
+{
+}
+/*-----------------------------------------------------------*/
+
+/* The following four functions are here just to allow all three build
+configurations to use the same vector table. They are not used in this
+demo, but linker errors will result if they are not defined. They can
+be ignored. */
+void vT0_1_ISR_Handler( void ) {}
+void vT2_3_ISR_Handler( void ) {}
+void vEMAC_ISR_Handler( void ) {}
+void vTimer2_ISR_Handler( void ) {}
+volatile unsigned long ulHighFrequencyTickCount = 0; \ No newline at end of file